Deep Investigation: Forgejo vs OneDev vs Gogs vs Gitea vs Radicle vs SourceHut
Six self-hosted Git forge platforms were investigated for hosting Nagato Game Assist and other recurring projects. The landscape splits into three tiers:
'Beyond coding. We forge.' - Community-governed fork of Gitea under Codeberg e.V.
Lightweight, community-governed, GitHub Actions-compatible
Language: Go (single binary)
License: GPL-3.0 (copyleft, 100% FOSS)
Governance: Non-profit (Codeberg e.V., Germany)
RAM (idle): ~180 MB
RAM (under load): ~320 MB
Official min: 512 MB
Install: Docker / binary / package
History: Forgejo was forked from Gitea in late 2022 after the Gitea trademark/domain was transferred to a for-profit company (Gitea Limited) without community consultation. It became a hard fork in early 2024 and is now governed by Codeberg e.V., a German non-profit with an elected council. All development happens on Codeberg.org using Forgejo itself (dogfooding).
CI/CD: Forgejo Actions uses a workflow syntax familiar to GitHub Actions users. A separate runner process (forgejo-runner) executes jobs in Docker containers. Many GitHub Actions workflows transfer with minor modifications - you typically need to set jobs.<job_id>.container.image to a compatible image like ghcr.io/catthehacker/ubuntu:act-22.04. Documented incompatibilities exist around permissions subkeys, continue-on-error, and OIDC syntax.
Security: Forgejo publishes security advisories to everyone through public channels. This contrasts with Gitea, which reserves advance security notices for paying Enterprise customers. Forgejo also runs end-to-end and upgrade tests that Gitea lacks.
For Nagato: Forgejo can host all your repos (nagato-game-assist, nagato-genui, nagato-ai-council) with private visibility, issues, PRs, and CI. The GitHub Actions compatibility means your existing workflow files mostly transfer. The container registry can host MSIX build artifacts. The low RAM footprint means it can run alongside your existing gaem-proxy, GTC Docker stack, and other services on your Windows machine.
'The Unified and Autonomous Development Platform' - All-in-one: Git + CI/CD + Kanban + Code Intelligence
All-in-one platform with built-in CI, PM, and code intelligence
Language: Java (JVM-based)
License: MIT
Governance: Independent project (github.com/theonedev/onedev)
RAM (idle): ~600 MB
RAM (under load): ~950 MB (1-2GB with CI)
Official min: 2 GB (4 GB practical)
Install: Docker (single container)
GitHub stars: 15.1k
Architecture: OneDev is fundamentally different from Gitea/Forgejo. It is a project-management-and-CI platform that happens to host Git, not a Git server with PM bolt on. The CI/CD build daemon lives inside the OneDev server process, so CI works the moment the platform is up - no separate runner deployment needed. This is a genuine operational simplification.
Code Intelligence: OneDev's standout feature is built-in code intelligence - symbol search, go-to-definition, and find-references work across Java, JavaScript, C, C++, C#, Go, PHP, and Python without cloning the repo. Gitea and Forgejo have nothing equivalent built in.
AI Integration: OneDev has built-in AI features - AI users that can implement issues, review PRs, fix CI/CD failures, and resolve merge conflicts. It ships a CLI (TOD) and skills for coding agents. This is interesting but requires external API endpoints.
The Migration Trap: There is no migration path between the Gitea/Forgejo family and OneDev. Different data model, different CI format, different schema. If you start on Forgejo and later decide you want OneDev (or reverse), it is a repo-by-repo API move that loses CI history and PM data. This is a one-way, lossy trip.
For Nagato: OneDev's built-in PM and code intelligence are attractive, but the 3x RAM cost is significant when running alongside your existing stack. The lack of GitHub Actions compatibility means rewriting all workflow files. The AI teammate feature is interesting but may conflict with your existing Hermes-based agent workflow.
'A painless self-hosted Git service' - The original lightweight Go Git service (2014)
Minimal footprint, but slow development and security concerns
Language: Go (single binary)
License: MIT
Governance: Single maintainer (Unknwon)
RAM (idle): ~64 MB (extremely low)
Official min: 64 MB
Install: Docker / binary
Still v0.x: Has not reached 1.0 in 12 years
History: Gogs is the grandparent of the lightweight Go Git forge family. Gitea was forked from Gogs in 2016, and Forgejo was forked from Gitea in 2022. Both forks have significantly surpassed Gogs in features, community, and development pace.
Maintenance Status: Gogs is still maintained but at a slow pace by primarily one maintainer (Unknwon). The latest release is v0.14.3 (June 7, 2026), which fixed an authenticated RCE vulnerability (CVE-2026-52806). The project has been stuck at v0.x for 12 years and has never reached a 1.0 release.
Security: The recent RCE vulnerability (argument injection via crafted branch names in pull requests) is concerning. It was fixed in 0.14.3, but the fact that such a vulnerability existed in a mature project with a single maintainer raises questions about the security review process.
For Nagato: Gogs is too minimal for your needs. No CI/CD, no container registry, no package registry, and a slower development pace. Both Gitea and Forgejo are strictly better choices - they are forks of Gogs that have added all the features Gogs lacks.
'Git with a cup of tea' - Company-backed fork of Gogs, the parent of Forgejo
Company-backed, MIT-licensed, largest ecosystem of the Go forges
Language: Go (single binary)
License: MIT (permissive)
Governance: Company-backed (Gitea Limited / CommitGo)
RAM (idle): ~200 MB
RAM (under load): ~350 MB
Official min: 512 MB
Install: Docker / binary / package
vs Forgejo: For core Git hosting, Gitea and Forgejo are a near-tie. Same codebase lineage, same Go binary, same DB schema, nearly identical UI. The real difference is governance: Gitea is company-backed (Gitea Limited / CommitGo) with an Enterprise tier, while Forgejo is non-profit governed (Codeberg e.V.) with all features free.
Security Asymmetry: Gitea reserves advance security notices for paying Enterprise customers. Self-hosted admins on the free tier can be exposed to known vulnerabilities longer than paying customers. Forgejo publishes security advisories to everyone.
For Nagato: Gitea is a perfectly functional forge, but Forgejo is the better choice unless you specifically need the MIT license, the Enterprise tier, or have an existing Gitea investment. The governance and security disclosure differences are meaningful for a long-term hosting decision.
'The sovereign forge' - Peer-to-peer, decentralized, serverless code collaboration
P2P decentralized Git - no server needed, but no web UI forge
Language: Rust
License: Open source (GPL-3.0 + MIT/Apache-2.0 components)
Governance: Independent (radicle-dev)
Architecture: P2P (NoiseXK protocol)
Server: None (peer-to-peer)
Active releases: 10+ since Jun 2025
Radicle is architecturally fascinating but solves a different problem. It is a peer-to-peer code collaboration stack where repositories are replicated across nodes in a decentralized network. There is no server to self-host - you run a Radicle node on your machine and it syncs with other peers.
For your use case (hosting Nagato and other projects with a web UI, CI/CD, issues, and PRs), Radicle is the wrong tool. It lacks a traditional web forge UI, CI/CD, container registry, and package registry. The P2P model is interesting for censorship-resistant open source collaboration but does not fit a private project hosting scenario.
'The hacker's forge' - Email-driven, minimalist, Unix-philosophy code collaboration
Email-based workflow, no JavaScript, no PR UI - for hardcore minimalists
Language: Python, Go, Common Lisp
License: AGPL-3.0
Governance: Small company (Drew DeVault)
Architecture: Suite of composable tools
CI: builds.sr.ht (VM-based)
Status: Still in alpha
SourceHut takes a radically different approach: a suite of composable tools (git.sr.ht, builds.sr.ht, todo.sr.ht, lists.sr.ht) with an email-driven code review workflow. There are no pull requests - patches are sent via mailing lists, similar to how the Linux kernel works. It has almost no JavaScript and prioritizes speed and simplicity.
While self-hostable (the full stack is AGPL-3.0), it requires deploying multiple services and is still in alpha. The email-based workflow is a significant departure from the GitHub-style PR workflow you are used to with Nagato. No container registry, no package registry, and no GitHub Actions compatibility make it impractical for your use case.
| Feature | Forgejo | OneDev | Gitea | Gogs | Radicle | SourceHut |
|---|---|---|---|---|---|---|
| Language | Go | Java | Go | Go | Rust | Python/Go |
| License | GPL-3.0 | MIT | MIT | MIT | GPL-3.0 | AGPL-3.0 |
| Governance | Non-profit | Independent | Company | Solo maintainer | Independent | Small company |
| RAM (idle) | ~180 MB | ~600 MB | ~200 MB | ~64 MB | N/A (P2P) | Low |
| RAM (min) | 512 MB | 2 GB (4 GB practical) | 512 MB | 64 MB | N/A | Low |
| CI/CD Built-in | Forgejo Actions | Built-in daemon | Gitea Actions | None | None | builds.sr.ht |
| GH Actions Compat | ~95% (gaps) | No (own YAML) | ~90% (drop-in) | No | No | No |
| Separate Runner Needed | Yes | No (built-in) | Yes | N/A | N/A | Yes (VMs) |
| Container Registry | Yes (OCI) | Yes | Yes (OCI) | No | No | No |
| Package Registry | 20+ formats | 7 formats | 20+ formats | No | No | No |
| Pull Requests | Yes | Yes | Yes | Yes | Patches (P2P) | Email patches |
| Issues | Yes | Yes (advanced) | Yes | Yes | Protocol-level | Yes |
| Kanban / PM | No | Yes (automated) | No | No | No | No |
| Code Intelligence | No | Yes (symbol search) | No | No | No | No |
| Wiki | Yes | No | Yes | Yes | No | Yes |
| LFS Support | Yes | Yes | Yes | Limited | No | No |
| Federation | ActivityPub | No | Experimental | No | P2P (native) | No |
| AI Integration | No | AI teammates | No | No | No | No |
| Security Disclosures | Public | Not documented | Enterprise-first | Reactive | N/A | N/A |
| Migration from GitHub | Documented | Manual (API) | Documented | Manual | No | No |
| Docker Install | Yes | Yes | Yes | Yes | N/A | Complex |
| Single Binary | Yes | No (Java) | Yes | Yes | Yes | No |
| Maturity | Production (Codeberg) | Production (5+ years) | Production | v0.x (12 years) | Maturing | Alpha |
Tested RAM figures from nodatools.com benchmark (fresh VPS, 2026):
| Platform | Version Tested | Idle RAM | Active RAM (under load) | Official Minimum | Practical VPS Size |
|---|---|---|---|---|---|
| Forgejo | v15.0.3 LTS | ~180 MB | ~320 MB | 512 MB | 1 GB (no runner) / 4 GB (with runner) |
| Gitea | v1.26.4 | ~200 MB | ~350 MB | 512 MB | 1 GB (no runner) / 4 GB (with runner) |
| OneDev | v16.0.1 | ~600 MB | ~950 MB (1-2 GB with CI) | 2 GB | 4 GB minimum / 8 GB recommended |
| Gogs | v0.14.3 | ~64 MB | ~128 MB | 64 MB | 512 MB |
For hosting Nagato Game Assist and your other recurring projects (nagato-genui, nagato-ai-council, and future repos), Forgejo is the recommended platform. Here is why:
~180MB idle RAM means Forgejo runs alongside your gaem-proxy, GTC Docker stack, wrangler, and Hermes without contention. OneDev's 600MB+ would compete with your existing services.
Forgejo Actions means your existing .github/workflows files mostly transfer with minor tweaks. OneDev requires complete workflow rewrites. Gogs has no CI at all.
Host MSIX build artifacts, Docker images, and npm/PyPI packages in the same forge. OneDev has fewer formats. Gogs has none.
Codeberg e.V. governance means no company can change the license, restrict features, or sell the project. Public security disclosures keep you informed.
If you ever need Gitea Enterprise features, migration is documented both ways. OneDev is a one-way trip - no migration path to/from the Gitea family.
Codeberg.org runs 100,000+ users on Forgejo. The platform is production-proven with end-to-end and upgrade tests.
Single Docker container with PostgreSQL. Can be proxied through your existing gaem-proxy at gaem.moe/git/ using path-based routing (your preference).
ActivityPub federation means cross-instance issues/PRs are possible. Not needed today, but a unique capability no other forge offers.
OneDev is worth a second look if:
For your current setup, none of these outweigh Forgejo's advantages. Your Hermes-based agent workflow already handles orchestration, and your existing CI needs are met by Forgejo Actions.
Gitea is worth considering if:
For a solo developer / small team project like Nagato, these do not outweigh Forgejo's governance and security advantages.
If you decide to proceed with Forgejo, here is the high-level migration plan:
| Step | Action | Notes |
|---|---|---|
| 1 | Deploy Forgejo via Docker | docker pull codeberg.org/forgejo/forgejo:15.0.4 + PostgreSQL + optional runner |
| 2 | Configure reverse proxy | Add /git/ route to gaem-proxy (path-based, your preference). SSL via existing gaem.moe cert. |
| 3 | Migrate repos from GitHub | Forgejo has built-in GitHub migration tool (Settings > Migration). Imports repos, issues, PRs, labels, milestones. |
| 4 | Set up Forgejo Actions runner | Separate Docker container: code.forgejo.org/forgejo/runner:9. Register against Forgejo instance. |
| 5 | Adapt workflow files | Set container.image in jobs, check for known incompatibilities (permissions subkey, continue-on-error, OIDC). |
| 6 | Update git remotes | Change origin URLs in local clones to point at Forgejo. Keep GitHub as 'github' remote for backup. |
| 7 | Update Hermes/agent configs | Update AGENTS.md, CI references, and any scripts that reference GitHub URLs. |
| 8 | Set up backups | Dump PostgreSQL + Forgejo data volume on schedule. Git repos are plain filesystem underneath. |
| Repo | Current Host | Visibility | Notes |
|---|---|---|---|
| nagato-game-assist | github.com/Gaemghost20000 | Private | Primary repo. Has issues, PRs, AGENTS.md, worktrees. |
| nagato-genui | github.com/Gaemghost20000 | Private | Fork of philholden/partialupdate. Has issues, PRs. |
| nagato-ai-council | github.com/Gaemghost20000 | Private | Scaffolded only, idle. Low priority. |
| Future projects | N/A | Private | All new projects can start on Forgejo directly. |
| Platform | Reason for Exclusion |
|---|---|
| Codeberg | Blocks all AI interactions. User explicitly excluded. |
| GitLab CE | Heavyweight (4GB+ RAM minimum, 8GB recommended). Overkill for solo/small team. Different category - full DevOps platform, not lightweight forge. |
| Bitbucket | Not self-hostable (Atlassian cloud only). Not open source. |
| Azure DevOps Repos | Not self-hostable in the traditional sense. Microsoft cloud. Not open source. |
| GForge | Commercial (/user/month). Not fully open source. Niche. |