Self-hosted service
vitessio/vitess avatar
vitessio/vitess

Vitess: atomic shard cutovers, two release lines, and a Makefile that derives GOPATH from GOROOT

Vitess is a database clustering system for horizontal scaling of MySQL.

21,419 stars2,444 forksGoApache-2.0

At a glance

What is it?
Vitess puts a MySQL-compatible clustering layer in front of MySQL so application code never learns which shard holds a row. This is what the repository actually shows: the sharding promise, the build and test machinery, and the operational surface you inherit with it.
Who is it for?
Vitess fits an operator already running many MySQL nodes who needs horizontal sharding, shard split and merge with an atomic cutover, and JDBC access from a Java service through the vitess-jdbc artifact. It does not fit a team expecting the repository to settle a comparison against MySQL, Citus, ProxySQL or any other system.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 14, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • vitessio/vitess21,419 ★ · +69
Star history
Repository2026-09-212026-11-14
vitessio/vitess21.4k21.4k

69 Stars in the last 54 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The atomic cutover is the load-bearing claim, and it lasts a few seconds

The design promise in the README is not that Vitess is a faster database. It is that application code and database queries remain agnostic to how data is distributed onto multiple database servers, achieved through generalized sharding. Scaling is described as unlimited, and the operation that matters is shard split and merge: you can split or merge shards as needs grow, and the cutover between the two arrangements is atomic and takes only a few seconds. That is the mechanism worth understanding, because it is what decides whether a reorganisation is a maintenance event or an outage. Everything else in the positioning follows from it. Vitess was a core component of YouTube's database infrastructure from 2011 and grew to encompass tens of thousands of MySQL nodes, and from 2015 was adopted by companies including Slack, Square (now Block) and JD.com.

Two release lines were patched on the same day, so there is no single latest

The recent release list is the first practical fact anyone hits. v24.0.5 and v23.0.8 were both published on October 13, 2026, and v24.0.4 came on October 1, 2026. Two lines receiving patch releases on the same day means the project supports both a current and a previous major, and it means the phrase upgrade to the latest release is ambiguous here. Your decision is which line to be on, not which tag to grab. The repository is not archived and its last push is dated November 2, 2026, so the cadence behind those tags is current. The consequence for a reader is that a deployment pins a line and then tracks patches within it, and that a patch release landing on the newer line can change behaviour you had not scheduled to review. Nothing in the README explains which line receives fixes first or how long the older one is supported.

The Makefile sets GOPATH from GOROOT, which is a different directory

The build file contains a mismatch worth knowing before you run anything. It guards GOPATH behind an ifndef and, when unset, exports it by asking Go for its root: export GOPATH=$(go env GOROOT). GOROOT is where the Go toolchain itself lives, not where downloaded modules are written, so a shell that does not already have GOPATH set receives the toolchain directory as its module cache path. The same file asks Go for GOARCH and GOOS the same way, which is correct for those two, so the pattern looks deliberate rather than accidental, and that is what makes it easy to miss. The consequence for a reader is a build environment whose module cache can land somewhere nobody chose.

Integration tests are serialised on purpose because they fight over ports

The Makefile disables parallel processing of target prerequisites with .NOTPARALLEL, and the comment above it gives the reason plainly: disabled parallel processing avoids integration tests racing each other, for example over ports, which can make them fail. The stated reasoning continues that since the Makefile is not used for compilation, limiting parallelism will not increase build time. That is an unusual admission to find in a build file of a database, and it describes the shape of the test suite accurately. The integration tests start real processes that bind real ports, so the suite assumes it has the machine to itself. The consequence for a reader is that the test path is serial by design rather than slow by accident, and running pieces of it in parallel on your own initiative is the most direct way to produce failures that say nothing about Vitess. The .PHONY target list separates unit_test, unit_test_cover, unit_test_race and integration_test accordingly.

vtadmin is built in a Node stage the Go image never sees

The top-level Dockerfile entry is a pointer to docker/lite/Dockerfile, and a web/ directory sits beside go/ at the repository root.

In the Makefile, PREFIX is left commented out and described as where Vitess binaries are installed during make install and make cross-install.

Eight example directories, and the README gives no install command

There is no install command anywhere in the README, so the practical entry point is the examples directory and the documentation site. Eight setups are checked in: examples/compose, examples/local, examples/demo, examples/operator, examples/region_sharding, examples/vtexplain, examples/backups and examples/common. Between them they cover a compose based cluster, a local one, a demo, an operator deployment, region sharding, the vt explain tool, backup handling and shared setup code. The consequence for a reader is that choosing an example is choosing a deployment shape, and the choice is not made for you: the compose and local directories are the ones to read first, vtexplain is a diagnostic rather than a server, and operator is a Kubernetes path rather than a process on a host. The project states that the full documentation, a roadmap and monthly community meetings live at vitess.io, and that the blog carries low frequency updates for features and releases.

Four agent instruction files now sit in the repository root

The root of the repository carries .agents/, .claude/, .codex, AGENTS.md and CLAUDE.md alongside the governance documents GOVERNANCE.md, STEERING.md, MAINTAINERS.md, GUIDING_PRINCIPLES.md, CODE_OF_CONDUCT.md, DCO and SEVERITY.md. That is a notable shape for a database project: machine readable contribution instructions sit next to the written governance, and a DCO file sits next to the Apache 2.0 LICENSE. The consequence for a reader is that the route for a contribution is defined by documents in the tree rather than by a paragraph in the README, and a DCO means a sign-off is part of landing a patch. CONTRIBUTING.md sits in the same root. Quality tooling is configured in the same root through .golangci.yml, .codeclimate.yml, .fossa.yml, .clomonitor.yml, sonar-project.properties, codecov.yml and the CI badge set.

Vulnerabilities go to a mailing list address, not to a public issue

The disclosure path is deliberately narrow. Security vulnerabilities are reported by emailing vitess-maintainers at [email protected], while SECURITY.md holds the full outline of the process and SEVERITY.md in the root defines how severity is graded. General problems go somewhere else entirely: a GitHub issue, or the Vitess Slack workspace where questions can go to the #general channel or to special interest channels. A third party audit was performed by ADA Logics and the full report sits in the repository at doc/VIT-03-report-security-audit.pdf. The consequence for a reader is that the two channels are not interchangeable, and filing a vulnerability as an ordinary issue is the mistake this separation exists to prevent. It also means the published audit report is a point-in-time document rather than a standing claim about the current code.

Editorial conclusion

Vitess fits an operator already running many MySQL nodes who needs horizontal sharding, shard split and merge with an atomic cutover, and JDBC access from a Java service through the vitess-jdbc artifact. It does not fit a team expecting the repository to settle a comparison against MySQL, Citus, ProxySQL or any other system. Before committing, pick a release line rather than tracking the newest tag, read SEVERITY.md and SECURITY.md to see how a vulnerability is handled, and work out for yourself what your example directory under examples/ actually starts.

Frequently asked questions

What is vitess used for?

Vitess is a cloud-native horizontally-scalable distributed database system built around MySQL, used to scale horizontally through generalized sharding. Application code and database queries stay agnostic to how data is distributed across database servers, and shards can be split and merged with an atomic cutover step that takes only a few seconds.

what is vitess mysql

Vitess is not a MySQL replacement but a clustering system around MySQL. It was a core component of YouTube's database infrastructure from 2011 and grew to encompass tens of thousands of MySQL nodes, and from 2015 was adopted by companies including Slack, Square (now Block) and JD.com.

is vitess open source

Yes. Unless otherwise noted, the Vitess source files are distributed under the Apache Version 2.0 license in the LICENSE file. A third party security audit was performed by ADA Logics and the full report is included at doc/VIT-03-report-security-audit.pdf.

vitess vs mysql

Vitess sits on top of MySQL rather than replacing it: it handles sharding and keeps queries agnostic to which server holds the data. The repository settles no feature or benchmark comparison against plain MySQL, so any ranking is something you would have to work out yourself.

vitess vs citus

No comparison with Citus appears in this repository. What the project states about itself is scope: a cloud-native horizontally-scalable distributed database built around MySQL, scaling through generalized sharding, with shard split and merge and an atomic cutover taking only a few seconds.

how to use vitess

The README carries no install command, so the entry points are the eight checked-in example setups under examples/, including compose, local, demo, operator, region_sharding, vtexplain, backups and common. Full documentation, the roadmap and monthly community meetings are at vitess.io.

Official sources

  1. License: Apache-2.0
  2. Project website
  3. README
  4. Releases
  5. vitessio/vitess on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/vitessio-vitess.svg)](https://hysenlabs.com/projects/vitessio-vitess)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/vitessio-vitess.svg)](https://hysenlabs.com/projects/vitessio-vitess)

Was this useful?