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 component | Bitbucket (Cloud or Data Center) | Self-hosted GitLab, Gitea or Forgejo | One-time or recurring |
|---|---|---|---|
| Subscription or license | Cloud seats, or Data Center or Hybrid License renewal, paid to Atlassian | No license fee for Gitea or Forgejo. GitLab Community Edition is free, while Premium and Ultimate tiers are paid per subscription | Recurring |
| Build minutes and runner capacity | Pipelines minutes and runner fees, metered by the plan | Your own runner hosts and compute. GitLab Runner, Gitea Actions and Forgejo Actions run on machines you provision | Recurring |
| Infrastructure | Largely included in the subscription for Cloud, or your Data Center servers for self-managed editions | Servers or VMs, load balancers and, for larger GitLab deployments, the high availability components | Recurring |
| Storage | Repository storage within plan limits, with the Bitbucket Cloud storage caps on Free workspaces | Disk for Git data, LFS objects, databases and artifacts, sized to growth | Recurring |
| Backups and restore testing | Largely handled by Atlassian for Cloud, or by your team for Data Center | Backup tooling, off-site copies and periodic restore tests your team or partner runs | Recurring, with a one-time setup |
| Implementation and configuration | Limited for Cloud, Data Center setup and integration work | Installation, SSO, branch protection, runner setup and hardening, often fixed scope | One-time |
| Migration of repositories and history | Export effort for Git history, pull requests, comments and wikis, using the API within rate limits | Git mirroring and platform importers, plus manual re-creation of permissions and pull request context where no importer exists | One-time |
| Upgrades and maintenance | Vendor-managed for Cloud, or your team's upgrade schedule for Data Center | Monthly or regular releases, required upgrade stops for GitLab, and transparent upgrades from Gitea to Forgejo | Recurring |
| Support and internal skills | Atlassian support included in the plan, plus staff who know Bitbucket | Optional commercial support contracts, plus staff time to operate the forge and its runners | Recurring |
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.
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.
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.
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.
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.
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.
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.
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.
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.

