CodebahnCodebahn

Managed Git and CI for European teams. Fewer things, done properly. Transparent pricing, EU-only infrastructure, portable by design.

EU-hosted Git and CI

The private GitHub alternative

Your code is stored and served. Not scanned, not trained on, not tracked. Swedish company, EU-only infrastructure, every sub-processor EU-incorporated. Fast Git and CI for small teams.

Swedish companyEU-hostingNo AI trainingNo trackingOpen source foundation
99.998% uptime, 60 days172 repos hosted1,459 builds, 30 daysUpdated 9 September 2026

Why use Codebahn?

GitHub is overkill for most developers. Codebahn gives you the features you use daily, without the complexity or the US data path. Solo from €9/mo, teams from €9/seat/mo.

Smaller, and faster

Performance matters. Every slow page load, every laggy diff, every spinning CI status breaks your flow. I care about keeping Codebahn fast because I use it every day, and I think staying productive means not waiting on your tools. I gave Claude Code the same bug on identical repos, one here and one on GitHub, to prove it.

3.3xFaster agent workflowsCLI vs CLI, same task: 6.2s vs 20.5s platform wait
128msAvg. MCP tool callGitHub MCP avg: 2,155ms
66msAvg. read via MCPGitHub MCP reads: 2,565ms
3.2%Of session time waiting on platformGitHub via MCP: 33.4%

Codebahn runs in Paris and I tested from Sweden, so the honest claim is "faster from the EU", not "faster everywhere". The method, the scripts, the raw data, and the caveats →

Migration sounds like a project. It is not

Import if you're moving for good. Mirror if you'd rather keep GitHub as the source while you make up your mind. Both are one command in the open-source CLI, one repo or a whole org at a time. Works with GitHub, GitLab, and any Git host.

One pass, and the repo here is independent. Code and metadata come along with it.

$ codebahn repo import github.com/acme/api
$ codebahn repo import github.com/acme --include "*-api" -y
Queued: acme/api -> codebahn.net/acme/api (import)
  • Full history, issues, pull requests, labels, milestones, releases, wiki
  • A whole org with --include / --exclude globs, skip what you don't need with --no-issues, --no-prs, etc.
  • Or do it in the browser: connect your GitHub account, pick repos, click import

Migration guide →

Your CI keeps running

The same .github/workflows/ files run on EU runners without renaming. actions/checkout@v7 resolves from GitHub automatically. Most workflows need no changes at all.

Nothing to relearn

Standard Git, same SSH keys, same editor, same local config. Branch protection, webhooks, container registry, releases; all where you'd expect them.

And leaving again is just as easy

Built on Forgejo, open source underneath. One-click export of your repos, issues, and history in standard format. I publish the subprocessors and where Codebahn doesn't fit. You decide.

Hosted CI included. On every plan.

Solo is €9 a month with 200 CI minutes. Crew is €9 a seat plus €10 for the team, with 1,000 minutes per seat. All of it on tenant-isolated EU runners.

Solo

For individual developers.

€9/month
  • 200 CI min/month
  • 52 GiB storage
  • Unlimited private repos
Start with Solo
CI grows with your team

Crew Solo included

For teams.

€9/seat/month

+ €10/month for your team. One person is €19.

  • 1,000 CI min/month per seat, pooled
  • 52 GiB storage per seat
  • Solo included for every member
Start a team

Custom

Need more?

Let's talk
  • Everything in Crew
  • GPU, ARM, or larger runners
  • Dedicated support
Email me

Every plan includes a container registry, BYO runners, and CI top-ups at €9/1,000 min.

14-day money-back guarantee. Annual plans save 2 months. Full pricing and calculator.

“GitHub has turned into a behemoth. I use almost none of it. I'm annoyed that it's slow, frustrated when I can't find the feature I'm looking for, and helpless when there is an outage.”

Simon Nordberg

Simon Nordberg, founder

I've self-hosted Codebahn on Codebahn since day one. I'm obviously biased, but I think it's a joy to work in, and I think you will too. The longer version of why it exists →