Graph-native version control
A new coding session begins by working out what the code is and what happened to it. Kin makes that part of the repository: entities, the relationships between them, and every change recorded against them.
v0.7.2 Alpha · Apache-2.0
THE PERMANENT DAY ONEABOUT THE FILM ↗
THE WORK IS ALREADY HERE
Your repository should carry more than the files.
A new coding session can feel like a first day at work. Find the right code. Work out how it fits together. Work out what changed, and why. Then start.
Kin puts that knowledge in the repository. Entities, the relationships between them and every recorded change are part of the model, so people and agents read the same structure and record new work into it.
We are building a replacement for Git. Today it runs beside yours, and it can already record a change without it.
How Kin and Git differCode
Functions and the other entities Kin parses have a place in the repository, not just a line range in a file.
Relationships
Recorded connections you can query, as far as the language tooling reaches. Kin names the gap when it cannot see further.
History
Record a change natively, with the entities and relationships it moved, and no Git underneath it.
ONE RECORDED CHANGE
Here is the released build doing it.
A small Python project, a native Kin repository with no Git in it, and one change recorded against the code. This is terminal output copied from the capture, not a mock-up of one.
The first attempt is in the capture too. Kin would not record a change it could not attribute, and said so.
The refusal
kin commit -m "Record the invoice calculation"Error: config error: kin has no author identity to record for this change.
Authorship is provenance. A change attributed to nobody cannot support review attribution, blame, or audit, and it cannot be corrected later without rewriting history, so kin refuses to invent one.
Set your Git identity:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
Or set a Kin-specific author in .kin/config.toml:
default_author = "Your Name <you@example.com>"After setting an author, the same command
kin commit -m "Record the invoice calculation"Created semantic change 324ea310ae3c236dbe5384e573536f3e325d056d6df51e754baad00e3b26a8ea on branch 'refs/heads/main' (3 entities, 1 relations, 1 artifacts)kin logchange 324ea310ae3c236dbe5384e573536f3e325d056d6df51e754baad00e3b26a8ea
Author: Kin Example <example@localhost>
Date: 2026-09-05T00:08:25.061847+00:00
Origin: native
Deltas: entities=3 relations=1 tree=1 policy=true
Record the invoice calculationkin trace total_with_tax --file billing.py --compacttotal_with_tax (Function) @ billing.py
// total_with_tax ("billing.py", python)
def total_with_tax(subtotal, rate):
return round(subtotal * (1 + rate), 2)
--- Deps ---What this is
Recorded on the public v0.6.7 macOS arm64 archive, Kin commit 073a0ed79, from the release archive with sha256 a41aabfc73d7.
That capture predates the current release. Kin ships v0.7.2 today, and the terminal above is the older build, shown because it is the recorded one.
Kin also prints that the change is recorded in Kin's authority and not in Git. In a repository that has no Git, as here, that line is a notice rather than a warning.
What this is not
- The project is a small Python file written for this capture, not a repository anyone depends on.
- The run disabled language-server enrichment and used CPU embedding, which is why the trace returns the function and an empty dependency section. It is not evidence about callers.
- Nothing here is a timing or scale measurement. Authorship is declared, not verified.
A FILM ABOUT GETTING TO WORK
The Permanent Day One.
Imagine starting from the beginning. Every time.
FILM RENDERING
The film is still being rendered. It goes up here when the render is finished and reviewed, with captions. Until then the page below carries the idea and the recorded example it ends on.
WHAT WE MEASURED
What we measured, and what we will not claim.
We ran this once against a task set we froze first, and we are publishing all of it, including the part where Kin only ties. If you would rather run the ripgrep demonstration yourself than take our word for it, the commands are below.
Read the complete proof specification- Against the grep-driven agent baseline arm, the same run is a statistical tie on file-level accuracy and at parity on cost. The 95% confidence interval includes 0, and McNemar exact gives p = 0.125. That is not a win, and we are not going to claim accuracy or token savings from it.
- The run used Kin commit 2508da69, which long predates the current release line. Newer release code, including the currently shipping build, is not covered by this result.
- We also ran a further pre-registered round on newer code. Its predictions did not reproduce across all three passes, so it does not clear our own pre-registered bar for citability, and we are not citing a result from it. Our own reading of the traces puts the variation in the driving model, qwen3.6-35b-a3b, which produced different output from an identical prior context even at temperature 0, rather than in Kin's tool responses. That reading is our diagnosis of an unpublished round, not a result you can check yet.
- This is our own measurement, published so you can pick it apart. The harness is still private, so you cannot reproduce the benchmark with one command yet.
START WITH SOMETHING REAL
Try it on a project you know.
Git is optional. Start a native Kin project, or run kin init in an existing Git repository and let it import the reachable history. Files stay the interface to your editor, your compiler and your shell. Drive it from the CLI, or connect a coding agent over MCP.
Kin is a public alpha. Language coverage, native collaboration between machines and hosted teamwork all have limits today. Start on something small, read what it records, and tell us where it falls down.
Read the documentation