dolt is a free, open source databases project written in Go and released under Apache-2.0. It has 24,458 GitHub stars, 873 forks and 583 open issues, and was last pushed 8 hours ago. On this registry it ranks #22 of 81 tracked projects in Databases, with 5 head-to-head comparisons available.

What is dolt?

Dolt is an Apache-2.0 licensed, Go-written SQL database that versions tables the way Git versions files, built for developers, data teams, and AI-agent builders who need database state they can fork, clone, branch, merge, push, and pull.

What it is

Dolt is a relational SQL database with version control built into the storage layer rather than bolted on as an external tool. It lives in the MySQL ecosystem: clients connect to it as they would to any MySQL database to read and modify schema and data, while version control functionality is exposed inside SQL through system tables, functions, and procedures. Alongside the server, Dolt ships a command line interface whose commands mirror Git's, so dolt init, dolt commit, dolt branch, dolt merge, dolt push, and dolt pull behave like their Git counterparts, except that the unit being versioned is a table rather than a file. Doltgres, a Postgres-flavoured sibling, is available for teams that prefer Postgres over MySQL and is currently in its Beta release.

The concrete problem it solves is the gap between how code is versioned and how the data that code operates on is versioned. Git tracks files and has no concept of a table, a row, or a schema migration. Dolt replaces the patchwork of SQL dump files, manual backup rotations, and one-way migration scripts that teams typically reach for when they need to review, roll back, or share a change to structured data. Because branching and merging are native, a data change can be diffed row by row with dolt diff, reviewed, merged, and later traced with dolt blame, which shows what revision and author last modified each row of a table.

Key capabilities

  • Git-style CLI covering dolt init, status, add, commit, merge, cherry-pick, revert, tag, blame, conflicts, merge-base, and filter-branch.
  • MySQL-compatible server started with dolt sql-server, so existing MySQL clients and drivers connect without a custom protocol.
  • Version control reachable from SQL through system tables, functions, and procedures, not only from the command line.
  • dolt sql to run queries against tables in a repository, and dolt read-tables to fetch tables at a specific commit into a new Dolt repository.
  • CSV import, plus dolt dump to export all tables in the working set into a file, and schema and table commands to copy, rename, delete, and export tables.
  • Remotes and sharing through dolt remote, clone, fetch, pull, push, login, and creds.
  • Repository maintenance with dolt gc, dolt backup, and dolt migrate to move a database to the latest Dolt data format.

Who uses it and how

  • AI-agent builders use it as agent memory: Dolt powers Beads and Gas Town, and the topics list agent-memory-server alongside multi-agent and multi-machine workflows.
  • Data teams publish and share datasets through DoltHub, which hosts public data for free, using dolt push and dolt clone as the transport.
  • Organisations that want that sharing model on their own infrastructure deploy DoltLab, the self-hosted version of DoltHub.
  • Teams that would rather not operate the server themselves use Hosted Dolt, where the vendor runs a Dolt server.
  • Developers reviewing data changes use the branch-and-merge flow: branch, modify rows or schema, dolt diff the result, then merge and resolve conflicts with dolt conflicts.

Getting started

Dolt is a single ~103 megabyte program: download the latest release binary and put it on PATH, or run the documented install command for Linux and Mac systems, which begins with sudo bash. Managed hosting is available through Hosted Dolt, and a self-hosted sharing layer through DoltLab.

How it compares

Among the tools named in this material, Dolt sits between Git and MySQL: it takes Git's branching, merging, and remote model and applies it to a relational database instead of a filesystem, so it complements Git rather than replacing it. For teams standardised on Postgres rather than MySQL, Doltgres offers the same model in a Beta release.

When to use it — and when not to

A self-hoster takes on operating a database server and its version-control remotes; the README excerpt does not document operational prerequisites such as backup targets or credential handling beyond dolt backup, dolt creds, and dolt login, so those need separate planning. Doltgres is Beta, which makes it a poor fit for teams that need a stable Postgres-compatible engine today. Teams running high-volume transactional workloads with no requirement to branch, diff, or merge data should look elsewhere, since version control is the reason to accept Dolt's storage model.

project readme (upstream, from github) — read inline

Dolt is Git for Data!

Dolt is a SQL database that you can fork, clone, branch, merge, push and pull just like a Git repository.

Connect to Dolt just like any MySQL database to read or modify schema and data. Version control functionality is exposed in SQL via system tables, functions, and procedures.

Or, use the Git-like command line interface to import CSV files, commit your changes, push them to a remote, or merge your teammate's changes. All the commands you know for Git work exactly the same for Dolt.

Git versions files. Dolt versions tables. It's like Git and MySQL had a baby.

We also built DoltHub, a place to share Dolt databases. We host public data for free. If you want to host your own version of DoltHub, we have DoltLab. If you want us to run a Dolt server for you, we have Hosted Dolt.

Prefer Postgres instead of MySQL? Try Doltgres, now in its Beta release.

Join us on Discord to say hi and ask questions, or check out our roadmap to see what we're building next.

Video Introduction

Dolt Explainer Video

What's it for?

Lots of things! Dolt is a generally useful tool with countless applications. But if you want some ideas, here's how people are using it so far.

Dolt powers Beads and Gas Town. It's the best database for agent memory, especially as you move up the ladder to multi-agent and multi-machine workflows.

Dolt CLI

The dolt CLI has the same commands as git, with some extras.

$ dolt
Valid commands for dolt are
                init - Create an empty Dolt data repository.
              status - Show the working tree status.
                 add - Add table changes to the list of staged table changes.
                diff - Diff a table.
               reset - Remove table changes from the list of staged table changes.
               clean - Remove untracked tables from working set.
              commit - Record changes to the repository.
                 sql - Run a SQL query against tables in repository.
          sql-server - Start a MySQL-compatible server.
                 log - Show commit logs.
              branch - Create, list, edit, delete branches.
            checkout - Checkout a branch or overwrite a table from HEAD.
               merge - Merge a branch.
           conflicts - Commands for viewing and resolving merge conflicts.
         cherry-pick - Apply the changes introduced by an existing commit.
              revert - Undo the changes introduced in a commit.
               clone - Clone from a remote data repository.
               fetch - Update the database from a remote data repository.
                pull - Fetch from a dolt remote data repository and merge.
                push - Push to a dolt remote.
              config - Dolt configuration.
              remote - Manage set of tracked repositories.
              backup - Manage a set of server backups.
               login - Login to a dolt remote host.
               creds - Commands for managing credentials.
                  ls - List tables in the working set.
              schema - Commands for showing and importing table schemas.
               table - Commands for copying, renaming, deleting, and exporting tables.
                 tag - Create, list, delete tags.
               blame - Show what revision and author last modified each row of a table.
         constraints - Commands for handling constraints.
             migrate - Executes a database migration to use the latest Dolt data format.
         read-tables - Fetch table(s) at a specific commit into a new dolt repo
                  gc - Cleans up unreferenced data from the repository.
       filter-branch - Edits the commit history using the provided query.
          merge-base - Find the common ancestor of two commits.
             version - Displays the current Dolt cli version.
                dump - Export all tables in the working set into a file.

Installation

Dolt is a single ~103 megabyte program.

dolt $ du -h /Users/timsehn/go/bin/dolt
103M	/Users/timsehn/go/bin/dolt

It's really easy to install. Download it and put it on your PATH. We have a bunch of ways to make this even easier for most platforms.

From Latest Release

To install on Linux or Mac based systems run this command in your terminal:

sudo bash -c 'curl -L https://github.com/dolthub/dolt/releases/latest/download/install.sh | bash'

This will download the latest dolt release and put it in /usr/local/bin/, which is probably on your $PATH.

The install script needs sudo in order to put dolt in /usr/local/bin. If you don't have root privileges or aren't comfortable running a script with them, you can download the dolt binary for your platform from the latest release, unzip it, and put the binary somewhere on your $PATH.

Linux

Arch Linux

Dolt is packaged in the official repositories for Arch Linux.

pacman -S dolt

Mac

Homebrew

Dolt is on Homebrew, updated every release.

brew install dolt
MacPorts

On macOS, Dolt can also be installed via a community-managed port via MacPorts:

sudo port install dolt

Windows

Download the latest Microsoft Installer (.msi file) in releases and run it.

For information on running on Windows, see here.

Chocolatey

You can install dolt using Chocolatey:

choco install dolt
Docker

There are following official Docker images for Dolt:

From Source

Make sure you have Go installed, and that go is in your path. Dolt has a dependency on cgo, so you will need a working C compiler and toolchain as well.

Clone this repository and cd into the go directory. Then run:

go install ./cmd/dolt

The output will be in $GOPATH/bin, which defaults to ~/go/bin. To test your build, try:

~/go/bin/dolt version

Configuration

Verify that your installation has succeeded by running dolt in your terminal.

$ dolt
Valid commands for dolt are
[...]

Configure dolt with your user name and email, which you'll need to create commits. The commands work exactly the same as git.

$ dolt config --global --add user.email [email protected]
$ dolt config --global --add user.name "YOUR NAME"

Getting started

Navigate to the directory where you would like your data stored

Dolt needs a place to store your databases. I'm going to put my databases in ~/dolt.

% cd ~
% mkdir dolt
% cd dolt

Any databases you create will be stored in this directory. So, for this example, a directory named getting_started will be created here once you run create database getting_started. Navigating to ~/dolt/getting_started will allow you to access this database using the Dolt command line.

NOTE: For this example, the getting_started directory will be created after you run create database getting_started; in a SQL shell in the Create a schema section. Don't do anything except make the directory and navigate to it just yet.

Start a MySQL-compatible database server

Dolt ships with a MySQL compatible database server built in. To start it you use the command dolt sql-server. Running this command starts the server on port 3306.

dolt sql-server
Starting server with Config HP="localhost:3306"|T="28800000"|R="false"|L="info"

Your terminal will just hang there. This means the server is running. Any errors will be printed in this terminal. Just leave it there and open a new terminal.

Connect with a MySQL client (up to version 8.4)

In the new terminal, we will now connect to the running database server using a client. Dolt also ships with a MySQL compatible client.

% dolt -u root -p "" sql
# Welcome to the Dolt MySQL client.
# Statements must be terminated with ';'.
# "exit" or "quit" (or Ctrl-D) to exit.
mysql>

In the other terminal where you ran dolt sql-server, you'll see the following log line.

2022-06-06T13:14:32-07:00 INFO [conn 1] NewConnection {DisableClientMultiS

readme truncated — read the full docs on github

Frequently asked questions

Is dolt free to use?

dolt is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does dolt do?

Dolt – Git for Data

What is dolt written in?

dolt is primarily written in Go. Its source is publicly available at https://github.com/dolthub/dolt, and it has 24,458 GitHub stars.