This project is archived on 2026-09-01. Pull requests are not accepted and no further changes are merged. This document is kept as build documentation for anyone wishing to build the project from source.
The backend side of the application is written in Go, while the frontend (located on a subdirectory of the same name) is written in Vue.js. Due to the tight coupling required by some features, basic knowledge of both Go and Vue.js is recommended.
- Learn Go: https://github.com/golang/go/wiki/Learn
- Learn Vue.js: https://vuejs.org/guide/introduction.html
We encourage you to use git to manage your fork. To clone the main repository, just run:
git clone https://github.com/filebrowser/filebrowserWe use Taskfile to manage the different processes (building, releasing, etc) automatically.
You can fully build the project in order to produce a binary by running:
task buildFor development, there are a few things to have in mind.
We use Node.js on the frontend to manage the build process. Prepare the frontend environment:
# From the root of the repo, go to frontend/
cd frontend
# Install the dependencies
pnpm installIf you just want to develop the backend, you can create a static build of the frontend:
pnpm run buildIf you want to develop the frontend, start a development server which watches for changes:
pnpm run devPlease note that you need to access File Browser's interface through the development server of the frontend.
First prepare the backend environment by downloading all required dependencies:
go mod downloadYou can now build or run File Browser as any other Go project:
# Build
go build
# Run
go run .Documentation lives in docs as plain Markdown and is no longer built into a site. The command line reference in docs/cli is generated from the commands themselves:
task docs:cli:generateTo make a release, just run:
task releaseThe Transifex integration stopped on 2026-09-01 and translations submitted there no longer reach this repository. Locale files live in frontend/src/i18n and can be edited directly.
To build a new authentication provider, you need to implement the Auther interface, whose method will be called on the login page after the user has submitted their login data.
// Auther is the authentication interface.
type Auther interface {
// Auth is called to authenticate a request.
Auth(r *http.Request, s *users.Storage, root string) (*users.User, error)
}After implementing the interface you should:
- Add it to
authdirectory. - Add it to the configuration parser for the CLI.
- Add it to the
authBackend.Get.
If you need to add more flags, please update the function addConfigFlags.