Self-hosted code forge
git gud.
Repos, issues, pull requests, CI, wiki, federation. Phoenix on the front, gitoxide on the back, ForgeFed by default. Built so you can host the small project that becomes a movement.
Repos, smart-HTTP + SSH
Bare git on disk with a Postgres cache in front. Embedded SSH daemon — DB-backed key auth, no system git user. LFS too.
Forks, PRs, line-level diffs
3-way merge, fork sync, compare any two refs. Diffs render hunk-by-hunk with syntax-highlighted lines; large diffs keep their hunks out of the DOM until you open the file.
Forgejo Actions CI
Talk protobuf to forgejo-runner. Per-task JWTs, encrypted secrets, artifacts + cache with hit matching, re-run + cancel from the UI.
Federation that works
ForgeFed over ActivityPub: federated PRs, federated reviews (Like/Dislike), federated comments. HTTP-signed; allowlist by default.
Moderation up front
Per-repo interaction policy, quarantine queue, rate limits, peer-block suggestions, and a reversible 'replace with mod message' that keeps the original visible to admins + author.
MFA + WebAuthn
TOTP authenticator apps, FIDO2 security keys (YubiKey, passkeys, Touch ID), recovery codes. Optional instance-wide enforcement with a grace window.
Markdown that links itself
GFM with cross-references — `#42` links to whichever issue or PR that number actually is, `#x2a` works too, `owner/repo#42` crosses repos. Quote-reply on every comment.
Org-level labels
Define labels once at the org; every repo inherits unless it opts out. Color picker with a 16-swatch palette and a live preview badge.
Wiki + container registry
Sister .wiki.git you edit through the UI. Container packages mirrored from zot via webhook, browsable per-repo without leaving the forge.
Profiles + identicon avatars
User + org profile pages at /u/:handle and /orgs/:handle. Bio, location, socials, pinned repos (drag-to-reorder, up to 7), and an auto-created alice/alice README repo that renders inline.
Language + contributor stats
0.3em GitHub-style bar above the file tree, click for /stats/languages or /stats/committers. Computed lazily by Oban from cached blob + commit metadata — no extra git walks on the request path.
Invite-gated signups
Three registration modes — open, invite-only (default), closed. Single-use invite links generated from /users/settings/invites, revocable anytime. Org members manageable from settings with a last-admin guard.