Skip to main content

Free Random Team Generator

Split a list of names into balanced random teams β€” by team count or team size. Cryptographically fair shuffle, instant reshuffle.

Works offline once loaded
Saved lists

Your latest list and settings are remembered on this device. Name a list to keep it for later.

No saved lists yet.

Team names (optional)

Leave empty to use colours. You can also rename a team right on its card.

Add constraints (optional)

One group per line; separate names with & or commas. These people always land on the same team.

One group per line; separate names with & or commas. These people go on different teams.

πŸ’‘ Teams are balanced using a snake draft, so sizes differ by at most one. Shuffling uses your browser's cryptographically-secure randomness β€” genuinely fair. Great for PE classes, sports, group projects, game nights, and secret-santa-style splits.

Common uses

  • Split a Class into GroupsRandomly divide students into balanced groups for projects and activities.
  • Make Fair Sports TeamsSplit players into even teams for pickup games and practice.
  • Teams for Game NightQuickly form random teams for trivia, charades, and party games.
  • Breakout Groups for WorkshopsDivide workshop or conference attendees into discussion groups.
  • Random Groups for Gift ExchangesSplit a big group into smaller gift-exchange pods.

How It Works

Team splitting runs entirely in your browser using a crypto-secure Fisher-Yates shuffle (powered by the Web Crypto API's crypto.getRandomValues) combined with a snake-draft distribution for balanced teams. When keep-together or keep-apart constraints are added, a union-find cluster solver with up to 400 randomized restarts finds the most evenly balanced valid assignment.

  1. 1
    Parsing the name list
    Names are split on newlines and commas, trimmed of whitespace, and deduplicated. You can mix both separators freely β€” the parser handles them in a single pass.
  2. 2
    Crypto-secure shuffle
    The browser's built-in crypto.getRandomValues fills a Uint32Array with one random 32-bit integer per name. The shuffle uses these values with a scaling division instead of modulo, eliminating the modulo bias that plagues Math.random()-based shufflers.
  3. 3
    Balanced distribution or constraint solving
    Without constraints, names are distributed using a snake-draft pattern (left-to-right on even rounds, right-to-left on odd rounds) so team sizes differ by at most one. With keep-together or keep-apart rules, names are merged into clusters via union-find, then a randomized greedy solver tries up to 400 placements and keeps the assignment with the smallest size imbalance.
  4. 4
    Export as text, CSV, or shareable link
    Results can be copied as plain text, downloaded as a .txt or .csv file (built with the browser's Blob API), or shared via a URL hash that encodes the full session state in base64url β€” no server involved at any point.

Related Tools

Frequently Asked Questions