A Webstarted Toolbox widget · macOS & Windows

A diff checker that runs on your machine, not on someone’s website.

Paste two versions of a text — or two JSON documents — and see line by line what was added and what was removed. It all happens locally in your menu bar: nothing is uploaded, so you can compare a contract, a production log or a config file without leaking it.

Already have Toolbox? Open this widget

Free · No account · 100% offline · Installs from the Toolbox catalog
Try it here

Compare two texts now

Paste both versions and see what changed, line by line. It runs in your browser — nothing is uploaded.


100% local · neither text leaves this tab

Line by lineNumbered on both sides
JSON awareNormalize keys and indentation
Zero networkYour text never leaves the machine
Unified diffCopy the +/− result anywhere
How it works

Two panes, one keystroke, and the changes are marked.

Open the popover from your menu bar (macOS) or system tray (Windows), paste the old version on the left and the new one on the right, and hit Compare. The result lists every line with numbers from both sides: removed lines marked , added lines marked +, and the unchanged ones in between for context. A summary tells you the totals at a glance, like +2 −1.

Two switches handle the noise. Ignore case stops TIMEOUT and timeout from counting as a change; Ignore whitespace does the same for re-indentation, which is what turns most “everything changed” diffs back into the two lines you actually care about. Changes only collapses long identical stretches, leaving two lines of context around each edit and a marker for how many lines it hid.

  • Line numbers for both the before and after side
  • Ignore case and ignore whitespace toggles
  • Changes only — collapses unchanged runs to 2 lines of context
  • Swap sides, clear both panes, or pop it out into its own window
  • Tells you when both texts are identical instead of showing you nothing
JSON diff

Compare two JSON documents without the formatting noise.

Two API responses that mean the same thing rarely look the same: keys come back in a different order, one side is minified, the other is indented with four spaces. Compared as raw text, every single line is “changed” and the diff is useless. Tick Normalize JSON and both sides get their object keys sorted and re-indented identically before the comparison, so what surfaces is the value that actually differs.

Arrays keep their order. That is a deliberate choice, not an omission: in an array the order is part of the data, so reordering one to make the diff prettier would hide a real difference. If either side is not valid JSON, the widget says so and falls back to comparing the raw text instead of failing.

  • Sorts object keys and re-indents both sides before comparing
  • Arrays are never reordered — order in an array is data
  • Invalid JSON is reported, then compared as plain text
  • Also handy for .env files, YAML, CSV rows and log excerpts
Coming from an online diff tool?

The text you compare is usually the text you shouldn’t paste online.

Think about what people actually diff: a contract draft against the signed version, two production configs, an API response with a real customer in it, a patch from a private repo. Every one of those, pasted into a public diff site, is now sitting on a third-party server — and most of those sites also run ads and trackers on the page while you do it.

This widget is the same workflow with that step removed. It is not trying to beat the web tools on features: they do word-level highlighting inside a line, file and PDF uploads, and shareable links. It is trying to beat them on the one thing they can’t change, which is that the text has to travel.

  • No upload, no account, no sign-up wall, no paid tier for the basics
  • Works on a plane, on a locked-down client network, or with Wi-Fi off
  • Lives one keystroke away instead of in a browser tab you have to find
Text DiffOnline sites
Text stays on your machine
Works offline
Ads / trackersNoneCommon
Line-by-line diff
Word-level highlight
File / PDF upload
Size limit1,200 linesVaries / paid
Part of Webstarted Toolbox

Installed from the catalog, in one click.

Text Diff isn’t bundled into the app — it’s a widget in the Webstarted Toolbox catalog. Download Toolbox, open the catalog tab (🧰), press the “+” next to Text Diff, and it lands in your Dev tools tab. No reinstall, no app update. Here are a few of its neighbors:

FAQ

Questions, answered.

Does my text leave my computer?

No. The whole comparison runs locally in the widget — there is no upload, no account and no server involved. Turn Wi-Fi off and it works exactly the same. That is the point of it: pasting a contract, a production log or a config file into a public diff website means handing that text to someone else’s server.

How is this different from diffchecker.com?

Functionally it is the same idea: two panes, a line-by-line result. The differences are where it runs and what it costs you. This one is a widget in your menu bar (macOS) or system tray (Windows), works with no connection, has no ads, no sign-up wall and no paid tier for the basics. What the web tools do that this one does not: word-level highlighting inside a line, file uploads, PDF/image comparison and shareable links.

How large can the two texts be?

Up to 1,200 lines per side. The widget tells you when it truncates instead of silently comparing half your input. That cap is deliberate: the algorithm is a longest-common-subsequence pass, which grows with the product of both sizes, and 1,200 × 1,200 is about the point where a menu-bar popover still feels instant.

Can it compare two JSON documents?

Yes, and there is a “Normalize JSON” option for it: it sorts object keys and re-indents both sides before comparing, so two documents that differ only in key order or formatting come out identical instead of showing every line as changed. Arrays are left alone on purpose — in an array the order is data, not formatting. If either side is not valid JSON it says so and compares the raw text.

Can I get the result out of the widget?

Yes — “Copy diff” puts the comparison on your clipboard in unified diff format (the +/− style you already read in code review), so you can paste it into a ticket, a commit message or a chat. There is also “Changes only”, which collapses long unchanged stretches down to two lines of context, and a swap button to flip which side is “before”.

Is it free?

Yes. Webstarted Toolbox is free and needs no account, and Text Diff is a free widget in its catalog — you install it in one click from inside the app.

Get Webstarted Toolbox

Free to use. Download the app, then add Text Diff from the catalog in one click. macOS 12+ and Windows 10+.

Free beta · macOS · Windows (x64) · Signed & notarized · No account required
Keep exploring

One icon, many small tools

This is just one of the widgets in Webstarted Toolbox. Here are the rest:

Keep Awake Stop your Mac from sleeping, on your terms. 📊 LLM Quota Pace your Claude / AI usage against the clock. 🍅 Pomodoro 25/5 focus cycles in your menu bar. Countdown Live countdowns to anything that matters. Clipboard history Your recent copies, one keystroke away. {} Dev tools JSON, Base64, JWT, regex, epoch — offline. Quick Note A scratchpad that autosaves as you type. 🌐 My IP Your public IPv4 and IPv6, copyable, with ISP and location. 📈 System Info CPU, memory and GPU in your menu bar. 🐹 Topos A 30-second reflex game in your menu bar. 💣 Minesweeper Classic minesweeper in your menu bar. 🪙 Crypto Prices Live crypto prices with 24h change, in your menu bar. 💱 Currency Converter Convert currencies with real parallel rates (blue, MEP, CCL). 🌍 World Clocks Several cities' time at once — daylight saving handled automatically. 🔳 QR Generator QR codes for text, URLs, WiFi or contacts — offline. 🔑 Password Generator Strong passwords & passphrases, fully offline. 🌤️ Weather Any city, now + the days ahead — no API key. 🔥 Habit Tracker Daily streaks — don't break the chain. 100% local. 🔤 Text Tools Change case, slugify, count, dedupe — offline. 🎲 Random Picker Pick from a list at random, or roll dice. 🎨 Color Picker Pick a color, copy hex / rgb / hsl / hsv — offline. 🌐 Translator 18 languages from the menu bar — no API key needed. Cron Wizard Cron expressions in plain English, with the next runs. 🗃️ Dummy Data Lorem ipsum and fake rows in JSON, CSV or SQL. 🔊 Focus Sounds White, pink or brown noise — synthesized, no files. 🔁 Subscriptions What your recurring services cost per month and year. 🧾 Rates & Tax Hourly ↔ yearly, and add or extract tax. Network Fees Ethereum gas and Bitcoin fees, right now. 📣 UTM Builder Trackable campaign links, normalized so GA behaves. 🌿 Git Status Which of your repos are dirty, unpushed or behind. 🧮 Calculator Type the calculation, read the result as you go. 🎬 Teleprompter Your script scrolls at the speed you read — in wpm. 📊 Stocks Stocks and ETFs with the day’s change — no API key. 🔥 Fireplace A fireplace generated on the fly — no files, no network. 💼 Job Tracker Your applications, with an OS alarm before each interview. Converter 57 units in 8 categories, converted with zero network. Alarms Clock-time alarms that ring with everything closed. 🗂️ Project Boards Kanban boards with your columns, and a due date that notifies you. 📡 Website Monitor Are your sites up? The code and the latency, from your machine. 📤 Send to another computer Text and images to another computer on your network. 📅 Calendar A month view in your menu bar.