This release adds file and folder sharing, folder uploads, separate Drives and Places, and a redesigned share page. It also moves the default container port from 80 to 8080.
▶ Watch BoxBox in 40 seconds on YouTube, or download boxbox-promo.mp4 below. Music: “the kill 2” by Lex Amarni & 2muchmotion.
Highlights
- File and folder sharing. Token links for any file or folder. Folder links offer View only, Upload only, Upload + delete, and Full access. Links can expire, can be revoked, and are managed from Settings → Shared Links.
- Public share page. Recipients get a path bar, file list, previews, a code editor for text files (read-only unless the link has full access), previous/next navigation with arrow keys, and ZIP downloads for folders. No account needed.
- Folder uploads. Choose a folder or drag one in, from the file browser or a full-access share page. Nested paths stay intact.
- Drives and Places. The sidebar lists them separately. A mount inside another mount is a place. Set
kind: driveorkind: placeto choose explicitly. - Owner wallpaper on share pages. Each user's wallpaper is stored on the server and shown to their share recipients.
Fixed
auto_discovermounts were dropped at startup; discovered drives appear again, and inaccessible ones are skipped.chunk_size_mbnow controls browser upload chunks (default10).- Context-menu keyboard shortcuts (F2, Delete, Ctrl/Cmd+C/X/V) now work, and dialogs take focus when opened.
--devmode no longer fails config validation; the local test flow works again.- Path-safety and folder-navigation race fixes in sharing and browsing.
Under the hood
- Go 1.27 toolchain and standard-library
uuid; frontend state moved to Svelte 5 runes and the browse page was split into composables. - WebSocket and job messages are parsed and validated at the boundary, with reconnect backoff tests.
- Nightly and branch images now publish to separate
boxbox-nightlyandboxbox-branchpackages.
Upgrade notes
- The container listens on
8080now. The container side of the port mapping, the healthcheck, and any reverse proxy that reaches the container directly must matchportinconfig.yaml(orBOXBOX_PORT). The easiest path is the newdocker-compose.ymlplusport: 8080in your config. If you keep the v0.2.2 compose file (mapped and health-checked on 80), setBOXBOX_PORT=80instead. - Share links and wallpapers live in
/data(shares.json,wallpapers/). Keep theboxbox-datavolume. - Nested mounts move from Drives to Places. Add
kind: driveto keep one listed as a drive. - Back up
shares.jsonbefore downgrading.
Full notes: https://boxbox.radhey.dev/docs/release/
Docker images
ghcr.io/jr4dh3y/boxbox:v0.3.0
ghcr.io/jr4dh3y/boxbox:latest
BOXBOX_IMAGE=ghcr.io/jr4dh3y/boxbox:v0.3.0 docker compose pull
BOXBOX_IMAGE=ghcr.io/jr4dh3y/boxbox:v0.3.0 docker compose up -dFull changelog: v0.2.2...v0.3.0