GitLab alternatives: where to move your code, and how to switch without breaking anything

Seven destinations, one for each reason to leave, plus an eight-step migration plan.

The short answer: GitHub if you want the lowest per-seat price among the big platforms and the most complete importer, Bitbucket if your team lives in Jira, Azure DevOps if you ship .NET to Azure, Forgejo if your self-hosted GitLab box is eating RAM, Gitea for the same lightweight setup with a company behind it, OneDev for built-in CI on a tiny server, and Stackhero if you like GitLab but hate paying per seat. One thing to know before you pick: your code moves with a single command, but your .gitlab-ci.yml pipeline almost always gets rewritten. We compared all seven, checked their 2026 pricing, and read what each one can actually import from GitLab.

Romain CochardCEO of Hack'celeration
Updated 20267platforms compared8migration steps2026prices checked

The ranking is editorial: a sponsored spot is always labeled on its card, and no affiliate link changes a score.

The real reasons

Why teams are moving off GitLab

Feature for feature, GitLab is still the most complete DevSecOps platform out there: repos, code review, CI/CD, container registry, security scanning and planning in one product. Nobody leaves because something's missing. Teams leave because the bill scales with headcount, because self-hosting it takes a beefy server, and because a small team often uses a fraction of what it pays for. Here are six reasons, all checked for 2026.

The free tier stops at five people

On GitLab.com, a private top-level group on Free allows five users, counted across every subgroup and project. Add a sixth and the whole namespace goes read-only: nobody can push code, packages or images until you upgrade or remove someone. Free accounts created in 2026 are also capped at three top-level groups. Public groups, the Open Source, Education and Startups programs, and self-managed installs are exempt.

$29 a seat, with nothing in between

GitLab killed its $4 Starter tier in 2021, then raised Premium from $19 to $29 per user per month in 2023. You pay it annually. For ten people that's $3,480 a year; GitHub Team costs $480 for the same team. Ultimate is quote-only. On review sites, small-team buyers keep landing on the same complaint: the paid tiers feel steep for an early-stage startup.

400 CI minutes a month on Free

Free gives you 400 compute minutes a month on GitLab-hosted runners. GitHub Free gives you 2,000, Azure DevOps 1,800. Extra GitLab minutes cost $10 per 1,000. Self-hosted runners don't burn minutes on any plan, which is the standard workaround, but now you're maintaining build machines.

Self-hosting needs a big box

Self-managed GitLab is free, but it isn't light. The official docs set 8 vCPU and 16 GB of RAM as the single-node baseline, with 8 GB as the floor for memory-constrained setups. One self-hoster reports a GitLab instance sitting at 5 GB of RAM next to a Forgejo instance using 200 MB. An FFmpeg maintainer put GitLab at roughly double the hosting cost of Forgejo for their project.

A dense UI that can feel slow

Complexity is the con reviewers mention most, especially for small teams without senior engineers. Clear Street's engineering team, which moved to GitHub, cited slow git push and pull and slow CI job starts. Not everyone agrees (some developers prefer GitLab's UI), but if your team only needs code hosting and review, you're navigating a lot of menu you never use.

AI is now billed in credits

Since 2026, GitLab Duo's AI agents run on GitLab Credits at $1 each. Premium bundles $12 per user per month of credits, Ultimate $24, and usage above that is billed on top. Free groups can buy credits too. If your developers already use another coding assistant, part of your Premium bill pays for one they don't open. Our ranking of AI coding assistants helps you pick the one your team will actually use.

The 7 alternatives

GitLab alternatives, one by one

For each platform: why move there, who it's for, where it falls short, how to migrate from GitLab, and what it costs. Prices are 2026 list prices in US dollars from each vendor's pricing page. The order follows what most US teams want when they leave GitLab: pay less per seat without losing features first, then fit the stack you already run, then cut hosting weight.

01

GitHub: the cheapest seat among the big platforms, and the fullest importer

Default pick

Why move to GitHub. It's where developers, integrations and most open source already live, and it's far cheaper per seat. Team is $4 per user per month with 3,000 Actions minutes. Free includes unlimited private repos and 2,000 minutes. Enterprise, at $21, now includes Copilot. And since mid-2026, GitHub's official GitLab migration path is generally available: GitHub Enterprise Importer moves Git history, issues, merge requests (as pull requests, with comments, reviewers and approvals), milestones, releases and wikis.

Who it's for. Product teams and startups that want lower seat costs, faster hiring (most candidates already know it) and the biggest integration marketplace.

Who should skip it. Teams that actually lean on GitLab's built-in security scanning, merge trains and portfolio planning. On GitHub, much of that means Enterprise or third-party tools.

The catch. The full importer only targets GitHub Enterprise Cloud, the $21 plan. On Free or Team you can move code and history with git push --mirror, but issues and MRs stay behind. Even with the importer, Git LFS objects, pipelines, CI/CD variables, webhooks, merge trains and required approvals don't carry over, and a single repo is capped at 40 GiB during migration.

How to migrate. Install the gh gl2gh extension for full-fidelity moves, or mirror for code only. For CI, GitHub Actions Importer turns a .gitlab-ci.yml into a draft workflow: jobs, stages, variables and schedules convert cleanly, while rules, include, services and masked variable values need hand work. Start with its dry-run command. And if you want to know what you might miss someday, our guide to GitHub alternatives covers the trip in the other direction.

Free
unlimited private repos, 2,000 min
Paid
Team $4, Enterprise $21 per user
Full import
Enterprise Cloud only
Catch
CI rewrite, LFS pushed separately
See GitHub pricing →
02

Bitbucket: the cheapest paid seat, built around Jira

Jira teams

Why move to Bitbucket. Atlassian owns Bitbucket, Jira and Confluence, so branches, commits and pull requests link to Jira issues with no setup, and Bitbucket Pipelines handles CI. It's also the lowest paid seat on this page: Standard is $3.65 per user per month, Premium $8.

Who it's for. Teams that already run sprints in Jira and want one vendor for tickets, docs and code.

Who should skip it. Anyone using GitLab issues as their planning tool: they don't come along with the code. If Jira itself is on your list of pain points, read our Jira alternatives guide before you lock in.

The catch. Free caps out at 5 users and 50 build minutes a month. Another 1,000 minutes costs $10 a month. Bitbucket's importer pulls a repo by its Git URL: code and history, not issues or merge requests.

How to migrate. Import each repo from its GitLab URL with an access token, then translate .gitlab-ci.yml into bitbucket-pipelines.yml. The stage-based logic maps over; the syntax doesn't. Recreate open issues in Jira.

Free
5 users, 50 build minutes
Paid
Standard $3.65, Premium $8
Best for
Jira shops
Catch
imports code only
See Bitbucket pricing →
03

Azure DevOps: Microsoft's all-in-one suite

Microsoft stack

Why move to Azure DevOps. It's the closest thing Microsoft sells to GitLab's all-in-one pitch: Azure Repos, Azure Pipelines, Boards, Artifacts and Test Plans under one roof. The first five users are free, then it's $6 per user per month. CI includes one Microsoft-hosted job with 1,800 minutes a month, plus one self-hosted job with unlimited minutes.

Who it's for. .NET teams deploying to Azure and already signing in with company Microsoft accounts.

Who should skip it. Small teams outside the Microsoft world. The UI is sprawling, and if you're leaving GitLab for something simpler, GitHub (same parent company) is the simpler option.

The catch. Parallel CI jobs cost extra: $40 a month per Microsoft-hosted job, $15 per self-hosted job. Repo import brings code and history but not Git LFS objects, issues or merge requests. It's also a one-time import, not an ongoing sync.

How to migrate. In Repos, choose Import repository and paste the GitLab clone URL with a token. If you use LFS, push those files afterward with git lfs push --all. Rewrite CI in Azure Pipelines YAML and rebuild open issues in Boards.

Free
5 users, 1,800 CI minutes
Paid
$6 per user per month
Best for
.NET teams on Azure
Catch
parallel jobs billed extra
See Azure DevOps pricing →
04

Forgejo (and Codeberg): open source and light enough for a small VM

Lightweight

Why move to Forgejo. Forgejo is an open-source forge stewarded by Codeberg e.V., a German nonprofit. It's a single Go binary that covers repos, code review, issues, a package registry and Forgejo Actions, a CI system modeled on GitHub Actions. The real selling point against GitLab is footprint. One admin runs Forgejo in 200 MB of RAM where GitLab took 5 GB. Another moved more than 200 repos and went from over 5 GiB to under 700 MiB. Codeberg, the public instance run by the same nonprofit, is free for open-source projects.

Who it's for. Teams already self-hosting GitLab who want a much smaller server, and open-source projects that want off commercial platforms.

Who should skip it. Teams that need built-in security scanning, advanced planning or a vendor support contract. And on Codeberg, any private commercial project: Codeberg doesn't host private projects and won't take money for exceptions.

The catch. You're the ops team now: upgrades, backups and security are on you. Your .gitlab-ci.yml gets rewritten for Forgejo Actions, and GitLab issue templates have to be converted to YAML forms.

How to migrate. Create a GitLab access token, choose New Migration, then GitLab. Forgejo brings over the repo, issues, merge requests (as pull requests), labels, milestones and releases. On a big instance, pilot one project first: an admin who scripted his migration found issues arriving without their comments and ended up archiving old issues as static HTML.

Free
open source, self-hosted
Paid
no license fees
RAM
a few hundred MB
Catch
you run ops and backups
Explore Forgejo →
05

Gitea: the same lightweight forge, with a company behind it

Self-hosted

Why move to Gitea. Gitea is the original project Forgejo forked from. Same small footprint, same model: one binary, one database, a GitHub-like UI, and Gitea Actions for CI with workflow files that look like GitHub Actions. The difference is governance. Gitea is backed by a company that sells an Enterprise edition and a hosted service, Gitea Cloud, which matters if procurement wants a support contract.

Who it's for. Engineering teams replacing self-hosted GitLab with something simpler, who may want to buy support later.

Who should skip it. Teams that want community governance; that's Forgejo's pitch.

The catch. Enterprise is an annual subscription, and Gitea Cloud has no public price, so expect a sales call. Like Forgejo, it's nowhere near GitLab on security scanning or planning.

How to migrate. Gitea's migration wizard reads GitLab directly: repo, issues, pull requests, labels, milestones and releases. Run it project by project with a read-only GitLab token, then rewrite CI.

Free
self-hosted, unlimited users
Paid
Enterprise, annual subscription
Best for
light internal forge with support
Catch
no public cloud pricing
See Gitea plans →
06

OneDev: forge plus CI in one, on a tiny server

Built-in CI

Why move to OneDev. OneDev is the self-hosted forge closest to GitLab's all-in-one idea, without the weight. Code, review, issues, package registry, wiki and CI/CD live in one product, and pipelines can be built in a GUI or in a file, with jobs running in containers. The vendor says every feature runs on a 1-core, 2 GB box for medium-sized projects, a long way from GitLab's 16 GB baseline.

Who it's for. Small engineering teams that want CI and issues in the same tool on a modest server.

Who should skip it. Teams that hire a lot: far fewer developers have used OneDev than GitHub or GitLab, and the community is small.

The catch. Enterprise Edition (high availability, audit log, time tracking) costs $6 per user per month, with a 12 user-month minimum per order. Its GitLab importer brings over the repo, issues with comments and milestones, but not merge requests, so finish open reviews on GitLab before cutover.

How to migrate. Run OneDev's GitLab importer with a GitLab access token (or git push --mirror the repo alone), then rebuild CI in OneDev's editor.

Free
full Community Edition
Paid
Enterprise $6 per user
Server
1 core, 2 GB RAM
Catch
small community
See OneDev plans →
07

Stackhero: keep GitLab, drop the per-seat bill

Managed GitLab

Why move to Stackhero. If your problem is the seat count or babysitting a server, you don't have to change tools. Stackhero runs and updates a GitLab instance for you and bills per instance, not per user. The Hobby plan (4 vCPU, 6 GB RAM) is $49 a month with unlimited users and repos. You choose a US or European region, and billing is hourly with no commitment.

Who it's for. Teams of roughly 5 to 30 people who like GitLab CI and issues and don't want to pay $29 a head or run their own box.

Who should skip it. Solo developers and pairs: GitLab.com Free already covers them. And if GitLab itself is what bugs you, this isn't your card.

The catch. Price climbs with power: $99 and $199 on Startup, $399 and $799 on Enterprise. For two people, $49 a month is more than GitHub Team.

How to migrate. This is the easiest move on the page because it's GitLab to GitLab. GitLab's project export (Free tier included) carries the repo, wiki, issues with comments, merge requests with reviewers and approvers, labels, milestones and LFS objects. Your pipelines keep working; you recreate runners, CI/CD variables and webhooks, which aren't in the export.

Free
no
Paid
Hobby $49/month per instance
Users
unlimited
Catch
pricey for 1 or 2 people
See Stackhero pricing →
The comparison

GitLab and 7 alternatives side by side

Our default picks: GitHub for product teams that want lower seat costs, Forgejo for teams that self-host and want a smaller server. To make the math concrete, take a ten-developer team that's outgrown the free tier. GitLab Premium: $290 a month, billed annually. GitHub Team: $40. Bitbucket Standard: $36.50. Azure DevOps: $30 (five free, five at $6). Stackhero: $49 per instance, whatever the headcount. Forgejo, Gitea or OneDev Community: just your server bill. Each row shows the free tier on the left and the first paid plan plus what migrates from GitLab on the right.

Free tierFirst paid plan and what migrates
GitLabWhere you're starting5 users per private group, 400 min, 10 GiBPremium $29/user billed annually, Ultimate quote-only
GitHubDefault pickUnlimited repos, 2,000 minTeam $4; history, issues and MRs with Enterprise Cloud ($21)
BitbucketJira teams5 users, 50 minStandard $3.65; code and history
Azure DevOpsMicrosoft stack5 users, 1,800 min$6/user; code, LFS pushed separately
ForgejoLightweightSelf-hosted, unlimited; Codeberg for open sourceNo license; repo, issues, MRs, labels, milestones
GiteaSelf-hostedSelf-hosted, unlimitedEnterprise annual; repo, issues, MRs, labels, milestones
OneDevBuilt-in CIFull Community EditionEnterprise $6/user; repo, issues, milestones (no MRs)
StackheroManaged GitLabNo free tier$49/month per instance; GitLab export imports as is

List prices in US dollars, before tax, subject to change. Always run the numbers on your real headcount and CI minutes.

Migration plan

Leave GitLab in eight steps

Moving the code takes one command. Everything around it takes the time: CI, secrets, issues, integrations. This order protects your history and keeps deploys from breaking on a Monday morning.

01

Inventory everything that lives in GitLab

Day 1

For each project, list the repo and its size, LFS files, .gitlab-ci.yml and its include files, CI/CD variables (masked or protected), pipeline schedules, runners, webhooks, container registry images, GitLab Pages sites and approval rules.

A spreadsheet with one row per item and its equivalent at the destination is enough. CI/CD variables, webhooks and registry images aren't in GitLab's project export, so anything you don't write down gets lost.

Time
about an hour per ten projects
Risk if rushed
a deploy that silently stops
02

Check what your destination can import

Destinations don't import the same things. GitHub takes issues, MRs, milestones and releases, but only on Enterprise Cloud. Forgejo and Gitea take repo, issues, MRs, labels and milestones. OneDev takes repo, issues and milestones, not MRs. Bitbucket and Azure DevOps take code and history, not issues.

If your issue history is your project memory, this step decides the destination as much as price does.

Full import
GitHub Enterprise Cloud, Forgejo, Gitea
Code only
Bitbucket, Azure DevOps
03

Migrate one pilot project and time it

Critical

Pick a representative project with real CI and some open issues. Move it end to end, pipelines included, and track the hours. Multiply by your project count and you have a real estimate.

Check references too: #42 in a commit message should still point at the right issue. One admin who moved to Forgejo started new issue numbers at 500 to avoid collisions with old references.

Time
one to two days
Output
real cost per project
04

Move Git LFS objects separately

Large files stored in Git LFS don't come through GitHub Enterprise Importer or Azure DevOps import; only the pointer files do. After import, run git lfs fetch --all against GitLab, then git lfs push --all to the new remote.

Watch quotas while you're at it: 1 GB of LFS on Bitbucket Free, 40 GiB per repo for GitHub's importer.

Command
git lfs push --all
Bitbucket Free
1 GB of LFS
05

Rewrite CI, pipeline by pipeline

The big one

No destination runs .gitlab-ci.yml as is. For GitHub, Actions Importer gives you a draft: script becomes run, image becomes container, tags become runs-on. rules, include and services need hand work. Everywhere else, it's a manual rewrite.

Run both CI systems in parallel for a few weeks so production never depends on a pipeline nobody has validated. Clear Street opened a GitHub PR for every GitLab MR and fed the GitHub result back as an MR comment until the new CI was trusted.

Tool
gh actions-importer dry-run
Watch out
rules and include
06

Recreate secrets without copying them around

Security

Masked variable values don't leave GitLab, not in the export and not through the converters. Recreate them one by one at the destination: GitHub secrets, Bitbucket variables, Azure variable groups.

Use the move to rotate the sensitive ones: deploy tokens, API keys, cloud credentials. A secret pasted into a temp file is a secret that leaks someday.

Doesn't migrate
masked values
Best practice
rotate keys
07

Run a push mirror during the transition

GitLab can push every project to another remote, even on Free. Push mirrors update within five minutes of each push, with up to ten per project. GitLab stays the source of truth and the destination receives everything.

Never commit directly to the mirror: by default, GitLab overwrites diverged refs.

Available
Free tier and up
Lag
5 minutes max
08

Cut over, then archive GitLab instead of deleting it

D-day

On cutover day, block pushes on GitLab with protected branches, stop the mirror, open writes at the destination, and have everyone run git remote set-url origin. Update webhooks and integrations.

Keep the GitLab projects archived and read-only for several weeks. Download a project export for each one and store it outside GitLab: it's your last copy of issue history if the destination didn't take it.

Command
git remote set-url origin
Keep
one export per project

Is your tool missing from this page? Email us: hello@hackceleration.com

Migration pitfalls

What makes a GitLab migration go wrong

The same mistakes show up in migration write-ups, on forums and on engineering blogs. None of them are hard. They're things people forget, and each one costs more than the time it would have taken to avoid it.

Assuming Team gets the full importer

GitHub's GitLab importer only lands in Enterprise Cloud at $21 per user. On Team at $4, you get code. Run the numbers: a few months of Enterprise during the move can cost less than weeks of copying issues by hand.

Underestimating the CI rewrite

Clear Street's full move to GitHub took about two and a half quarters, a whole quarter of it for their main monorepo, with both CI systems running side by side to validate each change. If your pipelines use include, services and conditional rules, budget weeks, not days.

Forgetting what GitLab did quietly

GitLab bundles a lot: container registry, Pages, dependency scanning, merge trains, required approvals. No importer brings them over. Walk your inventory line by line and find a replacement for each before you cut over.

Leaving schedules running on both sides

A pipeline schedule still active on GitLab and already live at the destination deploys twice or sends the same report twice. Turn off GitLab schedules the moment the new ones go live.

Comparing prices that don't compare

GitLab and GitHub bill per seat, Stackhero per instance, Forgejo and OneDev per server. Self-hosting hides a cost: admin time. If you go self-hosted, our public cloud ranking helps you pick the box, and our Heroku alternatives guide covers hosting your apps.

Deleting GitLab too early

People look up old issues for months after a migration. Archive projects instead of deleting them, and keep an export of each outside GitLab. An archived Free group costs nothing.

  • Inventory of repos, LFS, CI, variables, webhooks, registry and Pages
  • Destination import scope confirmed
  • Pilot project migrated and timed
  • LFS objects pushed separately
  • CI rewritten and run in parallel
  • Secrets recreated, sensitive keys rotated
  • Push mirror running during the transition
  • GitLab schedules turned off at cutover
  • Every developer's remote URL updated
  • GitLab projects archived and exported, not deleted
FAQ · 9 questions

GitLab alternatives: frequently asked questions

  • Is GitHub cheaper than GitLab?

    Per seat, yes, by a wide margin. GitHub Team is $4 per user per month; GitLab Premium is $29, billed annually. At the top end, GitHub Enterprise is $21 and includes Copilot, while GitLab Ultimate is quote-only. GitLab Free can still win for a team of five or fewer that doesn't need more than 400 CI minutes.

  • What's the best free GitLab alternative?

    For open source, Codeberg: free, run by a nonprofit, but closed to private commercial projects. For teams that self-host, Forgejo, Gitea or OneDev Community, with no license fees. For hosted, GitHub Free gives unlimited private repos and 2,000 Actions minutes a month, five times GitLab Free.

  • Does GitHub import GitLab merge requests and issues?

    Yes, through GitHub Enterprise Importer and the gh gl2gh extension, generally available since mid-2026. MRs become pull requests with comments, reviewers and approvers. The catch: the destination must be GitHub Enterprise Cloud. GitHub Enterprise Server isn't supported, and Free or Team only get code via a mirror.

  • Can I convert .gitlab-ci.yml to GitHub Actions automatically?

    Partly. GitHub Actions Importer handles jobs, stages, scripts, variables, needs, images and schedules. rules, include, services and parallel are only partially converted, and masked variable values, artifact reports and self-hosted runners are on you. It needs Docker and the GitHub CLI.

  • What's the lightest self-hosted alternative to GitLab?

    Forgejo or Gitea. GitLab's docs set 8 vCPU and 16 GB of RAM as the single-node baseline; self-hosters report Forgejo running in 200 to 700 MB. OneDev says it runs every feature on 1 core and 2 GB, and it includes CI out of the box.

  • Is GitLab still free for small teams?

    Up to five users per private group on GitLab.com, with 400 CI minutes and 10 GiB of storage. Add a sixth user and the group goes read-only. Self-managed GitLab Free has no user cap, but you supply the server and runners.

  • How much does GitLab cost in 2026?

    Free is $0 (five users per private group, 400 minutes). Premium is $29 per user per month, billed annually, with 10,000 minutes and $12 of AI credits per user. Ultimate is quote-only. Extra minutes run $10 per 1,000 and extra storage $5 a month per 10 GiB. Ten seats of Premium: $3,480 a year.

  • Should I leave GitLab, or just GitLab.com?

    Answer that before you start a project. If per-seat pricing is the problem, self-managed GitLab or a managed instance (Stackhero from $49 a month) keeps your pipelines and habits. If GitLab itself is the problem, its weight or its UI, a real move to GitHub or Forgejo is worth the effort.

  • How long does a GitLab to GitHub migration take?

    The code moves in minutes. The real timeline is your CI. Clear Street, a large engineering org, spent about two and a half quarters, with code mirrored and both CIs running in parallel. Your pilot project, timed end to end, gives you the real number for your team.

Hack'celeration Labs

Get the next migration guide in your inbox

One tool to leave, one destination, one migration plan. Nothing else.

No spam. Unsubscribe in one click.