v0.2 — Open Source · Licenza MIT

Il file manager integrabile ovunque

PHP ≥ 8.1 + Flysystem 3. Interfaccia Alpine.js. Local, S3, Cloudflare R2, SFTP. Integra con poche righe di JavaScript.

PHP ≥ 8.1
Nessun framework richiesto
~3 KB
Dimensione SDK
MIT
Licenza open source
16
Lingue supportate
Anteprima

Guardalo in azione

Creating a FluxFiles share link with an expiry, a password and a download limit
Condividi un file — scadenza, password, limite
Creating a FluxFiles upload portal with a file limit, size cap and allowed file types
Portali di caricamento — senza account
FluxFiles links panel listing shared links with views, downloads and revoke
Gestisci ogni link e revocalo quando vuoi
FluxFiles desktop file manager with image thumbnails
Vista a griglia con miniature WebP istantanee
FluxFiles browsing an S3 / R2 bucket with the local, S3 and SFTP disk switcher
Multi-cloud — S3 / R2 / SFTP, una sola UI
FluxFiles managing a remote VPS deploy directory over SFTP, same UI as the S3 bucket
VPS remoto via SFTP — senza client FTP
Editing an nginx config file inside FluxFiles with syntax highlighting
Modifica i file di configurazione sul posto — senza SSH né FTP
FluxFiles previewing a video inline in the detail panel
Anteprima video, audio e PDF senza scaricare
FluxFiles Bucket Doctor health checks for an S3 bucket with CORS and IAM remediation
Bucket Doctor — diagnostica S3/R2 + soluzioni
FluxFiles activity log of file operations
Registro attività — conservato nel tuo bucket
FluxFiles trash with restore and delete forever
Cestino — ripristina o elimina per sempre
FluxFiles responsive mobile file manager
Responsive su mobile
Il fossato · BYOB

I file dei tuoi clienti restano nei bucket dei tuoi clienti

FluxFiles è il file manager incorporabile in cui ogni tenant collega il proprio bucket S3/R2 — e tu non conservi né i loro dati né le loro credenziali.

  • Sovranità dei dati

    I file risiedono nell'account cloud e nella regione del cliente — pensato per GDPR, compliance e procurement aziendale.

  • Zero dati, zero credenziali a riposo

    Le credenziali del bucket sono cifrate con AES-256-GCM dentro il JWT e decifrate solo a runtime — mai scritte su database o log.

  • Costi di storage che scalano a zero

    Storage ed egress sono fatturati a ogni cliente, non a te. Nessuna bolletta di storage che cresce con i tuoi utenti.

  • Stateless e incorporabile

    Nessun database centrale. Inserisci il picker in qualsiasi app via iframe o SDK; il tuo backend emette un token con ambito e di breve durata.

La tua app SaaS
JWT con ambito (credenziali cifrate)
FluxFiles
decifra solo a runtime
Tenant A
bucket proprio
Tenant B
bucket proprio
Tenant C
bucket proprio

Come funziona: la tua app cifra le credenziali del bucket del tenant in un JWT di breve durata (HKDF-SHA256 + AES-256-GCM). FluxFiles le decifra solo per eseguire l'operazione richiesta.

Multi-tenant

Un token per tenant — ognuno con le sue regole

FluxFiles è stateless: il JWT emesso dal tuo backend è la configurazione del tenant. Percorso di storage, dimensione massima per file, quota, numero di file, tipi consentiti, permessi — tutto applicato lato server. Nessun file di config per tenant, nessun riavvio.

// Your backend, per request — the token IS the tenant's config.
import { createToken } from '@fluxfiles/node';

const claims = tenant.plan === 'pro'
  // 100 MB/file · any type · 50 GB · unlimited files · own bucket
  ? { disks: ['s3'],    maxUploadMb: 100, allowedExt: null,
      maxStorageMb: 51200, maxFiles: 0 }
  // 5 MB/file · images only · 500 MB · 200 files
  : { disks: ['local'], maxUploadMb: 5,   allowedExt: ['jpg','png','webp'],
      maxStorageMb: 500,   maxFiles: 200 };

const token = createToken({
  secret: process.env.FLUXFILES_SECRET,
  userId: tenant.id,
  prefix: `tenant_${tenant.id}/`,   // isolates each tenant's files
  perms:  ['read', 'write', 'delete'],
  ...claims,
});
prefix disks / BYOB max_upload max_storage max_files allowed_ext perms

Abbinalo al BYOB per mettere ogni tenant sul proprio bucket.

Per chi è

Pensato per i team che rilasciano funzioni sui file

Se il tuo prodotto richiede upload, FluxFiles si integra — senza renderti il custode dei dati dei tuoi clienti.

SaaS e app multi-tenant

Dai a ogni cliente un file manager sul proprio bucket. Scoping del token per tenant e sovranità dei dati inclusi.

Agenzie e freelance

Consegna a ogni cliente una libreria multimediale curata senza allestire un'infrastruttura di storage per progetto.

Integrazioni CMS ed editor

Inserisci un selettore di media in CKEditor, TinyMCE, Summernote o nel tuo editor tramite l'SDK iframe.

Strumenti interni e dashboard

Aggiungi upload, anteprime e operazioni sui file con audit ai pannelli di amministrazione in un pomeriggio.

Funzionalità

Tutto ciò che serve a un file manager moderno

Progettato per sviluppatori che necessitano di flessibilità.

Multi-storage

Locale, AWS S3, Cloudflare R2, SFTP tramite Flysystem v3 — cambia con la config, senza codice.

Integra ovunque

iframe + SDK postMessage. UI standalone con Alpine.js (zero build). Con qualsiasi framework.

Auth JWT + scoping

Prefisso percorso per utente, permessi, whitelist dischi, modalità solo proprietario.

AI auto-tag

Claude / OpenAI vision — alt text, titolo, tag automatici.

Ritaglio immagine

Strumento di ritaglio con proporzioni predefinite.

Ottimizzazione immagine

Varianti WebP automatiche — miniatura, medio, grande.

Upload pre-firmati

Il browser carica direttamente su S3/R2 — zero bandwidth sul tuo server.

Upload a blocchi

S3 multipart per file > 10MB.

Ricerca full-text

Ricerca indicizzata per nomi, titoli, tag — basata su file, senza database.

Operazioni in blocco

Selezione multipla: spostare, copiare, eliminare, scaricare.

Trasferimento cross-disk

Copia/sposta tra Locale ↔ S3 ↔ R2.

Cestino

Eliminazione recuperabile con pulizia automatica.

Metadati SEO

Titolo, alt, didascalia, tag — metadati oggetto S3 (cloud) o JSON sidecar (locale). Ricerca full-text.

Modalità scura

Chiaro / scuro / auto in UI e SDK.

16 lingue

Inglese predefinito. Imposta locale via SDK, URL (?locale=) o FLUXFILES_LOCALE. RTL per arabo.

Log di audit

Tutte le azioni di scrittura registrate.

Limitazione della velocità

Token bucket per utente per la protezione API.

Quota di archiviazione

Limiti per utente tramite JWT claims.

Bucket BYOB

Gli utenti portano il proprio S3/R2 — credenziali criptate nel JWT (AES-256-GCM).

Rilevamento duplicati

Match SHA-256 salta upload ridondanti salvo sovrascrittura forzata.

Refresh token SDK

onTokenRefresh su 401 — refresh coalescente, retry e updateToken().

Bucket Doctor

Diagnostica qualsiasi disco S3/R2 — credenziali, lettura/scrittura/eliminazione, presign, CORS, multipart — con correzioni IAM e CORS pronte da incollare. Onboarding dei bucket BYOB in pochi minuti.

Node token SDK

Genera token FluxFiles da qualsiasi backend JS (Express, Next.js, Nuxt) con @fluxfiles/node — compatibile byte per byte con il core PHP. Nessun PHP necessario per emettere i token.

Disco SFTP

Un 3° driver dopo S3/R2 — trasforma qualsiasi VPS o hosting in file manager.

Editor codice / config

Modifica file di testo e config (wp-config.php, .env) nel browser, stile cPanel.

Zip ed Estrai

Scarica una selezione come zip o estrai un archivio — protetto da zip-slip e bombe.

Filigrana

Applica una filigrana testo o logo al volo per la protezione — l'originale resta intatto.

WebP + AVIF on-demand

Servi qualsiasi dimensione d'immagine come AVIF/WebP in cache tramite un solo URL (negoziato da Accept), con srcset responsive pronto.

Permessi SFTP

Cambia i permessi Unix (chmod) sui dischi SFTP con un dialogo stile cPanel.

Dashboard di utilizzo

Vedi lo storage a colpo d'occhio — quota e suddivisione per tipo e cartella.

Anteprima media

Anteprima inline di immagini, video, audio e PDF; media locali privati in streaming sicuro.

Installazione rapida

Pronto in 2 minuti

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
npm install @fluxfiles/node

// Express / Next.js route — mint a token from your JS backend (no PHP)
import { createToken } from '@fluxfiles/node';

app.get('/fluxfiles-token', (req, res) => {
    const token = createToken({
        secret: process.env.FLUXFILES_SECRET, // >= 32 bytes
        userId: req.user.id,
        perms: ['read', 'write', 'delete'],
        prefix: `users/${req.user.id}`,
        ttl: 3600,
    });
    res.json({ token });
});
<!-- Demo: unpkg. In production, serve fluxfiles.js from your FluxFiles host -->
<script src="https://unpkg.com/fluxfiles@latest/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
docker build -f fluxfiles/docker/Dockerfile.prod -t fluxfiles fluxfiles

docker run -p 8080:80 \\
  -e FLUXFILES_SECRET=your-random-32-char-secret \\
  fluxfiles

# UI: http://localhost:8080/public/index.html
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=

Funziona con

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

Integrazioni

Adattatori pronti all'uso per il tuo stack

Gli adattatori ufficiali integrano FluxFiles in modo nativo nei framework e negli editor che usi già.

Laravel
PHP
WordPress
Plugin
React
Component
Vue / Nuxt
Component
CKEditor 4
Plugin
TinyMCE
Plugin
Summernote
Plugin

Incorpora

Incorporalo in poche righe

Carica fluxfiles.js, passa un JWT generato lato server e inserisci un file manager completo — o una finestra di selezione file — in qualsiasi pagina.

<script src="https://fm.example.com/fluxfiles.js"></script>

FluxFiles.open({
  endpoint: 'https://fm.example.com',
  token: 'eyJhbGci...',   // JWT from your backend
  disk: 'local',
  mode: 'picker',         // select & close
  theme: 'auto',
  onSelect(file) {
    // { url, key, name, size, disk, meta, variants }
    document.querySelector("#img").src = file.url;
  },
});
<div id="fm" style="height:600px"></div>

FluxFiles.open({
  endpoint: 'https://fm.example.com',
  token: 'eyJhbGci...',
  mode: 'browser',          // full manager, stays open
  container: '#fm',         // omit for a modal overlay
  disks: ['local', 's3', 'r2'],
});

FluxFiles.on('FM_EVENT', (e) => console.log(e.event));
FluxFiles.navigate('/photos/2024');
import { FluxFilesModal } from '@fluxfiles/react';

function Picker({ open, setOpen, token }) {
  return (
    <FluxFilesModal
      open={open}
      endpoint="https://fm.example.com"
      token={token}
      onSelect={(file) => console.log(file.url)}
      onClose={() => setOpen(false)}
    />
  );
}

I token vengono generati lato server — non inviare mai il tuo secret al browser.

Perché FluxFiles

Progettato per ciò che gli altri hanno dimenticato

Scorri per confrontare
Funzionalità FluxFiles elFinder Laravel-FM RichFilemanager Responsive FM
S3 + R2 + Locale + SFTP
Integra in qualsiasi framework
Auth JWT + scoping
Metadati SEO
AI auto-tag
Ritaglio immagine
Upload a blocchi
Ricerca full-text
Modalità scura
16 lingue
PHP ≥ 8.1
Mantenuto attivamente
UI moderna
vs. SaaS di file-API

Self-hosted e incorporabile — non l'ennesimo SaaS di upload

Le API di file gestite sono ottime, ma conservano i tuoi dati e fatturano a consumo. FluxFiles gira nel tuo stack, con ogni tenant sul proprio bucket.

Scorri per confrontare
Capacità FluxFiles Filestack Uploadcare Cloudinary Supabase Storage
Self-hosted (gira nella tua infrastruttura)
BYOB — bucket proprio di ogni cliente
UI file manager incorporabile
Open source (MIT)
Nessun costo SaaS per storage / per upload
Multi-storage (S3 / R2 / locale)
Scoping del token per tenant integrato

Il confronto riflette le offerte predefinite tipiche; ogni prodotto eccelle nel proprio ambito. La nicchia di FluxFiles è la combinazione incorporabile, self-hosted e bring-your-own-bucket.

Prodotti vendibili

Non solo gestire file — venderli e riceverli

Il core gratis integra un file manager. I moduli a pagamento lo trasformano in prodotti per cui i tuoi clienti pagano.

Pro

Branded Share

Invia un link self-service brandizzato a qualsiasi file o cartella — con scadenza, password, limite di download e analitiche. Il tuo logo, il tuo dominio.

  • Link con scadenza / protetti da password
  • Limiti di download + analitiche
  • Token con ambito — nessun account per il destinatario
Pro

Upload Portals

Una pagina pubblica «inviaci i tuoi file» che finisce dritta nel tuo storage. Perfetta per agenzie, fotografi e onboarding clienti — nessun account per chi carica.

  • Portale pubblico → il tuo bucket
  • Limiti di dimensione / tipo / scadenza per portale
  • Caricamento anonimo, con ambito proprietario
Enterprise

Compliance bundle

Antivirus, provenienza contenuti C2PA e conservazione audit — per deployment regolamentati ed enterprise.

WordPress

Un plugin invece di tre

Su WordPress, FluxFiles è sia un portale file per i clienti SIA un gestore multimediale — sostituendo plugin separati di cartelle, cloud e offload.

Capacità FluxFiles FileBird WP Media Folder WP Offload
Cartelle media
Storage S3 / R2 / SFTP
Offload + riscrittura URL
Portali di caricamento clienti
Link di condivisione brandizzati
Prezzo tipico Una licenza 49 $/anno 69 $/anno a pagamento

Cartelle + cloud + offload + portali clienti in uno — invece di pagare FileBird e WP Media Folder e WP Offload separatamente.

Prezzi

Core gratis. Paghi solo i moduli a pagamento.

Il core MIT è gratis per sempre. Passa ai due prodotti di punta — Condivisione brandizzata + Portali di caricamento — e oltre.

Gratis (Core)

$0 per sempre

Il file manager MIT completo, self-hosted.

Inizia
  • Storage Local / S3 / R2 / SFTP, scoping JWT
  • WebP + AVIF on-demand + ottimizzazione immagini/PDF
  • Filigrana, hook versioni, dashboard utilizzo, auto-tag IA
  • 7 adattatori + BYO-embed terminale / PDF / office / firma elettronica
Più popolare

Pro

$79 /anno

Invia e ricevi file con i clienti.

In arrivoIn arrivo
  • Tutto del gratis
  • Condivisione brandizzata — link con scadenza / password / limite / analitiche
  • Portali di caricamento — «inviaci file» pubblico, senza account
  • Supporto prioritario + aggiornamenti

Studio

$299 /anno

Costruisci un prodotto su FluxFiles.

In arrivoIn arrivo
  • Tutto del Pro
  • Versionamento + Webhooks (Zapier/Make/n8n)
  • IA Vision + OCR (chiave tua)
  • Livelli multi-tenant + white-label

Enterprise

Su misura

Conformità, su larga scala.

Contatta le vendite
  • Tutto dello Studio
  • Antivirus + provenienza C2PA + conservazione audit
  • Bridge SSO + onboarding su misura
  • SLA + roadmap prioritaria

Tariffa fissa, siti illimitati — nessun addebito per file/chiamata. L'annuale fa risparmiare ~2 mesi; opzione a vita disponibile. Rimborso 14 giorni. IVA acquirente gestita al checkout.

FAQ

Domande frequenti

FluxFiles è gratuito e open source?
Sì — con licenza MIT, self-hosting gratuito e pubblicato su Composer e npm. Nessun piano a pagamento né limiti d'uso.
Dove vengono archiviati i miei file?
Dove decidi tu: disco locale, AWS S3, Cloudflare R2 o un server remoto via SFTP, tutto tramite Flysystem. Lo storage è tuo — nulla passa da terze parti.
Come funziona l'autenticazione?
JWT stateless (HS256): generi un token lato server con claim granulari (permessi, dischi, ambito del percorso, limiti), così ogni utente vede solo ciò che permetti.
I miei utenti hanno bisogno di un account FluxFiles?
No. FluxFiles si fida del JWT emesso dalla tua app, quindi si collega alla tua autenticazione esistente — nessun sistema utenti separato.
Posso incorporarlo nella mia app o nel mio editor esistente?
Sì — l'iframe + SDK JS funziona in qualsiasi pagina, con adattatori ufficiali per Laravel, WordPress, React, Vue/Nuxt, CKEditor 4, TinyMCE e Summernote.
Cosa serve per eseguirlo?
PHP 8.1+ con alcune estensioni comuni e Composer. Puntalo a un disco, imposta un secret e le origini consentite, poi avvialo — gira su un piccolo VPS.
Cosa includono i piani a pagamento?
Il core è gratis (MIT). I piani a pagamento sbloccano i moduli portale: Condivisione brandizzata (link con scadenza/password) e Portali di caricamento («inviaci file» pubblico), più Versionamento, Webhooks, IA Vision/OCR e un pacchetto conformità ai livelli superiori.
Come attivo una licenza?
Dopo l'acquisto ricevi una chiave di licenza. Imposta FLUXFILES_LICENSE_KEY nel tuo ambiente e i moduli si sbloccano — verificati offline (nessun phone-home), quindi utilizzabili anche air-gapped.
Pagamento unico o abbonamento?
Entrambi. Mensile per iniziare senza impegno, annuale per risparmiare (~2 mesi gratis), o a vita in un pagamento. Una licenza scaduta continua a eseguire la tua versione; si fermano solo aggiornamenti/supporto.

Pronto a integrare FluxFiles?

Aggiungi un file manager pronto per la produzione alla tua app in pochi minuti — senza vincoli di framework, con licenza MIT.