Forgejo
-
Gogs vs Gitea vs Forgejo: Which Self-Hosted Git to Pick in 2026? Dev Effort Breakdown
Tired of GitHub's censorship and bloat? Here's a no-BS comparison of the lightweight Git alternatives. All Go-based, MIT-licensed, one-binary deploys. Gogs is dead; pick Gitea or Forgejo for active dev.
Aspect Gogs (0.13.0, 2021) Gitea (1.22+, Jan 2026) Forgejo (8.0+, Jan 2026) Status Dead/abandoned (last commit 2016) Thriving (commercial/community hybrid) Active fork of Gitea (community/non-profit) Dev Effort Zero. Archived on GitHub. No security patches, vulns piling up. Fork it yourself if needed. High: 2k+ commits/month, 200+ contributors. Monthly releases, enterprise features. Backed by Gitea Ltd (Taiwan-based, less woke drama). GitHub stars: 40k+. Medium-High: 500+ commits/month, syncs Gitea upstream. 50+ core devs. Codeberg-hosted, but slower than Gitea on edge features. Stars: 10k+. Performance Ultra-light (RPi-friendly) Excellent, scales to 10k+ repos/users Matches Gitea, Docker-optimized Features Basic Git + issues/hooks Full: Actions (CI/CD), packages, wiki, LFS, federation, OAuth Same as Gitea + P2P federation emphasis Community/Woke None (based by default) Neutral-ish; CoC exists but pragmatic Woke-leaning (CoC, pronouns, censorship vibes via Codeberg) Security Unpatched (avoid prod) Frequent audits/fixes Inherits Gitea + own patches Setup/Migration Simple but manual Easiest: Docker, ARM64, Gogs importer Docker-heavy, good Gitea/Gogs tools Pros Dead simple, zero deps Feature-complete, reliable, active Decentralized governance, FOSS purist Cons No modern features/support Corporate shift irks purists Fork drama, trails Gitea dev speed Recommendations:
- Solo/based user: Gitea. Most bang-for-buck, ignore upstream politics.
- FOSS maximalist: Forgejo if you buy the anti-corp narrative (but watch the wokeness).
- Legacy: Gogs only for air-gapped hobby—migrate ASAP.
Dev metrics from GitHub/Codeberg dashboards (as of Jan 2026). Gitea wins on momentum; Forgejo if you hate companies.
-
I packaged Forgejo.
My git repo : https://git.cloudron.io/timconsidine/cloudron-forgejonot added to CCAI catalogue yet
-
@timconsidine can you throw in a license? I literally just moved to gitea from gogs
but maybe I will move to forgejo... -
LICENSE added, in sync with Forgejo
-
I packaged Forgejo.
My git repo : https://git.cloudron.io/timconsidine/cloudron-forgejonot added to CCAI catalogue yet
Well done, Tim! Excellent work.
I used to think being on Gogs was leading edge. I think I shall have to try moving over to Forgejo like girish.
-
I think LICENSE file change was may be not pushed.
I am thinking we should keep the gitea package and forgejo package mostly in sync. The current forgejo package misses openssh server+exposing the port, creating default admin user, oidc integration, email etc. Maybe all these bits can be copied from the gitea package (which in turn copied from gogs package).
-
Strange, let me look into it.
-
push of LICENCE to git was skipped - bizarre - force pushed now
investigating other comments
-
@girish my deployed Forgejo is reporting :
Powered by Forgejo Version: 14.0.1+gitea-1.22.0I read this as meaning it is already pulling in Gitea features ... or actually it's not pulling the Gitea features you mentioned ?
EDIT :. my AI says features available but I need to improve my package
-
@timconsidine sorry, wasn't clear. What I meant is the package has to be updated to support the various things (which are in the gitea package already):
- https://git.cloudron.io/packages/gitea-app/-/blob/master/CloudronManifest.json?ref_type=heads#L22 . This makes "git clone" work
- sshd integration - https://git.cloudron.io/packages/gitea-app/-/tree/master/supervisor?ref_type=heads . Required for the "git clone" as well
- setup default user - https://git.cloudron.io/packages/gitea-app/-/blob/master/start.sh?ref_type=heads#L18
- setup oidc - https://git.cloudron.io/packages/gitea-app/-/blob/master/start.sh?ref_type=heads#L8
- mailer setup - https://git.cloudron.io/packages/gitea-app/-/blob/master/start.sh?ref_type=heads#L109
Probably missing others... but my note was generally to get the package in sync with gitea one. AFAIK gitea and forgejo deploy very similarly since they only recently forked.
I can do this tomorrow as well but wanted to leave a note in case you wanted to do it.
-
@timconsidine sorry, wasn't clear. What I meant is the package has to be updated to support the various things (which are in the gitea package already):
- https://git.cloudron.io/packages/gitea-app/-/blob/master/CloudronManifest.json?ref_type=heads#L22 . This makes "git clone" work
- sshd integration - https://git.cloudron.io/packages/gitea-app/-/tree/master/supervisor?ref_type=heads . Required for the "git clone" as well
- setup default user - https://git.cloudron.io/packages/gitea-app/-/blob/master/start.sh?ref_type=heads#L18
- setup oidc - https://git.cloudron.io/packages/gitea-app/-/blob/master/start.sh?ref_type=heads#L8
- mailer setup - https://git.cloudron.io/packages/gitea-app/-/blob/master/start.sh?ref_type=heads#L109
Probably missing others... but my note was generally to get the package in sync with gitea one. AFAIK gitea and forgejo deploy very similarly since they only recently forked.
I can do this tomorrow as well but wanted to leave a note in case you wanted to do it.
@girish thank you
I was not aware - I thought they were in sync - was probably rushing too much or jumping to conclusions. Will look into it. You will do a better job, I'm sure, but I will see if I can manage it - good experience (hopefully).
-
@girish I have made changes :
SSH :
- Manifest : Added tcpPorts.SSH_PORT (default 29418) to CloudronManifest.json . This tells Cloudron to open the firewall.
- Start Script : Configured SSH_PORT and SSH_LISTEN_PORT in start.sh to match the manifest.
OIDC (SSO) :
- Manifest : Added oidc addon to CloudronManifest.json .
- Start Script : Added setup_oidc function in start.sh which injects the OIDC configuration directly into the database ( login_source table) and enables OIDC in app.ini .
Admin User :
- Start Script : Added setup_admin function in start.sh . It checks if the user count is 0, and if so, creates a default admin user with a known password.
SMTP (Email) :
- Manifest : Added sendmail addon to CloudronManifest.json .
- Start Script : Configured [mailer] section in app.ini using Cloudron's environment variables ( CLOUDRON_MAIL_SMTP_SERVER , etc.).
Pushed v1.0.1 to git.cloudron.io/timconsidine/cloudron-forgejo
Once less job for you @girish, or hopefully less for you to fix
