How your pasted text becomes a list of items
Before anything is shuffled, the input has to become a list, and the parser makes that decision automatically based on what it sees. If the text contains a tab character anywhere, it is treated as tab-separated — the shape Excel produces when you copy and paste cells — and split on tabs and newlines together. If there is no tab but there is a comma, and the whole input is a single line, it is split as CSV, with matching quote marks around a value stripped. Otherwise, every line becomes its own item. Each parsed item is trimmed of surrounding whitespace, and empty lines are dropped.
The one-line-CSV rule catches people out
That precedence has a sharp edge: it only treats commas as delimiters when the input is a single line. Paste a,b,c on its own and you get three items — a, b, and c. Paste the same text across two lines, a,b,c on one line and d,e,f on the next, and the parser sees a newline, skips the CSV branch entirely, and treats each full line as one item — so you get two items, a,b,c and d,e,f, commas and all, not six. Anyone pasting multi-row CSV data should convert it to one item per line first rather than relying on the comma rule.
Randomize modes: fresh shuffle vs. shuffle-the-result
Randomize takes your parsed input list and produces a brand-new shuffled order. Shuffle again, which only appears once a result exists, re-shuffles the current result rather than going back to the original input order — useful for drawing a second, independent ordering of the same set without retyping anything. Every shuffle, from either button, is saved to a session history of up to the last 10 results, so you can step back to a previous draw with the History menu, though that history is cleared the moment the tab is refreshed or the input is emptied — it is never written to disk.
The fairness question, answered honestly
The shuffle itself is Fisher-Yates, the standard algorithm for producing every possible ordering of a list with equal probability — given a truly uniform random source, no position in the list is more or less likely to end up first. What the implementation actually uses for that randomness is JavaScript's Math.random(), which is fast and unbiased enough for drawing names or ordering a list for fun, but is not a cryptographically secure source. For a raffle or drawing where someone could benefit from predicting or influencing the order, that distinction matters; for shuffling a study deck or a playlist, it does not.
Importing files, and what happens to duplicates
Dropping or browsing for a .csv, .tsv, or .txt file reads its full text and appends it to whatever is already in the input box, rather than replacing it — so importing a second file adds its items to the first rather than starting over. Duplicate values are never detected or removed at any stage; if the same item appears twice in the input, it appears twice in the parsed list and can appear twice in the shuffled result, exactly as many times as it was entered.
Copying results in the size and format you need
Once a list is shuffled, the output can be copied as every item, the top 5, the top 10, or any custom count you type in — handy for drawing a fixed number of winners from a larger pool without manually counting down the list. Copy List joins items with newlines; the CSV button joins them with commas, quoting any value that itself contains a comma so the exported line stays valid CSV.