the diff github won't show
lockfiles, generated code, snapshots, vendored dependencies, migrations. "large diffs are not rendered" is where seams starts.
a diff viewer for files too big for everything else.
a line diff engine in hand-written assembly and webassembly, drawn with webgl. a million-line diff opens in 0.19 s.
v0.3mit licencelinux · windows · macchrome & edge extensionnothing leaves your machine
three screen recordings on one laptop, in real time. nothing is sped up, and the numbers on screen are the ones the page measured as it ran.
this is seams itself, rendering a real change to its own source. scroll it, press n for the next change, v for split view, ctrl f to find. drag to select, copy works.
loading…
your files never leave this tab: they are read, diffed and drawn on your machine.
five thousand files, generated in this tab. the first one opens straight away, and every other file is diffed in the background while you read it. ] and [ move between files, the box filters them.
not opened yet
four ways in. pick the one that matches where your diff lives. none of them send your code anywhere.
seams-extension.zip from the latest release and unzip it somewhere it can stay.chrome://extensions (or edge://extensions), turn on developer mode, click load unpacked and pick the folder.seams-linux-x86_64.tar.gz (one static binary), seams-windows-x86_64.zip, or seams-macos-x86_64.tar.gz (apple silicon runs it through rosetta).diff -u.seams old.txt new.txt # unified diff
seams --minimal old.txt new.txt # the exact smallest diff, however long it takes
seams patch old new > change.seams # a patch that carries its own lines
seams apply old change.seams > new # refused if old isn't the file it was made from
seams merge base ours theirs # three-way merge, git's conflict markersas git's diff tool: GIT_EXTERNAL_DIFF=tools/seams-git git diff. windows may warn the first time you run seams.exe, because the binary isn't signed yet.
git diff. it reads both sides straight from git and opens your browser.git clone https://github.com/Cintu07/seams
cd your-repo
node ../seams/tools/seams-review.mjs main..my-branchrenames are followed, binary files are skipped, and the server only listens on your machine. this is the one to use for an agent's branch before it becomes a pull request.
seams-web.tar.gz from the release and serve the folder.seams-pack diffs on your server or in ci and writes a pack; the browser opens it with nothing left to compute. --page also writes a page whose first screen is already in the html.import { createDiffViewer } from 'https://cintu07.github.io/seams/lib/index.mjs';
const viewer = createDiffViewer(el, { theme: 'sage' });
await viewer.setFiles(before, after, { name: 'main.ts' });
// diffed ahead of time: node tools/seams-pack.mjs old new -o pr.seamspack
await viewer.setPack('/pr.seamspack');seven themes: sage, dusk, paper, clay, ink, harbor, and clear, which uses orange and blue instead of red and green for red-green colour blindness. or pass your own colours with the same keys as THEMES.sage.
react: <SeamsDiff oldFile={a} newFile={b} name="main.ts" /> from react.mjs. a whole pull request with a file list: createReview(el).setFiles([{ path, old, new }]).
no. the site diffs in your tab, the cli and the local review never touch the network, and the extension talks only to github, for the pull request you opened.
yes, mit licence, all of it. the source is on github.
for reading, mostly: every file, comments in and out, live updates. approving, requesting changes and suggestions still happen on github.
with --minimal, on files with thousands of edits scattered all through them, seams is slower than imara-diff's default mode, because it insists on the shortest diff; the default fast mode is now ahead of imara there too. there's no native arm64 build yet, and the windows binary isn't signed. syntax highlighting is a small set of lexers, not full grammars.
one laptop, one browser, the same files and the same scroll gestures, against @pierre/diffs 1.6.4 at its best settings with highlighting on.
fair caveats: pierre computes its diff with jsdiff from two whole files, which is most of its first-screen time; its grammars are richer than seams' lexers; it has annotations and a merge ui that seams does not. the scrolling gap holds either way.
most diffs are small, and any viewer is fine for those. seams is for the ones that break the others.
lockfiles, generated code, snapshots, vendored dependencies, migrations. "large diffs are not rendered" is where seams starts.
coding agents change thousands of lines at once. you still have to read them, and the review tool should not be the slow part.
sql dumps, json exports, csv, logs, terraform state. text files with a million lines are normal outside of source trees.
seams-pack diffs on the server and writes a pack; the browser opens it with nothing left to compute. a pr page that is instant on any laptop.
one import by url, a plain api and a react component. code review apps, editors, internal dashboards, docs.
the cli writes patches that carry their own bytes and refuse the wrong base, and does three-way merges with conflict markers.
two files go in as bytes. nothing is turned into strings, nothing becomes a dom node. the blog post has the long version.