First off — thank you for wanting to contribute to Dasher! Dasher is a predictive, continuous-gesture text-entry system used worldwide as an assistive tool (eye-gaze, head-trackers, switches, joysticks and more). This guide gets you started; the full developer handbook lives at https://dasher.at/developers/.
Dasher v6 is one shared engine consumed by several native frontends:
| Repository | Platform | UI stack | DasherCore integration |
|---|---|---|---|
DasherCore |
All | C++ engine + C API | is the engine |
Dasher-Apple |
iOS / macOS / visionOS | SwiftUI | compiled core + C API header |
Dasher-Android |
Android | Kotlin / Jetpack Compose | libdasher.so via JNI |
Dasher-Windows |
Windows | Avalonia (.NET) | dasher.dll via P/Invoke |
Dasher-GTK |
Linux (+ Win/macOS fallback) | GTK4 / gtkmm | libdasher.so linked |
dasher-web |
Web (WASM) | Rust / WASM | DasherCore compiled to WASM |
website |
— | Astro | docs + public feature-status matrix (not a frontend) |
Before touching a frontend, read DasherCore's C API contract and the cross-platform feature matrix — it shows what every platform already supports so we keep parity.
- Building a specific platform: see the developer handbook at https://dasher.at/developers/ and the
README.md/CONTRIBUTING.mdinside the relevant repo. Frontend repos should follow the README template. - Coding standards:
DasherCore/CONTRIBUTING.mdis the project's gold standard (no nakednew/delete,const-correctness, zero warnings, clean API boundaries). Each frontend repo states its own language-specific rules. - Design tokens: the normative source of truth is
dasher-design-guide/DESIGN.md. - Proposing a cross-platform change: read the RFC process in our governance repo.
A pull request is ready to merge when:
- CI is green (build + tests + lint + format, as applicable to the repo).
- New behaviour has tests.
- If the change affects a cross-platform capability, the feature matrix (
website/src/data/feature-status.json) has been updated in this or a linked PR. - If the change is a new UX/hardware interaction, an RFC is linked.
- Docs / changelog are updated if the change is user-facing.
- Be kind. Our Code of Conduct applies across every Dasher repository and our Slack.
- Open a PR, not a direct push. Reviews are required on
main. - Small, focused PRs are easier to review and land faster.
- Talk to us first for big changes — open an issue or an RFC.
All contributions to the Dasher project must be signed off under the Developer Certificate of Origin. This is a lightweight alternative to a CLA — it affirms that you wrote (or have the right to submit) the code you're contributing.
How to sign off: add -s (or --signoff) to your commit command:
git commit -s -m "your commit message"This adds a Signed-off-by: trailer to the commit message automatically. If
you forgot, you can amend:
git commit --amend -s --no-editFor an existing PR with multiple unsigned commits, rebase with signoff:
git rebase --signoff BASE_BRANCH
git push --force-with-leaseWhy DCO instead of a CLA? Dasher is MIT-licensed and community-driven. A full CLA adds legal friction for volunteers. The DCO achieves provenance tracking with a single line, and is the same model used by the Linux kernel, Git, and many other open-source projects.
This file is the organisation-wide default. Individual repositories may add their own CONTRIBUTING.md with platform-specific build steps and rules, which take precedence here.