Camera/QR (validated live with a v4l2loopback virtual camera): - decode non-MJPEG frames on Linux (raw YUYV was undecodable: eternal spinner), enumerate devices off the UI thread without unwrap, open cameras by their real device index (list position broke whenever /dev/video0 was absent), show "No camera found" after 5s - scan-to-pay: QR button in the send recipient search row and the mobile home header; in-surface camera panel feeding recipient resolution; only text payloads accepted (seeds/slatepacks refused) - receive QR was unscannable: full cells (0.5px gaps fragmented finder patterns at 4.5px cells), always ink-on-white plate (inverted codes fail many scanners), center mark 26% -> 19% (zbar chokes above); rqrr+zbar both decode the live card now; unit tests cover the exact widget geometry First-run onboarding (replaces the stock empty state only; the wallet list, add-wallet modal and GRIM creation flow stay for later wallets): - intro -> node choice (Private integrated / Instant external with URL) -> create or restore (wraps MnemonicSetup; word grid, paste, SeedQR scan) -> optional @username claim with prominent skip - fonts bind at creation context so frame one can use Geist families Sweep fixes (22 confirmed findings, the simple ones): - yellow theme: active sidebar nav was dark-on-dark (P1) - window frame ring painted with theme bg: transparent clear color rendered as a black band without a compositor (P2) - import/rotate identity inputs get visible field wells (P2) - receive buttons: verb labels + transient "Copied" feedback - review hero card fills the column; fee row copy; pay-tab stale and duplicated hints; unlock modal copy; node card subtitle truncation - build number stays current (.git/logs/HEAD rerun trigger) Backup restore: import accepts the export-time password and re-encrypts under the current wallet password; cross-device restores work. 31 lib tests green. Mainnet-validated: both flows restored real wallets; 0.1 grin sent B->A through NIP-17 over Tor with async open/close ping-pong; tx 71fbfce4f591 posted on-chain. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Grim

Cross-platform GUI for GRiN ツ in Rust for maximum compatibility with original Mimblewimble implementation. Initially supported platforms are Linux, Mac, Windows, limited Android and possible web support with help of egui - immediate mode GUI library in pure Rust.
Named by the character Grim - the shape of a large, black, menacing, spectral giant dog.
Build instructions
Install Rust
Follow instructions on Windows.
curl https://sh.rustup.rs -sSf | sh
Desktop
To build and run application go to project directory and run:
git submodule update --init --recursive
cargo build --release
./target/release/grim
Android
Set up the environment
Install Android SDK / NDK / Platform Tools for your OS according to this FAQ.
Build the project
Run Android emulator or connect a real device. Command adb devices should show at least one device.
In the root of the repo run ./scripts/android.sh build|release v7|v8|x86, where is v7, v8, x86 - device CPU architecture for build type, for release specify version number in format major.minor.patch.
License
Apache License v2.0.
