See how your business logic changes.
Kanjin collapses mechanical changes so you can focus on application behavior. Read the original code and expand any block when you need it.
The demo runs on a prepared example. No account, no repository connection, nothing of yours is sent anywhere. Kanjin is also a Mac application — download for Mac.
The problem
One line decides who gets paid. It arrives with 213 others.
This pull request touches nine files. A formatter reflowed two of them, imports were reordered, a test helper was rewritten, and a JSON rate table was regenerated. Somewhere in there, the tenure requirement for a fleet rebate dropped from twelve months to six, and a tax-ID check disappeared.
Reading a diff top to bottom means reading the cleanup first. Most reviewers do it once carefully and skim after that — not from carelessness, but because the important lines look exactly like the unimportant ones.
Kanjin does not claim that moves, locking, error handling or configuration never matter. It claims that they are a different kind of reading, and that they should not come first.
How it works
Provide a change. Its blocks get classified. Read the focused diff.
The code you read is always the original code, with its own line numbers. Kanjin changes what is on screen, never what is in the repository, and never rewrites a change into a summary.
Provide a change
A pull request from GitHub, Bitbucket or GitLab, or a folder the Mac application tracks on your machine. Kanjin takes the diff plus the surrounding source the classifier needs.
Blocks get classified
Each changed block, with its context, is sent to the classifier, which returns a structured classification: what kind of change it is, what it touches, and how sure it is. Kanjin stores the answer; it does not write code.
Read the focused diff
Only the blocks classified as behavior-preserving are collapsed, each with its category and line count. Uncertain, mixed, failed and unclassified blocks stay on screen — they are exactly the ones worth a second look.
Business relevance and confidence are two different things. A block can be confidently classified as mechanical and still be worth reading; a low-confidence block is never hidden because Kanjin is unsure.
Reviewer control
Nothing is hidden from you. It is folded, and you hold the fold.
Every collapsed block names its category and how many lines it is holding, so you always know the size of what you are not reading. One click opens it. The same click closes it again, and your place in the file does not move.
- Expand one block, or every block, from the same control
- Switch to the full diff at any point, unified or side by side
- Real line numbers, before and after, in every view
- Keep a block visible for yourself, or correct its classification
What stays visible
Kanjin supports your judgement. It does not stand in for it.
Three kinds of block are never collapsed, whatever the confidence attached to them: a changed rule, a block the classifier was unsure about, and a technical change that still moves behavior.
A changed rule
Eligibility, pricing, permissions, validation, and the state something ends up in. In this example: who qualifies for a fleet rebate, and a tax-ID check that no longer runs.
A block the classifier was unsure about
Inline rounding replaced by a helper whose definition was not in the supplied context. The helper might round the same way. Kanjin will not decide that for you.
A technical change that still matters
Not a business rule, but not cleanup either: a timeout, a retry, a transaction boundary, an index. It stays visible, in its own category, so it is not mistaken for either.
Fits your workflow
Connect your provider, or track a folder on your Mac.
Discussion stays where your team already has it. Kanjin links to the pull request for comments and does not add a second place to argue.
Signing in with GitHub identifies you. It does not let Kanjin read your repositories — each member links their own provider account, and the provider decides what that account can read.
Trust and limits
What Kanjin will not tell you.
Classification is a judgement made by a model on a block of code and the context around it. It can be wrong, and it can be missing. The design assumes that.
Read the trust pageCollapsed does not mean cleared
A collapsed block is one the classifier classified as behavior-preserving. That is a classification, not a proof. Kanjin never labels a change safe to merge, and has no approval action.
Nothing disappears on failure
If analysis fails, times out, or comes back partial, the affected code stays fully visible and the review says so. Missing classification removes collapsing, never code.
Analysis involves sending source
To classify a change, Kanjin sends the classifier the enclosing function in both versions, the imports it uses and the declarations it references. You see the file list and its size before anything private is submitted. Kanjin holds that input only while the analysis runs, and for one hour after a failed or partial one so a retry works. It keeps no other source code, with one exception: a block whose classification you correct. Everything Kanjin does keep — the judgments, and the source of a corrected block — is deleted after one year.
Sign-in is not repository access
Your login identifies you. Repository access is granted to a workspace, per repository, and shown on its own screen — with what it reads, who granted it, and how to remove it.
Questions
Answers, with the release-dependent ones marked.
What does Kanjin mean by business logic?
The rules that decide what your application does: who qualifies, what something costs, who may act, what counts as valid, and what state a thing ends up in. If a change alters one of those answers, it stays visible.
What kinds of changes can it collapse?
Only blocks the classifier classifies as behavior-preserving — reformatting, import order, renames of local names, removed comments and commented-out code, and regenerated files. Each collapsed block names its category and its hidden line count.
Can I inspect everything that it hides?
Yes. Expand any block in place, expand every block at once, or switch to the full diff. The original code and its line numbers are what you see in every view.
What happens when classification is uncertain or fails?
The code stays on screen. Uncertain, mixed and unclassified blocks are never collapsed, a partial analysis says which files were not classified, and a failed analysis leaves the whole diff visible with a retry.
Does Kanjin approve changes or find every bug?
No. It has no approval or merge action, it does not score quality, and it never marks a change safe to merge. It changes the order you read a diff in — the judgement stays yours.
Does it change the source code?
No. Kanjin only changes what is displayed. It writes nothing to your repository, proposes no fixes, and never edits a file.
Which languages and providers are supported?
TypeScript and JavaScript come first, and Kanjin is built to add more. GitHub, Bitbucket and GitLab all work in the first release, and the Mac application can track a folder on your machine with no provider connection at all.
Does source code leave my environment?
Yes, when you run an analysis: the enclosing function, its imports and the declarations it references are sent to the classifier. Kanjin shows you the file list and size before you submit anything private. Kanjin holds that input only while the analysis runs, and for one hour after a failed or partial one; it keeps no other source code except a block whose classification you correct, and everything it keeps is deleted after one year.
The storage location and the deletion guarantees still need legal sign-off. No local-only-processing claim may be made.
How is repository access granted and removed?
An administrator connects GitHub, Bitbucket or GitLab to the workspace, through the provider’s own authorization. Each member then links their own provider account, and Kanjin shows each member only what that account can read — it mirrors the provider and never grants access. Access is removed at the provider, or by unlinking the account or disconnecting the provider in Kanjin.
Read the behavior change first. Keep the whole diff one click away.
Try the prepared example now — nothing to install, nothing to connect. Sign-up is open, and the Mac application tracks a folder without any provider connection.