I’ve been building Koh for the past several months — a version control system written in Zig, designed specifically for how solo developers actually work.
The core model is simple: every koh save is a complete snapshot of your project. No staging area. No index. Two lanes — dev to experiment freely, main to ship. Every destructive operation shows you exactly what it will do and defaults to no.
A few things that make it different:
koh undo and koh undo --session roll back precisely — one save or an entire named unit of work
koh checkpoint sets a named recovery point before anything risky
koh offer pushes to Kepr, a self-hostable remote with builds, CI, health signals, and a releases page
The database is fully rebuildable from manifests — nothing is ever truly lost
Single statically compiled binary, no runtime dependencies beyond system zlib
Built with Zig 0.16, SQLite amalgamation, Blake3, system zlib.
Interesting. Might be a nice tool for me to save different versions of music projects / sessions. I use git / git-annex for it now. A bit sad that in these days you don’t know what is done with llm and what not. Your music for instance…
Thanks! I hope you like it, I made it because git was confusing to me and I would only kinda half commit to using it. Need something that just felt obvious to my brain. By the way my music has absolutely zero AI usage whatsoever, I don’t even use computers for my production anymore. Entirely hardware and real world instruments and synths based now. You can see videos of me playing instruments here https://instagram.com/juniesdream
Cheers!
Today I did some changes that were probably about as destructive as possible and it went really badly. I made heavy changes across dozens of files on another project and the outcome didn’t end up being worth it. One Simple koh load [save-id] and everything is byte for byte back exactly as it was as if nothing had happened. Koh makes experimentation completely stress free if you follow what I like to call Strict Koh Discipline.
Strict Koh Discipline
Before anything
koh status
koh log
Know where you are before you touch anything.
Checkpoint before every work session
koh checkpoint "before <what you are about to do>"
Not “checkpoint.” Not “wip.” Describe what is about to happen. koh load --checkpoint gets you back when things go wrong — but only if the checkpoint was set.
Session naming
Every save belongs to a named session. Choose the name before the first save and use it identically throughout.
If you ever need to work with a git backend for work or otherwise, I would recommend using jujutsu. It takes a lot of the pain away, though it still requires quite a bit more domain specific knowledge than koh appears to.
Out of curiosity, how do you handle conflicts? (or are they even possible?) I find that is typically the most irritating part of version control.