What stays on your device
The browser course saves a few things in your browser's local storage so it can pick up where you left off:
- Course progress — which section and lesson you're on, per language.
- Your program — the
my_first_programfile built during graduation. - Small technical notes — a cached copy of the visitor counter and a one-time flag the page uses to set itself up.
None of this is ever transmitted anywhere. It belongs to you: the Start over button on the play page erases the course data, and clearing your browser's site data removes everything.
Counting visits
We count visits with GoatCounter, chosen because it uses no cookies and no persistent identifiers. When a page loads, GoatCounter's server briefly processes a standard web request (page visited, referrer, browser type, screen size, and country-level location) to add +1 to an aggregate count. It does not build profiles of visitors, and neither do we — the homepage number is the whole point. See GoatCounter's own privacy documentation for details.
The downloadable course
gray.py and gray.lua run entirely on your own
computer, offline. The only network use is a quick check of
gray.academy at startup for a newer version of the course — a
normal web request that sends nothing about you and fails silently without
internet. Setting GRAY_NO_UPDATE=1 turns it off entirely.
There is no telemetry: the course never reports what anyone types, learns,
or builds.
Playing in the browser
The browser course runs Python and Lua inside your browser — code you type is executed on your device, not on a server. To make that work, the page loads the language engines from the jsDelivr open-source CDN, whose servers see a standard web request when the files download. What you type into the course is never sent to us, to jsDelivr, or to anyone else.
Made for kids
Gray is built for children, so it's designed to collect nothing personal: no names, no emails, no accounts, no chat, nothing typed in a lesson ever leaves the device. Parents: the entire course is open source, so you can read every line of what your kid is running.
Questions or changes
If this page changes, the date at the top changes with it. Questions or concerns are welcome as issues on the GitHub repository.