The Tech Stack

Postgres

Postgres is the primary data store, and powers the search engine and message queue. These make use of several Postgres-specific features and extensions; as such, supporting other storage engines is likely to be complicated and is not a priority at the moment.

GoLang Backend

Some key libraries used include:

  • anacrolix/torrent not heavily used right now, but contains many useful BitTorrent utilities and could drive future features such as in-place seeding
  • fx for dependency injection and management of the application lifecycle
  • gin for the HTTP server
  • goose for database migrations
  • gorm for database access
  • gqlgen for the GraphQL server implementation
  • rex a regular expression library that makes some of the monstrous classification regexes more manageable
  • urfave/cli for the command line interface
  • zap for logging

TypeScript/Angular Web UI

Using Angular Material components. The web UI is embedded in the GoLang binary and served by the Gin web framework, and hence the build artifacts are committed into the repository.

Nix dev shell

The repository includes a Nix shell for a reproducible development environment. To use the shell, simply install Nix then run nix develop (or better still, use nix-direnv to use the included shell automatically.

Other tooling

  • The repository includes a Taskfile containing several useful development scripts
  • GitHub actions are used for CI, building the Docker image and for building this website