OneDev
Self-hosted Git server with CI/CD and kanban
OneDev is a self-hosted Git server with built-in CI/CD, issue tracking, and kanban boards in a single application. It targets small teams wanting an integrated platform without heavy resource use. It is deployed via Docker or a binary.
Key features
- Built-in CI/CD engine
- Kanban issue boards
- Code search and review
- Symbol navigation
Pros & cons
Strengths
- All-in-one in one process
- Strong code navigation
- Lighter than GitLab
Trade-offs
- Smaller community
- Java memory footprint
OneDev replaces
Last reviewed Aug 26, 2026 · 819 words
OneDev is the only self-hosted forge I know of that ships Git hosting, a CI/CD engine, code search, symbol navigation and kanban boards in a single process, under an MIT licence, with about 15,200 GitHub stars behind it. The cost is memory. It is a Java application: the catalogue floor is 1 GB, and I would not run it on less than 2 GB if builds execute on the same box. If you want Gitea's 200 MB footprint, this is not it. If you want GitLab's feature set without GitLab's multi-gigabyte idle, it is the closest thing running today.
One process replaces three containers
On Gitea or Forgejo, CI means a separate runner process, kanban means a third-party board, and code search means enabling an indexer. OneDev bundles all of it. Build jobs run through executors you define in the admin UI: a Docker executor that uses the host's Docker daemon, a Kubernetes executor, or a plain shell executor. The build definition lives in .onedev-buildspec.yml in each repository. Issue boards are native, with custom fields, states and transitions you design per project. Pull requests get side-by-side diffs, line comments and required reviewers. Operationally that means one image to update and one data directory to back up, which is the real argument for it.
Setup is a single container and two ports
services:
onedev:
image: 1dev/server
ports:
- "6610:6610"
- "6611:6611"
volumes:
- ./onedev:/opt/onedev
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
Port 6610 is the web UI and 6611 is SSH for Git. Mounting the Docker socket is what lets the built-in Docker executor run CI jobs on the host; understand that this is root-equivalent access to the machine, so treat the server as a single-tenant box rather than something you hand out to strangers. First visit to http://host:6610 creates the admin account. Then, in Administration, set the server URL to the public address before anything else, because clone URLs, email links and webhook payloads are all generated from it. The embedded database is fine for a small team; larger installs can point it at PostgreSQL or MySQL.
Symbol navigation is the feature nobody else has
Gitea's code search finds text. OneDev's finds symbols: click a function name in a diff or a file view and it jumps to the definition, with outline panels per file, for a couple of dozen languages. For code review on a team without a shared IDE setup that is a bigger deal than it sounds, because you can follow a change across files inside the browser instead of pulling the branch locally. Regex code search runs across the whole repository set. Nothing in the Gitea or GitLab community editions matches this, and it is the reason I keep OneDev on the shortlist despite the memory cost.
The build spec is generated, not hand-written
The YAML is verbose, and OneDev knows it: the UI has a visual job editor that writes .onedev-buildspec.yml for you, with steps for checkout, command execution, Docker image builds, artifact publishing and caches. Triggers cover push, pull request, tag and schedule. What it does not do is run GitHub Actions workflows. If your team already depends on the Actions marketplace, Gitea's act runner or Forgejo Actions will reuse most of that YAML, and OneDev will not. That is the single most common reason a team evaluates OneDev and stays where they are.
Where it loses
The community is small. Around 15,200 stars sounds healthy, but the ecosystem of tutorials, Helm charts, Ansible roles and third-party integrations is a fraction of Gitea's, and most of the documentation is the official manual plus the maintainer's own answers in GitHub issues. The JVM footprint is the other one: idle sits near the 1 GB floor in my experience, and a running build on the same host pushes past 2 GB. On a 4 GB VPS that is acceptable; on a Raspberry Pi shared with other services it is not. Importers exist for GitHub, GitLab, Bitbucket and Gitea, so trying it with your real repositories costs an afternoon rather than a week.
What I'd do
For a team of 2 to 10 developers on one 4 GB server who want CI, boards and review without wiring a second system, OneDev is what I would run, with the Docker socket mounted and the box treated as trusted. For a solo homelabber mirroring dotfiles and a few side projects, or anyone with a pile of existing Actions workflows, Gitea or Forgejo at a fifth of the memory is the better default, and my forge comparison covers that choice in more detail alongside the rest of the Git hosting category.
Compare OneDev
11 head-to-head comparisons.
Similar git hosting & forges apps
Gitea
Git Hosting & ForgesLightweight self-hosted Git service
Replaces GitHub, GitLab
Gogs
Git Hosting & ForgesPainless self-hosted Git service
Replaces GitHub, Bitbucket
GitLab CE
Git Hosting & ForgesComplete DevOps platform you can self-host
Replaces GitHub, Bitbucket
GitBucket
Git Hosting & ForgesGit platform powered by Scala with GitHub-like UI
Replaces GitHub
GitLab Runner
Git Hosting & ForgesRun CI/CD jobs for GitLab on your own infrastructure
Replaces GitHub Actions runner
Soft Serve
Git Hosting & ForgesSelf-hostable Git server for the command line
Replaces GitHub