Development
Build the component you need, run the affected checks, and contribute a focused change.
Dieter is MIT-licensed and developed in the open on GitHub . Contributor documentation lives in the repository, next to the code it describes.
Get started
git clone https://github.com/dbpprt/dieter.git
cd dieter
mise trust
just setup # pinned tools and the harness runtime
just build # bin/dieter and bin/dieter-gateway
just test
Tools are pinned in mise.toml; platform SDKs (Xcode, the Android SDK) are
installed separately and only for the component you change. The
building guide
covers prerequisites, every component, a local-only daemon, a local gateway and
forking.
| You want to… | Read |
|---|---|
| Send a change | CONTRIBUTING.md |
| Find your way around | Architecture |
| Know the rules every change keeps | Invariants |
| Pick and run tests | Testing |
| Understand the security boundaries | Threat model |
| Work on the Kotlin core or Android app | apps/kotlin |
| Work on the Mac or iOS app | apps/apple |
| Write device flows | tests/maestro |
| Edit this website | site |
| Cut a release | Releasing |
Repository map
| Directory | Contents |
|---|---|
cmd, internal | Daemon, CLI, gateway, storage, transports, harness integration (Go) |
api/proto | The authoritative RPC schema |
apps/kotlin | Shared Kotlin client core, the Android/iOS Compose UI, the Android app |
apps/apple | Shared Swift package, the macOS app, the iOS app |
native | Daemon-side screen capture, input and privacy helpers |
third_party | Vendored packages with their patches |
deploy | Gateway deployment bundle and the Linux installer |
tests | Maestro device flows and cross-language fixtures |
tools | Identity generator, fixture gateway, CLI reference generator, brand check |
fastlane | Native app builds, signing and distribution |
site | This website |
docs | Contributor documentation and design records |
assets/brand | The brand source: logo, icons, font, colors |
Check your change
just check-changed --dry-run # what would run, and why
just check-changed # run the affected checks
just lint
The selection includes uncommitted changes; add --base origin/main for a
whole branch. Device flows are listed separately; run the relevant one with
just e2e <android|ios|mac>. Pull requests need the ci-ok check.
Never stop, restart or install over a daemon or app that is already running on
your machine to test a change. Use a temporary DIETER_HOME, a free loopback
port and the fixture gateway, as the building guide shows.
Change an operation
A native-client operation is declared in api/proto, implemented by a domain
handler in internal/api, and exposed by a CLI command with offline help in
internal/cli, in the same change. Contract tests fail when one of those is
missing. Run just generate after schema changes and regenerate the
CLI reference
after help changes.