Entries textarea
The Entries textarea holds the list the wheel picks from — one item per line, with a live counter showing the number of non-empty rows. Each entry occupies a 360°/N arc of the wheel, so the probability of selection is exactly 1/N regardless of entry length or position. There is no upper limit on entry count beyond browser localStorage capacity (typically 5 MB per origin).
Tip: paste from a spreadsheet column to bulk-add many entries at once.
Shuffle
Randomly reorders all entries in the textarea. Useful when you want different neighbours on the wheel between spins, or to remove any pattern from a sorted list.
Shuffling does not change the outcome probability — every entry still has 1/N odds.
Sort
Sorts the entries alphabetically (A–Z). Handy for cleaning up a long pasted list or grouping similar entries together before sharing the wheel.
Like Shuffle, sorting only changes display order, not fairness.
Clear
Removes every entry from the textarea in one click. The wheel becomes empty and you can start a fresh list.
Cleared lists are not recoverable — share the URL first if you want to keep a copy.
Spin (Rotate the Wheel)
Starts the rotation animation, fixed at 3,500 ms with an easeOutQuart deceleration curve to ensure consistent feel and outcome fairness. Two triggers exist: the Spin button beneath the wheel and a direct click on the wheel canvas. The Entries textarea is disabled during rotation to prevent the entry list from changing mid-spin, which would invalidate the running probability calculation.
Animation duration is intentionally fixed so no entry can be biased by spin length.
Winners tab
Every winner is appended to the Winners tab automatically. Switch tabs to see the full history of results, with a counter showing how many winners have been picked so far.
Use the Clear button on the Winners tab to reset history without touching your entries.
Remove winner / Use as entries
From the winner modal, the Remove button drops the winning entry from the wheel — perfect for raffles where each name should win only once. The Use as entries button on the Winners tab moves all winners back into the spin list.
Combine both to run elimination rounds: spin, remove, repeat.
Auto-spin
After a winner is shown, the modal can automatically trigger the next spin. Toggle the checkbox to enable it and set the countdown in seconds. The countdown resets every time a new winner appears.
Default countdown is 30 seconds — change it to suit your event pace.
Voice-over winner
When enabled, the winner's name is read aloud through the browser's Web Speech API (SpeechSynthesis interface, W3C Community Group specification). The voice and language are selected automatically to match the active interface language across the seven supported locales. The toggle state in the winner modal is persisted in localStorage as voiceOver_.
Voice quality and language depend on your operating system's installed voices.
Spin sound
A click-tick sound plays during rotation, like a real prize wheel. Toggle it on or off using the speaker icon in the page header — the setting persists across sessions.
Mute it for classroom or office settings where ambient sound matters.
Fullscreen mode
Clicking the fullscreen icon in the header invokes the browser Fullscreen API (Element.requestFullscreen()), expanding the wheel canvas to occupy the entire viewport. The mode is supported in all evergreen browsers (Chrome, Edge, Firefox, Safari 16.4+) and is well-suited to presentations, projectors, and screen-shared video calls.
Press Esc to exit fullscreen at any time.
Save lists (auto)
Entries are persisted automatically to the browser's localStorage (Web Storage API, W3C Recommendation), keyed per language as mainInput_en, mainInput_fr, and so on. Storage survives tab close, browser restart, and reboots until the user clears site data. Per-origin capacity is typically 5 MB, sufficient for tens of thousands of entries.
Saved per language: switching to French gives you a separate French list.
Share via link
The page URL is updated on every keystroke via the History API (history.replaceState) to encode the current entry list as a URL-safe query parameter. Sharing the address transfers the wheel state without a server round-trip — recipients open the link and see an identical configuration on their own device. List size is bounded only by typical browser URL limits (~2,000 characters in older clients, ~32,000 in modern Chromium).
No accounts, no servers — the list lives inside the URL itself.
Language switcher
The wheel is available in 7 languages: English, French, Spanish, Japanese, Portuguese, German, and Polish. Choose your language from the footer — the entire interface, including the voice-over, switches instantly.
Each language keeps its own saved entry list, so they don't overwrite each other.