Taking GitLab out of the browser: so Cmd+Tab reaches it

Searching for a GitLab desktop app on a Mac usually comes from one specific friction. The merge request queue lives in a browser tab behind fourteen others, a pipeline failed twenty minutes ago and nobody saw the red, and Cmd+Tab cannot reach GitLab because as far as macOS is concerned GitLab is not an application. The results for that search then make things worse: the top of the page is GitLab's server installation guide, followed by forum threads about installing a Git client on Windows. None of it answers the question. This page sorts out what GitLab actually publishes for the desktop, and what the realistic routes are on macOS.

What GitLab publishes, and what it does not

The first thing worth settling is that the page titled "Download and install GitLab" is not a desktop client. It is the installation guide for GitLab itself, the server. Its sections are the trial signup, the self-managed installation options, the all-in-one Linux package, the cloud native charts, guidance for large installations, and the upgrade path. Reading it end to end produces a running GitLab instance, not an icon in the Dock.

GitLab does publish client-side software, and it is worth knowing exactly what shape it takes, because it explains why no Mac binary exists. The official list sits in the documentation under editor and IDE extensions.

GitLab editor extensions bring the power of GitLab and GitLab Duo directly into your preferred development environments. Use GitLab features and GitLab Duo AI capabilities to handle everyday tasks without leaving your editor. Source: docs.gitlab.com

That page lists GitLab for VS Code, the GitLab Duo plugin for JetBrains IDEs, GitLab for Visual Studio, the GitLab for Eclipse plugin, a Neovim integration, and a language server. Alongside them it points to two command line tools, the GitLab CLI and the GitLab Duo CLI. The strategy is consistent and deliberate: GitLab meets developers inside the editor and the terminal, and everything else stays in the browser. There is no standalone GitLab application for macOS, Windows or Linux on any of those pages as of today.

So the honest answer to the search is that the thing being looked for does not exist as a vendor download. The useful question is what to do instead, and that depends on which of two very different jobs is actually at hand.

Two different things get called a GitLab desktop app

The search phrase hides a fork in the road, and it is the reason the results are such a mess.

One job is Git itself: cloning, staging, committing, resolving conflicts. That is what a Git client does, and it is why forum threads about installing Git on Windows keep surfacing for this query. It is also why some people arrive expecting an equivalent of the desktop client that ships for the other large hosting service. GitLab does not publish one. On a Mac that job is already covered by the built-in command line Git, by any third party Git client, or by the Git panel inside VS Code with the GitLab extension added on top.

The other job is the GitLab web interface: merge requests, review threads, pipelines, issue boards, the To-Do list, wikis, the container registry. None of that is Git. It is a web application, and it is what people actually stare at all day. Nothing about it needs a native rewrite to be useful. What it needs is to stop being a tab.

Sorting out which job is in play takes ten seconds and saves an afternoon. If the annoyance is committing code, look at editor extensions and command line tools. If the annoyance is that the review queue keeps getting lost, the answer is a window, and the rest of this page is about how to get one.

Three routes to a GitLab window on macOS

Once the goal is a window rather than a rewrite, there are three practical routes, and they differ in what they cost and what they isolate.

Route Setup Reachable by Cmd+Tab Login storage Good fit for
Browser tab None No Shares the browser profile Occasional access
Safari, Add to Dock Two clicks in Safari Yes Own cookie store, separate from Safari One instance, no installer allowed
Chrome, Install page as app Two clicks in Chrome Yes Inherits the Chrome profile it was made from People already living in one Chrome profile
Site to app tool Pick the URL, build once Yes Own store per app Several instances, or several web tools at once

Safari's route is documented by Apple and appears in the File menu as Add to Dock, from macOS Sonoma 14 onward. The result is a window with no tab strip and no address bar, and it keeps its own cookies and website data rather than sharing them with Safari. That isolation is the interesting property, because it is what allows a second identity for the same service.

Chrome's equivalent lives under the three dot menu, in Cast, save and share, then Install page as app. Chrome's own help page is direct about what an installed web app gains and what it still is.

A web app is an app built for the web that you can access on any device. You can use web apps to have a website work as an app and access it on your computer or mobile devices through the launcher or home screen. Some web apps include extra features, like more storage to browse content offline, notifications, file system access, and icon badges. Source: support.google.com

The trade with Chrome is the profile. An installed web app opens whichever account that Chrome profile is signed into, which is fine for one identity and awkward for two.

The self-managed instance changes the calculation

GitLab is unusual among web tools in that most serious users are not on gitlab.com. They are on an instance at a company hostname, reached through single sign-on, and often a second instance for a client or an open source project. That detail decides the route.

A browser tab handles one instance comfortably and two instances badly, because the second login tends to evict the first when both run through the same cookie store. Safari's Add to Dock gives each site its own store, which means two separate windows for two hostnames, each staying signed in. A site to app tool does the same thing and adds one thing Safari cannot: the icon, the name and the window can be different per instance, so the internal one and the public one are distinguishable in the Dock without reading a title bar.

Two details are worth checking before committing to any of these on a self-hosted instance. The first is the sign-on flow. SAML and OpenID redirects bounce through an identity provider on another hostname, and anything that confines browsing to a single domain will break that round trip. The second is whether the instance is reachable without a VPN. A separate window does nothing about a network that is not connected, and a wrapped app that fails to load is harder to diagnose than a tab that fails to load, because there is no address bar to inspect. The shape of what a wrapper does and does not intercept is covered on the Features page.

Notifications are the part people expect and do not get

The usual reason for wanting an app is missed pipelines and missed review requests, so it is worth being precise about what changes and what does not.

GitLab's own notification mechanism is email. The documentation section carries the title "Notification emails", and the settings behind it decide which events generate mail at the global, group and project level. Inside the interface there is also the To-Do list, which collects review requests, mentions and assignments into one queue with a counter in the top bar. Neither of those is a native macOS notification.

Putting GitLab in its own window does not create push notifications where the service does not send them. What it does change is the cost of looking. The To-Do counter becomes visible in one Cmd+Tab instead of a hunt through a tab strip, and a window opened at startup as a login item keeps that counter on screen all day. For most people who thought they wanted badges, that is the actual fix: not being interrupted, but being one gesture away from the queue.

The email path deserves a second look at the same time. Notification settings default to a level that many people never revisit, and a filter that routes GitLab mail into a folder nobody opens will defeat any window arrangement. Tuning the notification level down to mentions and review requests, and letting those land in the inbox, often does more for missed reviews than any icon.

There is one badge worth knowing about, because it is easy to expect the wrong thing. Chrome's help page lists icon badges among the extras an installed web app can gain, but a badge only appears if the site itself asks for one through the browser's badging interface. A wrapper cannot invent that signal on behalf of a service that does not send it. The practical consequence is that any promise of unread counts on a Dock icon should be tested against the real instance for a day before it becomes part of a workflow.

When the editor extension is the better answer

There is a case for skipping the window entirely, and it is stronger than it looks.

The VS Code and JetBrains extensions surface merge requests, issues, pipeline status and code review inside the editor, next to the files being discussed. For someone whose day is almost entirely writing and reviewing code in one repository, that removes the context switch rather than making it faster. The GitLab CLI covers the scripted end: opening a merge request from a terminal, checking pipeline status in a shell prompt, closing an issue from a deploy script. Anyone who has kept a browser tab open purely to paste a status update by hand should look there first.

The window wins in the other shape of day. Pipelines across several projects, issue boards in a planning meeting, wiki pages, the container registry, group level settings, release pages: those live only in the web interface, and no extension reproduces them. Most teams end up with both, and that is a reasonable outcome rather than a compromise. The services already prepared as presets, including developer tooling, are listed on the Supported services page.

What to change first

Decide which job is actually hurting: Git operations point at an editor extension or the command line, while a lost review queue points at a window. If it is the window, start with the single instance used most, give it its own icon with Kagemusha or with Safari's Add to Dock, and set it as a login item so the To-Do counter is visible from the first Cmd+Tab of the day.

Frequently asked questions

Is there an official GitLab desktop app for Mac?

No. As of today GitLab's own documentation lists editor and IDE extensions for VS Code, JetBrains, Visual Studio, Eclipse and Neovim, plus two command line tools, and no standalone desktop application. The page titled "Download and install GitLab" installs the GitLab server, not a client.

What about the GitLab desktop clients on GitHub?

Several community projects wrap the GitLab interface or the API in a desktop shell. They are independent of GitLab, so maintenance, security review and compatibility with a specific instance version are all on the project rather than on the vendor. Check the last commit date and the open issue list before trusting one with credentials for a work instance.

Can two GitLab instances be open at the same time in separate windows?

Yes, provided each window keeps its own cookie store. Safari's Add to Dock creates a separate store per site, and a site to app tool creates a separate store per app, so an instance at a company hostname and gitlab.com can stay signed in side by side. Two tabs in the same browser profile will usually fight over the session.

Will a GitLab window give macOS notifications for failed pipelines?

Not by itself. GitLab sends notifications by email and collects review requests in the To-Do list inside the interface, so a window makes the counter easier to reach rather than adding push alerts. For genuine alerting on pipeline failures, the usual routes are notification emails with a filter, or a webhook into a chat tool.

Does wrapping a self-hosted GitLab break single sign-on?

It depends on whether the wrapper allows navigation to the identity provider's hostname. SAML and OpenID flows redirect to another domain and back, so anything locked to one domain will stall mid login. Test the full sign-in round trip once before removing the browser tab.

Back to all posts