File Browser

Lightweight web file manager for a directory

File Sync & Storage Archived ★ 35.9k stars Easy setup Apache-2.0

This project is archived. Upstream development has stopped, so expect no new features or security fixes. Consider an actively maintained file sync & storage alternative.

File Browser provides a clean web interface to manage files within a specified directory, supporting upload, download, sharing, and user accounts. It suits users who want simple browser-based access to a folder rather than a full sync platform. It ships as a single Go binary and a small Docker image.

Key features

  • Single-binary web file manager
  • User accounts and share links
  • Built-in editor and previews
  • Minimal resource usage

Pros & cons

Strengths

  • Extremely lightweight
  • Trivial to deploy
  • Good for quick file access

Trade-offs

  • No sync client
  • Limited collaboration features

File Browser replaces

Last reviewed Aug 26, 2026 · 813 words

File Browser does one thing: it puts a folder on your server behind a login page, with upload, download, rename, preview, a text editor, and share links. It uses about 64 MB of RAM and ships as a single Go binary. It does not sync anything. If you want files to appear on your laptop automatically, that job belongs to Syncthing, and the two together are a very good answer to "I want Dropbox without running Nextcloud".

The Docker install, and the one mount that goes wrong

services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    user: "1000:1000"
    ports:
      - "8080:80"
    volumes:
      - /srv/files:/srv
      - ./filebrowser.db:/database/filebrowser.db
      - ./settings.json:/config/settings.json
    restart: unless-stopped

Two of those paths must exist as files before the first docker compose up. If filebrowser.db does not exist, Docker creates a directory with that name and the container crashes complaining it cannot open the database. Run touch filebrowser.db and put at least {} in settings.json first. Match user: to whoever owns /srv/files on the host, or uploads fail with permission errors that look like an application bug.

On first start, read docker compose logs: current releases generate a random admin password and print it there. Older builds defaulted to admin / admin. Either way, change it in Settings before the container is reachable by anyone else.

Without Docker, the binary is one download and one command: filebrowser -r /srv/files -a 0.0.0.0 -p 8080 -d /var/lib/filebrowser.db serves the same directory with the same interface, and a 6-line systemd unit keeps it running. On a NAS or a Pi that already has the files, this is the lighter option and it sidesteps the mount problem entirely.

The editor and previews are better than they need to be

Text and config files open in a browser editor with syntax highlighting and save in place, which makes File Browser a quiet favourite for editing a compose file or a Caddyfile from a phone. Images, PDFs, audio, and video preview inline. There is also a Commands feature that lets a user run a preset shell command from the UI; leave the execute permission off for everyone but yourself, because it is exactly what it sounds like.

Users get a scope, not the whole disk

Each account has a scope, a subdirectory of /srv that becomes that user's root; they cannot see above it. So one instance serves a family: /srv/alice for one person, /srv/shared for another with the modify permissions switched off, and an admin who sees everything. Permissions are per user (create, rename, delete, share, execute commands), and the defaults for new accounts are set once under Settings, Global settings. It is enough for a household or a small team. It is not enough for a company that needs groups, quotas, and audit trails, which is the point at which Nextcloud earns its 500 MB.

Select a file or folder, click Share, and you get a URL with an optional expiry (hours or days) and an optional password. Recipients need no account and see a download page with a preview for images, PDFs, and video. Folder shares download as a zip. That covers "send my parents the holiday photos" and "let a client pull a 4 GB export" with no third-party service and no account creation at their end.

Two caveats. Share links are only as safe as their expiry, so set one every time. And browser uploads are fine for a few gigabytes over a LAN and tedious for tens of gigabytes across the internet; for that, rclone into the same directory over SFTP is the better tool.

Put TLS in front of it, always

File Browser speaks plain HTTP. Behind Caddy it becomes a 3-line site block with automatic certificates, and if you set baseURL in settings.json it can live at https://home.example.com/files alongside other apps. Do not expose it straight to the internet: the login form has no second factor, so an instance reachable from outside should sit behind a VPN or a forward-auth proxy.

What I'd do

Run File Browser on whichever box already holds the files, in Docker with the compose above, one user per person with a scoped folder, share-link expiries set to 7 days by habit, behind Caddy with TLS. Add Syncthing on the same directory for devices that need a local copy. The result does 90 percent of what a family used cloud storage for, in under 100 MB of RAM total, and it is the file sync setup I would hand a relative before any heavier platform. Reach for Nextcloud only when someone asks for calendars, contacts, or collaborative documents.

Compare File Browser

21 head-to-head comparisons.

Similar file sync & storage apps