v0.2 — Open Source · Licença MIT

O gerenciador de arquivos que funciona em qualquer lugar

PHP ≥ 8.1 + Flysystem 3. Interface Alpine.js. Local, S3, Cloudflare R2, SFTP. Embute com poucas linhas de JavaScript.

PHP ≥ 8.1
Sem framework necessário
~3 KB
Tamanho do SDK
MIT
Licença open source
16
Idiomas suportados
Demonstração

Veja em ação

Creating a FluxFiles share link with an expiry, a password and a download limit
Compartilhe um arquivo — validade, senha, limite
Creating a FluxFiles upload portal with a file limit, size cap and allowed file types
Portais de envio — sem conta
FluxFiles links panel listing shared links with views, downloads and revoke
Gerencie cada link e revogue quando quiser
FluxFiles desktop file manager with image thumbnails
Visão em grade com miniaturas WebP instantâneas
FluxFiles browsing an S3 / R2 bucket with the local, S3 and SFTP disk switcher
Multi-nuvem — S3 / R2 / SFTP, uma UI
FluxFiles managing a remote VPS deploy directory over SFTP, same UI as the S3 bucket
VPS remoto via SFTP — sem cliente FTP
Editing an nginx config file inside FluxFiles with syntax highlighting
Edite arquivos de configuração no lugar — sem SSH nem FTP
FluxFiles previewing a video inline in the detail panel
Prévia de vídeo, áudio e PDF sem baixar
FluxFiles Bucket Doctor health checks for an S3 bucket with CORS and IAM remediation
Bucket Doctor — verificações de S3/R2 + correções
FluxFiles activity log of file operations
Registro de atividade — mantido no seu próprio bucket
FluxFiles trash with restore and delete forever
Lixeira — restaurar ou excluir definitivamente
FluxFiles responsive mobile file manager
Responsivo no celular
O diferencial · BYOB

Os arquivos dos seus clientes ficam nos buckets dos seus clientes

O FluxFiles é o gerenciador de arquivos incorporável em que cada inquilino conecta o próprio bucket S3/R2 — e você nunca armazena os dados nem as credenciais dele.

  • Soberania de dados

    Os arquivos ficam na conta de nuvem e na região do próprio cliente — feito para LGPD/GDPR, conformidade e compras corporativas.

  • Zero dados, zero credenciais em repouso

    As credenciais do bucket são criptografadas com AES-256-GCM dentro do JWT e descriptografadas apenas em tempo de execução — nunca gravadas em banco ou log.

  • Custo de armazenamento que tende a zero

    Armazenamento e egress são cobrados de cada cliente, não de você. Sem conta que cresce com sua base de usuários.

  • Sem estado e incorporável

    Sem banco de dados central. Incorpore o seletor em qualquer app por iframe ou SDK; seu backend emite um token restrito e de curta duração.

Seu app SaaS
JWT restrito (credenciais criptografadas)
FluxFiles
descriptografa só em execução
Inquilino A
bucket próprio
Inquilino B
bucket próprio
Inquilino C
bucket próprio

Como funciona: seu app criptografa as credenciais do bucket do inquilino em um JWT de curta duração (HKDF-SHA256 + AES-256-GCM). O FluxFiles só as descriptografa para executar a operação solicitada.

Multilocatário

Um token por inquilino — cada um com suas regras

O FluxFiles é stateless: o JWT que seu backend emite é a configuração do inquilino. Caminho de armazenamento, tamanho máximo por arquivo, cota, número de arquivos, tipos permitidos, permissões — tudo aplicado no servidor. Sem arquivos de configuração por inquilino, sem reinícios.

// 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

Combine com BYOB para colocar cada inquilino no próprio bucket.

Para quem é

Feito para equipes que entregam recursos de arquivos

Se o seu produto precisa de uploads, o FluxFiles se encaixa — sem fazer de você o guardião dos dados dos seus clientes.

SaaS e apps multi-tenant

Dê a cada cliente um gerenciador de arquivos no próprio bucket. Escopo de token por tenant e soberania de dados inclusos.

Agências e freelancers

Entregue uma biblioteca de mídia caprichada a cada cliente sem montar infraestrutura de armazenamento por projeto.

Integrações de CMS e editores

Coloque um seletor de mídia no CKEditor, TinyMCE, Summernote ou no seu próprio editor via SDK por iframe.

Ferramentas internas e dashboards

Adicione uploads, prévias e operações de arquivo auditadas a painéis de admin em uma tarde.

Recursos

Tudo que um gerenciador de arquivos moderno precisa

Feito para desenvolvedores que precisam de flexibilidade.

Multi-armazenamento

Local, AWS S3, Cloudflare R2, SFTP via Flysystem v3 — troque na config, sem mudar código.

Incorpore em qualquer lugar

iframe + SDK postMessage. UI standalone usa Alpine.js (sem build). Funciona com qualquer framework.

Auth JWT + escopo

Prefixo de caminho por usuário, permissões, whitelist de discos, modo somente proprietário.

AI auto-tag

Claude / OpenAI vision — alt text, título, tags automáticos.

Recorte de imagem

Ferramenta de recorte com proporções predefinidas.

Otimização de imagem

Variantes WebP automáticas — thumb, médio, grande.

Uploads pré-assinados

Navegador faz upload direto para S3/R2 — zero bandwidth no seu servidor.

Upload em partes

S3 multipart para arquivos > 10MB.

Busca em texto completo

Busca indexada por nomes, títulos, tags — baseada em arquivos, sem banco de dados.

Operações em massa

Seleção múltipla: mover, copiar, excluir, baixar.

Transferência cross-disk

Copiar/mover entre Local ↔ S3 ↔ R2.

Lixeira

Exclusão recuperável com limpeza automática.

Metadados SEO

Título, alt, legenda, tags — metadados de objeto S3 (nuvem) ou JSON sidecar (local). Busca em texto completo.

Modo escuro

Claro / escuro / auto na UI e SDK.

16 idiomas

Inglês por padrão. Defina locale via SDK, URL (?locale=) ou FLUXFILES_LOCALE. RTL para árabe.

Log de auditoria

Todas as ações de escrita registradas.

Limitação de taxa

Token bucket por usuário para proteção da API.

Cota de armazenamento

Limites por usuário via JWT claims.

Buckets BYOB

Usuários trazem seu próprio S3/R2 — credenciais criptografadas no JWT (AES-256-GCM).

Detecção de duplicatas

Correspondência SHA-256 pula uploads redundantes exceto sobrescrita forçada.

Atualização de token SDK

onTokenRefresh em 401 — refresh coalescido, retry e updateToken() para rotação proativa.

Bucket Doctor

Diagnostica qualquer disco S3/R2 — credenciais, leitura/escrita/exclusão, presign, CORS, multipart — com correções de IAM e CORS prontas para colar. Faça onboarding de buckets BYOB em minutos.

SDK de tokens Node

Emita tokens do FluxFiles a partir de qualquer backend JS (Express, Next.js, Nuxt) com @fluxfiles/node — compatível byte a byte com o core PHP. Sem PHP para emitir tokens.

Disco SFTP

Um 3º driver após S3/R2 — transforme qualquer VPS ou hospedagem em gerenciador.

Editor de código / config

Edite arquivos de texto e config (wp-config.php, .env) no navegador, estilo cPanel.

Zip e Extrair

Baixe uma seleção como zip ou extraia um arquivo — protegido contra zip-slip e bombas.

Marca d'água

Aplique marca d'água de texto ou logo on-the-fly — o arquivo original não é alterado.

WebP + AVIF sob demanda

Sirva qualquer tamanho de imagem como AVIF/WebP em cache por uma URL (negociada por Accept), com srcset responsivo pronto.

Permissões SFTP

Altere permissões Unix (chmod) em discos SFTP com um diálogo estilo cPanel.

Painel de uso

Veja o armazenamento num relance — cota e detalhamento por tipo e pasta.

Pré-visualização de mídia

Prévia inline de imagem, vídeo, áudio e PDF; mídia local privada com streaming seguro.

Instalação rápida

Funcionando em 2 minutos

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=

Funciona com

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

Integrações

Adaptadores plug-and-play para a sua stack

Os adaptadores oficiais incorporam o FluxFiles nativamente nos frameworks e editores que você já usa.

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

Incorporar

Incorpore em poucas linhas

Carregue o fluxfiles.js, passe um JWT emitido no servidor e coloque um gerenciador de arquivos completo — ou um modal de seleção — em qualquer página.

<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)}
    />
  );
}

Os tokens são emitidos no servidor — nunca envie seu segredo para o navegador.

Por que FluxFiles

Feito para o que os outros esqueceram

Deslize para comparar
Recurso FluxFiles elFinder Laravel-FM RichFilemanager Responsive FM
S3 + R2 + Local + SFTP
Incorporar em qualquer framework
Auth JWT + escopo
Metadados SEO
AI auto-tag
Recorte de imagem
Upload em partes
Busca em texto
Modo escuro
16 idiomas
PHP ≥ 8.1
Mantido ativamente
UI moderna
vs. SaaS de arquivos

Auto-hospedado e incorporável — não mais um SaaS de upload

APIs de arquivos hospedadas são ótimas, mas armazenam seus dados e cobram por uso. O FluxFiles roda na sua stack, cada inquilino no próprio bucket.

Deslize para comparar
Recurso FluxFiles Filestack Uploadcare Cloudinary Supabase Storage
Auto-hospedado (roda na sua infra)
BYOB — o bucket próprio de cada cliente
UI de gerenciador de arquivos incorporável
Código aberto (MIT)
Sem taxas de SaaS por armazenamento / upload
Multi-armazenamento (S3 / R2 / local)
Escopo de token por inquilino nativo

A comparação reflete as ofertas padrão típicas; cada produto se destaca na sua área. O nicho do FluxFiles é a combinação incorporável, auto-hospedado e bring-your-own-bucket.

Produtos vendáveis

Mais que gerenciar arquivos — venda e receba

O núcleo grátis embute um gerenciador de arquivos. Os módulos pagos o transformam em produtos pelos quais seus clientes pagam.

Pro

Branded Share

Envie um link autosserviço com sua marca para qualquer arquivo ou pasta — com expiração, senha, limite de download e analytics. Seu logo, seu domínio.

  • Links com expiração / protegidos por senha
  • Limites de download + analytics
  • Token restrito — sem conta para o destinatário
Pro

Upload Portals

Uma página pública «envie-nos seus arquivos» que cai direto no seu armazenamento. Perfeito para agências, fotógrafos e onboarding de clientes — sem conta para quem envia.

  • Portal público → seu bucket
  • Limites de tamanho / tipo / expiração por portal
  • Envio anônimo, restrito ao dono
Enterprise

Compliance bundle

Antivírus, proveniência de conteúdo C2PA e retenção de auditoria — para implantações reguladas e corporativas.

WordPress

Um plugin em vez de três

No WordPress, o FluxFiles é ao mesmo tempo um portal de arquivos para clientes E um gerenciador de mídia — substituindo plugins separados de pastas, nuvem e offload.

Recurso FluxFiles FileBird WP Media Folder WP Offload
Pastas de mídia
Armazenamento S3 / R2 / SFTP
Offload + reescrita de URL
Portais de envio de clientes
Links de compartilhamento com marca
Preço típico Uma licença US$49/ano US$69/ano pago

Pastas + nuvem + offload + portais de clientes em um só — em vez de pagar FileBird e WP Media Folder e WP Offload separadamente.

Preços

Núcleo grátis. Pague só pelos módulos pagos.

O núcleo MIT é grátis para sempre. Faça upgrade para os dois produtos principais — Compartilhamento com marca + Portais de envio — e além.

Grátis (Núcleo)

$0 para sempre

O gerenciador de arquivos MIT completo, auto-hospedado.

Começar
  • Armazenamento Local / S3 / R2 / SFTP, escopo JWT
  • WebP + AVIF sob demanda + otimização de imagem/PDF
  • Marca d'água, hook de versões, painel de uso, autotag por IA
  • 7 adaptadores + BYO-embed terminal / PDF / office / assinatura eletrônica
Mais popular

Pro

$79 /ano

Envie e receba arquivos com seus clientes.

Em breveEm breve
  • Tudo do grátis
  • Compartilhamento com marca — links com expiração / senha / limite / analytics
  • Portais de envio — «envie-nos arquivos» público, sem conta
  • Suporte prioritário + atualizações

Studio

$299 /ano

Construa um produto sobre o FluxFiles.

Em breveEm breve
  • Tudo do Pro
  • Versionamento + Webhooks (Zapier/Make/n8n)
  • IA Visão + OCR (sua chave)
  • Níveis multi-inquilino + marca branca

Enterprise

Sob medida

Conformidade, em escala.

Falar com vendas
  • Tudo do Studio
  • Antivírus + proveniência C2PA + retenção de auditoria
  • Ponte SSO + onboarding sob medida
  • SLA + roteiro prioritário

Preço fixo, sites ilimitados — sem cobrança por arquivo/chamada. O anual economiza ~2 meses; opção vitalícia disponível. Reembolso em 14 dias. IVA do comprador tratado no checkout.

Perguntas frequentes

Perguntas frequentes

O FluxFiles é gratuito e open source?
Sim — licença MIT, auto-hospedável de graça e publicado no Composer e no npm. Sem planos pagos nem limites de uso.
Onde meus arquivos ficam armazenados?
Onde você apontar: disco local, AWS S3, Cloudflare R2 ou um servidor remoto via SFTP, tudo via Flysystem. O armazenamento é seu — nada passa por terceiros.
Como funciona a autenticação?
JWT sem estado (HS256): você emite um token no servidor com claims granulares (permissões, discos, escopo de caminho, limites), então cada usuário vê apenas o que você permite.
Meus usuários precisam de uma conta no FluxFiles?
Não. O FluxFiles confia no JWT emitido pelo seu próprio app, então se conecta à sua autenticação existente — sem um sistema de usuários separado.
Posso incorporá-lo no meu app ou editor atual?
Sim — o iframe + SDK JS funciona em qualquer página, com adaptadores oficiais para Laravel, WordPress, React, Vue/Nuxt, CKEditor 4, TinyMCE e Summernote.
O que preciso para executá-lo?
PHP 8.1+ com algumas extensões comuns e o Composer. Aponte para um disco, defina um segredo e as origens permitidas, e sirva — roda em um VPS pequeno.
O que os planos pagos incluem?
O núcleo é grátis (MIT). Planos pagos desbloqueiam módulos de portal: Compartilhamento com marca (links com expiração/senha) e Portais de envio («envie-nos arquivos» público), além de Versionamento, Webhooks, IA Visão/OCR e um pacote de conformidade nos níveis superiores.
Como ativo uma licença?
Após a compra você recebe uma chave de licença. Defina FLUXFILES_LICENSE_KEY no seu ambiente e os módulos são desbloqueados — verificados offline (sem phone-home), funcionando até em air-gap.
Pagamento único ou assinatura?
Ambos. Mensal para começar sem compromisso, anual para economizar (~2 meses grátis), ou vitalício em um pagamento. Uma licença expirada continua executando sua versão; só atualizações/suporte pausam.

Pronto para incorporar o FluxFiles?

Adicione um gerenciador de arquivos pronto para produção ao seu app em minutos — sem dependência de framework, licença MIT.