Contributing¶
Thanks for your interest in improving Kite Ground Control! Bug reports, fixes, features, translations and documentation are all welcome.
Getting started¶
- Read Building from source and get a dev build running with
just dev. - For anything non-trivial, open an issue first to discuss the approach — it saves rework.
- Branch, make your change, run the checks, and open a pull request against
master.
Before you open a PR¶
Run the static checks — the project leans on them heavily:
CI runs the same checks (plus clippy) on every push and PR. PRs should be green before review.
Coding conventions¶
Frontend (Svelte 5 / TypeScript)
- Runes only —
$state,$derived,$effect,$props(),$bindable(). No legacy Svelte 4 (export let,$:,on:click); useonclick={…}andlet { a } = $props(). - No
anyin TypeScript. - All user-visible text goes through i18n —
$t('section.key').en.jsonis mandatory; other locales are optional (see Internationalisation below). Never hard-code UI text. - Reuse the shared UI framework — the
Button, panel, toggle and stepper components and the theme tokens. Don't roll your own buttons/inputs. See UI framework & theme. - Keep page components thin; extract substantial UI into components.
Backend (Rust)
- One feature per module folder; Tauri commands return
Result<T, String>. - Database changes are incremental migrations (
PRAGMA user_version) — never modify an existing migration. - Route diagnostics through the
logfacade at the right level; user-facing/error strings stay English.
Comments & scope
- Keep changes focused; propose unrelated refactors separately.
- Match the surrounding code's style and comment density.
Internationalisation¶
Kite ships in English, German and French. For contributions:
en.jsonis the source of truth and is required — every new or changed UI string must have its English key.- Other locales (
de.json,fr.json) are optional but very welcome. Keeping them in sync is appreciated; an AI assistant makes this quick and is the recommended way to fill in translations. - Use named placeholders (
{name}) for parameters, passed as an object.
Missing non-English keys fall back gracefully, so an English-only PR is fine — a maintainer (or you, with AI help) can top up the other languages afterwards.
Licensing & contributor terms¶
Kite Ground Control is licensed under GPL-3.0-or-later.
- Every source file carries an SPDX header: Add it to any new source file you create.
- By submitting a contribution you agree it is licensed under the project's GPL-3.0-or-later terms.
Note
The project may later adopt a formal Contributor License Agreement (CLA) to keep relicensing/ distribution options open. If that happens it will be documented here and in the repository; for now, contributions are accepted under the GPL-3.0-or-later license above.
Reporting bugs & ideas¶
Use the GitHub issue tracker. For bug reports, the in-app diagnostics log (Settings → Diagnostics) and your OS / autopilot / firmware versions help a lot — see Reporting a problem.