⚙️ Settings
Text Comparator — Compare Two Texts and Highlight the Differences
The Text Comparator shows you exactly what changed between two blocks of text, with word-level highlighting so you don't have to read every line yourself. It's built for developers, analysts, and writers who need to compare two text files online — reviewing an edited config, checking a revised paragraph, or spotting what changed in a SQL query between two versions. Paste both versions in, and the differences are highlighted instantly.
⚡ Key Takeaways
- Highlights differences at the word level, not just which lines changed.
- Optional "Ignore case" and "Ignore whitespace" toggles cut through formatting noise.
- Line-based matching means an inserted or deleted line can shift everything after it.
- A summary count gives a fast overview before scanning line by line.
What, Who, When & Why
| What it's for | Compares two blocks of text and highlights exactly what changed, down to the specific words. |
|---|---|
| Who it's for | Developers, analysts, and writers reviewing edits to documents, configs, or queries. |
| When to use it | Whenever you need to know what changed between two versions without re-reading both in full. |
| Why it's needed | Manually scanning two long texts for differences is slow and easy to miss a subtle change. |
| Best way to use it | Enable 'Ignore whitespace' when comparing code or config files where formatting might differ but content is identical. |
How to Use the Text Comparator
- Paste your original text into the left box (Text A).
- Paste the revised or second version into the right box (Text B).
- Optionally enable "Ignore case" or "Ignore whitespace" if those differences don't matter for your comparison.
- Click Compare to see the differences highlighted line by line.
- Added text is highlighted in green, removed text in red — with word-level precision within changed lines.
Example
Comparing two versions of a sentence:
| Text A | Text B |
|---|---|
| The quick brown fox jumps. | The quick red fox leaps. |
Rather than just flagging the whole line as different, the comparator highlights only the specific words that changed — brown → red and jumps → leaps — so you can see the actual edit at a glance instead of re-reading the full sentence. For a longer document with many small edits scattered throughout, this word-level precision saves significant time compared to manually scanning for differences.
Key Features
- Word-level diff highlighting — not just "this line changed," but exactly which words changed within it.
- Ignore case option for comparisons where capitalization differences don't matter.
- Ignore whitespace option to skip differences caused only by spacing or indentation.
- Line-by-line comparison for multi-line text, config files, or code snippets.
- Summary stats showing how many lines were added, removed, or changed.
- Runs entirely client-side — nothing you paste is uploaded.
Practical Use Cases
- Reviewing edits: quickly see what a colleague changed in a document or query without re-reading it in full.
- Comparing configuration files: spot exactly which settings changed between two versions.
- Checking revisions: compare drafts of a paragraph or article to confirm intended changes were made.
- Debugging: compare two versions of a SQL query or script to isolate what broke something.
- Contract or policy review: spot exactly what wording changed between two versions of a document.
Tips for Best Results
- Enable "Ignore whitespace" when comparing code or config files where indentation style might differ but content is the same.
- Run both texts through the Whitespace Trimmer first if you suspect formatting-only differences are cluttering the comparison.
- Check the summary stats first for a quick overview before scanning line by line on longer documents.
Related Terminology
A diff (short for "difference") is a comparison between two pieces of text showing what was added, removed, or changed. Word-level diffing highlights individual changed words within a line, as opposed to line-level diffing, which only flags that an entire line differs without pinpointing where.
Important Considerations
The comparator matches lines by position, so if lines are inserted or deleted (rather than edited in place), everything after that point may shift and show as changed — this is normal behavior for line-based diffing. For very large documents, focus on the summary counts first to get an overview before scanning line by line.
Related Tools
Before comparing, you may want to normalize formatting with the Whitespace Trimmer. If you're comparing SQL specifically, formatting both versions with the SQL Formatter first makes differences easier to spot. For a full breakdown of either text's word and character counts, see Text Statistics.
Frequently Asked Questions
How do I compare two text files online?
Paste one version into each box and click Compare — differences are highlighted immediately, with specific changed words marked within each line.
Can I ignore case differences when comparing?
Yes, enable the "Ignore case" option before comparing so that differences in capitalization alone aren't flagged as changes.
Does it show which specific words changed, or just which lines?
Both — changed lines are highlighted, and within those lines the specific words that differ are highlighted separately for precision.
Is there a limit to how much text I can compare?
There's no fixed limit since comparison runs in your browser, though extremely large documents will naturally take longer to process and review.
What happens if lines are inserted or deleted instead of just edited?
Since lines are matched by position, an insertion or deletion can cause everything after it to appear changed — this is expected behavior for line-based comparison tools.
WITH recent_orders AS (
SELECT
customer_id,
order_id,
order_date,
total_amount
FROM orders
WHERE order_date >= DATEADD(day, -30, GETDATE())
)
SELECT
customer_id,
COUNT(order_id) AS order_count,
SUM(total_amount) AS total_spent
FROM recent_orders
GROUP BY customer_id
ORDER BY total_spent DESC;
WITH RECURSIVE employee_hierarchy AS (
-- Anchor: top-level rows (no manager)
SELECT
employee_id,
manager_id,
employee_name,
1 AS level
FROM employees
WHERE manager_id IS NULL
UNION ALL
-- Recursive: join children to their parent's result
SELECT
e.employee_id,
e.manager_id,
e.employee_name,
eh.level + 1
FROM employees e
INNER JOIN employee_hierarchy eh
ON e.manager_id = eh.employee_id
)
SELECT *
FROM employee_hierarchy
ORDER BY level, employee_name;
-- Note: SQL Server / Oracle: drop the RECURSIVE keyword (just WITH employee_hierarchy AS (...))
SELECT
o.order_id,
c.customer_name,
o.order_date,
p.product_name,
oi.quantity
FROM orders o
INNER JOIN customers c
ON o.customer_id = c.customer_id
LEFT JOIN order_items oi
ON o.order_id = oi.order_id
LEFT JOIN products p
ON oi.product_id = p.product_id
WHERE o.order_date >= '2026-01-01'
ORDER BY o.order_date DESC;
SELECT
DATE_TRUNC('month', order_date) AS order_month, -- PostgreSQL
-- FORMAT(order_date, 'yyyy-MM') AS order_month, -- SQL Server
-- DATE_FORMAT(order_date, '%Y-%m') AS order_month, -- MySQL
COUNT(*) AS order_count,
SUM(total_amount) AS revenue
FROM orders
GROUP BY DATE_TRUNC('month', order_date)
ORDER BY order_month;
SELECT
customer_id,
order_id,
order_date,
total_amount,
ROW_NUMBER() OVER (
PARTITION BY customer_id
ORDER BY order_date DESC
) AS order_rank,
SUM(total_amount) OVER (
PARTITION BY customer_id
ORDER BY order_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_total
FROM orders;
CREATE PROCEDURE GetCustomerOrders
@CustomerId INT,
@StartDate DATE = NULL,
@EndDate DATE = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT
order_id,
order_date,
total_amount
FROM orders
WHERE customer_id = @CustomerId
AND (@StartDate IS NULL OR order_date >= @StartDate)
AND (@EndDate IS NULL OR order_date <= @EndDate)
ORDER BY order_date DESC;
END;
-- Call it: EXEC GetCustomerOrders @CustomerId = 101, @StartDate = '2026-01-01';
MERGE INTO customers AS target
USING staging_customers AS source
ON target.customer_id = source.customer_id
WHEN MATCHED THEN
UPDATE SET
target.customer_name = source.customer_name,
target.email = source.email,
target.updated_at = GETDATE()
WHEN NOT MATCHED THEN
INSERT (customer_id, customer_name, email, created_at)
VALUES (source.customer_id, source.customer_name, source.email, GETDATE());
#FACC15
rgb(250, 204, 21)
rgb(98%, 80%, 8%)
hsl(46, 96%, 53%)
hsv(46, 92%, 98%)
cmyk(0%, 18%, 92%, 2%)
Tools for analysts, developers & QA engineers
33 free, browser-based utilities — text and list tools, SQL helpers, converters, and small productivity apps. Everything runs locally; nothing you type or paste is ever uploaded.
For Analysts
Clean lists, build SQL fragments, and reshape data without opening a spreadsheet.
For Developers
Format SQL, convert data formats, and handle everyday text and encoding tasks.
For QA Engineers
Generate test data, compare text output, and sanitize queries before sharing them.