List Comparison Tool
Find shared entries, items missing from either side, and a combined unique list without changing the original representatives.
Your lists are processed locally in the browser and kept only in memory. No input is uploaded or saved; refreshing clears both drafts.List A
0 B / 5 MiB UTF-8Up to 5 MiB UTF-8 and 100,000 parsed lines for this side. CRLF, LF and CR separate entries; a terminal separator adds no extra entry.
List B
0 B / 5 MiB UTF-8Up to 5 MiB UTF-8 and 100,000 parsed lines for this side. CRLF, LF and CR separate entries; a terminal separator adds no extra entry.
Shared matching rules
Matching trim and Unicode lowercasing affect keys only. The first original line represents each key; exported text is never implicitly trimmed, sorted, corrected or Unicode-normalized. Blank means empty or whitespace-only.
Set comparison results
A's first representatives, in A order, for keys present in both lists.
Paste or import one entry per line in List A and List B, then Compare lists. Either list may be empty; comparing both empty lists returns four empty sets.
UTF-8 text with LF separators; filename: common-lines.txt. No new BOM or terminal separator is added.
How to compare two lists
- Paste one entry per line in A and B, or import separate UTF-8 .txt files. Desktop shows both side by side; mobile stacks them.
- Choose shared matching rules. Defaults trim edges for matching, keep case significant, and ignore blank lines.
- Press Compare lists. Review parsed-entry, unique, duplicate and blank counts for each side.
- Choose Common, Only A, Only B or Combined unique. Copy or download the complete selected set, not just the preview.
- Swap A/B to reverse the comparison. Side-specific clear, sample, swap and reset actions offer in-memory Undo; Compare again after changes.
Worked example
List A: red blue red List B: blue green
Common is blue; Only A is red; Only B is green; Combined unique is red, blue, green in that order. A has three parsed entries, two unique entries and one duplicate. B has two parsed and two unique entries. This is set comparison: repeated occurrences do not multiply the common count.
Matching does not alter original text
Each line's key is optionally edge-trimmed, then optionally lowercased with locale-independent Unicode lowercasing. A line such as Alice matches Alice by default, but Common retains A's original spaces. ABC and abc remain different unless Ignore case is enabled.
The first original line for each key is its display/export representative. There is no fuzzy matching, accent removal, URL canonicalization, automatic spelling correction or implicit Unicode normalization. Precomposed é and e followed by a combining accent can remain different. Lowercasing is not full linguistic equivalence: ß is not converted to SS.
Ordering and set-count identities
Common uses A's first representatives in A order. Only A follows A order; Only B follows B order. Combined unique starts with every A unique representative in A order, then adds B-only representatives in B order. Nothing is sorted implicitly. Swapping A/B changes the common representatives/order and reverses the exclusive sides.
For each side, parsed entries = unique entries + duplicate entries + blanks ignored. Blank entries also reports all whitespace-only lines, whether filtered or kept. Common + Only A = unique A; Common + Only B = unique B; Combined = Common + Only A + Only B. Counts describe entries, not character count or occurrence reconciliation.
Line endings, empty inputs and blank members
CRLF, LF and lone CR separate entries. Empty input has zero entries; a terminal separator does not add an extra entry. Internal empty lines and whitespace-only lines are blank for filtering. With filtering off, they are ordinary keys according to the selected matching options; trim matching can collapse different blank spellings to one member.
Either input may be empty. If A is empty and B is populated, Only B and Combined contain B's unique entries. Comparing both empty inputs produces four valid empty sets. A retained empty-string member can serialize to empty text even though its entry count is one, so the displayed counts are authoritative.
Imports, complete exports and outdated results
Each side independently imports one UTF-8 .txt file, validates encoding and removes one leading BOM. Invalid encoding, oversized files and unsupported extensions preserve the original list. Reading or editing one side does not overwrite the other; edits and global reset/swap discard obsolete reads appropriately.
Downloads are LF-delimited UTF-8 text named common-lines.txt, only-a.txt, only-b.txt and combined-lines.txt. No new BOM or terminal separator is added. Original representatives, including whitespace and literal HTML, remain text. There is no CSV, ZIP or spreadsheet-join export.
Previews show at most 8,192 characters; Copy and Download contain the complete selected result. Clipboard denial exposes complete selectable text. Input/option edits keep the old preview and counts visibly labelled Outdated and disable export until you Compare again. Reset clears the old result; Undo restores drafts and settings, not a falsely current result.
Limits and processing
Each side accepts at most 5 MiB UTF-8 and 100,000 parsed lines. Byte limits appear before processing; line limits are checked in a bundled worker on Compare. There is no silent truncation. Maps provide approximately linear set comparison, rather than nested scans. Cancel terminates comparison while preserving drafts; stale worker, file and clipboard completions are discarded.
Object URLs are released when results become outdated, on replacement and on unmount. No input is put into URLs, analytics, browser storage or remote requests. This release excludes similarity scores, semantic comparison, character diffs, automatic corrections and multiset counters.
How was this tool?
Help us improve List comparison tool.
Opens your email app; you send it there. No email app? Copy your comment and email feedback@tooltulip.com.
Don't include sensitive data.
0/300