Skip to content

AbdelStark/ikki

Repository files navigation


Ikki
Ikki

A privacy-first Zcash wallet with a premium mobile experience.

CI Platform Testnet License

Why IkkiScreenshotsFeaturesQuick StartArchitectureDevelopmentSecurity


Why Ikki

Ikki combines the privacy guarantees of Zcash with a modern consumer-grade experience. Built with Tauri and Svelte, it delivers native performance, responsive layouts, and a dark interface designed for uninterrupted mobile-first usage.

Status: Testnet only. Do not use with real funds.

What Ikki delivers

  • Confidence: shielded transactions by default with unified addresses.
  • Clarity: focused flows for sending, receiving, and reviewing history.
  • Responsiveness: lightwalletd-backed sync with optimistic balance updates.

Screenshots

Dashboard Receive
Transaction Detail Settings

Features

Wallet

  • BIP-39 24-word seed phrases with HD derivation
  • Unified addresses spanning Orchard and Sapling
  • Diversified addresses to keep payments unlinkable
  • Fast sync using lightwalletd compact blocks

Privacy

  • Shielded-only transactions by design
  • 512-byte encrypted memos
  • No analytics or telemetry hooks

Experience

  • Premium dark theme tuned for readability
  • QR code scanning and generation
  • Real-time background sync with progress and optimistic balances
  • Transaction history grouped by date

Quick Start

Prerequisites

Local run

git clone https://github.com/AbdelStark/ikki.git
cd ikki
npm install
npm run tauri dev

Production build

npm run tauri build

Artifacts are written to src-tauri/target/release/.

Minimal troubleshooting

  • If builds fail on macOS or Windows, re-run the Tauri prerequisites and restart your shell.
  • Ensure Rust toolchain is up to date: rustup update stable.
  • Delete src-tauri/target when changing Rust toolchains to avoid stale artifacts.

Architecture

┌─────────────────────────────────────────────────────────────┐
│                     Svelte Frontend                         │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌───────────────┐  │
│  │ wallet  │  │   ui    │  │  send   │  │  transaction  │  │
│  │  store  │  │  store  │  │  store  │  │     store     │  │
│  └────┬────┘  └────┬────┘  └────┬────┘  └───────┬───────┘  │
└───────┼────────────┼────────────┼───────────────┼──────────┘
        └────────────┴────────────┴───────────────┘
                              │
                    Tauri IPC Bridge
                              │
┌─────────────────────────────┴───────────────────────────────┐
│                      Rust Backend                           │
│  ┌──────────────────┐     ┌─────────────────────────────┐  │
│  │    AppState      │────▶│        IkkiWallet           │  │
│  │  (Tauri State)   │     │  ┌─────────────────────┐    │  │
│  └──────────────────┘     │  │   zcash_client_*    │    │  │
│                           │  └──────────┬──────────┘    │  │
│                           └─────────────┼───────────────┘  │
└─────────────────────────────────────────┼───────────────────┘
                                          │
                               lightwalletd (gRPC)
                                          │
                               ┌──────────┴──────────┐
                               │   Zcash Testnet     │
                               └─────────────────────┘

Stack

Layer Technology
Frontend Svelte 5, TypeScript, Vite
Backend Rust, Tauri 2
Zcash zcash_client_backend, zcash_client_sqlite, zcash_proofs
Network lightwalletd via gRPC/TLS

Data Storage

~/.ikki/
├── wallet.db              # SQLite (zcash_client_sqlite)
├── wallet_config.json     # Seed storage
└── wallet.db-wal          # WAL journal

Development

Structure

ikki/
├── src/                    # Svelte frontend
│   ├── lib/
│   │   ├── components/     # UI components
│   │   ├── stores/         # State management
│   │   └── utils/          # Tauri bridge
│   └── routes/             # Pages
├── src-tauri/              # Rust backend
│   └── src/
│       ├── commands/       # IPC handlers
│       ├── wallet/         # Core wallet
│       └── state.rs        # App state
├── tools/
│   └── ikki-mcp/           # MCP server for Claude Code
└── public/                 # Static assets

Core scripts

npm run dev          # Vite dev server
npm run build        # Build frontend
npm run tauri dev    # Development mode
npm run tauri build  # Production build

MCP server for Claude Code

Ikki ships an MCP (Model Context Protocol) server for UI automation. It allows screenshot capture, clicking, and typing within the app window.

Setup:

cd tools/ikki-mcp
bun install

Register with Claude Code:

claude mcp add ikki-automation --scope project -- bun run /path/to/ikki/tools/ikki-mcp/src/index.ts

Or add to .mcp.json manually:

{
  "mcpServers": {
    "ikki-automation": {
      "type": "stdio",
      "command": "bun",
      "args": ["run", "/path/to/ikki/tools/ikki-mcp/src/index.ts"]
    }
  }
}

Available tools:

Tool Description
screenshot Capture the app window as base64 image
click Click at window-relative coordinates
type Type text or press special keys
get_window_info Get window position, size, and state

Requirements:

  • macOS with Accessibility and Screen Recording permissions granted to your terminal
  • The Ikki app must be running (npm run tauri dev or production build)

Key files

Frontend Purpose
Home.svelte Dashboard with balance
Send.svelte Transaction creation
Receive.svelte QR code + addresses
History.svelte Transaction list
Backend Purpose
wallet/core.rs Wallet operations
commands/wallet.rs Wallet IPC handlers
commands/transactions.rs Transaction handlers

Security

Current implementation:

  • Seed stored locally in ~/.ikki/wallet_config.json
  • File permissions 0600 (Unix)
  • TLS for all lightwalletd connections

Operational tips:

  1. Back up your seed phrase offline.
  2. Use testnet only.
  3. Verify addresses before sending.

Reset wallet:

rm -rf ~/.ikki/

Configuration

Variable Default Description
RUST_LOG info Log level

Server: testnet.zec.rocks:443 (configurable in wallet/config.rs).

Contributing

  1. Fork the repo.
  2. Create a branch (git checkout -b feature/xyz).
  3. Commit changes.
  4. Push and open a PR.

License

MIT — see LICENSE.

Acknowledgments


Built for privacy.

About

A privacy-first Zcash wallet with a premium mobile experience.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •