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 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
Railway Deployment
This repo includes:
- Dockerfile for Railway builds
- flake.nix apps
run-forgeanddeploy-railway - agenix config in secrets.nix
Deploy flow:
export RAILWAY_PROJECT=<project-id>
export RAILWAY_ENVIRONMENT=<environment-id-or-name>
export RAILWAY_SERVICE=<service-name>
nix run .#deploy-railway
The deploy script:
- reads the admin password from
FORGE_ADMIN_PASSWORD_FILE - sets
Auth__Username,Auth__Password,Database__Path, andRepositories__Root - runs
railway up --detach
Railway volume note:
- Attach a Railway volume mounted at
/data - The deployment expects to store
forge.dband bare Git repositories under/data
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