Файловый менеджер, встраиваемый куда угодно
PHP ≥ 8.1 + Flysystem 3. Интерфейс Alpine.js. Local, S3, Cloudflare R2, SFTP. Встраивайте несколькими строками JavaScript.
Посмотрите в действии
Файлы ваших клиентов остаются в бакетах ваших клиентов
FluxFiles — встраиваемый файловый менеджер, в котором каждый арендатор подключает собственный бакет S3/R2, а вы не храните ни их данные, ни их учётные данные.
-
Суверенитет данных
Файлы хранятся в облачном аккаунте и регионе самого клиента — создано для GDPR, комплаенса и корпоративных закупок.
-
Ноль данных и ключей в покое
Учётные данные бакета шифруются AES-256-GCM внутри JWT и расшифровываются только во время выполнения — их никогда не пишут в базу или лог.
-
Затраты на хранение, масштабируемые до нуля
Хранение и трафик оплачивает каждый клиент, а не вы. Никакого счёта за хранилище, растущего вместе с базой пользователей.
-
Без состояния и встраиваемо
Никакой центральной базы. Встройте пикер в любое приложение через iframe или SDK; ваш бэкенд выпускает ограниченный краткоживущий токен.
Как это работает: ваше приложение шифрует учётные данные бакета арендатора в краткоживущий JWT (HKDF-SHA256 + AES-256-GCM). FluxFiles расшифровывает их только для выполнения запрошенной операции.
Один токен на арендатора — у каждого свои правила
FluxFiles не хранит состояние: JWT, который выпускает ваш бэкенд, и есть конфигурация арендатора. Путь хранения, лимит размера файла, квота, число файлов, разрешённые типы, права — всё применяется на сервере. Никаких конфиг-файлов на арендатора и перезапусков.
// 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,
}); В связке с BYOB каждый арендатор размещается в собственном бакете.
Создано для команд, выпускающих функции работы с файлами
Если вашему продукту нужны загрузки, FluxFiles встраивается — не делая вас хранителем данных ваших клиентов.
SaaS и мультиарендные приложения
Дайте каждому клиенту файловый менеджер на его собственном бакете. Ограничение токена по арендатору и суверенитет данных встроены.
Агентства и фрилансеры
Поставляйте каждому клиенту аккуратную медиатеку без развёртывания инфраструктуры хранения под каждый проект.
Интеграции с CMS и редакторами
Встройте выбор медиа в CKEditor, TinyMCE, Summernote или ваш редактор через iframe SDK.
Внутренние инструменты и дашборды
Добавьте загрузки, превью и аудируемые операции с файлами в админ-панели за полдня.
Всё, что нужно современному файловому менеджеру
Создан для разработчиков, которым нужна гибкость.
Мульти-хранилище
Локальное, AWS S3, Cloudflare R2, SFTP через Flysystem v3 — меняйте в конфиге без правки кода.
Встраивайте куда угодно
iframe + postMessage SDK. Автономный UI на Alpine.js (без сборки). С любым фреймворком.
JWT авторизация + скоупинг
Префикс пути, права, белый список дисков, режим только владелец.
AI авто-теги
Claude / OpenAI vision — автоматический alt-текст, заголовок, теги.
Обрезка изображений
Инструмент обрезки с предустановками пропорций.
Оптимизация изображений
Автоматические WebP-варианты — миниатюра, средний, большой.
Предподписанные загрузки
Браузер загружает напрямую в S3/R2 — нулевая нагрузка на ваш сервер.
Загрузка частями
S3 multipart для файлов > 10МБ.
Полнотекстовый поиск
Индексированный поиск по именам, заголовкам, тегам — на файлах, без базы данных.
Массовые операции
Множественный выбор: перемещение, копирование, удаление, скачивание.
Кросс-диск перенос
Копирование/перемещение между Локальным ↔ S3 ↔ R2.
Корзина
Восстановимое удаление с автоочисткой.
SEO метаданные
Заголовок, alt, подпись, теги — метаданные S3 (облако) или sidecar JSON (локально). Полнотекстовый поиск.
Тёмный режим
Светлая / тёмная / авто в UI и SDK.
16 языков
По умолчанию английский. Локаль через SDK, URL (?locale=) или FLUXFILES_LOCALE. RTL для арабского.
Журнал аудита
Все действия записи логируются.
Ограничение скорости
Token bucket для каждого пользователя.
Квота хранилища
Лимиты для каждого пользователя через JWT claims.
BYOB бакеты
Свой S3/R2 пользователя — учётные данные в JWT (AES-256-GCM).
Обнаружение дубликатов
Совпадение SHA-256 пропускает лишние загрузки кроме принудительной перезаписи.
Обновление токена SDK
onTokenRefresh при 401 — объединённое обновление, повтор, updateToken().
Bucket Doctor
Диагностика любого диска S3/R2 — учётные данные, чтение/запись/удаление, presign, CORS, multipart — с готовыми к вставке исправлениями IAM и CORS. Подключайте BYOB-бакеты за минуты.
Node token SDK
Выпускайте токены FluxFiles из любого JS-бэкенда (Express, Next.js, Nuxt) с @fluxfiles/node — побайтово совместимо с PHP-ядром. PHP для выпуска токенов не нужен.
Диск SFTP
Третий драйвер после S3/R2 — превратите любой VPS или хостинг в файловый менеджер.
Редактор кода / конфигов
Редактируйте текст и конфиги (wp-config.php, .env) в браузере, как в cPanel.
Zip и распаковка
Скачайте выбранное как zip или распакуйте архив — защита от zip-slip и бомб.
Водяной знак
Накладывайте текст или логотип на лету для защиты превью — оригинал не меняется.
WebP + AVIF по запросу
Отдавайте любой размер изображения как кэшированный AVIF/WebP по одному URL (согласование через Accept), с готовым адаптивным srcset.
Права SFTP
Меняйте права Unix (chmod) на SFTP-дисках через диалог в стиле cPanel.
Панель использования
Хранилище с первого взгляда — квота и разбивка по типам и папкам.
Предпросмотр медиа
Встроенный просмотр фото, видео, аудио и PDF; приватные локальные медиа — безопасно.
Запуск за 2 минуты
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= Работает с
Интеграции
Готовые адаптеры для вашего стека
Официальные адаптеры нативно встраивают FluxFiles во фреймворки и редакторы, которыми вы уже пользуетесь.
Встраивание
Встройте в несколько строк
Подключите fluxfiles.js, передайте JWT, выпущенный на сервере, и разместите полноценный файловый менеджер — или модальное окно выбора файлов — на любой странице.
<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)}
/>
);
} Токены выпускаются на сервере — никогда не передавайте секрет в браузер.
Создан для того, о чём другие забыли
| Функция | FluxFiles | elFinder | Laravel-FM | RichFilemanager | Responsive FM |
|---|---|---|---|---|---|
| S3 + R2 + Локальное + SFTP | ✓ | ⚠ | ⚠ | ⚠ | ✗ |
| Встраивание в любой фреймворк | ✓ | ⚠ | ✗ | ⚠ | ✗ |
| JWT авторизация + скоупинг | ✓ | ✗ | ✗ | ✗ | ✗ |
| SEO метаданные | ✓ | ✗ | ✗ | ✗ | ✗ |
| AI авто-теги | ✓ | ✗ | ✗ | ✗ | ✗ |
| Обрезка изображений | ✓ | ✓ | ✗ | ✗ | ✗ |
| Загрузка частями | ✓ | ✗ | ✗ | ✗ | ✗ |
| Полнотекстовый поиск | ✓ | ✗ | ✗ | ✗ | ✗ |
| Тёмный режим | ✓ | ✗ | ⚠ | ✗ | ✗ |
| 16 языков | ✓ | ✓ | ✗ | ✗ | ✗ |
| PHP ≥ 8.1 | ✓ | ✓ | ✗ | ✓ | ✓ |
| Активно поддерживается | ✓ | ✓ | ⚠ | ✗ | ✗ |
| Современный UI | ✓ | ✗ | ⚠ | ✗ | ✗ |
Self-hosted и встраиваемый — а не очередной SaaS для загрузок
Хостинговые файловые API хороши, но они хранят ваши данные и берут плату за использование. FluxFiles работает в вашем стеке, и каждый арендатор — на своём бакете.
| Возможность | FluxFiles | Filestack | Uploadcare | Cloudinary | Supabase Storage |
|---|---|---|---|---|---|
| Self-hosted (работает в вашей инфраструктуре) | ✓ | ✗ | ✗ | ✗ | ⚠ |
| BYOB — собственный бакет каждого клиента | ✓ | ⚠ | ⚠ | ✗ | ✗ |
| Встраиваемый UI файлового менеджера | ✓ | ✓ | ✓ | ⚠ | ✗ |
| Открытый код (MIT) | ✓ | ✗ | ✗ | ✗ | ✓ |
| Без SaaS-платы за хранение / за загрузку | ✓ | ✗ | ✗ | ✗ | ⚠ |
| Мультихранилище (S3 / R2 / локально) | ✓ | ⚠ | ✗ | ✗ | ✗ |
| Встроенное ограничение токена по арендатору | ✓ | ⚠ | ⚠ | ⚠ | ⚠ |
Сравнение отражает типичные предложения по умолчанию; каждый продукт силён в своей области. Ниша FluxFiles — сочетание встраиваемости, self-hosted и bring-your-own-bucket.
Продаваемые продукты
Больше, чем управление файлами — продавайте и принимайте их
Бесплатное ядро встраивает файловый менеджер. Платные модули превращают его в продукты, за которые платят ваши клиенты.
Branded Share
Отправьте брендовую самообслуживаемую ссылку на любой файл или папку — со сроком, паролем, лимитом загрузок и аналитикой. Ваш логотип, ваш домен.
- Ссылки со сроком / защитой паролем
- Лимиты загрузок + аналитика просмотров
- Ограниченный токен — получателю не нужен аккаунт
Upload Portals
Публичная страница «пришлите нам файлы», которая попадает прямо в ваше хранилище. Идеально для агентств, фотографов и онбординга клиентов — загружающему не нужен аккаунт.
- Публичный портал → ваш бакет
- Лимиты размера / типа / срока по порталу
- Анонимная загрузка, в области владельца
Compliance bundle
Антивирус, происхождение контента C2PA и хранение аудита — для регулируемых и корпоративных развёртываний.
WordPress
Один плагин вместо трёх
В WordPress FluxFiles — это и клиентский файловый портал, И медиа-менеджер — заменяя отдельные плагины папок, облака и offload.
| Возможность | FluxFiles | FileBird | WP Media Folder | WP Offload |
|---|---|---|---|---|
| Медиа-папки | — | |||
| Хранилище S3 / R2 / SFTP | — | |||
| Offload + переписывание URL | — | — | ||
| Клиентские порталы загрузки | — | — | — | |
| Брендовые ссылки | — | — | — | |
| Типичная цена | Одна лицензия | $49/год | $69/год | платно |
Папки + облако + offload + клиентские порталы в одном — вместо оплаты FileBird и WP Media Folder и WP Offload по отдельности.
Цены
Ядро бесплатно. Платите только за платные модули.
Ядро MIT бесплатно навсегда. Апгрейд до двух ключевых продуктов — Брендовые ссылки + Порталы загрузки — и далее.
Бесплатно (Ядро)
Полный файловый менеджер MIT, self-hosted.
Начать- Хранилище Local / S3 / R2 / SFTP, области JWT
- WebP + AVIF по запросу + оптимизация изображений/PDF
- Водяной знак, хук версий, панель использования, авто-теги ИИ
- 7 адаптеров + BYO-embed терминал / PDF / office / э-подпись
Pro
Отправляйте и принимайте файлы с клиентами.
СкороСкоро- Всё из бесплатного
- Брендовые ссылки — со сроком / паролем / лимитом / аналитикой
- Порталы загрузки — публичное «пришлите файлы», без аккаунта
- Приоритетная поддержка + обновления
Studio
Создайте продукт на FluxFiles.
СкороСкоро- Всё из Pro
- Версионирование + Webhooks (Zapier/Make/n8n)
- ИИ-зрение + OCR (свой ключ)
- Мультиарендные уровни + white-label
Enterprise
Комплаенс, в масштабе.
Связаться с отделом продаж- Всё из Studio
- Антивирус + происхождение C2PA + хранение аудита
- SSO-мост + индивидуальный онбординг
- SLA + приоритетная дорожная карта
Фикс-цена, безлимит сайтов — без оплаты за файл/вызов. Годовая экономит ~2 месяца; доступен вариант навсегда. Возврат 14 дней. НДС покупателя — при оплате.
Вопросы и ответы
Часто задаваемые вопросы
FluxFiles бесплатный и с открытым кодом?
Где хранятся мои файлы?
Как работает аутентификация?
Нужен ли моим пользователям аккаунт FluxFiles?
Можно ли встроить его в моё приложение или редактор?
Что нужно для запуска?
Что входит в платные тарифы?
Как активировать лицензию?
Разовая оплата или подписка?
Готовы встроить FluxFiles?
Добавьте готовый к продакшену файловый менеджер в своё приложение за считаные минуты — без привязки к фреймворку, лицензия MIT.