A WRITTEN EXAMPLE
Change one part. What else uses it?
React is software used to build website interfaces. In this example, Kin found other parts of React that use the same small piece of code. Those connections give a developer places to inspect before making a change. This written example includes saved output from an earlier Kin version. Back to the homepage
View the command, saved output and source
SAVED 2026-09-07 v0.7.3
kin refs getToStringValue --kind callsReferences to 'getToStringValue' -> getToStringValue (Function) @ packages/react-dom-bindings/src/client/ToStringValue.js
referenced by 8 entities:
hydrateInput @ packages/react-dom-bindings/src/client/ReactDOMInput.js:363 [Calls] (type_resolved) sites 373,375
initInput @ packages/react-dom-bindings/src/client/ReactDOMInput.js:222 [Calls] (type_resolved) sites 258,260,277,278
updateInput @ packages/react-dom-bindings/src/client/ReactDOMInput.js:88 [Calls] (type_resolved) sites 133,135,136,149,170,172,175,216
hydrateSelect @ packages/react-dom-bindings/src/client/ReactDOMSelect.js:161 [Calls] (type_resolved) sites 194
updateOptions @ packages/react-dom-bindings/src/client/ReactDOMSelect.js:63 [Calls] (type_resolved) sites 90
hydrateTextarea @ packages/react-dom-bindings/src/client/ReactDOMTextarea.js:152 [Calls] (type_resolved) sites 168
initTextarea @ packages/react-dom-bindings/src/client/ReactDOMTextarea.js:93 [Calls] (type_resolved) sites 130
updateTextarea @ packages/react-dom-bindings/src/client/ReactDOMTextarea.js:64 [Calls] (type_resolved) sites 73,87Every row names the calling function, its file, and the line the call sits on. Open getToStringValue on GitHub at the same revision and check them.
- Kin release
- v0.7.3 / macOS arm64
- Kin commit
72f1cfba717b5fde8a7d6de261526a6c99a422e9- Repository revision
9b7a0d4029ee31f84446383b6530075f423e9904
A SAVED SESSION
Inspect, change, record, return.
A saved session on Kin 0.7.19. The same code was inspected, changed, recorded in Kin and asked about again from a new shell. It shows continuity, which the React snapshot above cannot.
View the commands and saved output
SAVED 2026-09-16 v0.7.19
1. Inspect
kin refs applyDiscount --kind callsReferences to 'applyDiscount' -> applyDiscount (Function) @ discount.ts:1
referenced by 3 entities:
cartTotal @ cart.ts:3 [Calls] (type_resolved) sites 4
checkoutAmount @ checkout.ts:3 [Calls] (type_resolved) sites 4
receiptLine @ receipt.ts:3 [Calls] (type_resolved) sites 42. Change, shown as the hunk at the end of the diff
kin diff @@ -1,3 +1,4 @@
export function applyDiscount(price: number, percent: number): number {
- return price - (price * percent) / 100;
+ const discount = Math.min((price * percent) / 100, price / 2);
+ return price - discount;
}3. Record. Kin printed a second line saying the change is recorded in Kin's own history rather than Git's; it is stated here instead of shown.
kin commit -m "Cap the discount at half the price"Created semantic change 5d094ad61bdfbfbcdda0819887dfd78dffacfb5253907834af93317d549b66e6 on branch 'refs/heads/main' (2 entities, 25 relations, 1 artifacts)4. Return, from a new shell
kin logchange 5d094ad61bdfbfbcdda0819887dfd78dffacfb5253907834af93317d549b66e6
Author: Kin Example <example@localhost>
Date: 2026-09-16T13:42:25.091897+00:00
Origin: native
Parents: 97a2beb82566c47e1a7e2c0a1a64330776e8db0e74c38936f7d0ff53f10232d9
Deltas: entities=2 relations=25 tree=1 policy=false
Cap the discount at half the price
change 97a2beb82566c47e1a7e2c0a1a64330776e8db0e74c38936f7d0ff53f10232d9
Author: Kin Example <example@localhost> 1789566019 -0400
Date: 2026-09-16T13:40:19+00:00
Origin: git commit 871cca9359680e0448be12a464a0f3661e6c821b
Deltas: entities=8 relations=13 tree=6 policy=true
Initial commit
Signed-off-by: Kin Example <example@localhost>
Workspace tip: projected at refs/heads/main (5d094ad61bdfbfbcdda0819887dfd78dffacfb5253907834af93317d549b66e6)
Answered by: this repository's daemon, from the authority it already holds open for the current publicationkin refs applyDiscount --kind callsReferences to 'applyDiscount' -> applyDiscount (Function) @ discount.ts:1
referenced by 3 entities:
cartTotal @ cart.ts:3 [Calls] (type_resolved) sites 4
checkoutAmount @ checkout.ts:3 [Calls] (type_resolved) sites 4
receiptLine @ receipt.ts:3 [Calls] (type_resolved) sites 4The MCP tools/call request, sent by a script as an agent's MCP client would, and the reference rows that came back
find_references {"query":"applyDiscount"}[
{
"name": "cart",
"kind": "Module",
"relation_kinds": [
"imports",
"references"
]
},
{
"name": "cartTotal",
"kind": "Function",
"relation_kinds": [
"calls",
"references"
]
},
{
"name": "checkout",
"kind": "Module",
"relation_kinds": [
"imports",
"references"
]
},
{
"name": "checkoutAmount",
"kind": "Function",
"relation_kinds": [
"calls",
"references"
]
},
{
"name": "receipt",
"kind": "Module",
"relation_kinds": [
"imports",
"references"
]
},
{
"name": "receiptLine",
"kind": "Function",
"relation_kinds": [
"calls",
"references"
]
}
]AN EARLIER WRITTEN EXAMPLE
Keeping a history of a change.
These older saved results show Kin keeping a change in its own history, in a small project that was not using Git. They illustrate a different task from the React example above.
View the change commands and saved output
HISTORICAL TERMINAL EXCERPT / v0.6.7
kin commit -m "Record the invoice calculation"Created semantic change 324ea310ae3c236dbe5384e573536f3e325d056d6df51e754baad00e3b26a8ea on branch 'refs/heads/main' (3 entities, 1 relations, 1 artifacts)kin 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 ---Read the first attempt and recorded history
The first attempt came before an author was set. Kin refused it.
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 a local author, the same commit command succeeded. The recorded history follows.
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 calculation