# Any good alternative to GitHub?

**URL:** <https://discourse.julialang.org/t/any-good-alternative-to-github/137242>\
**Category:** Offtopic\
**Created:** [May 22, 2026, 5:47pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242 "2026-05-22T17:47:20Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 22, 2026, 5:47pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/1 "2026-05-22T17:47:20Z")

</div>

The quality of GitHub’s services has declined significantly in the last few months (or longer?). Are there any good alternatives for hosting Julia packages?

---

<div class="post-metadata">

**Author:** ![mihalybaci](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mihalybaci/32/13528_2.png) [@mihalybaci](https://discourse.julialang.org/u/mihalybaci)\
**Post date:** [May 22, 2026, 5:52pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/2 "2026-05-22T17:52:44Z")

</div>

[Codeberg](https://codeberg.org/) is a good place to start. I’ve actually wondered if the Julia package server would be able to integrate Codeberg-hosted packages rather than Github, but I presume that is a non-starter.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 22, 2026, 6:01pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/3 "2026-05-22T18:01:53Z")

</div>

The main automation tool, **Registrator.jl** , currently only supports GitHub and GitLab out of the box, not Codeberg.

Can this be fixed?

---

<div class="post-metadata">

**Author:** ![dilumaluthge](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dilumaluthge/32/29283_2.png) [@dilumaluthge](https://discourse.julialang.org/u/dilumaluthge)\
**Post date:** [May 22, 2026, 6:07pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/4 "2026-05-22T18:07:06Z")

</div>

I think Codeberg support would be great to have. A (probably incomplete) list of steps is something like:

1. Add Codeberg support to GitForge.jl
2. Add Codeberg support to Registrator.jl (specifically to the web UI, which is the same code path that we currently use for GitLab)
3. Work with the JuliaHub folks to get the new version of the Registrator web UI integrated into the JuliaHub product. (The JuliaHub folks graciously host the Registrator web UI for us.)
4. Check to see if any other tooling (AutoMerge, TagBot, etc) needs to be patched.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [May 22, 2026, 6:14pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/5 "2026-05-22T18:14:51Z")

</div>

1. PR at [Add Forgejo support with live Codeberg validation · Pull Request #55 · JuliaWeb/GitForge.jl](https://github.com/JuliaWeb/GitForge.jl/pull/55), which presumably needs someone who is capable of reviewing it.
2. PR at [Add Codeberg support to the Web UI · Pull Request #478 · JuliaRegistries/Registrator.jl](https://github.com/JuliaRegistries/Registrator.jl/pull/478). I guess the status is about the same.

---

<div class="post-metadata">

**Author:** ![mihalybaci](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mihalybaci/32/13528_2.png) [@mihalybaci](https://discourse.julialang.org/u/mihalybaci)\
**Post date:** [May 22, 2026, 6:16pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/6 "2026-05-22T18:16:12Z")

</div>

oh that’s neat, I had assumed that it would be more involved than that.

---

<div class="post-metadata">

**Author:** ![csvance](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/csvance/32/218927_2.png) [@csvance](https://discourse.julialang.org/u/csvance)\
**Post date:** [May 22, 2026, 8:33pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/7 "2026-05-22T20:33:10Z")

</div>

Do any of the Github alternatives have similar levels of free CI? Obviously Github’s CI is rather flaky to say the least, but at least it’s free.

---

<div class="post-metadata">

**Author:** ![sob](https://avatars.discourse-cdn.com/v4/letter/s/65b543/32.png) [@sob](https://discourse.julialang.org/u/sob)\
**Post date:** [May 22, 2026, 8:40pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/8 "2026-05-22T20:40:15Z")

</div>

Self-hosted Gitlab on my end. Anything Microsoft touches turns to !@#$ (LinkedIn, Github, etc).

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 22, 2026, 9:32pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/9 "2026-05-22T21:32:44Z")

</div>

> [@csvance](#):
>
> Do any of the Github alternatives have similar levels of free CI?

> **[Working with Codeberg's CI | Codeberg Documentation](https://docs.codeberg.org/ci/)**

So yes, they offer free CI. No, it is different. For example, as far as I understand, only Linux test runners are offered by default; for anything else, you must provide your own test runners.

---

<div class="post-metadata">

**Author:** ![karei](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/karei/32/214809_2.png) [@karei](https://discourse.julialang.org/u/karei)\
**Post date:** [May 23, 2026, 1:20am UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/10 "2026-05-23T01:20:02Z")

</div>

Interesting. GitHub does not just have the problem of declining service quality.

Copilot was controversial from day one because it was trained on public code. GitHub itself described Copilot as being [“trained on billions of lines of public code” back in 2021](https://github.blog/ai-and-ml/github-copilot/github-copilot-research-recitation/?utm_source=chatgpt.com). But the April 24, 2026 Copilot data policy change feels like GitHub stopped pretending this is not an AI data pipeline.

From 2026-04-24 onward, GitHub uses Copilot interaction data from Copilot Free / Pro / Pro+ users by default to train and improve AI models, unless users opt out. This includes inputs, outputs, code snippets, and associated context. ([The GitHub Blog](https://github.blog/news-insights/company-news/updates-to-github-copilot-interaction-data-usage-policy/?utm_source=chatgpt.com))

So if you are on Copilot and have not opted out, your Copilot interactions may be used for AI model training by default. Personally, I find this a pretty serious trust issue.

---

<div class="post-metadata">

**Author:** ![karei](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/karei/32/214809_2.png) [@karei](https://discourse.julialang.org/u/karei)\
**Post date:** [May 23, 2026, 1:32am UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/11 "2026-05-23T01:32:25Z")

</div>

> [@ufechner7](#):
>
> For example, as far as I understand, only Linux test runners are offered by default; for anything else, you must provide your own test runners.

Right. I’m using Woodpecker CI myself, and I’m fine with the hosted CI being Linux-only.

But until the two PRs _GunnarFarneback_ mentioned are merged, Codeberg-hosted packages still need manual registration in General, e.g. via LocalRegistry.jl.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 23, 2026, 3:34am UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/12 "2026-05-23T03:34:10Z")

</div>

> [@karei](#):
>
> So if you are on Copilot and have not opted out, your Copilot interactions may be used for AI model training by default. Personally, I find this a pretty serious trust issue.

Is that the same with GitLab?

---

<div class="post-metadata">

**Author:** ![karei](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/karei/32/214809_2.png) [@karei](https://discourse.julialang.org/u/karei)\
**Post date:** [May 23, 2026, 5:28am UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/13 "2026-05-23T05:28:43Z")

</div>

GitLab is not exactly a saint either. Its current “good policy” is largely the result of past backlash and GitHub shooting itself in the foot.

GitLab has its own history with data usage. In 2019, it planned to add product usage telemetry to [GitLab.com](http://GitLab.com) and some [proprietary self-managed packages](https://gitlab.com/gitlab-org/gitlab/-/issues/34833), involving third-party analytics services like [Pendo and Snowplow](https://gitlab.com/gitlab-org/growth/product/-/issues/164). Unsurprisingly, self-hosted users and the open source community pushed back hard. GitLab then [rolled back the related Terms of Service change on 2019-10-24](https://about.gitlab.com/blog/update-free-software-and-telemetry/) and said it would not enable user-level product usage tracking on [GitLab.com](http://GitLab.com) or self-managed instances before re-evaluating the plan. After Sid Sijbrandij’s apology, GitLab further narrowed the scope to [GitLab.com only, explicitly stating that self-hosted customers would not be affected](https://gitlab.com/gitlab-com/www-gitlab-com/-/issues/5672). Third-party media also summarized the incident as [GitLab walking back its telemetry plan after user pushback](https://www.devclass.com/ci-cd/2019/10/25/gitlab-telescopes-telemetry-effort-after-users-push-back/1626072).

The AI side also has some history. According to GitLab’s own [Terms of Use history page](https://about.gitlab.com/terms/), GitLab’s early AI Functionality Terms ([V1](https://gitlab.com/gitlab-com/content-sites/handbook/blob/main/content/handbook/legal/ai-functionality-terms-v1.md) – [V2](https://handbook.gitlab.com/handbook/legal/ai-functionality-terms-v2/), **2023-08-14 to 2024-08-29** ) classified AI feature Input / Output as Customer Content, but still did not clearly say, in today’s wording, that GitLab would not use customer code to train models.

The more obvious backlash happened around **2024-04-22** , in the [Hacker News discussion on GitLab Duo](https://news.ycombinator.com/item?id=40113572). At the time, GitLab Duo’s FAQ said: “GitLab does not train generative AI models based on private (non-public) data. The vendors we work with also do not train models based on private data.” That wording only protected private / non-public data, so people immediately pointed out the obvious implication: public code might not be protected.

Then on **2026-04-20** , GitLab used GitHub Copilot’s policy change as an opportunity to fire back. In [GitHub Copilot’s policy for AI training: A governance wake-up call](https://about.gitlab.com/blog/github-copilots-new-policy-for-ai-training-is-a-governance-wake-up-call/), GitLab’s wording became much stronger: it does not train AI models on customer code at any tier, and its vendors are contractually prohibited from using customer inputs / outputs for their own purposes.

So yes, GitLab’s current “we don’t train on user code” stance is a commercial strategy to compete against GitHub. Codeberg’s position, on the other hand, is an ideological choice rooted in free software and community self-governance.

---

<div class="post-metadata">

**Author:** ![GunnarFarneback](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gunnarfarneback/32/1827_2.png) [@GunnarFarneback](https://discourse.julialang.org/u/GunnarFarneback)\
**Post date:** [May 23, 2026, 7:37am UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/14 "2026-05-23T07:37:00Z")

</div>

> [@karei](#):
>
> But until the two PRs _GunnarFarneback_ mentioned are merged, Codeberg-hosted packages still need manual registration in General, e.g. via [LocalRegistry.jl](https://juliaregistries.github.io/General/packages/redirect_to_repo/LocalRegistry).

For what it’s worth it wouldn’t be that hard to automate making PRs to General with LocalRegistry. The bigger problem is to trigger running of AutoMerge in a safe way, without getting exposed to various security risks associated with GitHub actions. (That’s where Registrator comes in.)

---

<div class="post-metadata">

**Author:** ![LeePhillips](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leephillips/32/205514_2.png) [@LeePhillips](https://discourse.julialang.org/u/LeePhillips)\
**Post date:** [May 23, 2026, 2:25pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/15 "2026-05-23T14:25:22Z")

</div>

If you don’t care about any automatic testing infrastructure, you can do what I did for the code in _Practical Julia_: just put a git repository on your own website. You can even make a Julia registry. Readers of my book just need to execute a `registry add` command, then can use any of the book’s code with the usual `add` and `using`.

You can’t stop unethical actors like Github from stealing your code and selling it to copy-paste programmers. But you don’t have to invite them to do it.

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [May 23, 2026, 4:30pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/16 "2026-05-23T16:30:16Z")

</div>

I need automated testing. I guess I give GitLab a try:

> **[GitHub vs GitLab, Status & Reliability Comparison](https://servicealert.ai/compare/github-vs-gitlab)**
>
> Compare GitHub and GitLab reliability side by side. Real-time status, uptime history, and incident tracking for both services.

---

<div class="post-metadata">

**Author:** ![BeastyBlacksmith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/beastyblacksmith/32/4741_2.png) [@BeastyBlacksmith](https://discourse.julialang.org/u/BeastyBlacksmith)\
**Post date:** [May 23, 2026, 5:41pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/17 "2026-05-23T17:41:36Z")

</div>

For people in Germany also note, that a GitLab Intance is run by GWDG at [academiccloud.de](http://academiccloud.de).

You can make repos public there, but I don’t know whether it works for registering packages.

---

<div class="post-metadata">

**Author:** ![dilumaluthge](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dilumaluthge/32/29283_2.png) [@dilumaluthge](https://discourse.julialang.org/u/dilumaluthge)\
**Post date:** [May 23, 2026, 6:32pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/18 "2026-05-23T18:32:58Z")

</div>

For GitLab instances that aren’t [GitLab.com](http://GitLab.com), you can definitely register packages in the General registry. You’ll have to generate the PR manually using LocalRegistry.jl. AutoMerge currently can’t handle such PRs, so you’ll need to ask for a manual review and merge (you can ask in the #pkg-registration Slack channel).

---

<div class="post-metadata">

**Author:** ![jbytecode](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jbytecode/32/17719_2.png) [@jbytecode](https://discourse.julialang.org/u/jbytecode)\
**Post date:** [May 25, 2026, 8:36pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/19 "2026-05-25T20:36:11Z")

</div>

No need to chase the hype; GitHub will bounce back in no time. Microsoft wouldn’t want to let go of that kind of power.

---

<div class="post-metadata">

**Author:** ![sob](https://avatars.discourse-cdn.com/v4/letter/s/65b543/32.png) [@sob](https://discourse.julialang.org/u/sob)\
**Post date:** [May 25, 2026, 10:03pm UTC](https://discourse.julialang.org/t/any-good-alternative-to-github/137242/20 "2026-05-25T22:03:28Z")

</div>

It will bounce as strongly as the Zune or Windows Phone.
