Bitbucket alternatives: where to go, and what survives the move
Six forges reviewed, one for each reason to leave, plus an eight-step migration plan.
Short answer: GitLab if you want to keep your pull requests and their comments, since it's the only destination that imports them from Bitbucket Cloud. GitHub if you want the biggest community and an official converter for your Bitbucket Pipelines. Azure DevOps if you're a small team already on Microsoft. Gitea or OneDev if you want to self-host, and Codeberg if your project is open source.
The real deciding factor is what you're willing to lose. Your code and Git history move everywhere. Pull requests, issues, attachments and CI don't, and that's what we compared.
The ranking is editorial: a sponsored slot is always flagged on its card, and no affiliate link changes a score.
Why teams leave Bitbucket, and what staying costs them
Bitbucket is still cheap per seat and tightly wired into Jira. But since 2025 Atlassian has squeezed the free plan and is changing how paid plans are billed. These are the five reasons developers give most often.
The free plan shrank in 2025
Atlassian capped free workspaces at 1 GB of storage in total, across every repository. Go over and the workspace turns read-only: no more pushes. The same change removed Downloads and Snippets from Free and cut Pipelines log retention to 90 days. One developer put it this way when moving his repos to GitHub: "I'm sad to be moving off the platform" (dev.to). Watch out: the pricing page still says 1 GB "per repository". The rule that applies is the one in Atlassian's announcement, 1 GB total.
50 build minutes a month, and you can't buy more
Free includes 50 Bitbucket Pipelines minutes a month, and free workspaces can't buy extra minutes. Compare that with 2,000 on GitHub Free, 1,800 on Azure DevOps and 400 on GitLab Free. A Hacker News user: "I hit my 50 mins in a week and was completely disappointed." Also mind the multiplier: a 5-minute step on a 2x runner counts as 10 minutes.
Your bill is about to float
Atlassian has published a 2026 billing roadmap: annual billing consolidated per organization, monthly plan quotas pooled at organization level, then, before the end of 2026, annual plans moving to usage-based billing for build minutes, LFS storage and Packages at published rates. If your team runs a lot of builds, expect the invoice to move month to month. Overage costs $10 per 1,000 minutes or per 100 GB.
Outages and slowness
In early 2025 Bitbucket Cloud went down for about 4 hours 40 minutes: a saturated database took out Git, the web UI, the API and Pipelines at once. Slow page loads on large repos come up again and again in reviews. As one Hacker News user put it: "I moved away from bitbucket to github to get away from these sort of issues."
Everything pulls you into the Atlassian suite
Native Jira integration is Bitbucket's best argument, and also what keeps teams locked in. Older threads complain that features found elsewhere out of the box were sold as add-ons. If your team has left Jira, or plans to, the main reason to stay is gone. See our guide to switching from Jira.
You're leaving because… go to…
One reason, one destination. Click a card to jump to the full profile.
The only importer that brings PRs over from Bitbucket Cloud.
Your CI runs on Bitbucket PipelinesGitHubGitHub Actions Importer converts your pipelines.
You're a small team already on MicrosoftAzure DevOpsFree for 5 users with 1,800 CI minutes.
You want to self-host for freeGiteaMIT-licensed and free on your own server.
You want self-hosted with CI and packages built inOneDevFree Community edition includes CI and a package registry.
Your project is open source and you want a nonprofit hostCodebergFree, run by a nonprofit, servers in Berlin.
Bitbucket alternatives, forge by forge
For each forge: why move there, who it fits, its real limit, what comes across from Bitbucket, and its 2026 price. Prices are in US dollars, excluding tax, as the vendors list them.
The forges
GitLab: the only one that brings your pull requests from Bitbucket Cloud
Most completeWhy move to GitLab. GitLab ships a built-in Bitbucket Cloud importer. It brings over the repository description, Git data, pull requests with their comments, and Git LFS objects. No other destination on this list carries your code review history out of Bitbucket Cloud. You also get CI/CD, issues, boards and a package registry, on GitLab.com or on your own server with Self-Managed.
Who it's for. Teams with years of review discussions in Bitbucket that they want to keep searchable, and companies that may want to bring their forge in-house later.
Who it's not for. Teams leaving Bitbucket to cut costs: Premium is $29 per user per month billed annually, almost eight times Bitbucket Standard.
The catch. The importer leaves things behind: Bitbucket issues, PR approvals, approval rules, and Markdown images and attachments, which stay as links back to Bitbucket. PRs from forks arrive empty. GitLab.com Free is capped at 5 users per top-level private group, 400 compute minutes a month and 10 GiB of storage.
How to migrate. You need the Maintainer role on the GitLab project and a Bitbucket API token with read:repository and read:pullrequest scopes. Your CI doesn't come along: rewrite bitbucket-pipelines.yml as .gitlab-ci.yml. Before importing, save any images pasted into PRs you care about, because the links die when Bitbucket closes.
Good to know. Over 400 minutes, a 1,000-minute pack costs $10 and 10 GiB of extra storage is $5 a month. That's often cheaper than moving everyone to Premium. Our GitLab switching guide covers the reverse trip.
- Free
- 5 users, 400 CI minutes
- Paid
- Premium $29/user/month
- Imports
- code, PRs and comments, LFS
- Catch
- issues and attachments left behind
GitHub: the community, and a converter for your Pipelines
Most usedWhy move to GitHub. It's where most developers and open source projects live, with the largest catalog of CI actions. Better still, GitHub publishes GitHub Actions Importer, an official tool that converts Bitbucket Pipelines into GitHub Actions workflows: steps, scripts, services, caches, artifacts, parallel steps, deployments, and branch, PR and tag triggers.
Who it's for. Teams for whom CI is the biggest chunk of the migration, and teams that want to hire or publish where everyone looks.
Who it's not for. Teams that need their Bitbucket Cloud pull requests: GitHub Enterprise Importer only supports Bitbucket Server and Data Center 5.14 or later, into GitHub Enterprise Cloud. From Bitbucket Cloud you move code and Git history, not PRs.
The catch. The converter doesn't translate everything: fail-fast, oidc, size and private ECR images need manual work. Secured variables and SSH keys are never copied, so you recreate them. The tool needs Docker, the gh CLI and a Bitbucket workspace access token.
How to migrate. From Bitbucket Cloud: git clone --mirror, then git push --mirror to an empty GitHub repo, then push LFS objects separately. From Bitbucket Data Center: GitHub Enterprise Importer brings code, history, PRs with comments and reviews, required reviewers and attachments, but not branch permissions, settings or CI. Limits: 40 GiB archive max, and no file over 100 MiB once the migration is done.
Good to know. Team is $4 per user per month, barely more than Bitbucket Standard, with 3,000 Actions minutes and 2 GB of packages. Actions are free on public repos. And if you ever want out again, there's our GitHub switching guide.
- Free
- 2,000 Actions minutes, 500 MB packages
- Paid
- Team $4, Enterprise $21/user/month
- Imports
- code and history; PRs from Data Center only
- Catch
- no PR import from Bitbucket Cloud
Azure DevOps: the cheapest pick for a small Microsoft team
Small teamsWhy move to Azure DevOps. The first five Basic users are free, with one Microsoft-hosted CI job at 1,800 minutes a month and one self-hosted job with unlimited minutes. Beyond that it's $6 per user per month. Git repos, boards, pipelines and artifacts sit in one service.
Who it's for. .NET and Azure shops, and small private teams that want to stay free longer than Bitbucket allows.
Who it's not for. Open source projects looking for visibility, or teams that want to keep their code reviews: the import only copies the repo.
The catch. "Import repository" copies code and history once, with no ongoing sync. Git LFS files don't come along: push them with git lfs push --all. And if you need parallel CI, each extra hosted job costs $40 a month ($15 for self-hosted).
How to migrate. In Azure Repos, create an empty repo, choose Import, paste the Bitbucket clone URL and credentials for a private repo. Then push the LFS objects. Rewrite Pipelines as azure-pipelines.yml.
Good to know. At 10 people you pay 5 × $6 = $30 a month, less than Bitbucket Standard ($36.50). It's the only option here where leaving lowers the bill.
- Free
- 5 users, 1,800 CI minutes
- Paid
- $6/user/month after 5
- Imports
- code and history, LFS separately
- Catch
- no PRs, one-time import
Gitea: your own forge, no license to pay
Self-hostedWhy move to Gitea. Gitea is an open source forge under the MIT license, free when you host it yourself. It's built to stay lightweight. No 1 GB cap, no metered minutes, no per-seat pricing. You pay for the server, and that's it.
Who it's for. Teams with someone who can run a server, who want out of per-user billing and want their code on their own machines.
Who it's not for. Teams with nobody to handle updates, backups and server security. Atlassian did that work for you.
The catch. We didn't find an importer in Gitea's official docs that brings over Bitbucket pull requests. Plan on code and history only. There's an Enterprise offer, but its listed price isn't clear: ask for a quote if you need it.
How to migrate. Create an empty repo, then git clone --mirror from Bitbucket and git push --mirror to Gitea. Push LFS files next. Rebuild CI in whatever tool you choose.
Good to know. Set up backups before you migrate, not after: on your own forge, a dead disk erases everything Bitbucket used to keep safe for you.
- Free
- self-hosted, MIT license
- Paid
- Enterprise paid, per user
- Imports
- code and history (Git push)
- Catch
- you run the server
OneDev: self-hosted with CI and packages in the free edition
Open source all-in-oneWhy move to OneDev. The free Community edition bundles what Bitbucket charges for or splits out: a built-in CI/CD engine, a package registry (Docker, npm, Maven, NuGet, PyPI, RubyGems, Helm), a wiki, code search, pull request review policies, LDAP and single sign-on.
Who it's for. Teams that want to drop Bitbucket and Pipelines in one go, on their own server, without stitching tools together.
Who it's not for. Teams that want a hosted service: OneDev runs on your infrastructure. And teams that depend on a large integration ecosystem: the community is far smaller than GitLab's.
The catch. Enterprise (high availability, audit log, security scanning, time tracking) is $6 per user per month, with a 12 user-month minimum per order. We didn't verify a native Bitbucket importer: plan on a Git push.
How to migrate. Create the project, mirror-push the repo, then rewrite Pipelines in OneDev's CI format. Disabled users, service accounts and AI users don't count toward the Enterprise license.
Good to know. Start on Community and only move to Enterprise if you need high availability or auditing.
- Free
- Community: CI, packages, wiki
- Paid
- Enterprise $6/user/month
- Imports
- code and history (Git push)
- Catch
- small community, self-hosted
Codeberg: free and nonprofit, for open source projects
Open sourceWhy move to Codeberg. Codeberg is a free forge run by a nonprofit association, Codeberg e.V. Most of its services run on its own hardware in a rented facility in Berlin, Germany. No per-seat pricing.
Who it's for. Open source maintainers who want to leave Bitbucket for a European, non-commercial host.
Who it's not for. Companies with private repos: Codeberg doesn't offer private hosting. Contributors to free software get up to 100 MB of private content, more on request, and nothing if you don't contribute to free software.
The catch. Codeberg's migration tool doesn't list Bitbucket as a source (it supports GitHub, GitLab, Gitea, Forgejo, Gogs, OneDev, GitBucket and Codebase). With the generic "Git" option, only code comes across: no issues, labels, wiki or releases.
How to migrate. Pick the "Git" migration, paste your Bitbucket repo URL and credentials. Copy over the README content and release notes that matter by hand.
Good to know. To bring more across, route through GitLab first (it imports PRs from Bitbucket), then migrate from GitLab to Codeberg, which can import from GitLab. Try it on a test repo before doing it at scale.
- Free
- yes, for open source
- Paid
- no paid plan
- Imports
- code only (Git option)
- Catch
- no private company repos
The 6 alternatives side by side
Left column: what you get for free. Right column: the first paid price and what the tool brings over from Bitbucket Cloud.
Monthly cost for a 10-person team: Bitbucket Standard $36.50 ($438 a year), GitHub Team $40 ($480), GitLab Premium $290 ($3,480), Azure DevOps $30 (5 free, then 5 × $6, so $360 a year), OneDev Enterprise $60 if you need it, Gitea, OneDev Community and Codeberg $0 plus your server.
We left out AWS CodeCommit: we couldn't confirm its current offer on the official page.
| Free plan | First paid tier and what migrates | |
|---|---|---|
| BitbucketStarting point | 5 users, 50 CI minutes, 1 GB total | Standard $3.65, Premium $8/user/month |
| GitLabMost complete | 5 users, 400 minutes, 10 GiB | Premium $29; code, PRs, comments, LFS |
| GitHubMost used | 2,000 Actions minutes | Team $4; code, history, Pipelines converted |
| Azure DevOpsSmall teams | 5 users, 1,800 minutes | $6 after 5 users; code, history |
| GiteaSelf-hosted | unlimited on your server | Enterprise paid, per user; code, history |
| OneDevOpen source all-in-one | Community: CI, packages, wiki | Enterprise $6; code, history |
| CodebergOpen source | free for open source | no paid plan; code only |
GiB = gibibyte, close to a GB. Prices exclude tax, in US dollars, and can change. None of these forges imports Bitbucket issues.
Moving off Bitbucket in eight steps
The repo is the easy part. This plan tackles the things that break quietly first: attachments, large files, CI, secrets and the Jira link.
The steps
Inventory the workspace
FirstFor every repo, list open pull requests, the bitbucket-pipelines.yml file, repository and deployment variables, SSH keys, webhooks, LFS files, Packages and Jira links. Note who has which permissions.
No importer takes everything. Whatever isn't on your list gets forgotten.
- Time
- about an hour per ten repos
- Risk if rushed
- a deployment that stops
Migrate one pilot repo first
Lower the riskPick an active but non-critical repo with a few PRs, some CI and at least one LFS file. Migrate it and compare commit counts, branches, tags, PRs and readable comments.
This is where you find out what your importer really leaves behind, before you run it on the other 40 repos.
- Time
- half a day
- Check
- commits, tags, PRs, LFS
Save PR images and attachments
Often missedEven GitLab doesn't import Markdown images and attachments: they stay as links to Bitbucket. Once you close the workspace, those links die. Find the PRs whose discussions matter (architecture decisions, incidents) and store their attachments somewhere else, such as a folder in the repo or your wiki.
- Applies to
- every destination
- Tip
- start with PRs linked from Jira
Set up the right access
Before importingFor GitLab: a Bitbucket API token with read:repository and read:pullrequest, plus the Maintainer role on GitLab. For GitHub Actions Importer: a Bitbucket workspace access token, Docker and the gh CLI. For the rest: credentials that can clone private repos.
Create a token just for the migration and revoke it afterwards.
- Time
- 15 minutes
- Security
- a short-lived token
Move large files (LFS)
Doesn't move by itselfgit push --mirror doesn't push LFS objects. Fetch them with git lfs fetch --all, then push with git lfs push --all to the new forge. Only GitLab's importer brings them over on its own.
Check sizes first: GitHub rejects files over 100 MiB outside LFS.
- Command
- git lfs push --all
- Trap
- files over 100 MiB
Convert or rewrite Pipelines
The big jobHeading to GitHub? Run GitHub Actions Importer in audit mode across the workspace first: it tells you how much of your pipelines it converts on its own. Rework fail-fast, oidc, size and private ECR images by hand. For other forges, you rewrite the file in their format.
Run old and new CI side by side for a few days and compare results.
- Tool
- GitHub Actions Importer
- Time
- a few hours to a few days
Recreate secrets and keys
Never exportedBitbucket secured variables and SSH keys are never exported. Recreate them on the new forge and rotate the ones that have been around too long. Update deploy keys on your servers.
- Applies to
- every destination
- Tip
- rotate old secrets
Cut over, then keep Bitbucket read-only
No hard stopAnnounce a date, block pushes on Bitbucket with branch permissions, do a final mirror push, then move the team. Reconnect Jira if you keep it. Leave the old workspace read-only for a few weeks before closing it: someone will always need an old discussion.
To automate tasks around Bitbucket during the transition, see the n8n and Make integrations.
- Time
- one day
- Keep
- the workspace read-only
Is your tool missing from this page? Email us: hello@hackceleration.com
What makes a Bitbucket exit go wrong
Failed migrations almost never break on the code. They break on these six things.
Assuming the importer takes everything
Even the best one, GitLab's, leaves issues, approvals and attachments behind. GitHub doesn't import PRs from Bitbucket Cloud. Read what isn't imported before you pick a destination.
Mixing up Cloud and Data Center
GitHub Enterprise Importer works from Bitbucket Server and Data Center 5.14+, not from Bitbucket Cloud. Check your edition before following a tutorial. And if you're on Data Center, Atlassian isn't ending it in 2029, unlike Jira and Confluence: there's no deadline pushing you.
Leaving LFS behind
A mirrored repo looks complete, but its large files are just pointers. When Bitbucket closes, the binaries vanish. Push LFS explicitly and check that a fresh clone pulls them.
Underestimating CI
Pipelines are code written for Bitbucket. GitHub's converter helps, but nothing converts to GitLab, Azure DevOps or OneDev. Budget the time.
Breaking the Jira link without noticing
Issue keys in commits and branch names were what tied your work to Jira. If you keep Jira, make sure your destination connects to it before cutover, not after.
Leaving over price without doing the math
Bitbucket Standard is still one of the cheapest per seat. GitLab Premium costs nearly eight times more. If your only problem is the free tier cap, Standard at $3.65 may fix it for less than a migration.
- Inventory of repos, PRs, Pipelines, variables, keys and webhooks
- Edition confirmed: Cloud or Data Center
- Pilot repo migrated and checked
- Key PR attachments saved
- LFS objects pushed and checked on a fresh clone
- CI converted and run in parallel
- Secrets and keys recreated
- Jira link checked
- Bitbucket set to read-only before closing
Bitbucket alternatives: frequently asked questions
What is the best alternative to Bitbucket?
GitLab if you want to keep your pull requests: it's the only one that imports them from Bitbucket Cloud. GitHub if CI and community matter most, thanks to its Pipelines converter. For a small Microsoft team, Azure DevOps is free up to 5 users.
Is GitHub better than Bitbucket?
For CI and community, yes: 2,000 free Actions minutes against 50, and a far bigger ecosystem. Bitbucket wins on Jira integration and price per seat ($3.65 against $4). For 10 people, the difference is just $3.50 a month.
Is Bitbucket still free?
Yes, for up to 5 users, but with 1 GB of storage for the whole workspace and 50 CI minutes a month. Over 1 GB, the workspace goes read-only. Tip: move large files to LFS or out of history before you hit the cap, because free workspaces can't buy extra minutes or storage.
What is a free self-hosted alternative to Bitbucket?
Gitea (MIT license) or OneDev Community on your own server: no per-seat price, no metered minutes. OneDev includes CI and a package registry in the free edition. GitLab Self-Managed also has a free edition.
Can I migrate pull requests from Bitbucket?
From Bitbucket Cloud, only GitLab's importer brings them over, with comments but without approvals. From Bitbucket Data Center 5.14+, GitHub Enterprise Importer also imports them into GitHub Enterprise Cloud. Everywhere else, only code and history move.
Can I migrate Bitbucket Pipelines to GitHub Actions?
Yes, with GitHub Actions Importer, GitHub's official tool. It converts steps, services, caches, artifacts and triggers. Run it in audit mode first to see how much it converts automatically. Secured variables have to be recreated by hand.
Is Bitbucket Data Center reaching end of life in 2029?
No. Atlassian is ending most Data Center products in 2029, but Bitbucket and Bamboo Data Center continue beyond that. If you self-host Bitbucket, there's no deadline.
Is Bitbucket getting more expensive in 2026?
Per-seat prices stay the same (Standard $3.65, Premium $8), but before the end of 2026 annual plans move to usage-based billing for minutes, LFS and Packages. If your CI is busy, watch your minutes: extra ones cost $10 per 1,000.
Get the next migration guide in your inbox
One tool to leave, one destination, one migration plan. Nothing else.