Bitbucket cost vs self-hosted GitLab, Gitea and Forgejo

Bitbucket costs are mostly subscription and renewal fees, while self-hosting moves cost into servers, storage, upgrades and staff time. This page breaks down each component so you can build the comparison with your own numbers.

On this page

Does a self-hosted Bitbucket cost comparison favor open source?

For many teams, self-hosting favors open source only when the saving on license fees is larger than the new recurring cost of servers, storage, backups, upgrades and staff time. Bitbucket is licensed in several ways (Cloud seats, Data Center or a Hybrid License), and each renewal sets a different baseline, so start by pulling your current invoice line by line and listing what it covers. Then price the open-source side the same way, component by component, rather than comparing a subscription with a single server bill. The license side of the open-source comparison is simpler. Gitea is MIT licensed and Forgejo is GPL-3.0-or-later from v9.0, and neither charges a per-seat license fee. GitLab's pricing page lists GitLab Free at 0 dollars and Premium at 29 US dollars per user per month billed annually, with all three tiers available for self-managed installations. At 29 dollars per user, the GitLab Premium line grows with headcount, so a large user base on Premium can close much of the gap, while a team that needs only core forge features may run on Free. Confirm the current figures on the GitLab pricing page before you build a model, because prices change. The main recurring costs that move into your budget are infrastructure, backups, upgrades, support and staff time. The outcome depends on three drivers: the number of users, the volume of repository data (including LFS objects) and your availability target. Ask your Atlassian account team for the Bitbucket Data Center or Hybrid License terms in writing, and ask any open-source vendor or partner for a quote built from a written scope. Also remember that Bitbucket Data Center, GitHub Enterprise Server and Azure DevOps Server are self-managed too, so a self-managed Bitbucket renewal is a comparison of software and support model, not of hosting location alone.

Which cost components appear on each side of the comparison

This table lists the cost components that appear when Bitbucket is compared with self-hosted GitLab, Gitea or Forgejo, and marks whether each is one-time or recurring. Use it to build your own cost model, then ask Bitbucket and your chosen forge for written quotes covering the same rows.

Cost componentBitbucket (Cloud or Data Center)Self-hosted GitLab, Gitea or ForgejoOne-time or recurring
Subscription or licenseCloud seats, or Data Center or Hybrid License renewal, paid to AtlassianNo license fee for Gitea or Forgejo. GitLab Community Edition is free, while Premium and Ultimate tiers are paid per subscriptionRecurring
Build minutes and runner capacityPipelines minutes and runner fees, metered by the planYour own runner hosts and compute. GitLab Runner, Gitea Actions and Forgejo Actions run on machines you provisionRecurring
InfrastructureLargely included in the subscription for Cloud, or your Data Center servers for self-managed editionsServers or VMs, load balancers and, for larger GitLab deployments, the high availability componentsRecurring
StorageRepository storage within plan limits, with the Bitbucket Cloud storage caps on Free workspacesDisk for Git data, LFS objects, databases and artifacts, sized to growthRecurring
Backups and restore testingLargely handled by Atlassian for Cloud, or by your team for Data CenterBackup tooling, off-site copies and periodic restore tests your team or partner runsRecurring, with a one-time setup
Implementation and configurationLimited for Cloud, Data Center setup and integration workInstallation, SSO, branch protection, runner setup and hardening, often fixed scopeOne-time
Migration of repositories and historyExport effort for Git history, pull requests, comments and wikis, using the API within rate limitsGit mirroring and platform importers, plus manual re-creation of permissions and pull request context where no importer existsOne-time
Upgrades and maintenanceVendor-managed for Cloud, or your team's upgrade schedule for Data CenterMonthly or regular releases, required upgrade stops for GitLab, and transparent upgrades from Gitea to ForgejoRecurring
Support and internal skillsAtlassian support included in the plan, plus staff who know BitbucketOptional commercial support contracts, plus staff time to operate the forge and its runnersRecurring

What moves the cost of self-hosted GitLab, Gitea or Forgejo

A hosted Bitbucket bill scales with seats and pipeline usage, while a self-hosted forge scales with users, API traffic, data volume, edition and the availability you promise. The cards below set out the drivers that move server, storage and staff costs, so you can ask vendors and partners for quotes built on the same assumptions.

User count and API load

GitLab's reference architectures run from 1,000 users at 20 API requests per second up to 50,000 users at 1,000 requests per second, so the size of the instance sets the minimum server footprint. API load grows with CI jobs, bots, IDE integrations and scripted exports, which can exceed what seat counts suggest. Measure your peak API traffic from current logs before sizing, and ask any implementation partner to price the chosen reference architecture rather than a generic virtual machine.

Repository and LFS data volume

Hosted services cap repository size, so teams that moved large binaries into Bitbucket may find their self-hosted storage needs grow in a different way. Storage for Git objects, Git LFS files, packages and backups recurs every month and multiplies when you keep replicas and retention copies. Inventory repository sizes and LFS usage now, and ask vendors how backup size relates to repository size.

Edition and license tier

GitLab Free costs nothing to license, while Premium is priced per user and Ultimate is custom priced, so the tier decision often outweighs hardware in the total. Gitea Enterprise from CommitGo adds SAML, audit logging, IP allowlisting and mandatory two-factor authentication on top of the MIT-licensed core. Forgejo has no paid edition, so its cost is the support and operations you buy separately. Map every feature you use today to a tier before comparing totals.

Availability and high availability design

The GitLab docs generally recommend a high availability strategy for 3,000 or more users, which brings Gitaly Cluster with Praefect, PostgreSQL with Patroni, Redis Sentinel and Consul. Each replicated component adds machines, monitoring and failover testing, and it recurs for as long as the service runs. Decide your recovery time and recovery point targets in writing first, since a single-node Gitea or Forgejo install may meet a smaller team's needs at much lower cost.

Upgrade cadence and version support

GitLab ships a minor release monthly and requires upgrades to pass through stops such as 19.5, 19.8 and 19.11, so each upgrade is a planned, tested event with staff time attached. Forgejo's LTS releases give a longer support window than its stable line, and Gitea's release line changes faster, so pick the track your team can keep current. Ask any partner to state which versions they will support and how many upgrades per year the retainer covers.

In-house skills and staff time

The largest recurring cost is often the engineer hours spent on upgrades, backups, runner fleets, access reviews and incident response, not the servers. Teams that already run Kubernetes or Linux fleets can absorb this work, while others will pay a partner or hire. Estimate the hours per month your team can spare, list the tasks it cannot cover, and ask a quote to price those tasks separately from the one-time migration.

How to build the cost model with your own numbers

This sequence turns your current Bitbucket spend and your own infrastructure rates into one side-by-side model over the same period, so the comparison rests on your figures rather than on this page.

  1. Pull active user and runner counts

    A Bitbucket administrator exports the workspace or Data Center user list and the count of active accounts over the period you plan to compare, including service accounts and bots that consume seats. Separately, record every build runner or pipeline capacity unit you pay for, along with the minutes or concurrency each one consumed. Ask your Atlassian account team to confirm how seats and runner capacity are counted on your contract, because the billing unit determines the model. You are done when you have one number for billable users, one for runner capacity, and a note on how each was measured.

  2. Measure repository and LFS storage

    Using a Bitbucket administrator account or the repository settings for each workspace, record the size of every repository, including its Git history, and the total size of Git LFS objects. Note which repositories are close to the limits in Bitbucket's documentation, since large repositories affect migration time and server sizing. Compare the result with the storage included in your plan so you know whether storage is a line item today. You are done when you have total repository size, total LFS size, and a list of the largest repositories.

  3. List every Bitbucket line item

    Take the current invoice or renewal quote and list each charge separately: user seats, runner or pipeline capacity, storage add-ons, Data Center or Hybrid License fees, support tiers, and any marketplace apps that your teams rely on. Mark which charges are annual, monthly or one-time, and note the renewal date and any price-change clauses. Ask Atlassian for written confirmation of what a Hybrid License or a Cloud migration would cost if you are considering either path. You are done when every charge on the document appears in one table with its billing period.

  4. Price self-hosted infrastructure at your own rates

    Ask your cloud or data center team to price the compute, storage, network, load balancing and database hosting that a self-hosted GitLab, Gitea or Forgejo would need, using your own contracted rates rather than public list prices. GitLab's reference architectures scale with user count and API request rate, so size the environment for your user count and the architecture GitLab documents for that range. Include a staging instance for upgrades and a separate backup target. Note that stateful services such as PostgreSQL and Redis run on virtual machines or managed services in the Cloud Native Hybrid pattern, not inside Kubernetes. You are done when each infrastructure component has a monthly and one-time cost from your own rate card.

  5. Estimate staff hours for each upgrade cycle

    Work with the team that will operate the platform to estimate hours for the recurring work: applying monthly minor releases and the required upgrade stops, backup and restore tests, certificate and runner maintenance, and on-call coverage. GitLab's maintenance policy sets a monthly minor release and twice-monthly patches, and Forgejo publishes release support windows that set how often you must move, so use those cadences in the estimate. Record who is paid for this work, whether it is an existing salary or new hiring, and what share of time goes to the forge. You are done when you have an hours-per-cycle figure for each platform you are considering and the cadence it applies to.

  6. Add support, licensing and one-time migration costs

    Add the costs that do not recur every month. For GitLab, compare Free, Premium and Ultimate, and ask GitLab for written pricing for the tier that covers the features you use. For Gitea, ask CommitGo for a written quote if you want commercial support or Gitea Enterprise features. For Forgejo, which is governed by a non-profit, ask whether a paid support partner is needed, since the project itself does not sell a support contract. Add the one-time migration effort: repository mirroring, the importer work for issues and pull requests, branch protection rebuilds and CI rewrites. Note that Gitea has no Bitbucket importer, so pull request and comment history needs a separate plan. You are done when each platform has recurring support or licence lines and a separate one-time migration figure, each tied to a written quote or a stated assumption.

  7. Compare totals over the same period

    Place the Bitbucket totals and each self-hosted option side by side over the same number of months, with recurring costs multiplied across that period and one-time costs counted once. Show each component in its own row so reviewers can challenge a single assumption without rebuilding the whole model. Run a second version with user and runner counts raised or lowered to see which inputs move the result most, and record the assumptions behind each number. Confirm the final figures with your finance, infrastructure and security leads before using them in a renewal decision. You are done when you have one comparison table, a sensitivity note, and a list of written quotes still outstanding.

What upgrades cost in staff time on each platform

Upgrades are the recurring staff cost that most cost comparisons leave out, and on self-hosted GitLab the calendar is set by the vendor. GitLab ships a minor release on the third Thursday of each month and patch releases twice a month, and it currently maintains 19.5, 19.4 and 19.3, according to the GitLab maintenance policy. Bug fixes go only to the current stable release, while security fixes are also backported to the previous two monthly releases. Your team therefore has to decide how quickly to take each patch, and that decision is recurring labor, not a one-time event.

Major upgrades carry the heavier work. GitLab requires upgrades to pass through required upgrade stops, which since GitLab 17.5 fall at x.2, x.5, x.8 and x.11, such as 18.2, 18.5, 18.8 and 18.11, according to the GitLab upgrade paths documentation. Plan each upgrade as a sequence of stops, check backups before each one, and confirm the current stop list and any post-upgrade migrations for your version. Gitea and Forgejo lower the cadence burden in a different way: Forgejo publishes LTS releases in the first quarter of each year with critical bugfixes and security support for one year and three months, while stable releases receive full support for three months plus a two-week window. Confirm the current LTS dates in the Forgejo upgrade guide before you pick a target version.

Forgejo also documents a two-step path from Gitea installations up to Gitea v1.22, first to Forgejo v10.0.x and then to a later Forgejo version. If you are coming from an older Gitea, that path decides how much of the migration is routine. Whichever platform you choose, build a staging environment that mirrors production, rehearse each upgrade step against a restored backup, and time the rehearsal so the staff cost enters your quote and your run budget. Ask your implementation partner and internal platform team to agree who owns patch intake, test sign-off and rollback before go-live.

Questions buyers ask about the cost of replacing Bitbucket

How much staff effort does self-hosting a Git forge really take?

Self-hosting shifts cost from the vendor invoice to your own people, so the staff effort is usually the largest recurring line. The work covers installation, database and storage operations, backups and restore tests, upgrades, user and permission administration, and runner capacity for CI. The amount depends on user count, how many CI jobs run, and whether you run high availability. GitLab's reference architectures run from 1,000 users to 50,000 users, and its documentation recommends a high availability strategy for 3,000 or more users, which adds components to operate. Ask your team to estimate hours per month for each duty, then compare that with the Bitbucket seat, build minute and runner fees in your renewal. Whether one team can run it alone depends on existing Linux, database and CI skills, which only your own assessment can confirm.

How long does a Bitbucket migration take, and what drives the time?

The duration depends on scope more than on the Git history itself. Cloning repositories is fast, but pull requests, review comments, issues and wikis need a platform-specific import or a scripted export through the API. The main drivers are the repository count, the volume of pull requests and comments, the size of LFS objects, and how many pipelines and permissions must be re-created. API throughput also matters: Bitbucket Cloud allows 1,000 requests per hour for most API resources, so a large export can be paced over many hours or days. Ask any implementation partner for a written schedule based on a sample export of your largest projects, and confirm your actual request volume with your Bitbucket administrator before agreeing to a timeline.

Can Gitea or Forgejo import Bitbucket pull requests?

Neither can import Bitbucket pull requests with a built-in importer, so you need a separate plan. Gitea's migration code includes importers for GitHub, GitLab, Gitea, Gogs, OneDev, GitBucket, Codebase and AWS CodeCommit, but not Bitbucket. Forgejo's dump-repo command exports from git, GitHub, Gitea and GitLab, and it does not list Bitbucket, so Bitbucket repositories move by Git mirror. GitLab, by contrast, can import projects from Bitbucket Cloud and Bitbucket Server, and from Gitea and other GitLab instances. If pull request history matters for audit or review records, plan an export to files or a custom script, and test it on a non-production copy. Confirm the exact importer support in the release you intend to run.

What does the internal team need to provide during the work?

The internal team provides decisions and access, while the implementation partner or your engineers do the technical work. You need administrator access to Bitbucket and the target server, a named owner for permissions and branch protection, and people who can confirm which repositories, projects and users are in scope. Your security and compliance leads should review authentication, backup and retention settings. Your CI owners must decide how Pipelines jobs, variables and runners map to GitLab CI/CD, Gitea Actions or Forgejo Actions, because Pipelines variables cannot be read back from Bitbucket. Ask any partner to list these inputs in the written scope before work starts, so the internal time commitment is visible in the quote.

Do we need GitLab Premium or Ultimate for the features we use?

Only if you need the features that sit in those tiers. GitLab's pricing page lists GitLab Free at 0 US dollars, Premium at 29 US dollars per user per month billed annually, and Ultimate as custom priced, with all three available for self-managed installations. Premium adds advanced CI/CD and priority support. Ultimate adds application security testing, software supply chain security, vulnerability management and compliance features. Map each Bitbucket feature you rely on, such as branch permissions, code owners, required approvals and Pipelines, to a GitLab tier before deciding. Confirm current prices and feature placement on the GitLab pricing page at the time of your quote, since tier contents can change.

How do LTS and support options compare across GitLab, Gitea and Forgejo?

The three platforms differ in release model and in where paid support comes from. GitLab ships a major release yearly, a minor release on the third Thursday of each month and patch releases twice a month, and it maintains the current and previous two minor lines, with security fixes backported to the previous two monthly releases. Forgejo publishes LTS releases in the first quarter of each year, which receive critical bugfixes and security support for one year and three months. Gitea offers commercial support from CommitGo, Inc. through Gitea Enterprise. Compare the support window you need against each vendor's published policy, and ask for written response terms from any commercial provider before relying on them.

What recurring costs should we budget beyond servers and staff?

Recurring costs include the infrastructure to run the forge, storage growth, backup copies, monitoring, CI runner capacity, and the time for upgrades and security patches. Storage grows with repository history and LFS objects, and backups must be restored and tested, not only taken. Upgrades recur on the vendor's release cadence, and GitLab requires passing through upgrade stops such as 18.2, 18.5, 18.8 and 18.11 when moving across versions. Forgejo documents transparent upgrades from Gitea up to Gitea v1.22 in two steps. Ask for a cost model that lists each item as one-time or recurring, the units used (for example, per user, per runner or per terabyte), and the hours assumed for upgrades.

Does a self-hosted forge change our compliance or data residency position?

Self-hosting keeps code and metadata inside infrastructure you control, but it does not make you compliant on its own. The platform, its hosting, access controls, backups and logging all become your responsibility, and those controls form the evidence an auditor reviews. GitLab documents offline and air-gapped operation, which can matter for restricted networks. Hosted services offer regional storage only in some plans and regions, and Azure DevOps keeps tokens and SSH keys in a US datacenter, so check where each data type sits today. Independent auditors and certification bodies issue attestations; DeployOpen prepares the systems, controls and evidence for that assessment.

Costs teams forget on each side of the comparison

Most Bitbucket and self-hosted forge cost comparisons count licenses and servers and stop there. The cards below cover the items that tend to surface late: data that cannot be exported, integration rework, recovery testing, high availability components, repository size planning and contract timing. Each one is a cost on one side or the other, and each needs a confirmed figure before a decision.

Pipelines variables that cannot be read back

Bitbucket Pipelines secured repository and workspace variables cannot be read back through the API or the interface once stored. Every value must be re-entered in the new CI system, usually by the owner of each secret, and some values may need rotation because nobody on the team still holds them. Count the staff hours for this inventory and for rotating credentials that services depend on. Confirm the exact export behavior with Atlassian for your plan before you plan the work.

Jira and Bitbucket integration rework

Smart commit links, build status badges, branch-to-issue linking and pull request panels in Jira depend on the Bitbucket connection. Replacing Bitbucket with GitLab, Gitea or Forgejo means rebuilding those links, webhooks and any reporting that reads them. On the self-hosted side, budget for the connector or webhook design, testing and the people who maintain it after go-live. Ask your Jira administrators which workflows depend on these links.

Backup restore testing

Self-hosting moves backup responsibility to your team. A backup that has never been restored is not evidence of recovery. Plan recurring restore tests for the repositories, the database, and the object or file storage that holds LFS and attachments, and record the time each test takes. The GitLab backup and restore documentation describes what a backup covers and what it does not, so confirm that scope against your own layout before you rely on it.

High availability components

At larger user counts, GitLab's documentation generally recommends a high availability strategy using Gitaly Cluster with Praefect, PostgreSQL with Patroni, Redis Sentinel and Consul. Each component adds servers, monitoring, failover testing and specialist skill, and each is recurring cost in staff time. Gitea and Forgejo deployments use a different topology, so confirm the availability design your user count and uptime needs require before comparing server totals.

Repository size under self-hosted storage

Bitbucket Cloud enforces a 4 GB repository limit, so large monorepos or histories with binary files may already rely on LFS or be split. Moving to self-hosted storage removes that cap but makes disk growth, Git LFS storage, filesystem backups and replication your cost. Measure repository sizes and LFS usage before sizing storage. Ask whether any repository would need history rewriting during the move, because that changes the migration effort.

Atlassian contract timing and renewal notice

Hosted and self-managed Bitbucket contracts carry renewal dates and notice periods that determine when a move must be finished or when a renewal is locked in. Atlassian has announced that Data Center products are sunset by March 28, 2029, and that Bitbucket Data Center continues beyond 2029 with a Hybrid License for existing customers. Ask Atlassian or your reseller for your exact end date, notice terms and what the Hybrid License covers for your seats before you set a migration deadline.

How GitLab tiers, Gitea Enterprise and Forgejo change the bill

The licensing model decides which costs are fixed and which grow with your headcount, so start by mapping each open-source forge's paid layer before you price servers. GitLab is open core: the code outside the ee/ directory is MIT licensed, while files in ee/ are proprietary and need a paid subscription. GitLab Free costs 0 US dollars, Premium costs 29 US dollars per user per month billed annually and adds advanced CI/CD and priority support, and Ultimate is custom priced and covers application security testing, vulnerability management and compliance features. Every tier is available for self-managed installations, so a Premium quote multiplies by your user count and recurs every year. Ask the vendor which Premium features your Bitbucket Pipelines and access controls actually map to before you assume the upgrade is needed.

Gitea is MIT licensed with no paid core, and CommitGo, Inc. sells commercial support and Gitea Enterprise. The Enterprise page lists SAML 2.0 service provider support, audit logging, organization-level branch protection inheritance, IP allowlisting, mandatory two-factor authentication and dependency scanning. If your audit or identity team requires any of these, the subscription is a recurring line item to put in the comparison, while the base software stays free. The facts supplied do not give Gitea Enterprise prices, so request a written quote that lists the features, support hours and renewal terms. Confirm each feature against the current Gitea Enterprise page, since editions change.

Forgejo is GPL-3.0-or-later from v9.0, with earlier versions under MIT, and Codeberg e.V. holds its domains while project governance stays independent. The supplied facts do not list a paid Forgejo tier, so a Forgejo bill is mainly infrastructure, staff time and any external support you buy from a partner. Budget for the operating work the licence does not cover, such as upgrades and backups. Before you decide, check the Forgejo FAQ for current licensing and support details and ask any outside provider to name the support channels and response commitments in writing.

How DeployOpen scopes a fixed-price Git platform implementation

DeployOpen is a Chainscore Labs company that plans, implements, hardens, backs up and documents self-hosted open-source platforms inside the client's own infrastructure. For a move off Bitbucket, we start from a written scope that compares your actual Bitbucket spend with the component costs of GitLab, Gitea or Forgejo, so the decision rests on your numbers.

How we scope

  • Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts.
  • The written scope lists which Bitbucket workspaces, repositories, pipelines and Jira links are in or out of the move.
  • We ask you to confirm your Cloud or Data Center contract terms, seat counts and build usage before quoting.

How we build

  • We install the chosen forge in your cloud account, data center or air-gapped network, sized to your user and repository counts.
  • Repository history moves by mirror, while pull requests and comments follow a separate, tested export and import plan.
  • Replacement CI runs, such as GitLab CI/CD or Forgejo Actions, are configured and tested against your real pipelines before cutover.

How we hand over

  • You receive documentation covering installation, access model, branch protection, backup and restore procedures and runbooks.
  • Backup and restore are tested in your environment, so recovery steps are proven before the Bitbucket contract ends.
  • Your team gets a handover session and a list of open items, with owners agreed in the written scope.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover.
  • Upgrade planning follows the vendor's documented upgrade path and release cadence for the platform you choose.
  • Control evidence for compliance assessments is prepared for your auditors, who issue any formal reports or certifications.

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.