Capabilities¶
What you can build with Kuira, split two ways: what your users get from an app built on it, and what you get as the developer building it.
Built on a native Rust core — not a WASM sandbox
The cryptographic core — wallet, ledger, Dust, and zero-knowledge
proving — is a native Rust library compiled straight to an Android
.so and called over JNI. It runs as native machine code, not
the Midnight stack's WebAssembly modules inside an embedded runtime.
That's the foundation that makes on-device proving
viable.
(Compact contract logic itself executes in a QuickJS runtime; the claim here is about the crypto/proving core, not contract execution.)
For your users¶
Benefit-first — the capabilities your app can offer the people using it.
-
Your data never leaves the phone
Zero-knowledge proofs are generated on-device, offline — there is no proof server in the loop. Nothing private is sent anywhere to be proven.
-
A wallet with no custodian
The wallet lives inside your app, not behind a separate wallet app or a hosted service. Full shielded + unshielded balances and Dust, with nobody holding the keys but the user.
-
Sign up with one tap, no seed phrase
A single biometric mints the user's identity and wallet. No 24-word phrase to write down at onboarding (passkey-derived under the hood).
-
Move to a new phone without losing the wallet
Recovery rides the user's synced passkey + biometric — reinstall or switch devices and the wallet comes back (encrypted device-transfer backup under the hood).
-
A sovereign 24-word backup, if they want one
Beyond the automatic passkey recovery, the user can reveal a standard 24-word recovery phrase and restore the exact wallet on any device — no passkey, account, or cloud in the loop. Opt-in and one-way; shown once behind a biometric on a screenshot-blocked screen, with a clipboard that auto-clears.
-
Wallet data follows you across devices
The wallet's sync state is backed up encrypted to the user's own cloud storage and restored on a new device, so it's ready in seconds instead of re-scanning the whole chain (opt-in; the data is encrypted on-device before upload — the cloud only ever holds ciphertext).
-
Testnet to mainnet, same code
Point the app at undeployed, preview, preprod, or mainnet by configuration — no code change to move between networks.
-
A wallet that fits your app's look
Pick from built-in palettes — Monochrome, Paper, Catppuccin, Nord, Dracula, Tokyo Night, Rosé Pine — and the choice sticks across restarts.
-
Know the moment they're paid
Background notifications when NIGHT lands, showing the real per-transaction amount — no false "change" alerts.
For you, the developer¶
The DevX side — wired so you write app logic, not plumbing.
-
One Gradle line, whole SDK
implementation("io.github.kuiralabs:dapp-ui:0.1.0-alpha05")api-exposes the full module graph. Need headless? Drop tomidnight-sdk. -
Agent-paired recipes
Every recipe is a stable-URL markdown file with a one-tap prompt for your coding agent, indexed by a site-root
/llms.txt. -
kuiraDoctorpreflight
Environment misconfig — unreachable
assetlinks.json, runtime-pin mismatch, missing debug-cleartext — fails at build time with a clear cause, instead of surfacing as a runtime crash. -
Typed contract API, generated
io.github.kuiralabs.contractreads your compiled contract'scontract-info.jsonand generates a typed<Name>Contractfacade — typedcall/read/localmethods carrying your circuit's real argument and return types (BigInteger,ByteArray, generateddata classes andenums). A wrong argument type becomes a compile error, not a device failure;Uintarguments are range-checked to their declared width. It also syncs the.compactartifacts into assets and pins the runtime version. -
Progress callbacks
Balance + submit report through five discrete stages — fetching state, executing, proving, balancing, submitting — so the otherwise-opaque proving/submission wait becomes real UX.
-
Typed ledger snapshot
The generated facade's
ledger()returns a typed<Name>Ledgersnapshot — avalper exported on-chain field, decoded and range-checked, with loud failures instead of silent misdecodes.observeLedger()gives the same view, reactively, on every state change. -
Auditable & modern-Android ready
Source jars ship beside every AAR on Maven Central; native libraries are 16 KB-page aligned for Android 15+ / Play readiness.
-
Drop-in floating wallet & sigil pills
PanelBar(floating = true)gives draggable wallet + sigil chips that dock to a screen edge as peek tabs and resize on long-press — a movable wallet/identity surface with no custom UI to build.
See the integration guide to wire it up, the cookbook for task-by-task recipes, and the roadmap for where the SDK is headed.