A minimal file browser you can run locally, in Docker and on Kubernetes. It serves a directory for listing, uploading, deleting, renaming, moving, creating folders, downloading, and previewing files (images including WebP). No auth.
Before starting this project, I have checked what is already existed. I found multiple apps including gtsteffaniak's File Browser. Even so it is a great tool so far, it is a bit overcomplicated for me and my needs. So I decided to make my own simple file browser.
It is mostly vibe-coded project with Windsurf AI as I am not a developer, so I strongly recommend to check gtsteffaniak's File Browser for more features. You may use this project on your own risk. I do not take any responsibility for any damage or loss of your data.
All suggestions, bug reports, and pull requests are welcome.
- Directory listing, stat
- Upload (multipart), download files
- Create folder, rename/move, delete (file/dir)
- Image preview
- Configurable settings (root folder, max upload size, allowed file types, theme).
- Language selection (English, Russian)
- Light and dark themes by Mantine
- Install deps
npm install
npm run dev
set FILEBROWSER_ROOT=c:\\path\\to\\serve in Settings
Build and run the application using Docker:
# Build the image
docker build -t amuzing-file-browser .
# Run with default settings (serves /data directory)
docker run -p 8080:8080 -v /path/to/your/files:/data amuzing-file-browser
# Run with custom environment variables
docker run -p 8080:8080 \
-v /path/to/your/files:/data \
-e FILEBROWSER_ROOT=/data \
-e LOG_LEVEL=debug \
amuzing-file-browser
You can split access by hostnames:
- Admin UI and full API:
my-custom-domain.domain.com
- Public media (read-only):
media.domain.com
The server enforces this via host-based middleware:
- On admin host: full access
- On media host: only GET to
/files/*
,/api/fs/preview
,/api/fs/download
, and/api/health
- If domains are unset (local dev), no restrictions are applied
Configure:
- Local/Docker env vars
# Linux/macOS export ADMIN_DOMAIN=my-custom-domain.domain.com export MEDIA_DOMAIN=media.domain.com # Windows PowerShell $env:ADMIN_DOMAIN='my-custom-domain.domain.com' $env:MEDIA_DOMAIN='media.domain.com'
See basic helm chart folder.
- Header icon by Icons8
- Windsurf