Koh — version control for the solo developer

Koh — version control for the solo developer

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.

koh-terminal-demo-slow

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.

Source: koh — kepr
Official Website: https://koh.asha.software

llm — used Claude as an implementation partner. Architecture and all decisions are mine. Every agent save is attributed and auditable in the history.

Supported Zig versions

Zig 0.16

12 Likes

Sounds interesting, I’ll have to look at it later as it seems my work blocks .uk domains.

2 Likes

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… :wink:

2 Likes

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!

1 Like

No I can’t, I’ve no Instagram account. :yawning_face:

1 Like

Hahaha well that one is out of my hands!

No it isn’t. There are alternatives. :yawning_face:

1 Like

Check back on our website in a while. I plan to start making music videos soon on YouTube

1 Like

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.

koh save "message" --session "auth refactor"

Forbidden: wip · fix · changes · update · misc

Good: auth refactor · post-quantum migration · offer wizard

koh undo --session rolls back an entire unit of work in one command. A session named wip makes this useless.


Save messages

Specific. Complete. Present tense imperative. An outcome, not an action.

✦  add Blake3 checksum verification to offer.zig
✦  fix verify deduplication: scan each unique object once not per-save
✗  wip
✗  fix bug
✗  various fixes

Recovery

koh undo --session      # roll back the whole session
koh load --checkpoint   # return to the safety point

The saves are never deleted — they remain in history, accessible by ID.

2 Likes

This is very cool! Keep doing you :smiling_face_with_sunglasses:

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.

2 Likes

Appreciate it! Conflicts aren’t a thing in Koh because it uses a two sequential lane system. dev and main. There’s no merging.

I checked out Jujutsu before I made Koh actually but it wasn’t for me. Awesome anime though haha

2 Likes