nander
A file manager for your own server, used from the browser.
- Question
- Can a self-hosted file manager feel like Finder in the browser, dragging files out to the desktop included?
- Result
- Mostly. Drag in and out, previews, share links, a sandbox per user. Dragging out to the desktop only works in Chromium browsers. That is a browser limit, and the docs say so.
What it does
nander is a file manager you run on your own server and use from any browser. You point it at a folder, create users, and each user sees their own part of it.
- Drag and drop both ways. Drop files or whole folders from the desktop to upload them, keeping the folder structure. Drag a file out of the browser onto the desktop to download it.
- Previews for images (with a lightbox), video and audio with seeking, PDF, rendered Markdown, and syntax-highlighted source code that you can edit and save in place.
- Zip and unzip from the interface. Extracts
.zip,.tarand.tar.gz. - Share links for a single file, with an optional password and expiry date. The person on the other end doesn’t need an account.
- A trash folder, so deleting can be undone.
- Users and permissions: each user is confined to a folder, with separate switches for upload, delete and share. Admins manage everything from the same interface.
- Search, grid and list views, multiple selection, cut, copy and paste, and keyboard shortcuts.
Availability
The code isn’t public yet. It runs as a Docker container with a single admin account created on first start. If you want to try it, write to [email protected].
How it is built
- One static Go binary with pure-Go SQLite, in a Docker image of about 20 MB that runs as a non-root user.
- Every endpoint that takes a path resolves it component by component, and checks every symlink again against the user’s folder. A
..or a symlink pointing outside is rejected on the server, whatever the browser sends. - Archive extraction checks every entry before writing anything (“zip slip”).
- Passwords go through SHA-256 and then bcrypt, so long passphrases are not silently cut at 72 bytes.
- Share links use a random 128-bit token, and the server checks their expiry on every access.
Known limits
- Dragging files out to the desktop only works in Chrome, Edge and Brave. Firefox and Safari don’t support it, so their users get a Download button.
- No thumbnails for video. That would need ffmpeg, which we leave out to keep the image small. Videos still play.
- Share links work for single files, not folders.
- Disk usage reporting only works on Linux.