Peya Wallet (Flutter desktop MVP)
Requirements
- Flutter stable (Linux desktop enabled)
monero_csubmodule for the Dart package in./monero_c- Runtime binaries can come either from:
- local
monero_cbuilds, or - staged release assets in
./third_party/monero_cand./external/daemon
- local
Run
flutter pub get
flutter run -d linux
The Flutter tool generates linux/flutter/ephemeral and plugin registrant files during the first build.
If your Flutter toolchain prefers a fresh runner scaffold, run:
flutter create --platforms=linux .
Wallet backend (FFI)
The app loads a native library at runtime:
- Default name:
libwallet2_api_c.so(also trieslibpeya_libwallet2_api_c.so,peya_libwallet2_api_c.so) - Search paths (Linux):
./lib,./third_party/monero_c/linux,monero_c/peya_libwallet2_api_c/build/x86_64-linux-gnu,monero_c/peya_libwallet2_api_c/build,monero_c,native/build,native
Override the path:
PEYA_LIBWALLET=/absolute/path/to/libwallet2_api_c.so flutter run -d linux
Native wrapper (optional)
A C-ABI wrapper stub is provided in native/:
native/include/wallet_wrapper.hnative/src/wallet_wrapper.cnative/CMakeLists.txt
Build it (Linux):
cmake -S native -B native/build
cmake --build native/build
Update wallet_wrapper.c to call the Peya/Monero C/C++ APIs from monero_c and link them in native/CMakeLists.txt.
CI runtime staging
The wallet build workflow now stages runtime dependencies from releases:
tiamak/monero_crelease assets forlibwallet2_api_ctiamak/Peyarelease assets forpeyad
The staging script writes them to:
third_party/monero_c/linuxorthird_party/monero_c/windowsexternal/daemon
Tray + background sync
- Enable Minimize to tray in Settings.
- Closing the window hides the app instead of quitting.
- Tray menu: Show/Hide, Sync now, Quit.
Notes:
- Some Linux window managers may not allow full close interception; in that case the app may quit on close.
Auto-sync
Configure in Settings:
- Auto sync toggle
- Interval: 30s / 1m / 5m / 15m
Sync runs in background and skips overlapping ticks.
Config storage
User data is stored under the application support directory, with separate subdirectories for config and wallets:
config/config.jsonwallets/
Example on Linux:
~/.local/share/peyawallet/config/config.json~/.local/share/peyawallet/wallets/
Example on Windows:
%APPDATA%\peyawallet\config\config.json%APPDATA%\peyawallet\wallets\
Local node blockchain data is intentionally left in Peya's native daemon directory so CLI and GUI can share the same chainstate:
- Linux:
~/.peya/ - Windows:
%APPDATA%\peya\(orC:\ProgramData\peya\when the daemon runs elevated/as a service)
Optional explorer integration:
- set
PEYA_EXPLORER_TX_URLto a tx URL template, for examplehttps://example.invalid/tx/{txid} - when unset, clicking a txid copies it instead of opening an external explorer
Translations (i18n)
ARB files:
lib/l10n/app_en.arblib/l10n/app_pl.arb
Add a new language by creating another ARB and rebuilding.
FFI bindings (ffigen)
Bindings are seeded in lib/native/wallet_wrapper_bindings.dart.
To regenerate from native/include/wallet_wrapper.h:
dart run ffigen