One Go binary with a polished web UI, six storage drivers and a plugin API for the rest. Reachable as S3, SFTP, FTPS, NFS and WebDAV. Ships as a desktop app, a CLI, an embeddable component - and a built-in MCP server so AI agents can drive it natively.
Demo sign-in: [email protected] / demo - the files are yours to play with; the admin panel is read-only, and everything resets nightly.
Most self-hosted file managers are either too small - a listing with an upload button - or part of a groupware suite you deploy for the file tab. filex aims at the gap.
The same UI ships as a Vue 3 component, a React adapter and a framework-agnostic
<filex-explorer> web component. Confined API tokens keep each
tenant locked to its own folder - enforced by the backend, not the widget. Presence
avatars and live file updates arrive over WebSocket in embedded contexts too.
A built-in Model Context Protocol server at
/api/ai/mcp, plus a token-scoped REST surface described in OpenAPI 3.1.
Hand an agent a token confined to one folder: it works there with the explorer's own
operations - list, read, write, copy, convert, share, the trash, versions, archives -
and nothing outside it. Every integration keeps its own audit trail. And an
AI assistant in the explorer, off until an administrator sets it up -
Anthropic, OpenAI or a compatible server, or a local Ollama - works through the same
tools as the person who asks, with Undo for a change and an approval card for what
cannot be undone.
Local disk, S3, SFTP, FTP, WebDAV and SMB/NAS - mount many at once, each as a top-level folder, and cut a folder from one into another for a real move. For anything else, a storage plugin is a separate program, in any language, that teaches filex a backend it has never heard of - installed from the admin panel, or from an app store that checked and signed it. And filex will tell you what they cost: it reads the daily usage report your provider already writes and prices it with a table you can edit, free allowances shown beside the billable lines.
A second kind of plugin - a sandboxed WebAssembly module, an interface of its own that filex runs in a sandboxed frame, or both - adding actions to the file menu, screens and public pages for people with no account, installed through a review of every permission it asks for and granted exactly that. Apps say when their source has a newer version, nothing is installed until you have reviewed what it changes, and the previous version is one click away. Your people can browse a trusted store on filex's own App store screen and ask you for an app. An app you allow can edit a file together with other people through filex's relay, which never reads their changes, and open a file of an encrypted folder that your browser decrypts for it. Five ship alongside filex as public repositories: e-Signature - a document sent round for signature, a PAdES signature from your own authority, the finished file sealed by filex itself - Convert, the Office editor - Word, Excel and PowerPoint in ONLYOFFICE's editor, in the browser, with no Document Server, and on the server the office thumbnails and conversions a Document Server used to make - filextext - an end-to-end encrypted text workspace - and draw.io. Write your own in stock Go, against a test kit.
English and Turkish are built in; any other language is a language pack - a manifest of strings, no code and no release - which translates the explorer, the admin panel, the public pages and the text the server writes. Arabic, Hebrew, Persian and Urdu lay the whole interface out right to left. And it wears your colours, not ours: compose a theme on the Appearance screen and the sign-in page and every public link wear it too.
Search every mounted storage at once - by filename and by what is inside the file. Both are on by default, on an embedded index with nothing extra to run; add Tesseract and scanned pages join in. Behind that: trash with a retention window, version history, and optional ClamAV scanning of every file written - the built-in editor included, and files the storage sync finds on the backend rather than through filex - against a scanner on the box or a clamd container over the network.
Everyone has one role - Administrator, User, Viewer or one you define as its own list of permissions, different in some folders if you like - with per-person exceptions, per-item grants with inheritance, and permissions installed apps add. Groups hold folder access and a role for everyone in them, and follow the groups a sign-in carries. The same answer holds in the browser, the agent API and every protocol, and an API key is held to its own verbs on each. Public links with a PIN, an expiry and a download cap; folder links stream as ZIP; file-request links take uploads into a folder without showing its contents. Folders can be end-to-end encrypted in the browser - an app you allow edits their files there, decrypted and encrypted again by the browser - and who may encrypt is the organisation's call: nobody, administrators, everyone whose role allows it, or anyone after an administrator's approval. Sign in with a local password, OIDC, LDAP / Active Directory, a proxy header or the Windows or Linux account of the machine filex runs on - set up on Admin → Identity providers, applied without a restart, with a Test now that really tests it. Wrong passwords are counted per account and per address, on the web form, WebDAV, FTPS and SFTP alike, and a lock doubles up to fifteen minutes.
One binary or one container. SQLite by default, PostgreSQL when you have a team. Multi-tenant mode - one switch in the admin panel - serves independent tenants from one install, each signed in to by its own address or its realm, and each able to run itself - its own OIDC or LDAP, its own domain and certificate. Compose stacks, a Helm chart, and Umbrel, CasaOS, Runtipi, Portainer and Unraid listings included.
Point rclone, restic, aws s3,
WinSCP, a scanner that only ever learned FTP or a media player that only ever learned
NFS straight at filex. They land in the same tree.
Storage drivers - mount many at once.
Protocol servers - each one a switch.
Same tree, same filex permissions, same trash, same quota, same search index, same audit trail as the web UI - a file uploaded over FTPS is thumbnailed and indexed exactly like one dropped in the browser. The POSIX bits and ACLs on the disk are not mapped to filex users. Each protocol has a credential you can revoke on its own.
The same explorer, wherever you happen to be working.
Thumbnails that show the thing itself - a PDF's first page, an office document's first page, a video's first frame that is not black, a text file's own first lines, an SVG on every install, a phone's HEIC photo, what is inside an archive, and folders drawn with the files that came into them last - and viewers and editors for images, video, audio, PDF, Markdown, CSV, source code (Monaco), notebooks, draw.io and Mermaid diagrams and glTF/USDZ 3D models, with Office documents editable in the office editor app you install, alone or together and with no Document Server - a self-hosted ONLYOFFICE Document Server stays an option - in each person's own language. + New also creates them: Markdown, text, CSV and code straight away, and Word, Excel, PowerPoint or OpenDocument with the office editor app - the templates are compiled into the binary, so no LibreOffice is involved and a type this install could not then open is never offered. Light and dark, and any language: English and Turkish are built in, and a language pack adds more - Spanish, German and French ship as examples - right-to-left languages laid out right to left. On a phone it installs like an app, under your instance's name and logo, offered from the first visit, and with Web Push its notifications arrive with filex closed.
The same explorer in its own window: several accounts side by side, folders kept
in step with the server from the tray, drag-out to any folder on your disk - and on
Windows and Linux the installed copy updates itself quietly. Not allowed to install
anything? Every platform also has a build that just runs: a portable Windows
.exe, an AppImage, a macOS .zip. The portable one keeps
everything it has in one folder beside itself, so deleting that folder leaves
nothing of yours on a machine that is not yours.
Keep a folder on your disk and a folder on the server in step - live:
an edit on either side arrives in about a second, not on the next 30-second lap.
Work offline and catch up on reconnect, with a bandwidth limit and a sync window when
you want them, and a first run that holds back a big re-upload and asks first. Same
engine in the desktop app and in filex sync, so a pair made in one is
visible to the other.
filex mountAttach a remote server over ordinary HTTPS: a folder on Linux, a drive letter on Windows. Nothing is downloaded but a bounded read cache, so one file opens out of a hundred thousand without pulling the rest.
winget install BRFTech.filex-app
.dmg
Apple Siliconx64 is almost every PC; arm64 is Windows on Arm
(Snapdragon laptops) and Linux on Arm. On Ubuntu 23.10 and later the AppImage needs
a one-time step
before it opens (the app shows it if it is missing); the .deb needs none.
Release notes and every file, the snaps included, are on the
latest release. The command
line alone: brew install brf-tech/filex/filex, or on Windows
winget install BRFTech.filex. To try what the next release brings, the
desktop app of every night that passed its tests is on
filex.sh/nightly and the Snap Store's
edge channel - not supported, and not for the data you keep.
Microsoft and the Microsoft Store badge are trademarks of the Microsoft group of companies. The Snap Store badge is © Canonical Ltd., licensed CC BY-ND 2.0 UK.
Run it, open the admin UI, add a storage. That is the whole setup.
# serves the folder you are standing in docker run -p 5212:5212 \ -e FILEX_DEFAULT_STORAGE_DRIVER=local \ -e FILEX_DEFAULT_STORAGE_PATH=/srv/files \ -v filex-data:/data \ -v "$PWD:/srv/files" \ ghcr.io/brf-tech/filex:latest # the first run prints the admin credentials open http://localhost:5212/admin
services:
filex:
image: ghcr.io/brf-tech/filex:latest
ports: ["5212:5212"]
volumes:
- filex-data:/data
- ./files:/srv/files
environment:
FILEX_PUBLIC_URL: https://files.example.com
FILEX_DEFAULT_STORAGE_DRIVER: local
FILEX_DEFAULT_STORAGE_PATH: /srv/files
volumes: { filex-data: }
<!-- one script tag, any framework --> <script type="module" src="https://cdn.jsdelivr.net/npm/@brftech/filex/dist/filex.js"></script> <filex-explorer api-base="https://files.example.com"></filex-explorer>
claude mcp add filex --transport http \
https://files.example.com/api/ai/mcp \
--header "Authorization: Bearer <token>"
# the server as a folder filex mount ~/filex # or point a tool that never heard of filex rclone copy ./photos filex-s3:demo/Photos
Click any of them to see the whole thing.
Built and run in production at BRF Tech - powering multi-tenant platforms with per-project isolation.