Skip to content

The best code hosting platform for open source projects

GitHub for OSS contributors on GitHub; check workflow, public standard-runner CI eligibility/limits, storage/collaborators, self-hosting, governance/AUP.

Comparison 17 min Updated Aug 14, 2026

GitHub's billing documentation for Actions says Actions use is free for public repositories that use standard GitHub-hosted runners, and free on self-hosted runners. GitHub is our pick for open source projects whose contributors already work on GitHub and whose public-repository CI fits standard hosted runners, provided maintainers confirm contributor workflow, CI eligibility and limits, storage and collaborator rules, self-hosting requirements, and governance and acceptable-use terms. We weigh that free route for public repositories on standard runners first, together with the contribution workflow this project's contributors already use. GitHub documents larger runners, Packages, Git LFS, artifact retention and acceptable use under separate rules.

GitLab suits maintainers who want to operate a self-managed instance and choose its tier, with its runners and storage as their own responsibility. Codeberg suits free/libre public projects that put its nonprofit operator first and accept its hosted CI and resource-request conditions along with its acceptable-use terms.

What should an open source project confirm before it picks a host?

In a June 2025 Hacker News discussion, a member of the Strudel project describes migrating its issues and pull requests and taking CI onto self-managed runners, and another participant describes lower visibility and interaction after a move. The first thing to settle is therefore local to your project: where its contributors already have accounts and review pull requests. A May 2025 discussion in the Arcticons project about a possible move raises the same points, with contributor accessibility and CI dependence among the starter's concerns.

GitHub's Octoverse report counts 180M+ developers, a term its glossary defines as anyone with a GitHub account, and 630M repositories, public and private together, for September 1, 2024 through August 31, 2025. GitLab's company page estimates over 50 million registered users in a figures block dated June 2026, and Codeberg's November 2025 status letter reports more than 300k repositories and a recent crossing of 200k registered accounts. Those are accounts and repositories counted on different dates, and none of them measures the contributors to your project.

Stack Overflow's 2026 developer survey lists GitHub for public projects, apart from private repositories, among the community platforms its respondents worked with; that question records community-platform use by the people who answered it and ranks no code hosts. List your own active contributors by the host they use today, and weigh that list above any published total.

GitHub's Actions billing page charges for larger runners even when a public repository uses them. GitLab's compute-minute documentation meters hosted jobs against a monthly quota for the namespace and multiplies job time by a cost factor set per runner type, and Codeberg's hosted Actions runners are for public projects under a free/libre license and run on fair use. A free allowance on each host therefore belongs to a runner type and a kind of project. List your CI jobs with the operating system, machine size and usual duration of each, and check every job against the runner it is eligible for before you count it as free.

A project in a GitLab Free namespace becomes read-only when its repository and Git LFS storage pass the limit, and stays that way until storage is bought, according to GitLab's storage documentation. GitHub blocks a file above its size limit and sends larger files to Git LFS, which carries its own included quota, and Codeberg's FAQ asks a project to request resources before its use passes the stated storage thresholds. Storage rules decide whether release binaries and large assets stay beside the code, and each host writes them store by store: repository, large files, packages, artifacts. The collaborator rule to check is visibility, because GitLab's user-limit page applies its cap to top-level namespaces with private visibility.

GitLab's installation documentation lists a Linux package, a Helm chart, the GitLab Operator, Docker and a self-compiled install for an instance you run yourself. A project that takes that route supplies the servers, storage and runners, so decide first whether your maintainers have that time. GitHub documents its own self-hosted route, Enterprise Server, and the software Codeberg runs, Forgejo, installs on your own infrastructure. On all three, an instance you operate is a separate arrangement from an account on the hosted service, with its own license terms to read.

Codeberg's Terms of Use require works in a public repository to carry a license that permits reuse, modification and redistribution. A host's rules decide whether your project is eligible to be there and what its CI is allowed to run, and the operator's structure decides who is able to change those rules. A 2024 issue in The Turing Way's repository puts control of the host and the openness of its software among the points to discuss. Read each host's acceptable-use terms against what your repository contains and what your CI jobs do, and read the operator's governing documents at their dates.

GitHub, GitLab and Codeberg on the five confirmations

GitHub GitLab Codeberg
Named projects at observed scope Public repositories for Kubernetes, Visual Studio Code, Godot Engine and Home Assistant Core GNOME operates its own GitLab instance as its main development platform BookStack moved repository management, issues and pull requests from GitHub, April 2026; Zig named Codeberg its canonical origin
Hosted CI for public projects Standard hosted runners free on public repositories; larger runners billed; hosted jobs end at 6 hours; 20 concurrent standard-runner jobs on Free, at most 5 of them macOS 400 compute minutes a month per Free namespace on GitLab.com instance runners, metered by cost factor; hosted jobs time out after 3 hours; own runners unmetered Global Forgejo Actions runners for public free/libre projects under fair use; runner guidelines of 2, 5 and 10 minutes; hosted Woodpecker by volunteer-reviewed request
Repository and large-file storage Files above 100 MiB blocked; repository recommended under 1 GB; Git LFS on Free includes 10 GiB of storage and 10 GiB of bandwidth 10 GiB per project for repository plus Git LFS in a Free namespace; read-only over the limit Request first above 750 MiB of Git storage, or above 1.5 GiB of packages, LFS and attachments
Build artifacts and releases Artifacts and logs kept 90 days by default; 1 to 90 days on public repositories Artifacts up to 1 GB compressed, default expiry 30 days on GitLab.com Releases and attachments count in the non-Git storage bucket, set per user or organization
Collaborators Pricing table lists unlimited collaborators on public repositories under Free User limit applies to private top-level namespaces; Free-tier public top-level groups and personal namespaces exempt Read, write or administrator permission granted by the owner; direct collaborators need Codeberg accounts
Self-managed route GitHub Enterprise Server, a self-hosted version delivered as a virtual appliance Linux package, Helm chart, Operator, Docker or self-compiled install; pricing FAQ names a Free self-managed tier Forgejo, the software Codeberg runs, installs on your own infrastructure
Operator Terms of Service define Microsoft as an Affiliate of GitHub GitLab Inc., incorporated in 2014 and publicly traded on Nasdaq from 2021 Codeberg e.V., a registered non-profit association based in Berlin
Acceptable-use terms Actions terms bar cryptomining and hosted-runner activity unrelated to the repository's software Acceptable Use Policy bars cryptocurrency mining and use of the services primarily to distribute content Terms of Use require a license permitting reuse, modification and redistribution for public repositories

GitHub: free standard hosted runners for public repositories

GitHub's runner reference describes standard GitHub-hosted runner use as free and unlimited on public repositories, and its table for those repositories lists Linux and Windows machines with 4 CPUs, 16 GB of RAM and 14 GB of SSD storage on x64 and arm64. The same table lists a macOS arm64 runner with 3 CPUs and 7 GB of RAM, an Intel macOS runner, and a single-CPU Linux runner that GitHub describes as meant for lightweight tasks. A project that tests on more than one operating system finds each of those machines in the table for public repositories.

A job on a GitHub-hosted runner ends at 6 hours, and the Free plan runs 20 standard-runner jobs at once with at most 5 of them on macOS, according to GitHub's Actions limits page. Larger runners sit outside the free route: the billing page charges for them even in public repositories, and the runner reference assigns them to Team and Enterprise Cloud plans. A job that needs more than a standard machine therefore needs a paid plan or a runner you host yourself, and the billing page lists self-hosted runners as free to use with Actions.

The billing page ties its quota table to private repositories, and on that table GitHub Free gets 2,000 minutes a month and 500 MB of artifact storage. The page says artifact storage is shared with Packages and treats cache as a separate allowance. Keep that record apart from the public route when a project also runs a private repository.

GitHub's terms for additional products bar Actions from cryptomining and from being offered as a commercial service, and on GitHub-hosted runners they bar activity unrelated to producing, testing, deploying or publishing the repository's software. The same terms let GitHub end jobs, restrict Actions, disable repositories or suspend accounts for misuse. Its Acceptable Use Policies carry a bandwidth section that lets GitHub throttle file hosting or suspend an account when use is significantly excessive compared with other users of similar features. Compare your heaviest scheduled jobs and your download traffic with that wording before you rely on the free route.

GitHub blocks a file above 100 MiB and names Git LFS as the route for anything larger, after a warning that starts at 50 MiB, according to its large-file documentation. The same page recommends a repository under 1 GB and strongly recommends staying under 5 GB.

GitHub's Git LFS billing page attaches the included quota to the repository owner's account for public and private use, at 10 GiB of storage and 10 GiB of bandwidth on Free. Artifact and log retention defaults to 90 days, and a public repository sets it between 1 and 90 days. Usage of GitHub Packages is free for public packages.

GitHub's pricing table lists public repositories, and collaborators on them, as unlimited under Free. The Terms of Service allow one free account per person or legal entity, with machine accounts excepted, and they state that a contribution to a public repository is accessible to everyone on the internet.

Kubernetes, Visual Studio Code, Godot Engine and Home Assistant Core each keep a public repository on GitHub: kubernetes/kubernetes and home-assistant/core under an Apache-2.0 label, microsoft/vscode and godotengine/godot under MIT. Zig's lead wrote on November 26, 2025 that the project had been on GitHub for about ten years and was moving its canonical repository to Codeberg. The post describes Actions bugs and scheduling problems that backed up Zig's CI, and it objects to GitHub's Copilot issue features under the project's no-AI policy. A project with a comparable CI load or the same policy should read that post before it commits to the hosted runners.

GitHub's self-hosted route is GitHub Enterprise Server, which its documentation describes as a self-hosted version of the platform, delivered as a virtual appliance that runs on a hypervisor on premises or in a public cloud, with a 45-day trial. For a repository on GitHub's hosted service, self-hosted runners execute Actions jobs on your machines while the platform stays on GitHub's service.

The Terms of Service define Microsoft as an Affiliate of GitHub, and they define an affiliate by common control through more than fifty percent ownership or the right to direct management. In an August 2025 post, GitHub's departing CEO wrote that GitHub and its leadership team would continue as part of Microsoft's CoreAI organization.

GitLab: a forge your maintainers operate on the tier they choose

GNOME's infrastructure handbook calls GitLab the project's main development platform, used for project hosting, issue tracking, team spaces and CI, on an instance GNOME operates. GitLab's installation documentation lists the ways to run such an instance: a Linux package, a Helm chart, the GitLab Operator, Docker, a self-compiled install and the GitLab Environment Toolkit. The same page says GitLab does not run on Microsoft Windows.

GitLab's pricing FAQ refers to a Free tier of the self-managed offering and says the five-user limit does not apply to it. On that route your maintainers supply the servers, the storage and the CI runners, and they choose the tier the instance runs on.

The LICENSE file in GitLab's repository places content outside its listed directories under the MIT Expat license and puts the ee/ directory under a separate license. That ee/ license requires agreement to GitLab's subscription terms and a valid Enterprise Edition subscription for production use, and it allows copying and modifying the code for development and testing without one. The pricing FAQ adds that an instance whose paid subscription is not renewed can be downgraded to Community Edition, which the FAQ calls free to use.

On GitLab.com, a Free namespace receives 400 compute minutes a month on instance runners, reset on the first day of each month and counted against the job's top-level namespace. GitLab multiplies job time by a cost factor, which its table sets at 1 for the small Linux x86-64 runner and 2 for the medium one. Hosted-runner jobs time out after 3 hours whatever the project setting.

The pricing FAQ requires card details to use GitLab.com shared runners, verified with a one-dollar authorization and no charge, and says your own runners are unmetered and usable on all plans. Extra minutes are sold on the pricing page at $10 per 1,000 as a one-time purchase.

GitLab's user-limit documentation applies the cap to top-level namespaces with private visibility and exempts Free-tier users in public top-level groups and in personal namespaces. The same page limits Free accounts created after January 27, 2026 to three top-level groups, with the personal namespace left out of that count. Each project in a Free namespace gets 10 GiB for its repository and Git LFS, and artifacts on GitLab.com are capped at 1 GB compressed with a default expiry of 30 days, according to GitLab's limits page. Confirm with GitLab whether a Free namespace is able to buy storage before a large repository depends on it.

The GitLab for Open Source Program is a separate arrangement that a project applies for, and GitLab's program page gives qualifying projects Ultimate features and 50,000 compute minutes a month. It requires every project in the namespace to carry an OSI-approved license and to be publicly visible, and it excludes an organization that seeks profit by selling services or by charging for enhancements or add-ons. Members receive no support and renew each year or are downgraded. Personal namespaces are not eligible.

GitLab's company page dates its incorporation to 2014 and its listing on the Nasdaq Global Market to 2021. Its annual report for the fiscal year ended January 31, 2026 gives Class B shares ten votes each against one for Class A, and says Class B holders held a substantial majority of the voting power on that date. GitLab's Acceptable Use Policy, last modified July 2, 2026, covers the Free, Premium and Ultimate tiers. It prohibits cryptocurrency mining, use of the services primarily to distribute content, repeated or systematic bulk exports of your own GitLab data except where law permits, and usage that significantly exceeds that of other users of similar features.

Codeberg: nonprofit-operated hosting for free and libre public projects

Codeberg's documentation says the platform is operated by Codeberg e.V., a registered non-profit association based in Berlin. The association's German bylaws, in the version dated November 27, 2024, state its purpose as promoting free content and free and open source software and give active members voting and election rights. Under those bylaws the General Assembly decides the budget, and Codeberg's 2026 budget post says active members vote on it and auditors review spending against the bylaws.

Beyond the license requirement for public repositories, the Terms of Use Codeberg serves restrict cryptocurrency-related projects and projects made mostly of code written by generative-AI tools. They allow private repositories for needs tied to a free/libre project or for very small personal material, and Codeberg's FAQ says it does not offer private hosting for commercial projects. On July 23, 2026, Codeberg's blog reported the results of two member motions on AI and LLMs, one of them concerning the terms.

Codeberg's Actions guide describes its hosted Forgejo Actions as a limited service and has a maintainer enable the feature in repository settings. The runner README says the default global runners need no access request and are for public projects under a free/libre license. Its table lists codeberg-tiny at 1 CPU, 2G of RAM and 2 minutes, codeberg-small at 2 CPUs, 4G and 5 minutes, and codeberg-medium at 4 CPUs, 8G and 10 minutes, figures the README presents as guidelines for the most a build should use under fair use. Lazy variants of the runners are subject to delay, and the README states a goal of completing those jobs within 24 hours.

Access to Codeberg's hosted Woodpecker CI goes through a request that a volunteer reviews, according to the request repository's README. Access is granted per account, and the repository has to be public and clearly licensed as free/libre. The README says the hosted CI runs GNU/Linux containers and serves no other operating system.

A third route is a Forgejo runner your maintainers operate and connect to a repository, an account or an organization, which the Actions guide documents separately. A project whose tests need macOS or Windows machines, or whose builds run past the Actions guideline times, should confirm a supported hosted runner or arrange a runner its maintainers operate.

The FAQ asks a project to request resources first when its use will exceed 750 MiB of Git storage, 1.5 GiB of packages, LFS and attachments, or generally large CI resources. Codeberg's 2025 storage notice sets those limits per user or organization and counts releases in the second bucket, which is additional to Git storage. The FAQ says exceptions cannot be purchased and that no particular service requires payment, and the request README sets a default of 100 repositories per user or organization.

Anyone can view a public repository on Codeberg, and Codeberg users contribute through issues and pull requests, according to its permissions guide and its invitation guide. Direct collaborators need Codeberg accounts, and an owner grants each one read, write or administrator permission. For a project whose contributors work on GitHub today, each contributor registers on Codeberg before opening a pull request there.

Codeberg.org runs Forgejo, which Codeberg's documentation describes as self-hostable free software that anyone can install, and the Forgejo project publishes download instructions for running it on your own infrastructure. Forgejo's comparison page describes the distribution as wholly free software, and its 2022 launch announcement names Codeberg e.V. as the project's custodian. An instance you run yourself is a separate route from an account on Codeberg, and on it the operator supplies the compute.

BookStack's maintainer, Dan Brown, wrote on April 28, 2026 that repository management and the project's issues and pull requests had moved from GitHub to Codeberg, and that technical migration problems and the core repository's volume of issues and pull requests made the move take longer. Zig's migration post names Codeberg as the canonical origin of its main repository and leaves existing GitHub issues open and unmigrated. A Genode maintainer's post of February 12, 2026 announced the migration of the genode-* repositories and Goa and left the main genode.git repository out of the plan at that date; it adds that references across repositories on Codeberg need an explicit repository name.

Which code hosting platform should an open source project choose?

GitHub is our pick for open source projects whose contributors already work on GitHub and whose public-repository CI fits standard hosted runners, provided maintainers confirm contributor workflow, CI eligibility and limits, storage and collaborator rules, self-hosting requirements, and governance and acceptable-use terms. We put two things first for that project: the documented free route for public repositories on standard hosted runners, and the pull request workflow its contributors already use on GitHub. Staying there keeps each contributor on an account they already have. On GitHub, a job that needs a larger runner is billed even in a public repository, and large files draw on the Git LFS quota, so confirm those two first.

GitLab's pricing FAQ names a Free tier of its self-managed offering, and that is where GitHub trails for this buyer: its documented self-hosted route is Enterprise Server, a separate route from the hosted Free plan. We still put the hosted route first for the project whose contributors work on GitHub, because an instance you operate puts the servers, storage and runners in the maintainers' hands, and this project's contributors and its CI already fit the hosted service.

GitLab is the better pick for maintainers who want to operate a self-managed instance and choose its tier, with the runners and storage it needs as their own responsibility. GNOME runs its development on an instance it operates, and GitLab's license files show which directories are MIT-licensed before a project installs. A project that chooses GitLab.com should read the Free namespace's metered minutes and the Open Source Program's eligibility rules as separate arrangements.

Codeberg is the better pick for a free/libre public project that puts a nonprofit operator first and accepts its fair-use hosted CI and resource requests, along with terms that decide which projects are eligible. BookStack and Zig made that move from GitHub and published dated accounts of the migration. Running Forgejo on your own servers is a different choice from joining Codeberg, with the compute supplied by you.

Other code hosting platforms and forge software

Forgejo is forge software you host yourself, and Radicle is a peer-to-peer stack built on Git.

Provider Website
Bitbucket bitbucket.org
SourceForge sourceforge.net
Gitee gitee.com
Launchpad launchpad.net
GNU Savannah savannah.gnu.org
SourceHut sr.ht
Forgejo forgejo.org
RhodeCode rhodecode.com
Radicle radicle.dev