Gitea
Self-hosted DevOps in a single Go binary — Git hosting, GitHub Actions-compatible CI/CD, and 30+ package registries without any SaaS dependency.
Gitea is a self-hosted DevOps platform that compresses an entire software development workflow into a single statically-linked Go binary. Git hosting, pull request reviews, issue tracking, project boards, CI/CD pipelines, and a multi-format package registry all run from one process, deployable on anything from a Raspberry Pi to a Kubernetes cluster with no JVM, Ruby runtime, or external daemon required.
The most significant capability Gitea brings to self-hosters is genuine GitHub Actions compatibility. Teams that have already written GitHub Actions workflow files can run them on Gitea’s act-based runner without modification — same YAML syntax, same matrix builds, same action marketplace references. This means migrating CI/CD to on-premise infrastructure does not require rewriting anything; it requires pointing the runner at a new host.
The built-in package registry covers over thirty formats — npm, Maven, PyPI, Cargo, Docker, Helm, Conda, and more — served from the same binary, with no separate registry service to operate. LFS and package blobs are stored wherever you configure, including S3-compatible object stores, Azure Blob, or MinIO, keeping the footprint minimal even as repositories and packages grow.
Gitea grew from Gogs and has become a foundation for major community-run code hosts like Codeberg. It supports migration from GitHub, GitLab, Bitbucket, and Gogs, handles LDAP, Active Directory, SAML, and OAuth2 for enterprise authentication, and has a documented upgrade path that has kept thousands of production instances running across a decade of releases.
What You Get
- Git repository hosting with branch protection, fork-and-PR workflows, inline code review, and merge request approvals
- GitHub Actions-compatible CI/CD via the act-based runner — reuse existing workflow YAML without modification
- Built-in package registry supporting 30+ formats: npm, Maven, PyPI, Docker, Cargo, Helm, Conda, and others
- Integrated issue tracker with milestones, labels, project kanban boards, and cross-repo reference linking
- Flexible storage: SQLite for small teams, PostgreSQL/MySQL for scale, with S3/MinIO/Azure for LFS and package blobs
- SSO and enterprise auth via LDAP, Active Directory, SAML, and all major OAuth2 providers
Common Use Cases
- Private GitHub replacement for teams with data-residency or compliance requirements that rule out SaaS hosting
- Air-gapped CI/CD: run GitHub Actions-compatible pipelines on isolated networks with no outbound internet
- Internal artifact distribution — host private npm, Docker, and Maven packages alongside source code without separate registry infrastructure
- Community open-source hosting where the operator needs full data ownership and can set their own terms of service
- University and research environments that need student code collaboration without routing data through external cloud services
Under The Hood
Architecture Gitea follows a layered monolith pattern consistent with mature Go web applications: CLI entry fans out into web and API routers, each delegating to a service layer that owns all business logic, which reads and writes through a model layer backed by an ORM abstraction. The chi HTTP router organizes middleware chains for authentication, rate limiting, and CORS with clear separation from domain logic. Background work uses a queue abstraction supporting in-memory, Redis, or an embedded disk-backed queue, meaning the same business logic runs in both single-binary and distributed deployments without coupling to a specific broker. The architecture scales predictably — adding capabilities means a new service function and router handler without touching data-access patterns — though the breadth of the codebase means a new contributor needs time to orient across three layers.
Tech Stack The backend is Go compiled to a statically-linked binary targeting Linux, macOS, Windows, and FreeBSD on x86, ARM, and RISC-V. HTTP routing uses chi v5; database access goes through xorm, supporting SQLite, MySQL, PostgreSQL, and MSSQL. The frontend is Vue 3 built by Vite with TypeScript and Tailwind CSS. Code search is pluggable: embedded Bleve requires no external services, while Meilisearch and Elasticsearch are available for larger installations. Background queues support in-memory, Redis, or an embedded LevelDB-backed implementation. Object storage for LFS and package blobs plugs into local disk, S3-compatible endpoints, Azure Blob, or MinIO. CI/CD runs via an act-based runner that speaks the GitHub Actions protocol. Playwright covers end-to-end browser testing, and the entire frontend is compiled into the binary via embedded assets at build time.
Code Quality The test suite is comprehensive: unit tests cover the service and model layers, an integration test suite with extensive coverage exercises real database interactions, and Playwright-based end-to-end tests validate user-facing workflows. Go’s type system is used consistently — errors are explicitly returned and wrapped with context rather than swallowed, and database models are strongly typed throughout. The project maintains dedicated backend and frontend coding guidelines, a structured contribution process, and a versioned database migration system that has kept thousands of production upgrades smooth across a decade of releases. Frontend code is typed with TypeScript strict mode and linted with ESLint; Go code follows standard formatting and vet rules enforced in CI.
What Makes It Unique Gitea’s most distinctive capability is GitHub Actions compatibility implemented at the protocol level rather than as an approximation: workflow YAML files run unchanged because the act-based runner speaks the same protocol GitHub’s infrastructure expects, which is rare among self-hosted alternatives. The package registry’s breadth — over thirty formats including npm, Maven, PyPI, Docker, Cargo, Helm, and Conda — served from the same binary is also noteworthy: achieving similar coverage on hosted platforms requires separate services and operational overhead that Gitea eliminates entirely. These two capabilities together make Gitea a credible drop-in for teams leaving GitHub who want to keep existing CI pipelines and artifact workflows intact without adopting a heavier GitLab-style deployment model.
Self-Hosting
Gitea is released under the MIT license — one of the most permissive open-source licenses available. You can deploy it commercially, modify the source, distribute copies, and even offer Gitea as a hosted service to your own users with no obligation to publish your changes. There are no copyleft requirements, no contributor license agreements that restrict downstream use, and no Commons Clause additions that would limit commercial self-hosting. The entire codebase, including CI/CD and the package registry, is available under the same terms — there is no gated enterprise edition in the repository.
Running Gitea yourself means owning the full stack: the binary, a database (SQLite works for small teams; PostgreSQL is the recommended choice for anything production), optional object storage for LFS objects and package blobs, and — if you want CI/CD — a separately deployed act runner process. The binary is genuinely lightweight, and a single instance routinely handles dozens of active repositories on modest hardware. That said, production deployments warrant care around database backups, storage growth as LFS and package artifacts accumulate, and rolling upgrades when new releases ship. Gitea releases roughly monthly, and while the upgrade path is smooth by open-source project standards, you are responsible for testing database migrations against your data and monitoring that nothing breaks after each update.
The main trade-off versus managed alternatives is operational discipline and ecosystem coverage. Gitea.com offers free hosted accounts with a repository cap, and Gitea Cloud provides paid managed hosting that removes the burden of backups, patching, and uptime monitoring in exchange for a monthly fee. Self-hosters gain complete data ownership, unlimited private repositories, and the ability to run on air-gapped networks — but give up automatic security patching, guaranteed SLAs, and the richer third-party integrations that come with GitHub or GitLab SaaS. The gap in the marketplace ecosystem is real: most GitHub Actions actions that assume public runner infrastructure will need adjustment. Gitea is the right call for teams that have the infrastructure maturity to operate a database and storage backend reliably and the privacy or compliance requirements that make any SaaS hosting untenable.
Related Apps
Ollama
AI Development · Developer Tools
Run Llama, Gemma, DeepSeek, and other open LLMs on your own machine with one command and an OpenAI-compatible API.
Ollama
MITDify
No Code Platforms · AI Development · Developer Tools
Visual LLM workflow platform with RAG pipelines, agent capabilities, and model management for building production AI applications.
Dify
OtherFirecrawl
AI Development · Developer Tools
Turn any website into clean, LLM-ready data with a single API call — no proxy headaches, no scraping complexity.