Random Duck Race
Preparing something fun for you…
⭐️
🌈
💖
⭐️
🌈
💖
⭐️
🌈
{{ shuffleStatusText }}
{{ duck.name }}
{{ duck.rank === 1 ? '🥇' : duck.rank === 2 ? '🥈' : '🥉' }}
Duck image {{ effectEmoji(duck.effect) }}
{{ t('start_race') }}
{{ t('entries') }}
🐤 {{ totalDuckEntries }}
{{ countdownText }}
{{ timerDisplay }}
{{ message.text }}

{{ t('congratulations').replace('{name}', winnerDuck?.name) }}

{{ t('is_champion') }} 🎉🏆

Winner duck image
{{ t('fast_finish') }}
{{ t('close_continue') }}

🐤 {{ t('entries') }}

{{ t('current') }} {{ totalDuckEntries }} / {{ maxDuckCount }} {{ t('ducks') }}

{{ t('number') }}
{{ t('names') }}
{{ t('minimum') }}: 1 {{ t('maximum') }}: {{ maxDuckCount }}

{{ unifiedError }}

{{ num }}

{{ unifiedNamePattern === 'custom' && unifiedCustomPrefix ? `${t('results')}: ${unifiedCustomPrefix} 1, ${unifiedCustomPrefix} 2...` : `${t('results')}: ${t('ducks')} 1, ${t('ducks')} 2...` }}

{{ t('cancel') }}
{{ t('apply') }}
{{ index + 1 }}

{{ t('no_entries_yet') }}

{{ t('add_entry') }} ({{ advancedEntries.length }}/{{ maxDuckCount }})
{{ t('cancel') }}
{{ t('apply') }}
{{ t('entered') }}: {{ unifiedParsedList.length }} {{ t('name') }} {{ t('duplicates') }}: {{ unifiedDuplicates.length }}

{{ t('over_limit') }}!

{{ t('you_have_entered') }} {{ unifiedParsedList.length }} {{ t('name') }}, {{ t('exceeding_limit') }} {{ maxDuckCount }} {{ t('ducks') }}. {{ t('please_choose_action_below') }}.

{{ t('cancel') }}
{{ t('enter_all') }}
{{ t('remove_dup') }} ({{ unifiedParsedList.length - unifiedDuplicates.length }} {{ t('name') }})
{{ t('keep') }} {{ maxDuckCount }} {{ t('first') }}
{{ t('random') }} {{ maxDuckCount }}
{{ num }}
{{ t('random') }} {{ unifiedCustomRandomCount || '?' }} {{ t('ducks') }}
{{ t('cancel') }}

{{ t('no_names_yet_text') }}

{{ t('question_reset_message') }}

{{ t('confirm_rest_message') }}

{{ t('cancel') }}
{{ t('reset_all') }}

🏆 {{ t('race_results') }}

{{ t('ducks') }}: {{ totalDuckEntries }}
{{ t('race_results_message') }}.
{{ i === 0 ? '🥇' : i === 1 ? '🥈' : i === 2 ? '🥉' : i + 1 }} Duck image
{{ r.name }}
{{ r.time === 'Died' ? t('died') : r.time === null ? '-' : r.time.toFixed(2) + 's' }}

{{ t('no_results_yet') }}

{{ t('start_a_race_to_see') }}

What is Random Duck Race used for?

Thousands of people use our fun duck race every day for fair and exciting random decisions:

  • Classroom random picker: Choose a student to answer a question or win a prize.
  • Giveaways & raffles: Pick a lucky winner from customers, followers, or participants.
  • Work meetings: Randomize who speaks first in daily standups or brainstorming sessions.
  • Parties & games: Decide who goes first or picks the next challenge.
  • Overcoming indecision: Race your to-do list or dinner options to pick one randomly.
See more use cases →

How to Use the Duck Race

It’s super simple: just add your names or options to the list, customize the ducks however you like (optional), then hit “Start Race” to watch the chaotic animated showdown and reveal a random winner.

You can change colors, upload custom photos, adjust race speed, turn on sound effects, and much more — all from the settings panel.

Full guide & tutorials →

Is the duck race truly random & fair?

Yes — every duck has an exactly equal chance of winning each race. We use JavaScript’s built-in Math.random() with a careful implementation to ensure true uniform distribution and no favoritism.

The race physics are powered by high-quality pseudo-random numbers, making outcomes genuinely unpredictable — perfect for games, raffles, classrooms, and giveaways.

Seeing the same duck win multiple times in a row? That’s completely normal — just like getting heads several times when flipping a fair coin. Each race is independent and has no memory of previous results.

Want proof? We’ve built a fairness tester — try it yourself!

Run 10,000+ races to check fairness yourself →

Is my data private?

Yes — we take your privacy seriously. Random Duck Race collects almost no personal data and stores nothing permanently on our servers.

Your name lists stay only in your browser. Uploaded duck photos are processed temporarily on your device and are never saved or transmitted to us. We fully respect GDPR, CCPA, and other privacy regulations.

Read our full Privacy Policy →

About Random Duck Race

From a simple office lunch bet in Saigon to the internet’s most chaotic duck racing game — loved by teachers, streamers, and teams worldwide.

We’d love your feedback!

Help us make the ducks even better. Tell us what you love, what’s missing, or any ideas you have.

Share your thoughts →

Enjoying the chaos? Support the ducks with a coffee! ☕

Buy Me A Coffee

{{ t('menu') }}

{{ resultTitleRendered }}

{{ resultDescRendered }}

Winner duck
{{ toast.message }}

🐤 {{ t('entries') }}

{{ t('current') }} {{ totalDuckEntries }} / {{ maxDuckCount }} {{ t('ducks') }}

{{ t('minimum') }}: 1 {{ t('maximum') }}: {{ maxDuckCount }}

{{ unifiedError }}

{{ unifiedNamePattern === 'custom' && unifiedCustomPrefix ? `${t('results')}: ${unifiedCustomPrefix} 1, ${unifiedCustomPrefix} 2...` : `${t('results')}: ${t('ducks')} 1, ${t('ducks')} 2...` }}

{{ index + 1 }}

{{ t('no_entries_yet') }}

{{ t('entered') }}: {{ unifiedParsedList.length }} {{ t('name') }} {{ t('duplicates') }}: {{ unifiedDuplicates.length }}

{{ t('over_limit') }}!

{{ t('you_have_entered') }} {{ unifiedParsedList.length }} {{ t('name') }}, {{ t('exceeding_limit') }} {{ maxDuckCount }} {{ t('ducks') }}. {{ t('please_choose_action_below') }}.

{{ t('no_names_yet_text') }}

{{ t('preview_f5r') }}

{{ t('row') }} {{ header || `Column ${idx + 1}` }}
{{ i + 1 }} {{ cell || '' }}

{{ t('no_file_selected') }}

{{ t('question_reset_message') }}

{{ t('confirm_rest_message') }}

Loading...