lazydolt, a TUI application for dolt

5 min read

We’re building Dolt, the world’s first version-controlled SQL database. Lately we’ve been very busy welcoming the influx of new interest from Gas Town and Beads, agentic coding tools that use Dolt for agentic memory. These tools have divided the developer community into enthusiastic adopters and hardcore skeptics. In a recent interview, the author of these two tools, Steve Yegge, referred to Hacker News as the home of “the new Amish” because of their dismissal of the ability of coding agents to do real work. A frequent skeptical question is: what software products have actually been written by coding agents (besides these tools themselves)?

Today we have an answer for the skeptics: lazydolt, a Terminal UI for managing a Dolt database. It was inspired by a similar tool for git called lazygit, which it used as a template for its UI and functionality. Its author wrote it entirely using coding agents.

So does it work? Is it any good? We took it for a test drive to see for ourselves.

Test driving lazydolt#

First, let’s create a new database with the command line using dolt init. Then we’ll start lazydolt there. This is what we see:

lazydolt init

No tables, only the initial commit. The only interesting part is the command log, which records the dolt commands it’s running to get all this information.

Next let’s add a table and see if we can commit it. lazydolt gives us a nice little modal dialog to type the commit message into.

lazydolt commit

Next I want to add some more rows, so I’ll use a feature that lazygit doesn’t have: a SQL query dialog.

lazydolt query

The diff interface is nothing fancy, basically just echoing the output of dolt diff with various arguments.

lazydolt diff

Next I used the branch view to create a new branch and added some more changes. I accidentally made them on main though — I forget to switch to the new branch I just created. Here’s the diff.

lazydolt diff 2

When I realized my mistake, I figured the best way to resolve it was to just delete the feature branch and recreate it from the current head of main, which had the changes I wanted on it. And that worked, with another modal dialog.

lazydolt delete branch

Then I was able to dolt reset --hard on main, choosing the commit before I made the error, and it worked.

lazydolt reset

Finally, I made some additional changes on main so a merge of feature wouldn’t be a fast-forward, then tried out a merge. This is the first place I encountered a major bug. It didn’t work.

lazydolt merge

Well, you can’t expect the robot to get everything right on the first go. I killed lazydolt, merged from the command line myself, and then started it back up. Here’s what I saw. I especially like the branch subway diagram showing the merge happening.

lazydolt merge

Feedback and commentary#

This project is a great fit for a coding agent: copy an existing application’s UI and features, but apply it to a new domain. The fact that git and dolt are so similar in terms of features and interface makes this even easier for a coding agent to get right. Dolt’s decision to copy git’s commands was strategic, in terms of making a product that its target audience already knew how to use. But it had an unexpected benefit in the age of coding agents: the LLMs know how to use it too, since they know how to use Git. And this means they can write code that interacts with Dolt correctly too.

As for quality, the tool worked better than I thought it might, enough to impress me as a proof of concept that got a lot right. I did hit some bugs, but that’s kind of par for the course with free open-source projects, and I’ve used much worse. Considering the amount of (human) time and effort that went into this tool so far, I would call it a shockingly good prototype. What’s here is really cool and useful, and I have no trouble believing it could be cleaned up and the bugs ironed out with a little more attention.

That said, my first attempt at using the tool was on a very large hospital pricing dataset, one with hundreds of millions of rows and hundreds of merged branches. And it did a little worse at that scale. Well, a lot worse. It managed to crash my M4 MacBook. Kind of impressive, honestly. My guess is that the dolt commands it was issuing, which have millions of lines of output in some cases, don’t get canceled when you click a second time in the UI, and as I clicked more and more they stacked up and eventually overwhelmed the system.

That very minor complaint aside, I have a couple pieces of concrete feedback.

  • Center the tool on SQL querying, rather than Git primitives. The main window in the interface is kind of a diff viewer right now, and it should probably be a query runner that shows results. Basically I’m suggesting that this tool would probably be more useful as a TUI SQL Workbench with Git-like functionality, rather than a Git tool with some SQL functionality.
  • The tool seems to want to start a SQL server on startup but then gets most of its information from the server by running dolt commands. This will work fine in most cases (we put a lot of work in behind the scenes to make this the case), but there are some weird edges cases. Like deleting a branch — the server doesn’t like to do that if the branch is in use by another session. Things would probably hang together better overall if the tool used SQL queries for its version control functionality instead.
  • The tool really wants to run in a directory with a .dolt directory, which corresponds to a single database. This is also the usual requirement for running a dolt command on the CLI. But most Dolt customers run the server in a container, and would presumably use this tool to talk to the server they already have running. So it would be nice to be able to configure it with some connection params and let it connect to an already running server instance.

Conclusion#

We live in an age of wonders. It’s truly astounding that coding agents can generate useful TUI applications in an afternoon, from scratch, with minimal human intervention. Yes, they will probably have some bugs. If that’s a dealbreaker for you, I have bad news about most of the human-written software available for free on GitHub.

Want to learn more about Dolt, the world’s first version-controlled SQL database? Visit us on the DoltHub Discord, where our engineering team hangs out all day. Hope to see you there.