GitHub → Forgejo
What it saves, what actually moves, what you rebuild — and the thing that catches people.
What it costs, and what it saves
GitHub's pricing page, as listed on 2026-10-03: Free is $0 with unlimited public and private repositories, 2,000 CI/CD minutes/month and 500 MB of Packages storage. Team is $4 per user/month with 3,000 CI/CD minutes. Enterprise starts at $21 per user/month. Both paid prices are labelled 'for the first 12 months' with an asterisk, and the page does not explain it. At that listed rate, a 10-person team on Team pays $40/month. Forgejo has no licence or per-seat fee; it has been GPLv3-or-later since v9.0. You pay for a server and for your own CI runner capacity. As an example, DigitalOcean lists a 4 GiB / 2 vCPU Basic droplet at $24/month. That is our sizing estimate for a small team's Forgejo plus PostgreSQL, with Actions runners on separate machines.
Moves cleanly
Forgejo's built-in migrator (Create… → New Migration → GitHub) clones the Git repository. With a GitHub access token it also imports the wiki, issues, pull requests with their review comments, labels, milestones, releases and topics. There is a separate 'Migrate LFS files' option. Comments keep the original GitHub author's name. They are linked to a Forgejo account only if that person has signed in to your instance through a linked GitHub login, which is how Forgejo's migration code matches users.
You rebuild
GitHub Actions workflows. Forgejo reads .github/workflows only when .forgejo/workflows is absent, and it needs your own Forgejo Runner. Runner images differ (Debian with Node.js instead of Ubuntu), some github context keys are missing, and keys such as permissions are ignored. Also rebuild by hand: repository and organisation secrets and variables, webhooks and GitHub App integrations, branch protection, deploy keys, teams and permissions, GitHub Projects, Discussions, Pages and Packages. Stars, forks and watchers stay on GitHub.
What GitHub costs you today
Free tier for individuals and small teams; Team at $4/user/month; Enterprise at $21/user/month (billed annually). Add-ons such as GitHub Advanced Security and Copilot are priced separately (verified at github.com/pricing).
What actually holds you in
Repositories use standard Git, so code and history are portable, but issues, pull requests, Actions workflows, project boards, and the integration ecosystem are GitHub-specific and require conversion when moving. Enterprise governance features and the Copilot/Advanced Security add-ons deepen the tie to GitHub's platform and pricing.
What you are moving to
Forgejo is a lightweight, self-hosted Git forge stewarded by the non-profit Codeberg e.V. It is a soft fork of Gitea and stays close to it in features, offering repositories, pull requests, code review, issue tracking, a package registry, and GitHub-Actions-compatible CI via Forgejo Actions. Its draw is governance and durability: a non-profit steward plus a copyleft license aimed at keeping the software free for users over the long term. A good fit for teams that want a modern forge with independent, community-first governance.
Free / self-host
Forgejo strengths
- Non-profit governance (Codeberg e.V.) reduces the risk of future vendor capture
- Copyleft GPL-3.0+ license (since v9.0) is designed to keep modified versions open
- Lightweight — runs comfortably on a small VPS or a Raspberry Pi
- GitHub-Actions-compatible CI via Forgejo Actions; supports OAuth, LDAP, and a package registry
What you give up
- Younger project with a smaller community and third-party ecosystem than Gitea or GitHub
- As a soft fork of Gitea, its independent identity and long-term divergence are still maturing
- You own all operations: backups, upgrades, and security patching are your responsibility
- GPL-3.0+ copyleft terms may not suit organizations that want a permissive license
The migration, step by step
- 1Install Forgejo with PostgreSQL, either the single binary or the image (docker pull codeberg.org/forgejo/forgejo:16.0.5; 16.0.5 was current on 2026-10-03). Before the first large import, raise [git.timeout] MIGRATE in app.ini above its 600-second default.
- 2If you want comments credited to the right people, add a GitHub OAuth2 authentication source and have teammates sign in with it before you migrate. Create a GitHub personal access token that can read the repositories. Fine-grained tokens on an organisation may need org approval, so wait for GitHub's approval email before using one.
- 3Migrate one small repository first: Create… → New Migration → GitHub. Paste the clone URL and token, then tick wiki, issues, pull requests, labels, milestones and releases (and LFS if you use it). Check issue numbers, PR history and release notes before moving on.
- 4Parallel run: keep GitHub as the main repository, add Forgejo as a second remote (git remote add forgejo <url>) and push to both. Meanwhile register a Forgejo Runner, move CI into .forgejo/workflows with runs-on labels that match the runner, use full URLs for uses: steps, and recreate secrets, webhooks and branch protection.
- 5Cutover: freeze the GitHub repo by archiving it. Delete the trial copy on Forgejo and run the final migration so the latest issues and PRs come across. On every clone, run git remote set-url origin <forgejo-url>, and move deploy keys and webhooks.
- 6Add a note at the top of the archived GitHub repo's README pointing to the new home. Keep the archive so old links and forks still resolve.
The gotcha
Large imports fail in ways the form doesn't warn about. First, the Git clone runs under [git.timeout] MIGRATE, which defaults to 600 seconds. Forgejo's own install guide shows raising it to 6000 so big repositories stop timing out. Second, issues and PRs come through the GitHub API. When the token runs low, the migrator waits for GitHub's rate limit to reset, so a repo with thousands of issues can take hours. The token field accepts several comma-separated tokens; Forgejo warns that overusing this may break GitHub's policy. Third, if a migration fails partway, Retry does not resume. In Forgejo issue #11835 a contributor explains that a retry starts over and conflicts with the data already written. You have to delete the half-migrated repository or migrate under a new name. Large migrations on the shared Codeberg instance also failed under load; Forgejo maintainers advised running them at night, European time.
When to stay on GitHub
Stay on GitHub if your project depends on outside contributors finding it through stars and forks, on GitHub-hosted runners, on Marketplace actions and GitHub Apps, or on Codespaces. The Free plan already gives unlimited private repositories and 2,000 CI minutes at no cost. Forgejo moves upgrades, backups, uptime and runner security onto your own team, which only pays off if you want control over where the code lives.
More Layer 5 migrations
Figures verified 2026-07-07 against vendor pricing pages. Prices change and migrations differ by estate — treat the cost delta as a starting model, not a quote. Rankings and recommendations here are merit-only; affiliate income never changes a verdict. See our methodology.