The history of GitLab: the tanuki that came out of Ukraine

Mascote do LinuxPro empurrando a esteira da pipeline do GitLab, com a raposa do projeto acima

On 8 October 2011, Dmitriy Zaporozhets made GitLab's first commit. His house in Ukraine had no running water; the communal well was the smaller problem — he lacked a Git tool he could change. Ruby on Rails, inspired by GitWeb, built with Valeriy Sizov. Fifteen years later, GitLab 19.3.1 (26 August 2026) still ships at its usual pace: one release a month, 177 consecutive releases through June 2026. From the well to Nasdaq. The orange tanuki in between.

Ukraine, 2011: Rails against closed GitHub

Dmitriy (Dmytro) Zaporozhets wanted to collaborate with his team without GitHub owning the workflow. Self-hosted, open source, installation a human could handle. The name came from GitWeb and the “git something” family. The initial commit is in the gitlab-foss: 9ba12248, 8 October 2011. It was not a company. It was weekends and nights.

The Git was already the disk. What was missing was the forge: issues, merge requests, wiki, permissions, web. Gitorious existed. GitHub was already the social default. GitLab was born on the self-hosted side — the server a company installs without sending its code to California.

2012: pancakes, Hacker News, and CI

Sytse Sijbrandij — Dutch, later Sid for American investors — saw the project, read the Rails code, and liked its quality after three hundred commits. He posted on Hacker News asking who wanted a GitLab.com. The post did not gain traction. He went to make pancakes. His phone lit up. His wife took over the frying pan; Sid spent the day replying. Hundreds joined the beta.

In November 2012, Dmitriy committed the first version of GitLab CI. Other forges treated CI as a plugin. GitLab treated it as the same product. That decision — one application, from issue to deployment — is the “master plan” that would only get its name in 2016. Runner, .gitlab-ci.yml, pipelines in merge requests: everything flows from there.

2013–2014: EE, the company, day 22

Large organizations asked for features CE did not have. Dmitriy tweeted that he wanted to make a living from GitLab. Sid and he finalized GitLab Enterprise Edition on 22 July 2013 — open core: CE under MIT, EE with what telecom companies and banks pay for. Sid made the website's initial commit. GitLab B.V. in Utrecht; later GitLab Inc. in the US, with no headquarters. The first employee was from Serbia. Dmitriy, Ukraine. The Dutch people Sid hired stopped coming to the extra desk at his house on the third day. Remote work was not ideology. It was what remained when nobody showed up and Slack already did the job.

In 2014, the company became an LLC. GitLab Cloud was renamed GitLab.com. Releases on day 22 of every month — 6.5 in January, 7.6 in December — and the schedule has not broken since. At the end of the year, they submitted their application to Y Combinator.

2015–2016: YC, handbook, master plan

The winter batch of 2015 brought almost the whole team to the Valley. Nine people at graduation in March. The GitLab Handbook entered the website repository: values, hiring, onboarding, salaries, everything public by default. CREDIT: Collaboration, Results, Efficiency, Diversity, Iteration, Transparency. Transparency was also a defense: commercializing open source often kills the community; the handbook was the antidote Sid described.

They bought Gitorious (2015) and migrated users. Khosla, seed funding. In 2016, the master plan: not to be “another GitHub,” but the entire DevOps platform. Series B of US$ 20 million. More than a thousand contributors, a hundred thousand organizations. The team grew beyond 140.

31 January 2017: rm on the wrong database

Snippet spam brought down GitLab.com's PostgreSQL. In the middle of replication recovery, a sysadmin ran rm -rf in the data directory thinking it was the secondary. It was the primary. 300 GB became 4,5 GB. The S3 backup was empty: pg_dump 9.2 against Postgres 9.6, the job was failing silently. There was no database disk snapshot. Restoration from a six-hour-old staging copy. Issues, MRs, and users from the 17:20–00:00 UTC window were gone; Git repositories and wikis were not — they live on another disk. Nobody touched self-hosted instances.

The postmortem was public, with a live Google Doc. The lesson stuck in the culture: a backup that cannot restore is not a backup; production consoles need guardrails; the handbook's transparency also applies when the tanuki takes a beating. That same year, they bought Gitter.

What the tanuki is underneath

It is not a Git daemon with a skin. It is a stack:

  • Rails + Puma — the app. Issues, MRs, CI, registry, packages, wiki.
  • Gitaly — RPC in front of the Git repository. Without it, the old NFS setup does not scale.
  • Workhorse — the Go proxy that handles uploads, git-http, and what Rails should not see.
  • PostgreSQL + Redis (Valkey becomes an option in 18.9 because Redis changed its license) + Sidekiq.
  • Omnibus — one package, one gitlab.rb, gitlab-ctl reconfigure. Helm for Kubernetes.
  • Runner — the agent that picks up CI jobs. Shell, Docker, Kubernetes executor.

CE under MIT (and other components). EE source-available, paid. GNOME moved to GitLab in May 2018; KDE, 2020. The self-hosting GitHub Enterprise charged heavily for, GitLab offered free in CE — and sold the rest in EE. The Terraform pipeline shortcut on this blog is in Terraform pipelines in GitLab. Anyone wanting a smaller forge, in Go, should look at Gitea.

All-remote, IPO, the CEO who left

Before the pandemic, GitLab already marketed itself as the world's largest all-remote company: 1.200 people, 65 countries, zero company offices. The San Francisco one, with 15 seats, repeated Sid's desk pattern: the salesperson stopped going. Hybrid, the handbook says, is the worst of both worlds — two ways of talking. WordPress and InVision were the only peers investors cited. Then investors became advocates of the model: faster hiring, lower costs.

On 14 October 2021, GitLab Inc. went public on Nasdaq, ticker GTLB. Ten years after the first commit. Price US$ 77; opened at 94, closed at 103. More than a million licensed seats, 30 million registered users at the time. In 2023, Gartner created the DevOps Platforms quadrant and placed GitLab as a Leader. FY2024 brought the first quarter of non-GAAP operating profit.

In December 2024, Sid stepped down as CEO for health reasons. Bill Staples took over. Sid went on to build Kilo Code, an open source AI agent. The handbook remains the same document. So does the release on day 22 (now on a varying Thursday, but never missing a month).

2026: 19.3, Duo, Valkey

The fiscal year that ended on 31 January 2026: revenue of US$ 955,2 million, +26% over FY2025. 172 consecutive monthly releases at that date; by June, the company's website already counted 177, 50 million registered users, 2.500 team members, 5.500 contributors. GitLab 18 was the year of Duo Agent Platform (GA in 18.8). 19.0 shipped on 21 May 2026. The 19.3 on 20 August; patch 19.3.1 on 26 August. Redis AGPLv3 pushed Valkey (BSD) into Omnibus, opt-in since 18.9.

The positioning changed its name — DevOps, DevSecOps, “intelligent orchestration” — but the disk is the same: a YAML file, a runner, an MR. Self-hosted on Ubuntu still means Omnibus or Helm on top of Kubernetes and Docker. Git underneath has not changed: Git made simple and fast.

Wrap-up

Rails in Ukraine, a Dutchman with pancakes, and a Japanese mascot (the tanuki, a raccoon dog, is not a fox). Open core, an open handbook, never missing a month on the schedule. GitHub got the social network for code; GitLab got the server companies install and the pipeline GitHub went on to copy. 19.3.1, Gitaly, runner, CE MIT. The well dried up. The tanuki did not.

The history of the disk: The history of Git. The leaner sibling forge: Gitea.