milanofthe / sanity
git clone https://github.com/milanofthe/sanity.git
v1.13.4 · 17d ago
Structural overview of a repository: every non-ignored file as a read-only panel on a zoomable canvas
+0
stars, 24h · #35,405
+~0
stars, 7 days · #41,029
+~0
stars, 30 days · #44,657
83
★ total
4
forks · 10 open issues
Star history (as recorded here)
LanguageTypeScript
LicenseMIT
Created2026-09-21 (1mo ago)
Last push17d ago
Watchers0
OwnerUser
GitHub topics
Links
- GitHub: github.com/milanofthe/sanity
- Homepage: https://sanity.milanrother.com/
- Releases · Issues · Hacker News mentions
README excerpt
sanity opens a folder and shows every file in it at once, as read-only panels on one zoomable canvas, grouped by directory. Zoomed out you see the structure of the project, zoomed in you read the code. When a file changes on disk, its panel flashes and the changed lines are marked. It is a monitor. It runs next to the agent interface while coding agents work in a repository, so you can see which files they touch, where those sit in the tree, and zoom in to read what changed. It also plays the repository's git history the same way, one commit at a time. Try it in the browser with a few public repositories, no install: sanity.milanrother.com ## Install Releases have a `.dmg` for macOS (Intel and Apple Silicon), an installer for Windows and an `.AppImage` for Linux. The builds are not signed yet. On macOS, right click the app and choose Open the first time. On Windows, click More info, then Run anyway. On Linux, `chmod +x` the file and run it; if it refuses to start, the system has no `libfuse2` and `./sanity.AppImage --appimage-extract-and-run` runs it without one. If the window opens at the right size and stays blank on Linux, WebKitGTK could not allocate its buffer through your driver. Start it with `WEBKIT_DISABLE_DMABUF_RENDERER=1` in the environment, which is what the app already does for itself on NVIDIA; virtual machines, software rendering and remote sessions hit the same thing and have to be told. ## Usage [code] Or open a folder from the Project menu. - Space or `f` fits the whole project, a double click fits a panel. - `/` jumps to search, over file names and contents. Enter goes to the next hit, Escape clears. - The left and right arrow keys, or `[` and `]`, step through the git history. - Clicking a panel header opens the file in `$SANITY_EDITOR`, `$VISUAL`, `$EDITOR` or the system default. - Right click exports the view or the whole project as a 4K PNG, and on a panel shows the file in its folder. - The Files menu sets which file types are shown and whether files ignored by git are listed. The View menu sets whether files are coloured by language, whether directories are named over the canvas, whether documents show all their pages, and whether each step through the history fits the whole project. The Theme menu has eight themes. ## Watching changes The folder is watched while it is open. When a file is saved, its panel flashes, the lines that were removed flash red and disappear, and the lines that were added come in green. A new file fades in where the layout puts it, and a deleted one fades out in red. When several files change at once, a commit, a formatter or a save of all open files, they start one after another across the canvas, so you can follow where it went. The bands are drawn at every zoom level, so even with the whole project on screen you can see where in a file the change was. A file that is rewritten with the same content, by `touch` or a formatter with nothing to do, does not flash. Moving or renaming a dire