Native Litecoin wallet for macOS and Linux, built on the Litecoin BDK fork (LitecoinDevKit/bdk + bdk_wallet), with a Tauri 2 shell.
Rust product reference for LitecoinDevKit integrators (maps-first MWEB via wallet-core, not UniFFI). Mobile bindings use a separate surface — see ADOPTION.md.
Canonical MWEB shape in wallet-core: Electrum/RPC tip → MwebStore + LIP sync → prepare_mweb_pegin / fund_mweb_send / fund_mweb_pegout → sign_and_extract_funded_mweb → broadcast (RPC + wtxid for MWEB-only).
v0.1 — BIP84 create/load, Electrum sync/send, encrypted mnemonic, receive QR, history, LTC amounts, auto-refresh.
v0.2 (in progress) — MWEB peg-in / private send / peg-out via LIP-0006 P2P + optional litecoind RPC.
Read docs/CHAT_HANDOFF.md. Blueprint: docs/ARCHITECTURE.md.
Security: threat model and disclosure policy in SECURITY.md;
how to verify a release in docs/VERIFYING.md.
../bdk # branch litecoin
../bdk/bdk_wallet # separate repo, cloned inside ../bdk (gitignored there)
../rust-litecoin # litecoin 0.32.8-rc.2 (workspace [patch])
The LitecoinDevKit/bdk, bdk_wallet, and rust-litecoin forks are pinned by rev directly in the Cargo manifests (see crates/wallet-core/Cargo.toml and the root [patch.crates-io]), backed by the committed Cargo.lock. Update those revs when intentionally bumping the forks; for day-to-day development against local sibling checkouts, add [patch] overrides in .cargo/config.toml (see docs/LOCAL_DEV.md).
| Path | Role |
|---|---|
crates/wallet-core |
BDK boundary, DTOs, encrypted secrets, Electrum, MWEB |
crates/wallet-cli |
Smoke CLI: create → sync → address → send |
src-tauri |
Tauri 2 commands → wallet-core |
ui |
Onboarding / home / settings UI |
npm install
npm run tauri devWallet data:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/com.indigonakamoto.ltc-wallet/ |
| Linux | ~/.local/share/com.indigonakamoto.ltc-wallet/ |
Mnemonic is stored encrypted (wallet.mnemonic.enc). Existing plaintext wallet.mnemonic files are migrated on first unlock.
cargo run -p wallet-cli -- --data-dir .wallet-data create --passphrase '…'
cargo run -p wallet-cli -- --data-dir .wallet-data --passphrase '…' address
cargo run -p wallet-cli -- --data-dir .wallet-data --passphrase '…' sync
cargo run -p wallet-cli -- --data-dir .wallet-data --passphrase '…' send \
--address <ltc1…> --amount-sats 5000 --fee-rate 1Use --network testnet for testnet. Passphrase can also come from WALLET_PASSPHRASE.
Icon source: app-icon.png (regenerate with npx tauri icon app-icon.png).
Bundle targets: macOS .app + .dmg, Linux .deb + .AppImage.
npm run tauri buildArtifacts under src-tauri/target/release/bundle/ (or the workspace target/ equivalent). Share the .dmg, or zip the .app.
Unsigned builds trip Gatekeeper: recipients use Right-click → Open (or Privacy & Security → Open Anyway).
Signed + notarized release (Apple Developer Program):
export APPLE_ID='you@example.com'
export APPLE_PASSWORD='app-specific-password'
export APPLE_TEAM_ID='XXXXXXXXXX'
export APPLE_SIGNING_IDENTITY='Developer ID Application: …'
npm run tauri buildCI signing is drop-in: add APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD,
APPLE_SIGNING_IDENTITY, APPLE_ID, APPLE_PASSWORD, and APPLE_TEAM_ID as
repository secrets and the release workflow signs + notarizes automatically —
no workflow edits needed.
Hardened runtime + network client entitlement are enabled via src-tauri/Entitlements.plist. Universal (x86_64 + arm64) builds are deferred until sibling deps cross-compile cleanly.
Build on Linux (not cross from macOS). On Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf xdg-utils
npm install
npm run tauri buildShare the .AppImage (chmod +x LTC\ Wallet_*.AppImage && ./LTC\ Wallet_*.AppImage) or install the .deb (sudo dpkg -i …).
.github/workflows/release.yml builds macOS (Apple Silicon) and Linux x64 artifacts and attaches them to a draft GitHub Release.
- Keep the fork revs in the Cargo manifests pointed at known-good commits.
- Push to the
releasebranch, or run Actions → Release → Run workflow. - Open the draft release, edit notes, publish.
Each platform job attaches a SHA256SUMS-<platform>.txt; recipients can check
their download against it (see docs/VERIFYING.md).
Run the live MWEB product checklist (docs/MWEB_E2E.md)
against an archive peer + RPC, then ship a notarized macOS build when Apple
secrets are configured (docs/NOTARIZATION.md).