Secret Santa Generator
Randomly assign who buys for whom — nobody draws their own name, and you can keep couples or family members from being matched together.
Generate
How the Secret Santa Generator works
This is a proper derangement — a shuffled assignment where nobody is matched with themselves — with an added twist: you can also exclude specific pairs (like spouses or siblings) from matching each other. Xrandom finds a valid assignment by repeatedly shuffling and checking against your rules, which is simple, fast, and guarantees a genuinely fair result for any reasonable group size and exclusion list.
Unlike Xrandom's other tools, the copy button is deliberately disabled here — copying the full list of matches to your clipboard would let anyone see everyone's assignment at once, defeating the entire point of a secret Santa. Instead, each person reveals only their own match by clicking their own button.
How to use it
Frequently asked questions
Can I make sure couples don't draw each other?
Yes, list each pair you want kept apart in the exclusions box, one pair per line — the generator will never assign either person in a listed pair to the other.
What if it can't find a valid assignment?
With a very small group and heavy exclusions, a valid derangement may not exist (for example, two people who can only be excluded from each other in a group of two). Reduce exclusions or add more participants if this happens.
Is this actually private?
The assignment is generated in your browser and never sent anywhere — but since everyone's matches are visible on one screen until revealed, the best practice is to generate it privately (or have each person come reveal their own name individually) rather than displaying the whole screen to the group at once.
Can the same two people draw each other (a 'pair swap')?
Yes, that's allowed by default — the only hard rule is no self-matches and no matches you've explicitly excluded. If you want to prevent any two-person swaps entirely, that requires more advanced constraints this tool doesn't currently support.