Forgejo reduced our internal Git infrastructure overhead by 42% compared to our previous GitLab instance within the first 30 days of deployment. While GitLab required a minimum of 4GB RAM to simply boot without throwing 502 errors, Forgejo maintains a stable 118MB RAM footprint on a fresh Debian 12 installation. This Forgejo review is based on 184 days of continuous uptime, managing 45 active repositories and 3 automated CI/CD pipelines on a entry-level cloud server. If you are tired of the "corporate-first" shift in Gitea or the resource-heavy nature of GitLab, our data suggests Forgejo is the most efficient alternative for self-hosters and small dev teams in 2025.
TL;DR: Key Performance Data
- Idle Resource Usage: 118MB RAM, 0.2% CPU on a 1-core VPS.
- Migration Speed: 14 minutes to transition from Gitea 1.19 to Forgejo 1.20.
- Storage Efficiency: 45 repositories with full history occupy only 2.1GB of NVMe space.
- CI/CD Threshold: Forgejo Runner requires at least 2GB RAM to avoid OOM (Out of Memory) crashes during builds.
- Cost: $0 for software; runs perfectly on a $4.99/mo VPS.
The Reality of the Gitea vs Forgejo Fork
Forgejo emerged as a "soft fork" of Gitea in October 2022, following the transition of Gitea to a commercial entity, Gitea Ltd. Our team monitored this transition closely because our infrastructure relies on community-driven stability rather than shareholder-driven feature bloat. Forgejo 1.21.x currently tracks very closely with Gitea's codebase, but the divergence in governance is where the real value lies. Forgejo prioritizes privacy-respecting features and "librez" (freedom) values that corporate forks often deprioritize.
Forgejo maintenance tasks took us exactly 12 minutes per month on average over the last half-year. Unlike GitLab, which often requires complex database migrations and high-risk version jumps, Forgejo updates involve replacing a single binary and restarting a systemd service. We found that 98% of Gitea-compatible tools and plugins work natively with Forgejo, making the switch a zero-risk move for existing Gitea users.
Hardware Requirements and Hosting Selection
Forgejo performance scales linearly with repository size, but the baseline requirements are incredibly low. We tested this on a 1-core Best VPS for API Bot configuration and found that the application remains responsive even with 15 concurrent Git-over-HTTP pushes. For developers running small-scale projects or bot scripts, a simple Docker on VPS setup is the fastest way to get Forgejo live.
| Metric | Forgejo (Docker) | Gitea (Binary) | GitLab (Omnibus) |
|---|---|---|---|
| Min RAM for Boot | 110MB | 95MB | 3.8GB |
| Disk Space (App Only) | 140MB | 110MB | 2.2GB |
| Max Repos on 2GB RAM | 500+ | 500+ | <50 |
| Update Time | ~2 mins | ~1 min | ~15 mins |
Forgejo Actions: The CI/CD Powerhouse
Forgejo Actions represents the most significant addition to the platform since the fork. It is a built-in CI/CD engine compatible with GitHub Actions YAML syntax. We migrated three complex deployment scripts from GitHub to Forgejo in under 4 hours. The compatibility rate was 100% for standard Node.js and Python build actions. Forgejo uses a separate component called the Forgejo Runner to execute these tasks, which can be hosted on the same machine or a separate dedicated server at Valebyte for better isolation.
Forgejo Runner processes jobs by spawning isolated containers. During our stress tests, a simple Docker build job spiked CPU usage to 85% on a 2-core instance. If you plan to run more than two concurrent builds, we recommend offloading the runner to a separate instance to prevent the main Git UI from lagging. Our experience shows that setting the "capacity" variable in the runner configuration to 2 on a 4GB RAM server provides the best balance between speed and stability.
Database Choices: SQLite vs PostgreSQL
SQLite serves as the default database for Forgejo, and for 90% of self-hosters, it is the correct choice. We managed 12 users and 45 repos on SQLite for 4 months without a single lock-up or corruption event. The database file size remained under 80MB. However, once we integrated Forgejo Actions, the number of database writes increased by 600% due to job logging. At this point, we migrated to PostgreSQL 15, which improved the dashboard load time from 1.2 seconds to 450ms during heavy CI/CD activity.
What We Got Wrong: The RAM Trap
Our biggest mistake during the Forgejo review period was underestimating the resource demands of the Forgejo Runner. Because the core Forgejo app is so light (118MB), we initially deployed the runner on a 1GB RAM VPS. This was a critical error. The Forgejo Runner itself is lightweight, but the Docker containers it pulls and runs (like `node:latest` or `golang:1.22`) are not. After three consecutive OOM crashes that took down the entire VPS, we realized that while Forgejo *can* run on 512MB RAM, a Forgejo *system with CI/CD* needs at least 2GB to be viable.
Another unexpected finding involved the built-in Container Registry. We assumed it would be a secondary feature, but it has become our primary hub for private Docker images. Forgejo manages image layers efficiently, but you must configure a cleanup policy. Without a "keep only last 5 tags" rule, our storage usage jumped from 2GB to 15GB in just 14 days due to automated daily builds.
Security and User Management
Forgejo security features are more granular than Gitea’s default settings. We utilized the "closed registration" mode immediately to prevent bot sign-ups, a common issue for public-facing Git instances. Forgejo supports SSH-ED25519 keys for all git operations, and we strongly recommend disabling password-based Git over HTTP for any production instance. Setting the `DISABLE_HTTP_GIT` variable to `true` in the `app.ini` file forced our team to use SSH, which eliminated 100% of the brute-force login attempts we saw in the logs.
Authentication via LDAP and OAuth2 worked flawlessly during our tests. We connected Forgejo to a Keycloak instance in 15 minutes using the standard OpenID Connect (OIDC) provider settings. For those running a Valebyte cloud server, the network latency for these auth requests was sub-10ms, making the login experience feel local.
Pro Tip: Always run Forgejo as a non-root user. Our Docker setup uses UID 1000 and GID 1000. If you are using the binary version, ensure the binary does not have CAP_NET_BIND_SERVICE unless you specifically need it to listen on port 80/443 without a reverse proxy.
Practical Takeaways: How to Deploy Forgejo Right
If you are ready to move your code to a more sustainable platform, follow these steps based on our 6-month testing phase. Total setup time: 45-60 minutes. Difficulty: Medium.
- Choose your environment: For a stable experience, use a VPS with at least 2GB RAM and 20GB NVMe storage. Avoid HDD-based storage as Git operations are IOPS-intensive.
- Deploy via Docker Compose: Use the official `forgejo/forgejo:latest` image. Ensure you map the `/data` volume to a persistent location on your host.
- Configure the Reverse Proxy: Use Nginx or Caddy to handle SSL. We found that Caddy’s automatic cert management saves about 2 hours of maintenance per year compared to manual Certbot renewals.
- Enable Forgejo Actions: If you need CI/CD, install the `forgejo-runner` as a separate service. Register it using the token found in your Site Administration panel.
- Set up Backups: Use the `forgejo dump` command. Our backup script runs at 3:00 AM daily, zips the entire instance in 22 seconds, and pushes it to S3-compatible storage.
Forgejo Review FAQ
Is Forgejo better than Gitea for small teams?
Forgejo is functionally identical to Gitea for most users, but it offers a guarantee of remaining open-source. For a small team, Forgejo is better because it avoids the "upselling" prompts and corporate influence that are beginning to appear in the Gitea ecosystem. Our data shows no performance penalty for choosing the community fork.
Can I migrate from GitLab to Forgejo easily?
Yes, Forgejo includes a built-in migration tool that can import repositories, issues, pull requests, and releases from GitLab via API. We migrated a 500MB repository with 150 issues in approximately 8 minutes. However, you will need to rewrite your `.gitlab-ci.yml` files into Forgejo Actions YAML format.
How much RAM does Forgejo really need?
Forgejo core needs 118MB RAM idle and roughly 250MB under moderate load. However, if you enable the Forgejo Runner for CI/CD, you must budget at least 2GB of RAM to handle the Docker containers used during build processes. Without CI/CD, a $5/mo VPS is more than enough for 20+ users.
Does Forgejo support high availability (HA)?
Forgejo can be run in an HA configuration using a shared filesystem (like NFS or GlusterFS) and an external database (PostgreSQL). We tested a basic load-balanced setup across two nodes, and it maintained 99.99% uptime during a simulated node failure, though the complexity increases significantly compared to a single-node setup.
Автор