π Diff Checker
Paste two versions of text or code β see exactly what changed, line by line and character by character.
Why Spotting the Difference Matters More Than You Think
Every developer has been there: two versions of a config file, a colleague's code review suggestion sitting in an email, or a database migration script where something went wrong between staging and production. The question "what exactly changed?" sounds simple, but finding the answer manually β scanning line by line through hundreds of rows β is genuinely painful and error-prone in a way that costs real time.
Text comparison goes back to the early days of Unix. The diff utility shipped with Version 4 Unix in 1973, and its core algorithm β computing the longest common subsequence between two files β has barely needed to change since then. That tells you something: the problem is well-understood, and the solution is elegant. What's changed is that modern tooling should surface those differences visually, instantly, without you opening a terminal.
What Line-Level vs Character-Level Diffing Actually Means
Most people think of a diff as "show me which lines changed." That's line-level diffing β useful, but sometimes not enough. Consider a function where someone renamed a variable from userCount to totalUsers across thirty places. A pure line diff marks all thirty lines as changed and highlights each entire line. You can tell something changed, but your eyes still have to hunt for what.
Character-level (or intra-line) diffing goes a step further. It takes each changed line and runs the same LCS algorithm on the individual characters, marking just the specific characters that were inserted or deleted. That thirty-line rename suddenly becomes obvious: a tiny amber highlight on the exact characters that differ, everything else rendered normally. The cognitive load drops substantially.
This tool does both. It first computes a line-level diff using the longest common subsequence, then for any line that changed (rather than being purely added or deleted), it runs character-level diffing to pinpoint exactly which characters shifted. The result is a side-by-side panel where green backgrounds indicate additions, red backgrounds show deletions, and amber highlights signal modifications β with character-level precision inside each modified line.
Common Scenarios Where This Saves Genuine Effort
Config file drift is probably the most common use case outside of pure code review. Infrastructure teams often maintain environment-specific configs β development, staging, production β that start identical and slowly diverge. A .env.production that someone edited on the server directly, an Nginx config that got a quick fix applied without updating the repository, a JSON settings file that two people both edited during an incident. Pasting both versions into a diff checker and seeing the delta in two seconds beats grepping through git history or scrolling manually.
SQL migrations cause headaches in a different way. When a migration script runs correctly on one database and fails on another, the culprit is often a tiny discrepancy between the scripts used β an extra semicolon, a different column definition, whitespace in a string comparison that shouldn't matter but does. Diff tooling makes those discrepancies jump out immediately.
API response debugging is another underrated use case. If you're testing a REST endpoint and the response payload changed between versions but you're not sure exactly which fields shifted, paste the old and new JSON side by side. The tool will show you precisely which keys appeared, disappeared, or had their values modified β without you manually scanning through potentially long objects.
Document editing workflows benefit too, not just code. Contracts, technical specifications, README files β any situation where you have Version A and Version B and need to audit what actually changed before approving the new version.
The Options That Change How You Compare
Two toggles can save you from false positives that obscure real changes. Whitespace normalization is the big one: when comparing code that's been reformatted or copied from a source that uses different indentation, irrelevant whitespace differences will drown out the meaningful changes. Enabling whitespace-insensitive mode trims each line before comparing, so a line that's logically identical but indented differently shows as unchanged rather than modified.
Case-insensitive comparison is similarly useful for HTML attributes, CSS class names, or any domain where capitalization is stylistically variable but semantically irrelevant. If you're comparing two HTML files where one author wrote class="Button" and another wrote class="button", you might not care about that difference at all β turning off case sensitivity lets you focus on the structural changes that actually matter.
Privacy: Everything Stays in Your Browser
When you're comparing production credentials, proprietary source code, or anything sensitive, sending data to a server is a real concern β and most online diff tools do exactly that. This tool runs entirely in the browser using vanilla JavaScript. When you click Compare, your text never leaves your device: no network request is made, nothing is logged, nothing is stored. You can disconnect from the internet and it will still work identically. The diff computation β LCS algorithm, character comparison, HTML rendering β all happens locally.
This matters practically when you're working with database connection strings, API keys that haven't been rotated yet, internal architecture documents, or client code under NDA. The convenience of a web interface without the data-exposure risk of a server-side tool is a meaningful combination.
Reading the Output Correctly
The side-by-side layout mirrors how most professional diff tools present changes β left panel shows the original, right panel shows the modified version. Lines that are identical appear in both panels at the same vertical position with no highlighting. Deleted lines appear only on the left with a red background; the right panel shows an empty placeholder to keep the two sides aligned. Added lines appear only on the right with a green background.
Modified lines β where the same logical line position changed content β appear in both panels with an amber tint, and with character-level highlighting enabled, you'll see the specific characters that were deleted (red highlight within the amber line on the left) and inserted (green highlight within the amber line on the right). The line numbers in the gutter correspond to the actual line numbers in each respective file, so you can jump directly to the right location in your editor after spotting the difference.
The summary statistics above the diff panels tell you at a glance how significant the change is: how many lines were added, removed, modified, and left unchanged. A large number of unchanged lines with a small number of modifications usually means a targeted, surgical edit. Equal additions and deletions often indicate a rename or refactor. Mostly additions with few deletions suggests new functionality was layered on top. These counts help you calibrate what you're looking at before reading the actual content.