To compile QuartzControl yourself, or to work on it, you need the source from github.com/boxi-os/QuartzControl and a Node on your machine — the bundled one only applies to finished builds.
npm install
npm run dev # development mode
npm run build # production build into out/
npm run dist:mac # or dist:linux, dist:flatpak
What dist:* produces lands in release/. For macOS the same holds as for the finished packages:
a build of your own is only ad-hoc signed too, and Gatekeeper wants the same approval — see
Obtaining and updating.
dist:flatpak sits beside dist:linux rather than inside it on purpose: the target needs
flatpak and flatpak-builder on the build machine, and dist:linux should not fail on a machine
without them.
The checks
There is no test suite in the usual sense. Instead each check answers one question that neither the typecheck nor the build answers:
npm run typecheck | both tsconfigs |
npm run smoke | launches the build and visits every screen at two window sizes |
npm run check:i18n | every t('…') against both locale files, in both directions |
npm run check:semver | the version comparisons behind the update notice |
npm run check:plugin-names | the name derivation against Quartz’ own function |
npm run check:handbook | this handbook’s quotations against what QuartzControl actually says |
npm run check:runtime | the bundled runtime against a real project |
npm run check:tokens | whether a CSS variable actually moves anything in a running page |
Why each one exists is written in the project’s CLAUDE.md, next to the bug that forced it.