oLoveTools
Local list workbench

List Sorter, Deduplicator & Mixer

Paste, drop or hand over a list and build a recipe on top of it: sort, deduplicate, filter, renumber, mix it with a second list. Every step stays editable, nothing runs until you add it, and the list never leaves your browser.

A recipe you can reorder and undo
Real ICU sorting, natural number order
Set operations against a second list
Fair draws: crypto random or a seed
List A
split by
Result
00items0.0 mshistory: 0 B · 0updating…
Keep going
Shortcuts
Ctrl+Z undoCtrl+Shift+Z redoCtrl+Enter run a parked listAlt add the opposite operationright click same, with the mouse
Operationshold Alt = opposite
Order
Clean
Text
Filter
Mix
Ready-made recipes
Your recipe

No operations yet

Your list is untouched. Pick an operation above and it lands here, where you can reorder it, tune it or switch it off.

How it works

1

Bring the list in

Paste it, drop a .txt or .csv on the page, or hand it over from another tool. It is only loaded — nothing is applied to it yet.

2

Stack the operations

Each one you pick is added to a recipe instead of overwriting the result, so you can reorder it, edit its options later or switch it off to see what it did.

3

Tune and measure

Every step shows how many items it removed or rewrote, so "remove duplicates" is a number you can check, not a guess.

4

Take it away

Copy it, download it, shape it as a SQL IN list or a JSON array, or send it straight to another tool in the suite.

A recipe, not a one-way edit

The output is derived from your list plus an ordered set of steps. Nothing is overwritten, so changing your mind about step two costs one click instead of starting over.

Sorting that respects your language

Comparison goes through one Intl.Collator built for the page language, with natural number order and optional case/accent folding, instead of a fresh collator per comparison.

Two lists, five ways to mix them

Keep what is in both, only what is in A, what neither shares, the union, or alternate them item by item — with case and whitespace folding when you need it.

Draws you can defend

Shuffling and picking use the browser CSPRNG, so a draw is unpredictable. Give it a seed instead and the exact same draw can be replayed by anyone who knows it.

Big lists stay responsive

Past twenty thousand items the pipeline moves to a background thread, and past four hundred thousand characters it waits for you to press Run instead of guessing.

Leaves in the shape you need

One click turns the result into quoted CSV, a JSON array, a SQL IN clause, a JavaScript array, a Markdown list or HTML list items — or set the wrapping yourself.

list sorter

Fast because of how it is built, not because it is small

Sorting builds one Intl.Collator and reuses it for the whole pass. A plain A-Z sort gains little from that — browsers already cache the default collator — but it is what makes the useful options affordable: on 60 000 lines, natural number order with accent folding takes about 0.7 s through a reused collator and around 9 s when those options are handed to localeCompare on every single comparison, roughly fourteen times slower. Anything past twenty thousand items also moves to a Web Worker, so the page keeps scrolling while it works, and the undo history stores your steps rather than copies of the text.

Nineteen operations, freely stacked
Undo history measured in kilobytes
CSV, tab and regex input splitting
Nothing uploaded, nothing stored

Private because there is nowhere to send it

There is no server, no upload, no analytics on your content and no third-party script involved in the processing. Your list lives in the tab's memory and in nothing else; closing the tab is the delete button.

Built for the lists people actually have

Non-destructive by design

The result is derived from your list plus the recipe, so nothing you do is a one-way door. Disable a step to see exactly what it contributed, drag it earlier, change the separator of a numbering step you added ten operations ago, or undo the last thirty edits. Typing in the input box no longer throws your work away.

List Sorter, Deduplicator & Mixer

Paste any list and stack the operations you need: sort alphabetically, numerically or by length, remove or isolate duplicates, drop blank items, trim whitespace, change case, filter by text or regex, renumber, add prefixes, pick winners at random, or mix it with a second list. Every step is a card you can reorder, tune or switch off.

Frequently Asked Questions

QCan I stack several operations?+

That is the whole idea. Each operation you pick becomes a card in a recipe that runs top to bottom. You can reorder the cards, change their options afterwards, switch one off to see what it was doing, or delete it — and the result re-derives from your original list every time. Nothing is overwritten.

QDoes editing the input destroy my operations?+

No. The list and the recipe are separate: edit the list and the same recipe runs again on the new text. This was the one real trap in the previous version of this tool, where typing a single character reset the output.

QWhy is my sort putting item10 before item2?+

Because plain alphabetical order compares "1" against "2" one character at a time. Switch the sort card to 1-9 and it uses natural number order instead, so item2 comes before item10. The len option sorts by item length, and Aa folds case and accents together.

QHow do I compare two lists?+

Add a "Mix with list B" operation and a second box appears. It can keep only the items present in both lists, only those in A, only those neither shares, the union of both, or alternate between them. Case and whitespace folding are toggles, so "Ana " and "ana" can count as the same entry.

QIs the shuffle fair enough for a giveaway?+

Yes. It is a Fisher-Yates shuffle over the browser's cryptographic random source with rejection sampling, so every order is equally likely — unlike the common Math.random approach. If you would rather be able to prove the draw, type a seed: announce it before the draw and anyone can replay the exact same result afterwards.

QHow large a list can it take?+

Files up to 8 MB, which is roughly half a million ordinary lines. Past twenty thousand items the work moves to a background thread, and past four hundred thousand characters the tool stops running by itself and waits for you to press Run, so pasting something huge never freezes the tab.

QCan I fix something by hand?+

Press "Edit by hand" and the result box becomes editable, with the recipe paused. Your hand edits get their own undo levels, and "Back to recipe" returns to the derived result. You can also work that way from the start and never add an operation at all.

QDoes my list get uploaded anywhere?+

No. Every operation is plain JavaScript running in your tab — there is no server involved and no request carrying your content. The tool also works with the network disconnected once the page has loaded.

Keywords

list sorterremove duplicates from listlist shufflersort lines alphabeticallynatural sortrandomize listcompare two listslist to comma separatedlist to SQL INnumber a listdeduplicate
Part of the oLoveTools suite
oLoveTools

Sort, deduplicate, filter and mix lists with a recipe you can undo — entirely inside your browser.

© 2026 oLoveToolsAbout

List Mixer | Free Online List Sorter, Deduplicator & Shuffler

Sort, deduplicate, shuffle, filter and reshape lists in your browser. Nineteen stackable operations, set operations between two lists, CSV/JSON/SQL output. Free, no upload.

A list workbench instead of ten single-purpose pages

Most list utilities do one thing per page: one to sort, one to deduplicate, one to randomise. Chaining three of them means copying the result back and forth and losing it the moment you mistype. List Mixer keeps the whole sequence in one place as an editable recipe, so "trim, drop the blanks, remove duplicates, sort naturally, number from 001" is five clicks that you can reorder, re-tune or undo one at a time.

Everything runs in the page: sorting goes through the browser's own ICU collator, shuffling through its cryptographic random source, and large lists move to a Web Worker so the tab stays usable. Nothing is uploaded, nothing is stored, and closing the tab is all it takes to delete your data. The result can leave as plain lines, comma-separated values, a JSON array, a SQL IN clause, a JavaScript array, Markdown bullets or HTML list items — or travel straight into another oLoveTools tool without a download.

Frequently Asked Questions

Can I stack several operations?

That is the whole idea. Each operation you pick becomes a card in a recipe that runs top to bottom. You can reorder the cards, change their options afterwards, switch one off to see what it was doing, or delete it — and the result re-derives from your original list every time. Nothing is overwritten.

Does editing the input destroy my operations?

No. The list and the recipe are separate: edit the list and the same recipe runs again on the new text. This was the one real trap in the previous version of this tool, where typing a single character reset the output.

Why is my sort putting item10 before item2?

Because plain alphabetical order compares "1" against "2" one character at a time. Switch the sort card to 1-9 and it uses natural number order instead, so item2 comes before item10. The len option sorts by item length, and Aa folds case and accents together.

How do I compare two lists?

Add a "Mix with list B" operation and a second box appears. It can keep only the items present in both lists, only those in A, only those neither shares, the union of both, or alternate between them. Case and whitespace folding are toggles, so "Ana " and "ana" can count as the same entry.

Is the shuffle fair enough for a giveaway?

Yes. It is a Fisher-Yates shuffle over the browser's cryptographic random source with rejection sampling, so every order is equally likely — unlike the common Math.random approach. If you would rather be able to prove the draw, type a seed: announce it before the draw and anyone can replay the exact same result afterwards.

How large a list can it take?

Files up to 8 MB, which is roughly half a million ordinary lines. Past twenty thousand items the work moves to a background thread, and past four hundred thousand characters the tool stops running by itself and waits for you to press Run, so pasting something huge never freezes the tab.

Can I fix something by hand?

Press "Edit by hand" and the result box becomes editable, with the recipe paused. Your hand edits get their own undo levels, and "Back to recipe" returns to the derived result. You can also work that way from the start and never add an operation at all.

Does my list get uploaded anywhere?

No. Every operation is plain JavaScript running in your tab — there is no server involved and no request carrying your content. The tool also works with the network disconnected once the page has loaded.

Keywords

list sorter, remove duplicates from list, list shuffler, sort lines alphabetically, natural sort, randomize list, compare two lists, list to comma separated, list to SQL IN, number a list, deduplicate