GitAlike

Browser extension · GitHub ⇄ GitLab · any forge · any skin

Use any forge, keep your muscle memory.

GitAlike makes every major forge speak one UI. Point it at GitHub, GitLab, Codeberg/Gitea, Bitbucket, Gerrit or any instance you add, and it re-skins the page as the product you know best — colour, words, navigation, reference markers and keyboard shortcuts included. Nothing else makes GitHub read like GitLab — and back. It changes nothing about what the site does, and every change is reverted the moment you switch it off.

No account No network requests No data collected GPL-3.0 Chromium, Firefox & their forks

GitHub project page, default GitHub project page skinned as GitLab GitHub default GitLab skin

How it works

Three steps, no account, and it is invisible the moment you turn it off.

Pick a skin

Open the popup and choose GitHub UI, GitLab UI or Bitbucket UI — for the whole web, or for the one host you are on.

The site repaints

GitAlike re-points the site's own design tokens and matches the other product's words, navigation and shortcuts — with no reload.

Switch it off

Every change is recorded and undone exactly. With the skin off, the extension is completely inert — nothing to clean up.

See it

Live captures of the real sites at 1280×900. Pick a source forge and a page kind, and the capture shows that page wearing every skin it can — drag a divider to reveal one, or focus it and use the arrow keys. All five sources are here: GitHub, GitLab and Codeberg in full, and Bitbucket and Gerrit from their app shells (their pages render client-side).

GitHub project page

A horizontal tab bar, shown as GitLab — a vertical sidebar-style column — and as Bitbucket — a Source / Pull requests / Pipelines sidebar in Atlassian blue.

GitHub project page, default Default · GitHub GitHub project page skinned as GitLab GitLab UI GitHub project page skinned as Bitbucket Bitbucket UI
Default · GitHub GitLab UI Bitbucket UI Open full size

Not just a theme

A theme changes the colours and stops there. GitAlike also matches the other product's words, navigation, reference markers and shortcuts — then undoes every change when you switch it off.

Colour

Each site's own design tokens (GitHub's Primer, GitLab's Pajamas) are re-pointed at the other product's palette — light and dark.

Words

"Pull request" ⇄ "Merge request", "Insights" ⇄ "Analytics", "Actions" ⇄ "CI/CD". Ordinary page copy only — never inside code, inputs or editable regions.

Navigation

Repo tabs are relabelled, reordered and re-oriented — GitHub's bar becomes GitLab's grouped sidebar, and GitLab's sidebar becomes GitHub's flat tab row.

References

A pull/merge-request link shows the other product's marker: #42!42.

Shortcuts

The other product's g-combos work, so the muscle memory you built on one forge carries over to the other.

Reversible

Every change is recorded and reverted exactly when the skin is switched off. With it off, the extension is completely inert.

The same page, in each product's words

The vocabulary is the point: the same action, named the way the applied product names it. The mapping comes from the skin's own plugin file under src/plugins/skins/, so a label cannot drift from the skin it belongs to.

Concept GitHub UI GitLab UI Bitbucket UI
Code reviewPull requestMerge requestPull request
Continuous integrationActionsCI/CDPipelines
Source tabCodeRepositorySource
Issue trackingIssuesWork itemsJira issues
InsightsInsightsAnalyticsInsights
File finderGo to fileFind fileGo to file
SnippetsGistsSnippetsSnippets
Reference marker#42!42#42

Works with your forges

Three skins over five source products, and no rebuild to add your own. GitHub, GitLab, Codeberg/Gitea, Bitbucket and Gerrit all work — out of the box, or after one prompt — and any site you set up can wear any skin.

github.com gitlab.com GitHub Enterprise Server self-hosted GitLab Codeberg (Forgejo) gitea.com (Gitea) bitbucket.org Bitbucket Data Center Gerrit + GitHub skin + GitLab skin + Bitbucket skin + any instance you add

Add any instance by visiting it or typing its address — no rebuild. Paste a link and GitAlike highlights the product it looks like (/-/merge_requests is GitLab, /pull/ GitHub, /pulls/ Gitea/Forgejo, /pull-requests/ Bitbucket, /c/…/+/… Gerrit), so you usually only confirm it. Bitbucket is both a skin and a source; Gerrit is a source with no bundled host, so you add your instance. Adding a self-hosted host asks the browser to grant that one origin. Sourcehut is the next candidate.

Plugins

GitAlike is assembled from two kinds of plugin, and the registry is open — anyone can add one. A skin is a target UI a page is made to look like; a source is a forge's markup. They are independent — any source can wear any skin — so one new forge or one new UI extends every page the extension already touches. Each is a self-contained folder under src/plugins/: its definition, its tests, and a stylesheet for a skin.

Skins

One folder in src/plugins/skins/: the product's vocabulary, navigation order, profile menu and shortcuts — not just its palette, which lives beside it. Its own tests run with npm test.

Bitbucket UI GitHub UI GitLab UI

Add a skin →

Sources

One folder in src/plugins/sources/: the DOM hooks a skin reads, the live page the daily canary watches, and its own tests, so a rename upstream fails a check instead of a user.

Bitbucket Gerrit Gitea / Forgejo GitHub — Primer GitLab — Pajamas

Bitbucket Cloud and Gerrit are client-rendered sources: their app shells are canaried, and their palettes are re-pointed through the design tokens each reads (Atlassian --ds-* on Bitbucket, PolyGerrit's root properties on Gerrit), so they recolour without reaching into the app. Gerrit's chrome lives in open shadow roots, so its copy, navigation and query pages are reached from the content scripts too.

Add a source →

The registry is open — contributions are welcome. Adding one is meant to be small: a plugin is one folder — its definition and its tests, plus a stylesheet for a skin and, for a forge people host, a host entry. node tools/new-plugin.mjs skin <name> (or source <name>) writes that skeleton for you, and this list is generated from the plugins — so it cannot drift from the code. A new source brings another forge (Sourcehut is the next candidate); a new skin brings another target UI. The rules are the same for everyone — GPL-3.0-or-later, no monetisation, and your own original mark rather than a vendor's. Propose a plugin → Contributing guide →

Nothing leaves your browser

GitAlike collects no data and makes no network requests. Both stylesheets are bundled and the mark is an inline data URI.

It stores only your on/off choices and the instances you add, in the browser's own synced extension storage. Nothing read from a page is stored or sent anywhere.

Read the full privacy policy →

Which sites it can reach

Only five hosts are granted at install — github.com, gitlab.com, codeberg.org, gitea.com and bitbucket.org. A self-hosted instance is granted when you add it: the popup asks for that one origin, a prompt you only see if you asked for that host. There is no all-sites grant, and its scripts load only on hosts you have set up and granted.

Questions

Does it send my data anywhere?

No. GitAlike makes no network requests at all — no CDN, no remote configuration, no telemetry. The stylesheets ship in the bundle and the mark is an inline data URI. It stores only your on/off choices and the instances you add, in the browser's own synced storage.

Which sites can it access?

The five bundled hosts — github.com, gitlab.com, codeberg.org, gitea.com and bitbucket.org — are granted at install. Everything else is asked for one origin at a time, when you add it, so a self-hosted GitHub Enterprise, GitLab, Bitbucket Data Center or Gerrit instance triggers a single prompt for its host, and nothing is granted before that.

Does it work on my self-hosted instance?

Yes. Add the host by visiting it or typing its address — no rebuild. Adding it asks the browser to grant that one origin. GitHub Enterprise Server, self-hosted GitLab, Bitbucket Data Center and Gerrit all work, and Codeberg (Forgejo) and gitea.com are already covered.

How does it know which forge a link is?

When a host is not set up yet, the popup reads the address and highlights the product it looks like, so a pasted deep link needs only a confirmation: /-/merge_requests/42 is GitLab, /pull/42 GitHub, /pulls/42 Gitea/Forgejo, /pull-requests/42 Bitbucket and /c/project/+/42 Gerrit — even on a host it has never seen. It reads the URL only, never the page, and makes no network request; a bare host it cannot place is left for you to choose.

Does it change what the site does?

No. It changes how the page looks and reads, not what it does: no requests are intercepted and no data is touched. It never rewrites text inside code, inputs or editable regions, and every change is reverted when you switch the skin off.

Which browsers does it run in?

The two extension platforms, so it covers their forks too. The Chromium build runs in Chrome, Edge, Brave, Opera, Vivaldi and the rest; the Firefox build needs Firefox 142 or newer and runs in the forks that track it, such as LibreWolf, Floorp and Zen.

Is it free?

Yes — GPL-3.0-or-later, no account and no paid tier. The source is on GitHub, and you can build it yourself with npm run build.

Install

Two clicks, or build it yourself.

Chromium

Chrome, Edge, Brave, Opera, Vivaldi and the other Chromium-based browsers share the API — one build.

  1. Download the ZIP and unzip it.
  2. Go to chrome://extensions and turn on Developer mode.
  3. Load unpacked → choose the unzipped folder.

Load unpacked takes the folder, not the ZIP. Most Chromium browsers install from the Chrome Web Store, where GitAlike is live.

Firefox

Needs Firefox 142 or newer, and works in the forks that track it (LibreWolf, Floorp, Zen, …). The ZIP is unsigned, so Firefox loads it temporarily — it is gone when the browser restarts. A permanent install comes from addons.mozilla.org, where the listing is in review.

  1. Download the ZIP.
  2. Go to about:debugging#/runtime/this-firefox.
  3. Load Temporary Add-on… → choose the ZIP itself; it does not need unzipping.

Every major store

GitAlike targets the two extension platforms, so it runs in the Chromium browsers (Chrome, Edge, Brave, Opera, Vivaldi, …) and in Firefox and the forks that track it (LibreWolf, Floorp, Zen, …). It is live on the Chrome Web Store, and in review on addons.mozilla.org, with Microsoft Edge Add-ons and Opera to follow. Until those are listed, the ZIPs above install it today.

  • Chromium
  • Chrome
  • Edge
  • Brave
  • Opera
  • Vivaldi
  • Firefox
  • LibreWolf
  • Floorp
  • Zen

From source

No runtime or build dependencies — the build only generates the two per-browser manifests.

npm run build            # -> dist/chromium and dist/firefox
npm test                 # unit tests, no browser needed
node tools/compare/e2e.mjs       # Playwright end-to-end test against the live sites