This project is a Chrome extension (Manifest V3). There is no build step and nothing to install: you load the folder straight into Chrome.
chrome://extensions.manifest.json).home/home.html). If a Sudoku tab is already open (home, game or lessons), that tab is focused instead.game/game.html.learn/learn.html. Open it from the game’s UI.The folder layout is explained in README.md.
After changing any file, go to chrome://extensions and click the reload (circular arrow) button on the Sudoku card, then refresh the game tab.
home/, game/, learn/, stats/ and shared/ only need a tab refresh once the extension has been reloaded.manifest.json or anything in background/ always need the reload button.chrome://extensions, click service worker to open its DevTools.The pages are plain HTML, so you can also open game/game.html directly in a browser. The toolbar button, the keyboard shortcut and anything using chrome.* APIs will not work this way, but the game itself should.
powershell -ExecutionPolicy Bypass -File tools/package.ps1
This creates dist/sudoku-<version>.zip containing only what Chrome needs: manifest.json and the background/, home/, game/, learn/, stats/, shared/ and icons/ folders. A new file in one of those folders is included automatically. Bump version in manifest.json before each upload. Listing text, permission justifications and the privacy policy live in CHROMEWEBSTORE.md.
Requires Chrome 116 or later.
.github/workflows/publish.yml uploads a new version and submits it for review when you push a version tag. Credentials live only in GitHub’s encrypted secrets, never in the repo.
chrome-web-store, and tick Required reviewers (add yourself). In that environment, add the secrets:
CWS_SERVICE_ACCOUNT_JSON: paste the entire JSON key file contentsCWS_PUBLISHER_IDCWS_EXTENSION_IDversion in manifest.json (e.g. 1.0.1), commit and push to main.git tag v1.0.1
git push origin v1.0.1
The job fails without uploading if the tag doesn’t match the manifest version. Don’t release while a previous version is still in review.
If a key is ever exposed: delete it in Google Cloud (service account → Keys) immediately, create a new one and update the secret. Removing it from git history is not enough.
If npx or npm fail in PowerShell with “running scripts is disabled”, use npx.cmd / npm.cmd, or run:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned