Bitbucket vs Forgejo

Forgejo can replace Bitbucket repositories, pull requests and CI for teams that want a GPL-licensed, self-hosted forge with LTS releases. This page shows when that fits and what a move involves.

On this page

When Bitbucket or Forgejo is the better fit for your Git hosting

Bitbucket is the better fit when your engineering work already runs on Atlassian tooling and you want to keep it that way. If Jira issues, Confluence pages and Bitbucket pull requests are linked in daily practice, staying inside the Atlassian model is usually the lower-friction path, and Atlassian's hybrid licensing is designed for customers who move between Data Center and Cloud. Forgejo is the better fit when the driver is control: you need self-hosted code under GPL-3.0-or-later, a forge governed by a non-profit structure, and a release model with LTS versions, so the platform does not depend on a single vendor's pricing or product roadmap. Confirm the current license text and LTS dates directly with the Forgejo project before you write them into a policy document.

The decision turns on four questions. First, how deeply are Jira and Confluence wired into your merge and release process? Second, how heavily do you use Bitbucket Pipelines, and how many build minutes, runners and secrets would need a new home? Forgejo's built-in CI, Forgejo Actions, is designed to feel familiar to GitHub Actions users but is not compatible with GitHub Actions, so pipeline definitions will need rewriting. Third, must pull request discussions and review history survive the move? Git history moves with a mirror, but pull requests, comments and wikis need a platform importer, and Forgejo's dump-repo command does not list Bitbucket as a source, so that part needs its own plan. Fourth, who will run the server, apply upgrades and hold the backups?

Answer those questions in writing before you start a renewal or a Data Center exit. If Pipelines, pull request history and Atlassian links are central, a Bitbucket renewal or Hybrid License is often the simplest route to keep. If code residency and license control matter most and your team can own operations, a Forgejo deployment in your own infrastructure is worth a pilot with a few representative repositories. Ask any implementation partner for a fixed scope that lists which repositories, pull requests, wikis and pipelines move, who signs off on the mapping, and how the Forgejo support window will be covered after go-live.

Which option fits which scenario

This table compares how Bitbucket and Forgejo fit common situations, from Atlassian-centric teams to teams that need LTS support. Read each row as a starting point, then confirm the fit against your own tooling, staff and data location requirements.

ScenarioBetter fitWhy
Team already runs Jira and Confluence on Atlassian toolsBitbucket, for nowBitbucket keeps the Jira link and Atlassian licensing in one place. Moving to Forgejo means re-creating those links and confirming which integrations you still need.
Code must stay in your own datacenterForgejoForgejo runs on your own servers. Bitbucket Cloud is hosted by Atlassian, so confirm whether a Data Center or Hybrid License fits your residency rule first.
Team relies on Pipelines workflowsNeither as a drop-in, plan a rewriteForgejo Actions is designed to be familiar to GitHub Actions users but is not compatible with GitHub Actions. Pipeline YAML and Pipelines variables need a separate migration plan.
Team has little or no platform staffBitbucket Cloud, unless you can staff upgradesA self-hosted Forgejo instance needs someone to patch, back up and upgrade it. Ask a partner for a fixed-scope support plan before choosing self-hosting.
Team wants an LTS-backed forgeForgejoForgejo publishes LTS releases in the first quarter of each year, with critical bugfixes and security support for one year and three months. Confirm the current LTS version and its end date before planning upgrades.
Team needs pull requests and reviews moved with historyForgejo, with a migration planForgejo's dump-repo does not list Bitbucket as a source, so pull requests and comments usually need a Git mirror plus a custom export. Test this on one repository before a full move.
Team wants to upgrade from an existing Gitea installForgejoForgejo documents transparent upgrades from Gitea up to Gitea v1.22, in two steps. Confirm your Gitea version before planning the path.
Team needs a license with copyleft termsForgejoForgejo is GPL-3.0-or-later from v9.0, with earlier versions under MIT. Have legal review whether GPL terms fit your internal use and distribution.

How hosting and data control change with Forgejo

Moving from Bitbucket to Forgejo changes who operates the servers, where repositories and backups sit, and which evidence your team must produce. The cards below cover the decisions that follow from that shift, and each one names something to confirm before a cutover date is set.

Data location in your infrastructure

Self-hosted Forgejo runs on servers, virtual machines or a cloud account that you choose, so repositories, pull request history, attachments and backups stay where your own controls apply. The decision is less about the software and more about who has administrative access to the database, the Git storage directory and the backup targets. Ask which team holds root and database credentials, and whether backups are encrypted with keys you control.

Bitbucket Cloud versus Data Center

Bitbucket Cloud is run by Atlassian, so your code sits in Atlassian's hosting and follows its data terms. Bitbucket Data Center runs on your infrastructure, but Atlassian's journey-to-cloud material states that Data Center continues beyond 2029 and that existing customers gain a Bitbucket Hybrid License covering Data Center and Cloud. Confirm with Atlassian which of these terms apply to your contract before comparing it with a self-hosted Forgejo deployment.

Regional storage limits on hosted services

Hosted Git services differ in where they store data. Azure DevOps keeps tokens and SSH keys in a US datacenter even when organization data sits in the chosen geography, and GitHub offers regional residency on GHE.com only in certain regions. Bitbucket Cloud is not among the Atlassian products with data residency. If your rules require EU storage, check every category of data, including credentials and backups, before you assume a hosted option meets them.

Identity and SSO integration to confirm

Forgejo's sign-in options, group mapping and provisioning depend on the identity provider you run and the Forgejo version you deploy. Bitbucket users often sign in through Atlassian Access or a corporate directory, so list every login path, service account and API token in use today. Confirm that Forgejo supports the protocol your provider uses and test account removal, because an orphaned token is a common source of post-migration exposure.

Compliance evidence your team must produce

Running Forgejo yourself moves the evidence burden to your team. You will need records of access reviews, change history for the server configuration, backup restore tests, patch dates and logs that show who merged to protected branches. DeployOpen prepares systems, controls and evidence for assessments, but auditors and certification bodies issue the reports. Ask your auditor which artifacts they expect before the first Forgejo environment goes live.

Upgrade and support responsibility

Forgejo stable releases receive full support for three months plus a two-week window, while LTS releases receive critical bugfixes and security support for one year and three months. Choosing an LTS line for regulated workloads shifts patch planning to your team or to a support contract. Write down who applies security updates, how quickly, and who approves a rollback, since these responsibilities previously sat with Atlassian for Cloud customers.

What replaces Bitbucket pull requests and Pipelines in Forgejo

Start by separating two kinds of data. Git history moves with a clone or mirror of each repository, so commits, branches and tags can be carried into Forgejo without any platform-specific tooling. Pull requests, review comments, issues and wikis do not travel that way. They live in Bitbucket's own data model and need a platform path. Forgejo's dump-repo command exports a repository together with issues, pull requests, releases, labels, milestones, comments and wiki, and restore-repo loads that export into Forgejo. The source list for dump-repo covers git, GitHub, Gitea and GitLab, but it does not list Bitbucket. Confirm this against the current Forgejo command-line documentation before you plan the cutover, because the supported sources can change between releases.

For Bitbucket repositories, the practical plan is a two-part move. Mirror the Git data with git clone --mirror and push it to Forgejo, including LFS objects if you use them. Then export pull request history, review comments and wiki content through the Bitbucket API or an export your organization already has, and decide which of those records must be preserved in searchable form. Bitbucket's API rate limits will shape how long that export takes for large projects. Write down which closed pull requests need to remain available for audit, because many teams keep an archive rather than importing every historical discussion. Branch protection rules and reviewer requirements are not part of the Git mirror and must be recreated in Forgejo's repository settings.

Forgejo Actions is the built-in CI system that replaces Pipelines. Workflows are defined in YAML, runs are handed to separate runners that you register and host yourself, and the syntax is designed to feel familiar to GitHub Actions users. It is not compatible with GitHub Actions, so existing workflow files need rewriting. Bitbucket Pipelines configuration in bitbucket-pipelines.yml also has its own syntax, so expect the same rewrite. Inventory every pipeline, secret and deployment target first. Then decide which runners will execute jobs, how they are isolated, and how secrets are stored, since Pipelines variables cannot be read back from Bitbucket and must be re-entered in the new system. Ask your team to confirm which Forgejo Actions features your workflows depend on before committing to a timeline.

What drives the cost of running Forgejo

What does a self-hosted Forgejo server and storage cost to run?

Server and storage are mostly recurring cost, paid as cloud instances, data center capacity or hardware depreciation, and they scale with the number of users, repository size and how much history and LFS content you keep. Repository growth is the main driver: hosted services set their own limits, such as GitHub's guidance to keep a repository's .git folder under 10 GB, so plan for storage headroom and for the disk and bandwidth that clones and CI artifacts consume. Ask the provider or your infrastructure team for the instance sizes, storage tiers, redundancy level and egress terms behind any estimate, and confirm whether your data center already provides this capacity.

Which backup costs come with running Forgejo yourself?

Backups are recurring, and they cover both the repository data and the database, attachments and configuration. Costs rise with retention period, backup frequency, the number of copies you keep off site and the time you need to restore. Confirm your backup target, retention policy and restore test schedule, and include the storage and staff time those tests take. Forgejo's command-line tools can export individual repositories, but a full backup plan is still your responsibility, so budget for it as an ongoing operation rather than a one-time setup.

How much do Forgejo upgrades cost in staff time?

Upgrades are recurring work that you schedule against Forgejo's release cadence. Stable releases get three months of full support plus a two-week window, and LTS releases receive critical bugfixes and security support for one year and three months, so the interval you choose determines how often you touch production. If you migrate from Gitea, the Forgejo upgrade guide describes a two-step path for installations up to Gitea v1.22, which is a one-time project. Ask for the upgrade test environment, the rollback plan and the expected staff hours per upgrade cycle.

What does runner capacity for Forgejo Actions cost?

Runner capacity is recurring and is the Forgejo equivalent of Bitbucket Pipelines build minutes or runner slot fees, except that you pay for the machines rather than for minutes. Forgejo Actions hands workflows to separate runners, so cost depends on how many concurrent jobs you need, the CPU, memory and disk per job, and whether runners are always on or scale up on demand. Heavy builds, container image builds and long test suites usually drive the largest share. Ask for a sizing review based on your pipeline run history and for a clear split between runner hardware, its operation and any cloud build capacity you add.

What staff time does a self-hosted Forgejo platform require?

Staff time is the largest cost component for many teams, and it recurs. It covers platform administration, access management, monitoring, security patching, runner maintenance, user support and migration work. A small team may absorb this into existing platform duties, while a regulated organization often needs a named owner, documented procedures and an on-call path. Compare these hours against what Bitbucket seats, build minutes or a Data Center or Hybrid License renewal would otherwise cost, and include the hours for pull request and CI migration as a one-time item.

What support options are available for a Forgejo deployment?

Forgejo is community-governed, and the project's own support model is community and documentation based, while commercial support comes from a provider you contract. Support is recurring if you buy a retainer, and it can be bundled with upgrades, monitoring and testing. Ask any provider what response times they commit to in writing, which Forgejo versions they cover, who handles security fixes, and what happens during a release change. Forgejo's FAQ and release pages describe the project's support windows, so use those dates when you compare quotes.

What should I request in a quote for running Forgejo?

Ask for a written scope that separates one-time work from recurring work. One-time items usually include the migration of repositories, pull requests and CI definitions, identity integration and the initial hardening. Recurring items usually include infrastructure, backups, upgrades, runner capacity, monitoring and support. Request assumptions for user count, repository count and size, pipeline volume, retention period and the Bitbucket plan you are replacing, so you can compare fairly against Bitbucket Cloud seats, build minutes or a Data Center or Hybrid License renewal. DeployOpen issues a quote from the written scope, and engagements are typically fixed-scope.

How a move from Bitbucket to Forgejo is sequenced

The sequence turns a Bitbucket estate into a Forgejo instance where repositories, history, pull request records and CI definitions have been restored, checked and cut over in a controlled order. Each step ends with a check so the next step starts from verified data.

  1. Inventory repositories, LFS and branch permissions

    The team lists every repository in scope, including archived projects, forks, large binaries stored in Git LFS, wikis, and the branch permissions, default branches and protected-branch rules that govern merges. Someone from platform engineering and a repository owner for each team sign off on the list. The output is a written inventory with a decision per repository: migrate, archive or leave behind. It is done when every owner has confirmed their entries and the LFS footprint is known, which tells you how much storage the Forgejo instance needs before installation.

  2. Mirror Git history and LFS objects

    Engineers create bare mirror clones of each in-scope repository from Bitbucket, then fetch LFS objects with the Git LFS client so binary content is complete. Mirrors are pushed to a staging location first so the team can confirm nothing is missing. The check is a comparison of branch and tag lists and commit hashes between the source and the mirror, plus a successful LFS fetch of a sample of large files. Git history moves with a clone or mirror, but nothing else in Bitbucket moves this way, so this step covers code only.

  3. Export pull requests and comments through the API

    Pull requests, review comments, inline discussions, issues and wiki pages are read from the Bitbucket Cloud REST API and saved as structured files that the team keeps as an archive. Bitbucket Cloud allows 1,000 requests per hour for most API resources, so the export script must page through results, back off when limits are reached, and resume from a checkpoint. Forgejo's dump-repo command does not list Bitbucket as a source, so this export is a separate script or a vendor-neutral tool that your team has tested. The output is an archive per repository and a record of any items that could not be retrieved, which becomes the input for the cutover decision.

  4. Install and configure Forgejo

    Platform engineering installs Forgejo in the organization's own cloud account, data center or air-gapped network, configures the database, storage, SMTP, and the authentication source used by staff, and sets the instance's backup schedule. Runner hosts for Forgejo Actions are registered at this stage but kept separate from the main server. Decide on the release line first: the current LTS release is the safer baseline for production, and the Forgejo release page lists support dates for each line. The check is a clean installation with a test repository pushed, a test user logged in and a backup restored in a scratch environment.

  5. Restore repositories and verify the data

    Repositories from the mirrors are pushed into Forgejo, and LFS objects are uploaded so binary references resolve. Branch protections, default branches, teams and collaborator permissions are recreated from the inventory and checked by owners. Pull request and issue archives are loaded as read-only records or as imported content, depending on what the export supports. Verification compares commit counts and branch heads against the source, tests a few LFS downloads, and confirms that permission rules block and allow the expected actions for a sample of users. Anything that fails goes back to the owner before the next step.

  6. Rewrite Pipelines as Forgejo Actions

    Each bitbucket-pipelines.yml file is read and rewritten as a Forgejo Actions workflow under .forgejo/workflows. Forgejo Actions is designed to feel familiar to GitHub Actions users but is not compatible with GitHub Actions, so reusable actions and syntax must be checked one by one rather than copied. Pipeline variables and secrets cannot be read back from Bitbucket, so owners re-enter them in Forgejo. Runners are tested on a non-production repository first. The output is a list of converted workflows with a pass or fail result for each, and any Pipelines feature with no direct equivalent is recorded as a known gap.

  7. Cut over and retire Bitbucket access

    Teams move to Forgejo on an agreed date, update remote URLs on their workstations and CI systems, and freeze pushes to Bitbucket for the moved repositories. The archive of pull requests and comments is linked from the Forgejo repository wiki or a read-only location so auditors and engineers can find history. Once the team confirms that the new remotes work and that the last sync matches the final mirror, Bitbucket repositories are set to read-only, the integrations and webhooks are removed, and access for departed users is revoked. Ask your Atlassian contact which export and retention options apply to your contract before access is removed.

Forgejo release cycle, LTS support and who supports it

Forgejo gives you two support tracks, and the one you pick determines how long a deployment stays patched without a major upgrade. Stable releases receive full support for three months plus a two-week window. LTS releases, published in the first quarter of each year, receive critical bugfixes and security support for one year and three months. For a regulated team that cannot upgrade every quarter, the LTS track is the realistic default. The current LTS release is v15, supported until July 15, 2027. v17.0.0, released on October 15, 2026, carries support until January 28, 2027, so it is a stable line to plan around rather than a long-term base. Confirm the exact release you deploy against the Forgejo releases page before you set an upgrade calendar.

Forgejo's governance is the other half of the support question. The project's code is GPL-3.0-or-later from v9.0 onward, with earlier versions under MIT, and Codeberg e.V., a non-profit association registered in Berlin, owns the project's domains while project governance stays independent. No single vendor controls the roadmap or can change the license of a release you already run. That protects continuity, but it also means there is no vendor contract included in the software. Commercial support, if you want it, comes from a company you select and contract with directly. Ask each candidate which Forgejo versions they support, what their response targets are in writing, and whether they will patch an LTS line in your environment. DeployOpen can help you assess those answers against your own risk profile, though it is not a Forgejo support vendor.

Before you sign with any support provider, ask for three things in writing: the named versions covered, the support window measured against Forgejo's own LTS dates, and the process for applying security fixes in an air-gapped or change-controlled environment. Also confirm that the provider will run the upgrade path you need if you are migrating from Gitea, since Forgejo documents transparent upgrades from Gitea up to v1.22 in two steps. A support contract that ends before your next LTS window closes is a gap you will pay for later.

Questions buyers ask before moving from Bitbucket to Forgejo

How much effort does a move from Bitbucket to Forgejo take?

The effort depends mainly on how much history you need to carry across, how many repositories depend on Bitbucket-specific features, and how many pipelines must be rebuilt. Plain Git history moves with a clone or mirror, which is the simple part. Pull requests, review comments, issues and wikis need a separate plan, because Forgejo's dump-repo command does not list Bitbucket as a source. The main drivers are the count of repositories, the volume of open pull request history you want to keep, Bitbucket Pipelines configurations to rewrite for Forgejo Actions, and branch permissions and user access to re-create. Ask any provider for a written inventory of these four items before agreeing on a figure.

Can our own team move from Bitbucket to Forgejo without outside help?

A team with Git administration experience and someone who can run a Forgejo server can move plain repositories without outside help. Work is harder when the team must script pull request exports through the Bitbucket API, respect rate limits during bulk reads, and rewrite CI. Bitbucket Cloud limits most API resources to 1,000 requests per hour, so large exports need throttling and planning. Outside help is most useful for an inventory, a tested migration on a copy of the data, and a cutover plan. Decide early which parts your staff will own after go-live, such as backups, upgrades and user administration.

What skills and access work does the migration require from our team?

Expect work in four areas. First, server administration: installing Forgejo, configuring the database, reverse proxy, TLS, storage and backups. Second, CI rewrites: Forgejo Actions is built in and designed to be familiar to GitHub Actions users, but it is not compatible with GitHub Actions, and it is also not Bitbucket Pipelines, so each pipeline needs translation and testing with separate runners. Third, access mapping: map Bitbucket workspaces, projects, groups and branch restrictions onto Forgejo organizations, teams and branch protection. Fourth, identity: decide how users sign in and who approves access changes. Confirm each item against the current Forgejo documentation for your version.

How long does a Bitbucket to Forgejo migration usually take?

No general duration can be given here without the inventory, because timing follows the scope. In broad terms, the schedule has four phases: inventory and design, a trial migration on copies of selected repositories, pipeline rewrites with testing, and a cutover with a fallback plan. Repository count, the depth of pull request history, and the number of CI pipelines with external integrations are the variables that extend the schedule most. Ask for a timeline tied to a written scope and a list of assumptions, and ask how the provider will handle items that fail the trial migration.

Can pull request history move from Bitbucket to Forgejo?

Git history moves easily, but pull request history needs a platform importer or a custom export. Forgejo's dump-repo command exports issues, pull requests, releases, labels, milestones, comments and wiki from git, GitHub, Gitea and GitLab, but Bitbucket is not on its list of sources. Practical options include exporting pull requests and comments from the Bitbucket API within rate limits and loading them into an archive, using a documented import path into an intermediate platform, or keeping old pull requests read-only in Bitbucket. Decide which records must be kept for audit, then confirm the export method and its fidelity for each record type before you rely on it.

Does Forgejo upgrade from Gitea, and what does that mean for us?

Yes, Forgejo documents transparent upgrades from Gitea installations up to Gitea v1.22. The documented path has two steps: first to Forgejo v10.0.x, then to any later Forgejo version. This matters if you are already running Gitea and want to switch forges without moving repositories. It does not apply to Bitbucket directly, so a Bitbucket move still needs the export work described above. Check the upgrade guide for your exact Gitea version and back up data before each step.

What does Forgejo federation status mean for our plans?

Forgejo federation is experimental and under active development. It uses the ForgeFed protocol, which is based on ActivityPub. Treat it as a capability to watch, not one to plan a production workflow around. Your Bitbucket move should rely on standard Git hosting, pull requests, issues and backups that you can operate today. If cross-instance collaboration matters to your organization, ask the provider to show the current state of federation in the Forgejo version you plan to run and to document what is not yet supported.

What support options exist for Forgejo after the move?

Forgejo is governed by an independent project and its domains are held by Codeberg e.V., a non-profit association registered in Berlin. Its stable releases receive full support for three months plus a two-week window, while LTS releases receive critical bugfixes and security support for one year and three months. Forgejo v15 is the LTS release supported until July 15, 2027, and v17.0.0 is supported until January 28, 2027. Your choice is between running an LTS line for predictable patching and taking stable releases more often. Support contracts from outside providers, including DeployOpen retainers for upgrades and testing, are priced from a written scope, so ask for one.

How DeployOpen works on this

DeployOpen plans and implements self-hosted Forgejo inside your own infrastructure, from the first inventory of Bitbucket repositories through cutover and handover. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.

How we scope

  • Inventory of Bitbucket Cloud or Data Center repositories, LFS usage, pull requests, wikis and issues to migrate
  • Decision record on Forgejo versus GitLab or Gitea, covering license, governance and support model
  • Written list of Pipelines workflows to rebuild on Forgejo Actions or another CI system, with exclusions named

How we build

  • Forgejo installation in your cloud account, data center or air-gapped network, with access controls mapped to Bitbucket permissions
  • Git mirror transfer of history and LFS objects, plus a documented approach for pull requests and comments since Forgejo's dump-repo does not list Bitbucket
  • Test migrations on sample repositories, checking branch protection, webhooks and CI runners before any production move

How we hand over

  • Runbooks for installation, upgrades, backup and restore, and runner management, written for your operations team
  • Migration evidence: repository checksums, import logs and a reconciliation report listing anything not carried over
  • Documented decisions on what stays archived in Bitbucket and when the Bitbucket contract can end

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover
  • Upgrade planning aligned to Forgejo's stable and LTS release schedule, with your change approval process
  • Security testing of the new forge and its CI runners can be scoped separately if your assessment requires it

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.