Custom wheel-screen dashboards for Moza sim racing hardware, designed and built by
Pixelsonly Racing. Each dashboard is released on its own, and every release has a
ready-to-install .zip on the Releases page.
| Dashboard | Wheel | Version | Preview | Download |
|---|---|---|---|---|
| Pixelsonly Racing KSP01 Dark | Moza KS Pro | Latest KSP01 Dark release | ||
| Pixelsonly Racing KSP01 Light | Moza KS Pro | Latest KSP01 Light release | ||
| Pixelsonly Racing KSP01 (switchable, experimental) | Moza KS Pro | Latest KSP01 release |
Which KSP01? KSP01 Dark and KSP01 Light each have a single screen. KSP01 (switchable) has both, Dark first, meant to be switched with a control on the wheel. Switching hasn't worked on our test setup yet, so if it doesn't switch for you, use Dark or Light instead. If you get it working, please open an issue and tell us your setup.
Each download is named pixelsonly-racing-<slug>-v<version>.zip, where the slug names the
wheel it is for, for example pixelsonly-racing-Moza-KS-PRO-v0.1.0.zip. It holds one folder named after the
dashboard, which contains the .mzdash file, a Resource/ folder and the preview images.
AZOM is an open-source SimHub plugin that drives Moza hardware, including the wheel's LCD dashboard.
- Install SimHub 9.12.0 or newer.
- Install AZOM by following its install guide.
- Fully close Moza Pit House (don't just minimize it). Pit House and SimHub share the same serial port, so they can't both be connected.
- Download the dashboard's
.zipfrom Releases and extract it. - Upload the extracted
.mzdashfile to your wheel by following AZOM's Wheel Files & Dashboard Upload guide.
- Download the dashboard's
.zipfrom Releases and extract it. - In Pit House's dashboard editor, import the extracted folder (e.g.
Pixelsonly Racing KSP01/). Pit House imports the whole folder, which is how it picks up the preview images.
Requirements: Python 3.9+ (standard library only) and Node.js, which the tests use to evaluate the dashboards' JavaScript bindings.
python3 dashboards/ksp01/build.py # writes dist/Pixelsonly Racing KSP01/
python3 scripts/package.py ksp01 0.1.0 # writes dist/pixelsonly-racing-Moza-KS-PRO-v0.1.0.zip
scripts/check.sh # every test suite + build and package every dashboard (what CI runs)
scripts/check.sh ksp01 # the same, for one dashboard (what a release runs)Layout:
generator/: the shared.mzdashwriter, value formatters and widget templates.dashboards/<id>/: one folder per dashboard:dashboard.json,build.py,test_build.py,previews/.scripts/: packaging and the check script used by CI.
-
Create
dashboards/<id>/with abuild.py(seedashboards/ksp01/build.py), its tests (including a pinnedOUTPUT_SHA256),previews/, and adashboard.json:{ "name": "Pixelsonly Racing KSP01", "slug": "Moza-KS-PRO", "wheel": "Moza KS Pro", "previews": ["previews/1.png", "previews/2.png"] }sluggoes in the download's file name and must be unique across dashboards. CI enforces this. -
Register it with release-please. Add
"dashboards/<id>": { "component": "<id>" }topackagesinrelease-please-config.json, and"dashboards/<id>": "0.0.0"to.release-please-manifest.json.scripts/check.shfails if a dashboard folder and the release config disagree. -
Add a row to the table above. For its version badge, copy KSP01's and replace
ksp01in the badge'squeryandlabel.
- PRs are squash-merged, and the PR title must be a
Conventional Commit with the dashboard id as
the scope, e.g.
feat(ksp01): add fuel readoutorfix(ksp01): correct delta colour. - Each dashboard is its own release-please
package. Only commits that touch
dashboards/<id>/count toward that dashboard's next release. If a change outside that folder (togenerator/, or to a design another dashboard imports) alters a dashboard's output, the same PR must also change something underdashboards/<id>/. Otherwise, no release is cut. Each dashboard'stest_build.pypins a hash of its output (OUTPUT_SHA256), so such a change fails CI until the hash is updated, and that update is what releases it. ARelease-As:footer on a generator-only commit is ignored. - release-please keeps one release PR open that covers every dashboard with pending
changes. Merging it creates a separate release per dashboard, tagged
<id>-v<version>(e.g.ksp01-v0.1.0). Each starts as a draft because the repo uses GitHub's immutable releases: once a release is published, assets can't be added or replaced. Therelease-assetsworkflow builds each dashboard from its tag, attaches the.zipto the draft, then publishes it. If that fails, fix the cause and runrelease-assetsmanually with the tag. A published release can't be rebuilt; ship a new patch release instead.
Bug reports, dashboard requests and pull requests are welcome. See CONTRIBUTING.md, and please follow the Code of Conduct. To report a security issue, see SECURITY.md.
This repository uses two licenses:
- Code (
generator/,scripts/, workflows): the GNU General Public License v3.0. You may use, modify and redistribute it, but redistributed versions must stay open source under the GPL. - Dashboards (everything under
dashboards/, including each dashboard'sbuild.py, its previews and the.mzdashfiles in the release downloads): Creative Commons BY-NC-SA 4.0. You may share and adapt them with credit to Pixelsonly Racing, for non-commercial purposes only, under the same license. Selling these dashboards, or anything derived from them, is not permitted.
As an additional permission under section 7 of the GPL-3.0, Pixelsonly Racing permits dashboard definitions under other licenses to import and use the generator. The GPL does not cover the dashboards the generator produces.
Copyright (c) 2026 Pixelsonly Racing.
"Pixelsonly Racing" and the Pixelsonly Racing logo are trademarks of Pixelsonly Racing and are not licensed under the GPL-3.0 or CC BY-NC-SA 4.0. Forks and derivative dashboards must not use the name or logo in a way that suggests they come from, or are endorsed by, Pixelsonly Racing.
MOZA is a registered trademark of Gudsen Technology Co., Ltd. This project is not affiliated with, endorsed by, or sponsored by MOZA.