List Randomizer

Shuffle, sample or pick from a list with a reproducible seed option.

  • Runs locally in your browser
  • No upload required

Try it

One entry per line, or separated by commas.

Leave empty for unpredictable output from the browser CSPRNG.

Result
Ada, Alan, Grace, Edsger
Returned
4 of 4
Source
platform CSPRNG
Formula
shuffled 4 entries
Ada
Alan
Grace
Edsger

Supported formats

Input
text, select, number, boolean
Output
text

Privacy

Runs entirely in your browser. Your input is never uploaded, stored, or sent to a third party.

Processing
In your browser
Privacy level
Browser only

Returned 3 of 3 entries via shuffle.

How it works

  • Parsed the list, splitting on new lines and commas.
  • Ran a Fisher–Yates shuffle over the entries.
  • Returned the whole shuffled list, the first N entries, or a single pick.
  • Disclosed whether the source was the CSPRNG or a reproducible seed.
  • A seeded shuffle is reproducible by design and must not be used where fairness is claimed.
  • Shuffle keeps every entry exactly once; sample and pick return distinct entries in shuffled order.

Methodology

  1. Parse the list, splitting on new lines and commas and dropping blanks.
  2. Resolve the random source: the injected or seeded source for reproducible runs, otherwise the platform CSPRNG.
  3. Run a Fisher–Yates shuffle, drawing a uniform index with rejection sampling for each position.
  4. Return the whole list (shuffle), the first N entries (sample) or the first entry (pick).

Usage

  1. Paste the list, one entry per line or separated by commas.
  2. Choose shuffle, sample or pick.
  3. For a sample, set how many entries to draw.
  4. Run the tool and copy the result.

Examples

These are examples, not current values: they use fixed inputs, while the interactive tool computes live results in your browser.

Shuffle three names

jsonSelect to copy
{
  "items": "Ada, Grace, Alan",
  "mode": "shuffle",
  "seed": "example"
}

Sample two of five

jsonSelect to copy
{
  "items": "a\nb\nc\nd\ne",
  "mode": "sample",
  "count": 2,
  "seed": "example"
}

Pick a winner

jsonSelect to copy
{
  "items": "A\nB\nC",
  "mode": "pick",
  "seed": "example"
}

Limitations

Fisher–Yates, not sort-by-random

Sorting by `Math.random() - 0.5` looks like a shuffle but is biased: many orderings are far more likely than others. The Fisher–Yates algorithm swaps each position with a uniformly chosen position at or after it, producing every ordering with equal probability.

Rejection sampling is used for each index so the choice is uniform rather than modulo-biased.

Frequently asked questions

Is the shuffle fair?
The Fisher–Yates shuffle gives every permutation the same probability when driven by an unbiased random source. The default path uses the Web Crypto source with rejection sampling; a seeded run is deliberately reproducible and should not be used for a public draw.
What is the difference between sample and pick?
Sample returns N distinct entries (without replacement); pick returns exactly one entry. Both draw from the same shuffled order, so no entry is repeated within a sample.
Can I keep duplicates in the list?
Yes. Entries are matched as text, so two identical lines are two separate entries and each can be drawn.

Sources

  1. RFC 4086: Randomness Requirements for Security — IETF
  2. MDN Web Docs — Crypto.getRandomValues() — MDN