Behind the scenes
How the daily puzzle is chosen
No database and no one picking answers by hand: the day's answer is computed in your browser, the same way for everyone. Here is how it works and what it means for you.
Published · 5 min read
A shared puzzle without a server
Clair Obscurdle does not store "today's answer" anywhere. There is no database and nobody choosing a character every morning. Your browser works out the answer itself from the date, using the same method as every other player. Two people opening the same mode on the same date are therefore bound to get the same puzzle, without any information passing through a game server.
This approach keeps the site simple: static, fast pages with no account and no login. It also has a few consequences, covered at the end of this article.
The day number
Everything starts with a day counter. Day zero is 24 April 2025, the release date of Clair Obscur: Expedition 33, and every following day adds one. 24 April 2026, the game's first anniversary, was therefore day 365.
That is the number you see painted in red at the top of each daily game, echoing the number the Paintress paints on her Monolith every year. It is also the number that follows "Clair Obscurdle #" in your share text.
The counter relies on your device's date, in your own time zone. The puzzle therefore changes at your midnight, not at a universal time. For a few hours, a player in Tokyo can already be on the next puzzle while a player in Paris is still finishing today's.
Reproducible randomness
To turn that number into an answer, the site uses a pseudo-random number generator. The idea: a small mathematical function that starts from a number called the seed and produces a sequence of values that look random but are entirely determined by that seed. Same seed, same sequence, on any device and in any browser.
The generator used here is called mulberry32: a few lines of code, well known to JavaScript developers, fast and more than good enough for a game. The seed is derived from the day number, and the resulting value, between 0 and 1, is multiplied by the length of the list to point at one entry.
Each mode adds its own fixed offset to the seed, known as a salt. Without it, Classic and Complete, whose lists overlap, would regularly land on the same character on the same day. With different salts, the five modes draw independently of one another.
The lists themselves differ from mode to mode:
| Mode | List used for the draw |
|---|---|
| Classic | 91 characters (roster without mobs) |
| Complete | 123 characters (whole roster) |
| Quote | 76 lines |
| Weapons | 107 weapons |
| Mob | 149 enemies |
Never the same answer twice in a week
A purely random draw would eventually serve the same character two days running. To prevent that, Classic, Complete, Weapons and Mob apply a seven-day anti-repeat window: if the draw lands on one of the previous seven days' answers, the site moves on to the next entry in the list, and keeps going until it finds an answer that has not been used recently.
For that calculation to stay identical for everyone, the site keeps no history. It replays everything from day zero, one day at a time, every time a page loads. Even after years of puzzles, that calculation takes a modern browser no noticeable time at all.
Quote mode follows a lighter rule: it only checks that today's draw is not the same as yesterday's, and takes the next line if it is. Seeing the same line two days in a row becomes very unlikely, but a line can come back a few days later.
Free mode really is random
Free mode does not need to be identical for everyone, so it uses the browser's ordinary randomness. Every free draw excludes the daily answer, so practice never reveals the day's puzzle, as well as the previous game's target, to avoid back-to-back repeats.
What stays on your device
Since everything is computed locally, playing requires no data to be sent to a server. Your browser keeps, in its local storage:
- the guesses of the day's game for each mode, filed by date, so a new date starts from an empty grid;
- your stats for each mode: streak, best streak, number of wins and the last day you won;
- a language cookie, which remembers whether you prefer the site in English or in French.
Audience measurement goes through Umami, a cookieless tool that counts page views and two anonymous events: a win (the mode, the number of tries and whether it was a daily or free game) and a click on "Share". None of this data can identify you. The Google AdSense ads that pay for hosting follow their own rules, set out in the privacy policy.
Why no account?
An account would let you sync your streaks between your phone and your computer. It would also mean storing email addresses, passwords and a game history, protecting all of it and asking for your consent. For a game that takes a few minutes a day, the choice was made to collect nothing: you open the page and you play.
The limits of this system
This design has side effects worth knowing about:
- Changing your device's clock changes the puzzle you see, because the site shows the puzzle for whatever date your device gives it. It does not affect anyone else, but your own stats may get muddled.
- Clearing the site's data, or playing in a private window, wipes your stats and your current game.
- Switching devices resets your counters, since nothing is synced.
- Changing the game data affects the draw: the chosen entry depends on the length of the list, so adding or removing an entry reshuffles the answers of the days concerned.
To find out where this data comes from and why the site exists, head to the About page. Other practical questions are gathered in the FAQ, and the rules of each mode in the beginner's guide.


