Files in the top-level directory from the latest check-in

  • .cursor
  • .fossil-settings
  • docker
  • priv
  • skin
  • src
  • test
  • compose.yml
  • Dockerfile
  • gleam.toml
  • manifest.toml
  • README.md

Trilobite

Self-hosted Fossil SCM manager and public repository portal. Gleam on BEAM. No Node.js.

Requirements

  • Gleam 1.18+
  • Erlang/OTP
  • Fossil CLI
  • Git CLI (only for optional Git mirrors)
  • sqlite3 CLI

Run

gleam deps download
gleam test
gleam run

On first boot the process prints Open https://trilobite.1kt.dev/setup to initialize this instance. Any other URL redirects to that setup page until a platform administrator exists. After login, /admin/settings can change the public URL, storage paths, upload limit, and default skin injection without a process restart.

Variable Default Purpose
APP_HOST 0.0.0.0 Bind address
APP_PORT 8801 Public HTTP port
PUBLIC_BASE_URL https://trilobite.1kt.dev URLs shown to browsers and Fossil
TRILOBITE_DB_PATH data/trilobite.db Platform SQLite file
TRILOBITE_REPOS_DIR storage/repos *.fossil files
TRILOBITE_RELEASES_DIR storage/releases Uploaded releases
FOSSIL_INTERNAL_PORT 8802 Local fossil server (localhost only)
FOSSIL_BIN / GIT_BIN fossil / git CLI paths
TRILOBITE_MAX_UPLOAD_BYTES 524288000 Release upload limit
TRILOBITE_SECRET development placeholder Cookie signing secret

Change TRILOBITE_SECRET before exposing the service.

Backup and restore

Copy these paths together:

  • data/trilobite.db (platform users, sessions, repo registry, releases)
  • storage/repos/ (independent Fossil repositories)
  • storage/releases/ (release blobs)
  • storage/git-mirrors/ (optional Git export working copies)

Restore the same layout and start gleam run. Migrations in priv/migrations/ apply on startup.

Security notes

  • Port 8802 must stay off the public network.
  • Each Fossil repository has its own setup user; it is not the platform admin.
  • Private repositories are omitted from /repositories, /timeline, and anonymous /:repo/*.
  • docs/, local databases, and storage directories are ignored by this Fossil checkout.

Tests

gleam test