Overview
Start here: what BoxBox is and where to find each project reference.
BoxBox Documentation
BoxBox is a self-hosted file manager for homelab and NAS-style Linux servers. It serves a SvelteKit web app from a single Go binary and exposes configured filesystem locations through a browser UI.
What to Read First
| Page | Use it for |
|---|---|
| Quick start | Run BoxBox quickly with Docker Compose and the published GHCR image. |
| Docker deployment | Deploy from GHCR with Compose, or use separate local run and source-build alternatives. |
| Configuration | Configure users, mount points, upload limits, origins, and ports. |
| API reference | Use the REST, streaming, and WebSocket endpoints directly. |
| Development | Run the backend and frontend app locally. |
| Security | Harden credentials, mounted paths, reverse proxy, and network exposure. |
| Architecture | Understand the Go backend, Svelte frontend, and embedded static deployment. |
| Troubleshooting | Diagnose common deployment, login, upload, and mount issues. |
Current Runtime Facts
- The production image is a single container.
- The preferred deployment is Docker Compose pulling
ghcr.io/jr4dh3y/boxbox. - The server listens on port
80by default. - The frontend static build is embedded into the Go binary.
- API routes live under
/api/v1;/healthis also available at the root. - Mount points are configured in
config.yamland can be customized by binding another config file to/app/config.yaml. - Environment overrides use the
FM_prefix, for exampleFM_JWT_SECRETandFM_USERS_admin.
Default Credentials
If no users are configured, BoxBox falls back to admin:admin and logs a warning. Do not run a reachable deployment without setting at least:
FM_JWT_SECRET="$(openssl rand -base64 32)"
FM_USERS_admin="a-long-unique-password"
Scope
BoxBox is intentionally a focused file manager. It is not a multi-tenant cloud storage platform, public-link sharing service, media server, or identity provider. Keep deployments private, use a reverse proxy with TLS when exposed beyond localhost, and mount only the directories you actually need.