WINDWRIGHT Privacy Policy

Privacy Policy

Effective 24 October 2026

  • You can play Windwright without giving us your name or email address.
  • Your garden, your code and your settings are saved in your own browser. We cannot see them.
  • We count visits and a few game moments (like "first creature woken") without cookies and without knowing who you are.
  • Players under 16 are never asked for an email address or a name.
  • If you send feedback, write to us through the contact page, or ask for a note about new clearings, that message comes to our inbox. You can ask us to delete it at any time.
  • We do not sell your information, show ads, or let anyone else use it for their own purposes.

1. Who we are

Windwright is a free browser game that teaches Python, currently in a private, invite-only playtest at windwright.dev. It is made by William Hsu, an individual developer in Ontario, Canada ("we", "us"). We are responsible for the personal information described here.

Contact for anything in this policy, including access and deletion requests: hello@windwright.dev

2. What this policy covers

This policy covers the Windwright game and the pages about it at windwright.dev, and the forms on them. It does not cover other websites we link to, or LinkedIn or any other site where you found your invite.

3. What we collect and why

3.1 When you enter an invite code

After a code is accepted, your browser gets a cookie called ww_access that lets you back in without a code for 180 days. When the game is open to everyone without a code, a computer gets the same cookie the first time it opens the game. It contains only the date it was issued, a random number made up for this browser, and a signature, and, if you came in with a shared code or a friend's code, or without a code, a group name (see 3.5). It does not contain your code, your IP address, or anything that identifies you.

Once you finish the First Clearing, the game gives you three codes to pass on to friends. Our server keeps those three codes under your cookie's random number, so it can show you the same three each time and mark the ones a friend has used. Nothing else is stored with them: no name, no email address, no IP address, and nothing about the friends who use them. The record of your three codes is deleted 180 days after they are made. A code nobody has used yet keeps working until it is used.

If you finish every clearing while the playtest is invite-only, the game asks our server for your First Seed, a numbered keepsake for your own garden. The server keeps a count of how many it has given and, under your cookie's random number, the number it gave you, so it can give you the same one if it is asked again. Nothing else is stored with it: no name, no email address, no IP address. That record is deleted 180 days after the number is given; the number itself stays in your browser's save. The game shows everyone the count, never who holds them.

3.2 The age question

Before either letter in the game (feedback, or a note about new clearings) lets you write, it asks how old you are. The game turns the answer into one of two results, 16 or older, or under 16, and keeps only that result in your browser's local storage (windwright.agecheck). Your age itself is not kept and is not sent anywhere. The question is asked once per browser.

If you are under 16, the game does not show an email field or a name field, and asks you not to put personal details in feedback.

3.3 When you send feedback

The "Send feedback" letter is optional.

3.4 When you ask for a note about new clearings

The new-clearings letter is optional and is only offered to players who answered the age question 16 or older. You can choose "Keep playing" and nothing is sent.

3.5 Visit and game-moment counts (analytics)

We use Vercel Web Analytics to understand how many people play and where new players get stuck.

If you came in with a shared code (one code given to a group, such as a class or the readers of an article) or with a code a friend passed on to you (everyone who came in that way counts as one group), our own server also counts how many players from that group reach a few points in the game: getting in, the garden finishing loading, the first Wake, the first watering, reaching the beetle, starting Teach me, and finishing each clearing. It keeps only one total for each group and point. It does not keep your IP address, when you reached each point, or anything else that could tell one player from another. The group comes from your ww_access cookie, and your saved game remembers which points it has already counted, so each is counted once. The totals are kept for the length of the playtest. Players who came in with a personal invite code are not counted this way.

The same totals also say how people from that group arrived. When a code is accepted, the page says whether it is on a phone or a computer, and the server adds one to the group's count of people let in on a computer. A phone is never let in: when you press Come in on a phone, the page sends the code so the server can tell which group it belongs to, and the code is not used up. That adds one to the group's count of phones sent to a computer. A phone that was let in by an older version and comes back, and a browser that cannot run the game and comes back holding a group's cookie, each add one to a count of their own. Your browser remembers in its local storage which of these it has sent (windwright.arrivals), so each is counted at most once per browser. Like the rest, these are totals only.

For players from a group, the same totals also count how many pass set amounts of play time (15 minutes, 30 minutes, 1 hour, 2 hours and 5 hours), roughly how long the First Clearing took (under 15 minutes, under 30, under an hour, under two hours, or longer), and how many come back to the game on a later visit, on a later day, and a week or more after their first. Play time here is time the game is showing on your screen while you have typed, clicked or scrolled in the last two minutes, or have creatures running; a tab left open with nothing happening stops counting two minutes after the last of these. Your saved game keeps its running play time and the date of its first visit, and works out the band itself. Only the band reached is sent, each at most once per save: never a time, a date or anything that could identify you. A visit starts when the game opens in a new tab or window; so that a reload is not counted as coming back, the tab keeps a mark in its session storage (windwright.visit), which your browser removes when the tab is closed. Like the rest, these are totals only.

If the game stops with an error (the "garden paused" card), or part of the garden fails to download three times in a row, the page sends our server a short crash report: the error message, the names of the parts of the game's own code where it happened, and the game's version number. It is sent only from a browser that has been let in, at most once of each kind per page. It never contains your IP address, your browser or device details, your saved game, your code or anything you typed, and it is not stored with your cookie. To stop one browser sending too many, a counter holds a scrambled form of your cookie for at most an hour. We keep only the newest 200 reports, and a count of how often each message came in.

While the game is open and showing on your screen, the page tells our server every two minutes that it is still there, so we can count how many people are playing right now. Each message carries only a random number the open tab makes up for itself. It lives in the tab's memory, is never saved in your browser, and is not stored with your cookie, your IP address or anything else. The server forgets it a few minutes after the tab stops sending (closing the tab, or switching to another one, stops it), and keeps only an estimate of how many tabs were open each day, which cannot be turned back into the numbers. Separately, when you tap "Send it to my computer" on a phone, the server adds one to a count for that page and way of sending (share, email or copy) for the day. And when a browser cannot run the game (some browsers inside apps, such as Instagram's, cannot), the page that says so adds one to a count of such visits for the day, as inside an app or not. Nothing about you or your device goes with either.

The phone demo (the minute in the first garden that plays on a phone) is counted the same way. The server adds one to a count for the day when a phone is shown the offer to try it, when the demo is started, when it reaches its end, and when the game is sent to a computer from it. A link sent from a phone to a computer ends in via=phone, the same for everyone, and when a computer opens such a link the server adds one to a count for the day of links that came back. None of these counts carries anything about you, your device or the link's code, and none is kept with your cookie. So that each is counted at most once, your browser remembers which of them it has sent (windwright.demo).

3.6 Things that stay on your device

These are saved in your browser's local storage and are never sent to us:

If your saved garden cannot be read, or you replace it with a copy you bring back, a copy of the old one is kept in your browser until the next one replaces it; a copy you keep from the Guide is a file holding the same data, and it goes only where you put it.

Your Python code runs inside your own browser. It is not uploaded. The Python interpreter, the code editor and the fonts are all served from windwright.dev itself, not from another company's servers.

"Start over" in the Guide resets your progress, your code and the feedback copies. Clearing this site's data in your browser removes everything listed above.

3.7 Ordinary web server logs

Like every website, our host Vercel receives your IP address, browser details, and the address of each file your browser requests, and keeps short-lived logs for security and troubleshooting. We do not use these logs to identify players. Vercel sets how long they are kept.

3.8 The playtest survey

The survey at windwright.dev/survey is optional, and only the question about how far you got needs an answer. When you send it, we receive your answers and which link you opened it from (for example the game's own link or a volunteer group's link), through Web3Forms to our inbox, like feedback; Web3Forms receives your IP address as part of the connection. Nothing about your computer or browser is added unless you write it in. If you answered the age question 16 or older, you may also give an email address so we can tell you when the open Beta starts. That address is optional, is used only for that one note, and is deleted once the note is sent or when you ask. We keep survey answers for up to 12 months. Legal basis (UK and EU): our legitimate interest in improving the game for the answers, and your consent for the email address.

3.9 The contact form

The letter at windwright.dev/contact is optional. Like the letters in the game, it first asks how old you are and keeps only whether you are 16 or older (see 3.2).

4. What we do not do

5. Who else handles your information

We use these service providers. Each handles information only to provide its service to us.

ProviderWhat it does for usInformation it handlesWhere
Vercel Inc. Hosts the game, runs the invite check, provides analytics IP address, request details, analytics data points United States and Vercel's global network
Upstash, Inc. Stores invite codes and the record of which were used Codes and the time each was used; your IP address for 60 seconds in the attempt counter; crash reports, and counts of players, phone taps and phone demo steps (see 3.5) Upstash data centres (United States or elsewhere)
Web3Forms Relays feedback, sign-ups and contact letters to our inbox Everything in a feedback report, sign-up or contact letter, plus your IP address Web3Forms' servers (outside Canada)
Our email provider Holds our inbox Feedback reports, sign-up emails and contact letters The provider's data centres

We may also disclose information if the law requires it, or to protect the game and its players from fraud or abuse.

6. Cookies and similar storage

We use one cookie, some local storage and one session storage mark, all of it needed for the game to work or to remember choices you made. None of it is used for analytics, advertising, or to follow you across other sites, so there is no cookie banner. If that ever changes, we will ask first.

NameTypePurposeLasts
ww_access Cookie (first-party, HttpOnly, Secure) Remembers that this browser entered a valid invite code 180 days
windwright.save, windwright.script.* Local storage Your game progress and code Until you start over or clear site data
windwright.save.unreadable Local storage A copy of a saved garden that could not be read or was replaced, so it is not lost Until the next such copy replaces it, or you clear site data
windwright.feedback Local storage Your last 20 feedback reports, as a backup Until you start over or clear site data
windwright.agecheck Local storage Whether the age question was answered 16 or older, or under 16 (never the age) Until you clear site data
windwright.arrivals Local storage Which group arrival counts this browser has already sent (see 3.5), so each is counted once Until you clear site data
windwright.demo Local storage Which phone demo counts this browser has already sent (see 3.5), so each is counted once Until you clear site data
windwright.visit Session storage Marks that this tab has already opened the game, so a reload is not counted as coming back (see 3.5) Until the tab is closed
Settings and onboarding keys (windwright.audio, .muted, .speed, .detail, .detail.probed, .editorFontSize, .welcomed, .gatehint, .comfortasked, .wren.tier, .wren.seen, .marks.seen, .lastOpen) Local storage Remember your settings and what you have already seen Until you clear site data

7. Children

Windwright is a game for beginners, and some players are young. Anyone aged 10 or older may play.

8. How long we keep information

InformationKept for
IP address in the invite attempt counter60 seconds
Record that a code was used (code and time)Length of the playtest, then deleted
Your three friend codes, kept under your cookie's random number180 days after they are made
Your First Seed number, kept under your cookie's random number180 days after it is given
Random number of an open game tabUp to 10 minutes after the tab last sends it
Daily counts of open game tabs, phone taps, phone demo steps and browsers that cannot run the game9 days
Crash reportsOnly the newest 200; each older one is deleted as a new one arrives
Feedback emailsUp to 12 months
Contact lettersUp to 12 months after our last reply
Sign-up email addressesUntil you unsubscribe or development ends
Analytics visitor hash24 hours (Vercel keeps the aggregated statistics)
Server logsAs set by Vercel
Anything in your browserUntil you clear it; we never see it

When information reaches the end of its period, we delete it.

9. Your choices and rights

Wherever you live, you can ask us to:

In Canada, the Personal Information Protection and Electronic Documents Act (PIPEDA) gives you the right to access and correct your personal information. If you are not satisfied with our answer, you can complain to the Office of the Privacy Commissioner of Canada at priv.gc.ca.

If you are in the UK, the EU or the EEA, you also have the right to object to processing based on legitimate interests, to restrict processing, and to data portability, and you can complain to your data protection authority (in the UK, the Information Commissioner's Office at ico.org.uk).

If you are in California or another US state with a consumer privacy law, you have similar rights to know, delete and correct, and we do not sell or share personal information.

We would appreciate the chance to help before you go to a regulator.

How to ask

Email hello@windwright.dev with what you would like us to do. To help us find your information, tell us any of: the email address you signed up with, roughly when you sent feedback and what it was about, or the invite code you used.

We do not ask you to create an account or send ID. We will reply within 30 days. We will not treat you differently for asking.

Deleting what is on your device

Your progress, code, settings and feedback copies are only in your browser. To delete them, use your browser's "clear site data" option for windwright.dev. To reset only your progress, code and feedback copies, use "Start over" in the Guide.

10. Where information is processed

We are based in Ontario, Canada. Our service providers process information in the United States and other countries, where it is protected by those providers' terms and may be accessible to courts and authorities under local law. Where UK or EU law applies, we rely on our providers' data processing terms, including standard contractual clauses or the EU-US Data Privacy Framework where the provider takes part.

11. Security

Invite codes are long and random, checked on the server, and usable once. The access cookie is signed and cannot be read by page scripts. Information is sent over HTTPS. No system is perfectly secure, so please do not send us anything sensitive.

12. Changes

If we change this policy we will update the date at the top. If a change affects how we use information you have already given us, we will tell you in the game, or by email if you signed up, before it takes effect.

13. Contact

William Hsu
Ontario, Canada
hello@windwright.dev