Changelog¶
All notable changes to the Kuira Android SDK. This page summarizes the SDK's
CHANGELOG.md; per-release notes are also on GitHub Releases.
The SDK ships as a set of modules published together on one version to Maven Central
under io.github.kuiralabs (dapp-ui, midnight-sdk, wallet-runtime, wallet-seed, wallet,
identity, auth, crypto, compact-engine, indexer, ledger, network, connector,
designsystem, testing), plus the io.github.kuiralabs.contract and
io.github.kuiralabs.localnet Gradle plugins.
Format follows Keep a Changelog; the SDK follows
Semantic Versioning (pre-1.0, so minor bumps may break API). Public-API
entries from alpha03 onward are reconciled against each module's checked-in
binary-compatibility (.api) dump.
[Unreleased]¶
No changes yet.
[0.1.0-alpha05] — 2026-07-14¶
Typed contract codegen and the unshielded money path.
Added¶
- Typed contract reads — the
io.github.kuiralabs.contractplugin generates typed accessors fromcontract-info.json: typed ledger fields (Counter, Cell) andread/ view methods returning your circuit's real types (scalars, generateddata classes for structs,ByteArray,List<T>, tuples), withUintargs range-checked to their declared width. readLocalandreadMany— run a pure circuit against initial state with no deploy and no chain (readLocal), and batch several view reads on one state snapshot (readMany), with SDK-side indexer retry.- Contract constructor arguments — deploy a contract passing constructor args, threaded through the circuit-call path (
compact-engine). - Multi-contract projects — a
contracts { }container DSL: per-contract asset namespacing, a generated package per alias, and sync / validate / generate fanned out across every contract. - Unshielded money path — the unshielded contract-call and withdrawal flows wired end-to-end (real UTXO movement).
- Typed argument marshalling — Compact enums marshalled as
CompactEnum(ordinal). - Dust-backup restore continuity — restore-by-default instead of a genesis re-replay.
- Version-coherence pre-flight — chain-time sourcing and a client/node version check before value-bearing calls.
- Live wallet sync indicator on the wallet pill (
dapp-ui).
Changed¶
MidnightSdk.close()/MidnightWallet.close()are nowsuspend— they suspend until an in-flight balance releases the Dust state.MidnightSdkProvider.close()is unchanged, so teardown through the provider needs no change.- BigInt marshalling hardened across the contract-call path.
Fixed¶
- Dust-state races on a live chain — teardown (network switch, logout, hard-lock) no longer frees the Dust state mid-balance (
DustLocalState has been closed), and a balance-time failure now delta-re-syncs instead of wiping the checkpoint and replaying from genesis. - Sigil chip status color — the floating sigil chip's status dot no longer reads "protected" green when the sigil is absent, initializing, or failed.
[0.1.0-alpha04] — 2026-06-21¶
The frosted "Void" design system and the background-operation framework. ~70 new public types
across the modules (verified against the .api dumps).
Added¶
- Sovereign recovery phrase — reveal a 24-word BIP-39 phrase behind biometrics and restore the exact wallet on any device; opt-in, one-way, on a
FLAG_SECUREscreen. - Session auto-lock — idle, background, and screen-lock re-authentication, plus a manual "lock now".
- Reactive contract state —
MidnightContract.observeLedger()(aFlowpushed by block subscriptions) andMidnightSdk.observeBlocks(). - Durable protocol orchestrator — a ledger-anchored saga that resumes multi-step flows after process death.
- NIGHT transfers —
sendNightwith automatic change-UTXO consolidation, plus a 3-screen Send wizard with QR scan. - Per-transaction receive amounts — real inbound value from UTXO-set provenance.
- Background receive notifications — background push on incoming NIGHT with per-transaction value alerts.
- Foreground-operation framework — live operation stage in a foreground-service notification and a wallet chip; operations can carry a return content intent.
- Cloud-backup controls (true disable) — fully disable Dust and app-state cloud backups; disabling deletes the remote blobs and resets digests.
- Automatic app-state backup — silent, hash-guarded capture on each sync.
- Streamed cold sync — shielded-state checkpoint + delta streamed to disk (no genesis re-replay, no first-sync GC-storm freeze).
- Proactive Dust sync and automatic dust-proof recovery (
Custom error: 170/171) via delta re-sync. - Durable network preference — exposed through
MidnightSdkProvider. - x86_64 native ABI — the crypto native library now ships
arm64-v8aandx86_64, so Intel/Apple-silicon emulators run on-device proving. - Floating & resizable wallet/sigil chips — opt-in draggable chips that dock to a screen edge.
- Theme palettes — seven built-in wallet themes (Kuira Monochrome, Paper, Catppuccin, Nord, Dracula, Tokyo Night, Rosé Pine), persisted.
- Frosted "Void" design system — GlassPanel v2, StarField, monochrome accent across the wallet, settings, recovery, and receive screens.
- Redesigned Send flow — amount presets, a prominent review step, honest in-flight copy.
- Hardened identity errors — typed exceptions for passkey, Sigil-overwrite, and Drive-consent failures.
- Localnet Gradle plugin —
io.github.kuiralabs.localnet: autoadb reverseof localnet ports and wallet-key provisioning.
Changed¶
PanelBar(...)signature gained afloating: Booleanparameter; recompile against the new arity.
[0.1.0-alpha03] — 2026-06-10¶
First release with checked-in .api dumps. No alpha02 was published.
Added¶
- Contract Gradle plugin —
io.github.kuiralabs.contract: syncs compiled.compactartifacts into the app's assets and enforces the runtime-version pin. kuiraDoctorpreflight — build-time environment checks (assetlinks reachability, Compact runtime pin, SDK-bundled-runtime layer, minSdk / cleartext) that fail fast instead of crashing at runtime.- One-call proving-key staging —
ProvingKeyManager.installCircuitKeysFromAssets(). - Cross-device Dust cloud backup — encrypt-on-device Dust checkpoint to Google Drive
appDataFolder, restored on a new device; consent UI in the wallet panel. Seed-derived AES-256-GCM (Drive is transport only). - Durable network selection — the chosen network persists across launches.
ContractCallProgressBar— a drop-in progress component for deploy/call stages.hilt-navigation-composeapi-exposed forhiltViewModel()in consumer UI.
Changed¶
- Bundled Compact runtime 0.15.0 → 0.16.0.
- Proving mode surfaced as "on-device" (was "local").
- Throttled full wallet resync; balance now tracked via the reactive observer.
[0.1.0-alpha01] — 2026-05-28¶
First public alpha of the Kuira Android SDK — build Midnight zero-knowledge dApps on Android
from a single Gradle dependency (io.github.kuiralabs:dapp-ui).
Added¶
- On-device ZK proving — the native Rust
midnight-zkirengine over JNI;ProvingMode.LOCALby default, no proof server (arm64-v8a). - Passkey-derived Sigil identity — one biometric mints a
did:keyidentity + wallet seed; no seed phrase. - Embedded self-custodial wallet — shielded + unshielded balances and Dust, in-process.
- Compact contract runtime — deploy and call
.compactcontracts (MidnightContract), with typed ledger reads. - dApp connector — the standard Midnight
ConnectedAPIover a local WebSocket, Android Binder, or a WebView bridge. - Drop-in Compose wallet UI —
dapp-ui(Sigil panel, balances, send/receive). - Published to Maven Central under
io.github.kuiralabs.