A self-hosted file manager that looks and works like Windows File Explorer, in your browser.
- Tabs, folder tree, drag and drop, right-click menus and keyboard shortcuts
- Map it as a drive on a computer or phone (WebDAV)
- Preview Word, PowerPoint and Excel in the browser; edit the text of Word documents, Excel workbooks and text files online; earlier versions are kept
- Share with a link (password, expiry date, download limit), or receive files through one
- Work with files from other programs: SFTP, a folder published as an S3 bucket, or an FTP folder that scanners upload to
- Invite people from outside as guests, who see only what is shared with them, until a set date
- Keep files as ordinary folders on a local disk or NAS, or on S3-compatible storage, SFTP or FTP; show an existing folder as a space
- Personal, company and team spaces, with roles and size limits
- Sign in with a password and two-factor sign-in, or with Microsoft, Google, GitHub or any OpenID Connect provider
- English, Traditional Chinese, Simplified Chinese and Japanese, dark mode, works on phones
You need Docker.
docker run
docker run -d --name thirtyfile --restart unless-stopped \
-p 8080:8080 \
-v /srv/thirtyfile/data:/data \
-v /srv/thirtyfile/storage:/storage \
-e THIRTYFILE_ADMIN_PASSWORD='choose-a-password' \
ghcr.io/thirtyfile/thirtyfile:latestDocker Compose
The same images are available on Docker Hub. Replace ghcr.io/thirtyfile/thirtyfile with thirtyfile/thirtyfile in the command above or the Compose image: line, keeping the same version tag.
curl -fLO https://github.com/ThirtyFile/ThirtyFile/releases/latest/download/compose.yaml
docker compose up -dOpen http://localhost:8080 and sign in as admin. Without THIRTYFILE_ADMIN_PASSWORD, the password is created at random: docker logs thirtyfile 2>&1 | grep password.
/data holds accounts and settings, /storage holds your files, as ordinary folders: company, teams/<space name> and users/<user name>.
| First steps | What to set up after installing |
| Working with files | Uploading, organising, shortcuts |
| Sharing | Share links, roles and spaces |
| Settings | Options for the container |
| Putting it on the internet | HTTPS and reverse proxies |
| Upgrade and backup | Keeping it up to date and safe |
| Troubleshooting | Common problems |
You need rustup (it installs the Rust version in server/rust-toolchain.toml), Node 22.12+ and pnpm 11.
# Terminal 1: backend
cd server
THIRTYFILE_ADMIN_PASSWORD=changeme123 cargo run
# Terminal 2: frontend, at http://127.0.0.1:5173
cd web
pnpm install
pnpm devChecks before committing: the interface, the server, and an end-to-end test that signs in, uploads and previews files in a real browser (the first time, get the browser with cd web && pnpm exec playwright install chromium). Pull requests on GitHub run the quicker quick part; all of them run before a release:
scripts/check.sh # everything
scripts/check.sh web # or one part: web, server, e2e, site or quick| Folder | Contents |
|---|---|
server/ |
Backend (Rust) |
web/ |
Frontend (React). Translations are in web/src/lib/i18n/, one folder per language |
site/ |
The website and guides, published to GitHub Pages |
Changes go through pull requests: see Contributing. Releases are made by hand from main and published as ghcr.io/thirtyfile/thirtyfile:latest, by major version (1, from 1.0.0 on: the safe tag for automatic updates) and by version number; the releases also carry the server as a single program for Linux (amd64, arm64) and compose.yaml.
ThirtyFile is licensed under the Apache License 2.0. The licence notices of the libraries it includes are in THIRD-PARTY-NOTICES, next to LICENSE in the image (/usr/share/licenses/thirtyfile/) and on each release. Unless you state otherwise, any contribution you submit for inclusion is licensed under the same terms.


