mrkeyoor.com_
Tue 01 Sept 17:40 UTC
Dataevaluationupdated 22 Aug 2026

dolt review

Dolt is a SQL database that versions tables and schemas with Git-style commits, branches, diffs, merges, pushes, and pulls. Applications connect through a MySQL-compatible server, while developers can inspect or change database history from SQL procedures and the `dolt` command line.

+43stars / 7d
Verdict

Dolt earns a trial when data changes need the same review and merge habits developers use for source code. It is a poor default for an ordinary CRUD application because the extra commit graph only pays off when the team will query, branch, or exchange history. Test the exact MySQL client, schema operations, and recovery procedure you plan to use, especially while the repository-wide sandbox test run is this noisy.

We ran it

Lab card: what happened when we ran doltScreenshot of dolt (www.dolthub.com)
Install✓ · 96s449 packages
Build✓ · 121s
Tests✗ · 308s78 passed · 73 failed of 151 (go test)
Repo2435 files~466,328 lines of source · 47.2 MB · 43 CI workflows

Answers from our run

Does dolt build from source?

Dependencies installed in 96 seconds (449 packages), and the build succeeded in 121 seconds. We cloned commit 0d6b060 into a clean Debian container with 3 CPUs and no project-specific setup.

Do dolt's tests pass?

Not all of them: 78 of 151 passed and 73 failed when we ran the project's own test command (go test). Some failures need services or credentials a bare container does not have.

Who should not use dolt?

Applications that only need a conventional transactional database: Dolt commits are separate from SQL transaction commits, so version history adds another lifecycle to understand.

What are the alternatives to dolt?

Doltgres, MySQL, PostgreSQL. Dolt earns a trial when data changes need the same review and merge habits developers use for source code.

Setup3/5Easy release install; source tests failed across many packages
Docs4/5Detailed tutorial explains SQL, CLI, branches, diffs, and merges
Community5/5Frequent releases and same-day issue and pull-request activity
Maturity4/5Broad SQL and versioning surface, with current correctness reports

Discussed on

  1. hnDolt is Git for Data: a SQL database that you can fork, clone, branch, merge752 points
  2. hnDolt is Git for Data334 points
  3. hnShow HN: Dolt Workbench – A modern, browser-based, open source MySQL workbench9 points
  4. hnDolt: A version-controlled SQL database5 points
  5. hnDolt Is Git for Data4 points

Who it’s for

Teams that need reviewable branches for data or schema changes.
Data publishers who want to clone, diff, merge, and share whole relational datasets.
Agent and automation builders that need persistent history and parallel database branches.
MySQL-oriented developers willing to test client and query compatibility against their own workload.
Analysts who need row-level lineage and queries against earlier commits or branches.

Who it’s NOT for

Applications that only need a conventional transactional database: Dolt commits are separate from SQL transaction commits, so version history adds another lifecycle to understand.
Teams requiring exact MySQL behavior for every schema and query: the README recommends MySQL clients through 8.4, while current issues document trigger breakage after table or column renames.
PostgreSQL-first shops: Dolt speaks the MySQL protocol; the README directs PostgreSQL users to the separate Doltgres beta.
Source contributors expecting the repository-wide Go tests to pass in a plain Go container: our run reported 73 failed packages, including build failures named in the log tail.
Operators who equate branching with backups: Dolt has separate backup commands, and a branch inside the same database is not an independent disaster-recovery copy.

Setup reality

At commit 0d6b060, our fresh Debian container installed 449 packages in 96 seconds and built Dolt from its ./go/ project in 121 seconds. Tests ran for 308 seconds and failed with exit 1: 78 packages passed and 73 failed out of 151. The tail names go/utils/batsee and go/utils/remotesrv as build failures, then ends at the aggregate FAIL.

End users can install a release binary, a package-manager build, or an official container image. A local server starts on port 3306 and accepts MySQL-compatible clients. Creating Dolt commits requires a configured name and email. Remote push and pull need remote credentials, while production service needs explicit users, authentication, storage, backup destinations, and server configuration.

Building from source requires Go, cgo, and a working C compiler, with commands run from ./go/. MySQL 8.4 is the documented client target. The README says MySQL 9 changes authentication and cannot connect by default without extra configuration. The source repository itself has no Dockerfile, despite separately published official runtime images.

A database with a commit graph

Dolt stores relational tables while exposing a workflow modeled on Git. You can initialize a database, stage table changes, commit them, create branches, compare revisions, merge work, and push to a remote. A MySQL-compatible server lets existing clients issue ordinary SQL. Version operations appear in SQL as system tables, table functions, and stored procedures, so an application can inspect history without shelling out to the CLI.

That combination is useful when the history is part of the product. A data publisher can distribute a cloneable dataset and accept changes as branches. A team can test a schema migration with matching data before merging it. An automated worker can receive its own branch, make changes, and return a diff that a person reviews. AS OF queries and per-table diff views make old states available without maintaining a parallel audit schema.

Most applications do not need this. If the only requirement is reliable current-state storage behind a MySQL client, standard MySQL has fewer concepts and closer behavioral compatibility. Dolt asks the team to manage a database transaction history and a Dolt commit history. That cost is worthwhile only when branches, merges, or lineage enter the normal workflow.

SQL transactions and Dolt commits are different

The README makes an important distinction: a Dolt commit is not a SQL transaction COMMIT. SQL transactions control visibility and atomicity for database work. Dolt commits record a named point in the database's version history. Autocommit can finish each SQL statement without producing a matching Dolt commit unless the relevant system variable is enabled.

This separation is sensible, but new users can easily carry the wrong mental model from Git. A successful transaction may still leave uncommitted Dolt changes in the working set. A merge may need its own Dolt commit. Teams should decide who creates history commits, how often, and whether application traffic or an external workflow owns that action. Commit author identity also requires a configured name and email.

Branch behavior is exposed inside SQL sessions. One session can check out a branch and modify it while another session remains on main. Queries can read another branch or commit through AS OF, and diff functions compare table rows across revisions. This is more useful than treating database snapshots as opaque files because the differences remain queryable as relational data.

MySQL compatibility is practical, not absolute

Dolt starts a server on port 3306 and works with MySQL-compatible clients. The tutorial uses a MySQL 8.4 client and covers tables, foreign keys, secondary indexes, triggers, constraints, stored procedures, joins, and schema changes. Existing database tools can therefore connect without learning a custom wire protocol.

Compatibility still needs application testing. The README warns that MySQL 9 changed authentication and cannot connect to Dolt by default without configuration. Open issues on 2026-08-22 report triggers becoming detached after RENAME TABLE and trigger metadata failing after a referenced column is renamed. Those reports concern specific rename paths, not all triggers, but migration-heavy applications should reproduce them before switching.

The version graph also changes operational habits. A branch is useful for isolated work but shares the database's fate. Dolt provides separate backup commands, remote repositories, DoltHub for sharing, DoltLab for a self-hosted collaboration service, and a hosted offering. Choose a backup destination and test restoration instead of treating a local branch as disaster recovery.

What happened when we ran it

We cloned commit 0d6b060 into an unprivileged golang:1.24-bookworm container with 3 CPUs and 8 GB of RAM. The checkout contained 2,435 files, about 466,328 lines of source, and occupied 47.2 MB. The Go project lives under ./go/. We found 43 CI workflow files, no Dockerfile, and no top-level tests directory.

Installation succeeded in 96 seconds and installed 449 packages. The build succeeded in 121 seconds. That confirms the source compiled in the clean container with its resolved dependencies.

The test run took 308 seconds and failed with exit code 1. The Go package summary counted 78 passed and 73 failed out of 151. In the supplied final lines, several storage utility packages pass, while github.com/dolthub/dolt/go/utils/batsee and github.com/dolthub/dolt/go/utils/remotesrv are each marked build failed. The log then ends with the overall FAIL. It does not show the compiler errors for those packages or explain the other failures, so there is no basis for assigning one cause to all 73.

This result is a serious contributor warning. The executable built, but the broad test command was nowhere near clean in our environment. Anyone changing Dolt should identify the repository's expected test entry points and prerequisites before treating a plain go test result as representative of CI.

Installation, releases, and health

For users, the installation choices are better than the source-test experience. Dolt publishes binaries for Linux, macOS, and Windows, plus Homebrew, MacPorts, Chocolatey, and Arch packages. Official container images cover the CLI and SQL server even though this source checkout has no Dockerfile. Building manually requires Go, cgo, and a C toolchain, and the command must run from the go directory.

The README is long, concrete, and opinionated. Its walkthrough creates a database, connects with MySQL, commits schema and rows, inspects diffs, recovers a dropped table, branches data and schema changes, merges them, and queries cell lineage. That sequence teaches the two histories better than a feature list would. Dedicated documentation covers concepts and SQL references beyond the front page.

Version 2.3.1 was released on 2026-08-19. Its changes include a backup correction so syncing no longer commits the calling session's open transaction. The repository was pushed on 2026-08-22, and issues and pull requests were updated the same day. GitHub reported 704 open issues and pull requests combined. Current reports include trigger rename correctness and a DOLT_RESET('--hard') regression in 2.3.0, alongside active fixes and dependency updates.

Dolt is easy to understand once a dataset truly needs branches. For ordinary application storage, that requirement should be proven rather than assumed. For reviewable data work, the SQL-accessible history is distinctive enough to justify testing despite the failed repository-wide run.

Alternatives

ProjectWhat it isPick it when
DoltgresA PostgreSQL-compatible database from the Dolt team with Git-style data versioning.pick this instead when the versioned-data model fits but your clients and SQL are PostgreSQL-oriented.
MySQLThe upstream MySQL server without Dolt's branch and merge layer.pick this instead when exact MySQL behavior and its established operational ecosystem matter more than versioned tables.
PostgreSQLA mature relational database with a broad extension and administration ecosystem.pick this instead when normal database transactions, PostgreSQL compatibility, and standard replication are the main requirements.

What people are saying

  1. [github-trending] dolthub/dolt

Sources

  1. Dolt repository and README
  2. Dolt documentation
  3. Dolt v2.3.1 release
  4. Trigger behavior after table rename
  5. Trigger metadata after column rename
  6. DOLT_RESET regression report

More data reviews

turso · TrackersListCollection · dash · getcontact-cli · awesome-zhuiju-free · iggy · the whole board →