Forge
Forge is a small self-hosted Git forge built with ASP.NET Core, Blazor, SQLite, and Git Smart HTTP.
Features
- Browse repositories, trees, blobs, commits, and branches
- Create repositories from the web UI
- Push over HTTP to auto-create a missing repository on first push
- Cookie-based web login with Basic auth support for Git operations
- Repository visibility controls with private/public settings
- README rendering on the repository page
- Syntax highlighting for source files and fenced code blocks
Running Locally
nix run .#run-forge
Open http://localhost:5128.
The bootstrap admin username is admin.
For local runtime, the app now expects a decrypted password file path, which matches the Home Manager agenix pattern. By default the flake looks for:
$XDG_RUNTIME_DIR/agenix/forge-admin-password
Override it with:
export FORGE_ADMIN_PASSWORD_FILE=/path/to/decrypted/password-file
After signing in as the bootstrap admin, open Settings to add additional Forge users. Those users can log in to the web UI and use Git HTTP with their own credentials.
Fly.io Deployment
This repo includes:
- Dockerfile for Fly builds
- fly.toml app and volume mount config
- flake.nix apps
run-forgeanddeploy-fly - justfile helpers for deploy, secrets, and volume setup
Recommended setup:
cp .env.example .env
# edit .env and set FLY_APP / FLY_REGION
fly apps create "$FLY_APP"
just fly-volume
just fly-secrets
just deploy
What each step does:
just fly-volumecreates theforge_datavolume mounted at/datajust fly-secretsreads the admin password fromFORGE_ADMIN_PASSWORD_FILEand sets:Auth__Username,Auth__Password,Database__Path,Repositories__Root, andASPNETCORE_ENVIRONMENTjust deployrunsnix run .#deploy-fly, which callsfly deploy -a "$FLY_APP"
Fly volume note:
- The app expects persistent storage at
/data forge.dbis stored at/data/forge.db- bare Git repositories are stored under
/data/repositories
Push This Repo To Forge
git remote add forge "http://admin:$(cat ${FORGE_ADMIN_PASSWORD_FILE:-${XDG_RUNTIME_DIR}/agenix/forge-admin-password})@localhost:5128/admin/forge.git"
git push -u forge main