mrkeyoor.com_
Wed 16 Sept 05:28 UTC
Dev Toolsevaluationupdated 27 Aug 2026

gitea review

Gitea is a self-hosted software development service for Git repositories, code review, issues, projects, packages, wikis, and CI jobs compatible with GitHub Actions. It gives a team one place to run its development work without handing repository control to a hosted forge.

+77stars / 7d
Verdict

Our Gitea checkout pulled 913 packages and occupied 579 MB, yet exposed no build or test target to the harness, so source contributors should budget for the project's separate Go and frontend workflow. Use Gitea when you want a capable private forge without GitLab's wider operating footprint and you have an administrator for storage, upgrades, mail, and runners. For a team that only needs hosted repositories, owning this much infrastructure is hard to justify.

We ran it

Lab card: what happened when we ran giteaScreenshot of gitea (gitea.com)
Install✓ · 96s913 packages · 579 MB
Buildn/ano build script
Testsn/ano test script
Repo6237 files~538,535 lines of source · 33.8 MB · 17 CI workflows · Dockerfile · tests dir

Answers from our run

Does gitea build from source?

Dependencies installed in 96 seconds (913 packages), and the project has no separate build step. We cloned commit d8f0e7e into a clean Debian container with 3 CPUs and no project-specific setup.

Does gitea have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Who should not use gitea?

Teams expecting source setup to be one JavaScript command: our pnpm install found no build or test target, while the README sends contributors to separate Go and frontend build guides.

What are the alternatives to gitea?

Forgejo, GitLab Community Edition, OneDev. Our Gitea checkout pulled 913 packages and occupied 579 MB, yet exposed no build or test target to the harness, so source contributors should budget for the project's separate Go and frontend workflow.

Setup3/5Container trial is simple; source setup spans Go and pnpm
Docs4/5Dedicated admin, install, development, and migration guides
Community5/557,625 stars and same-day issue and pull request activity
Maturity5/5v1.27.2 ships security and compatibility maintenance

Discussed on

  1. hnGiteabot account was compromised134 points
  2. hnGitea blocks PR from community, charging $$ for open-source contributions68 points
  3. hnGitea v1.7.025 points
  4. hn5000€ bounty to implement forgefed federation for Gitea6 points
  5. hnSelf-Hosted Git Service4 points

Who it’s for

Small and midsize teams that want a private Git forge with issues, pull requests, packages, and CI in one service.
Administrators who need a forge on Linux, macOS, BSD, Windows, ARM, RISC-V, or PowerPC.
Organizations moving from GitHub that value familiar workflows and an official migration path.
Home labs and internal engineering groups willing to own backups, upgrades, runners, and email delivery.

Who it’s NOT for

Teams expecting source setup to be one JavaScript command: our pnpm install found no build or test target, while the README sends contributors to separate Go and frontend build guides.
Organizations that do not want to operate a database, storage, SSH, mail, backups, and CI runners for a business-critical forge.
Buyers who require every GitHub Actions workflow to behave identically: the README says Gitea Actions can reuse GitHub Actions, while the v1.27.2 notes still contain several Actions compatibility fixes.
Administrators who cannot keep up with security releases: v1.27.2 includes fixes for WebAuthn verification, reusable workflow resolution, and collaborator access behavior.

Setup reality

Our sandbox installed 913 pnpm packages in 96 seconds and used 579 MB on disk. The 33.8 MB checkout held 6,237 files and about 538,535 source lines. The harness found no build or test script, so it skipped both and did not start Gitea.

A real instance needs a database choice, persistent repository and package storage, SSH and HTTP routing, an app.ini, and usually SMTP. CI needs a separately operated Gitea Actions runner. Backups and upgrades remain the administrator's job.

The repository is primarily Go even though our detected install path was pnpm. Source builds follow separate backend and frontend instructions, while the official container is the simpler trial route. Platform breadth is good, but configuration differs across package, binary, container, and source installs.

Gitea puts the daily forge tools in one service

Gitea hosts Git repositories and surrounds them with the work most development teams expect: pull requests, issue tracking, project boards, wikis, package registries, organizations, and CI/CD. Its Actions system reuses the GitHub Actions format, which lowers the learning cost for teams moving familiar workflows. The service is written primarily in Go and supports the operating systems and processor families covered by Go, including Linux, macOS, BSD, Windows, ARM, RISC-V, and PowerPC.

That breadth is the main reason to pick it. A small company can replace separate Git hosting, issue tracking, a package registry, and a basic CI control plane with one application. The repository had 57,625 GitHub stars when fetched, and GitHub recorded its latest push on August 27, 2026. This is not a weekend forge experiment. It is a large project with an active maintenance queue and enough surface area that an administrator needs to understand what is enabled.

The official container is the shortest trial path

The README points new operators toward the official Docker image, Gitea Cloud, downloadable releases, or platform packages. A container is the least ambiguous evaluation route because it avoids compiling the Go backend and frontend assets. You still need persistent volumes, a database decision, an external URL, and SSH port planning. A useful trial should also cover outbound mail, repository import, authentication, backup restoration, and a runner job rather than stopping at the login screen.

Source work is more involved than the short README makes visible. It sends builders to dedicated setup, development, and source-build documents. Our checkout contained 6,237 files and roughly 538,535 source lines, so the separation makes sense. The codebase includes backend Go, frontend packages, templates, translations, migrations, and integration machinery. Contributors should follow the documented toolchain instead of treating the root package manager result as a complete build.

What happened when we ran it

Our sandbox cloned commit d8f0e7e in an unprivileged Debian container with 3 CPUs and 8 GB of RAM. The 33.8 MB checkout installed 913 pnpm packages in 96 seconds, leaving 579 MB on disk. Installation succeeded without secrets. Those figures cover the detected Node workspace only; they do not show that a Gitea server binary was compiled or launched.

The harness found no build script or target and skipped that step. It also found no test script or target, so it skipped tests. The repository does contain a tests directory, 17 CI workflow files, a Dockerfile, and monorepo workspaces. The honest result is therefore narrower than a passing application check: dependency installation worked, while build and test validation require commands outside the generic target detection used in our run.

This matters for buyers reading a green setup card. A 96-second pnpm install proves that the frontend dependency graph resolved at commit d8f0e7e. It says nothing about database migrations, the Go binary, Git over SSH, large-file storage, package uploads, mail, or an Actions runner. Use the official deployment route for product evaluation, and use Gitea's contributor guides when the goal is changing the code.

Actions compatibility still needs workflow-by-workflow testing

Gitea says its CI/CD can reuse GitHub Actions, but reuse should not be read as perfect behavioral identity. The v1.27.2 release included fixes for pull_request_target reusable workflows, string handling in workflow_dispatch, rerun artifact access, and cancellation when no job is running. Those are practical edge cases in established pipelines. Run representative workflows before migration, especially jobs that use event payloads, reusable workflows, artifacts, permissions, or marketplace actions.

The runner is a separate official project, which keeps execution away from the forge process but creates another service to patch and monitor. Secrets, untrusted pull requests, network access, caches, and container privileges need explicit policy. A team migrating 20 repositories should test one ordinary build and one hostile-fork scenario before connecting every runner to internal networks. Gitea provides the coordination layer; it cannot choose a safe runner boundary for you.

Owning the forge means owning its state

A production installation holds source code, credentials, issue history, package artifacts, release files, and CI metadata. Database backups alone are insufficient if repository and package storage live elsewhere. Administrators need a restore procedure that covers each store, the configuration file, encryption material, and the exact application version. The README links a configuration reference and tells users to manage static settings through app.ini, while dynamic settings can appear in the admin panel.

Security maintenance is active and cannot be postponed casually. Release v1.27.2 was published on August 13, 2026 and lists security work involving collaborator access, HTTP signatures, WebAuthn verification, markup rendering, and Actions workflow resolution. GitHub showed 2,530 open issues and pull requests combined when fetched, not 2,530 confirmed bugs. The same-day push and busy queue show active work, but operators still need prompt release review and staged upgrades.

Gitea fits teams that want control and can staff it

Gitea is a sensible middle ground between a bare Git server and a larger DevSecOps suite. Its MIT license, broad platform support, familiar collaboration model, packages, and Actions compatibility make it easy to shortlist. The 579 MB dependency footprint from our partial source run is acceptable for contributors, but it also warns against judging the whole system by a tiny Go binary narrative.

Choose it when repository control and self-hosting are requirements, then assign clear ownership for backups, mail, storage, runners, security releases, and recovery drills. Choose Forgejo when its governance is the deciding factor, GitLab when the wider integrated suite earns its higher operating cost, or a hosted forge when infrastructure ownership has no business value. Gitea removes subscription dependence; it does not remove forge administration.

Alternatives

ProjectWhat it isPick it when
ForgejoA community-governed Git forge derived from Gitea.pick this instead when community governance and the Forgejo ecosystem matter more than Gitea Cloud and Gitea's project direction.
GitLab Community Edition gh↗A much larger forge with deeply integrated planning, security, and delivery features.pick this instead when you need GitLab's wider DevSecOps suite and have the resources to operate it.
OneDevA self-hosted Git server with built-in CI, packages, and project work.pick this instead when its integrated CI design and interface fit your team better than Gitea's separate runner model.

What people are saying

  1. [hackernews] Maiao: Gerrit-style code review workflow for GitHub, GitLab, Gitea, others
  2. [github-trending] go-gitea/gitea

Sources

  1. Gitea README
  2. Gitea v1.27.2 release
  3. Gitea documentation
  4. Gitea repository activity

More dev tools reviews

noty · forward-implementation-first · breakscale · black · ASC · BrewUI · the whole board →