Skip to content

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 to midnight-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.

  • kuiraDoctor preflight


    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.contract reads your compiled contract's contract-info.json and generates a typed <Name>Contract facade — typed call / read / local methods carrying your circuit's real argument and return types (BigInteger, ByteArray, generated data classes and enums). A wrong argument type becomes a compile error, not a device failure; Uint arguments are range-checked to their declared width. It also syncs the .compact artifacts 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>Ledger snapshot — a val per 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.