v1.22.0 — Open Source · MIT License

The file manager that embeds anywhere

PHP ≥ 8.1 + Flysystem 3. Alpine.js UI. Local, S3, Cloudflare R2. Embed with a few lines of JavaScript.

PHP ≥ 8.1
No framework required
~3 KB
SDK bundle size
MIT
Open source license
16
Languages supported
Live Preview

See it in action

FluxFiles desktop file manager UI
FluxFiles mobile file manager UI
FluxFiles create folder modal
Features

Everything a modern file manager needs

Built for developers who need flexibility.

Multi-storage

Local, AWS S3, Cloudflare R2 via Flysystem v3 — swap with config, no code change.

Embed anywhere

iframe + postMessage SDK. Standalone UI is Alpine.js (zero build). Works with any framework.

JWT auth + scoping

Per-user path prefix, permission claims, disk whitelist, owner-only mode.

AI auto-tag

Claude / OpenAI vision — auto alt text, title, tags.

Image crop

Inline crop tool with aspect ratio presets.

Image optimization

Auto WebP variants — thumb, medium, large.

Presigned uploads

Browser uploads directly to S3/R2 — zero bandwidth on your server.

Chunk upload

S3 multipart for files > 10MB.

Full-text search

SQLite FTS5 across names, titles, tags.

Bulk operations

Multi-select move, copy, delete, download.

Cross-disk transfer

Copy/move between Local ↔ S3 ↔ R2.

Trash / soft delete

Recoverable deletes with auto-purge.

SEO metadata

Title, alt, caption, tags — S3 object metadata (cloud) or sidecar JSON (local). Full-text search.

Dark mode

Light / dark / auto in UI and SDK.

16 languages

Default English. Set locale via SDK, URL (?locale=), or FLUXFILES_LOCALE. RTL for Arabic.

Audit log

All write actions logged for compliance.

Rate limiting

Token bucket per user for API protection.

Storage quota

Per-user storage limits via JWT claims.

BYOB buckets

Users bring their own S3/R2 — credentials encrypted in JWT (AES-256-GCM).

Duplicate detection

SHA-256 match skips redundant uploads unless you force overwrite.

SDK token refresh

onTokenRefresh on 401 — coalesced refresh, retry, and updateToken() for proactive rotation.

Quick install

Up and running in 2 minutes

composer require fluxfiles/fluxfiles
cp .env.example .env

# .env
FLUXFILES_SECRET=your-random-32-char-secret
FLUXFILES_ALLOWED_ORIGINS=https://yourapp.com

require_once 'vendor/autoload.php';

$token = fluxfiles_token(
    userId: 'user-123',
    perms: ['read', 'write', 'delete'],
    disks: ['local', 's3', 'r2'],
    prefix: 'user-123/',
    maxUploadMb: 10,
    allowedExt: null,
    ttl: 3600
);
composer require fluxfiles/laravel
php artisan vendor:publish --tag=fluxfiles-config

# .env — point the adapter at your FluxFiles server
FLUXFILES_ENDPOINT=https://fm.yourdomain.com
FLUXFILES_SECRET=your-secret-min-32-chars

# Optional: match CORS on the FluxFiles host
# FLUXFILES_ALLOWED_ORIGINS=https://yourapp.com

# Config: config/fluxfiles.php
<!-- Demo: unpkg. In production, serve fluxfiles.js from your FluxFiles host -->
<script src="https://unpkg.com/fluxfiles@1.22.0/fluxfiles.js"></script>

<script>
FluxFiles.open({
    endpoint: 'https://your-api.com',
    token: 'eyJhbGci...',
    disk: 'local',
    mode: 'picker',
    container: '#file-picker',
    onSelect: function(file) {
        console.log('Selected:', file.url);
    },
    async onTokenRefresh() {
        const r = await fetch('/api/auth/refresh-fluxfiles-token');
        const { token } = await r.json();
        return token;
    }
});
</script>
npm install @fluxfiles/react

import { FluxFilesModal } from '@fluxfiles/react';

<FluxFilesModal
    open={open}
    endpoint="https://your-api.com"
    token={token}
    onSelect={(file) => console.log(file)}
    onClose={() => setOpen(false)}
/>
npm install @fluxfiles/vue

<script setup>
import { FluxFilesModal } from '@fluxfiles/vue';
</script>

<FluxFilesModal
    v-model:open="open"
    endpoint="https://your-api.com"
    :token="token"
    @select="onSelect"
    @close="open = false"
/>
git clone https://github.com/thai-pc/fluxfiles.git
cd fluxfiles
composer install -d packages/core
cp .env.example .env

cd packages/core
php -S localhost:8080 router.php

# UI:  http://localhost:8080/public/index.html
# API: http://localhost:8080/api/fm/list?disk=local&path=

Works with

Laravel WordPress React / Next.js Vue / Nuxt CKEditor 4 TinyMCE Any framework
Why FluxFiles

Built for what others forgot

Feature FluxFiles elFinder Laravel-FM RichFilemanager Responsive FM
S3 + R2 + Local
Embed any framework
JWT auth + scoping
SEO metadata
AI auto-tag
Image crop
Chunk upload
Full-text search
Dark mode
16 languages
PHP ≥ 8.1
Actively maintained
Modern UI