Ask questions about this project using DeepWiki AI
Your private ecash wallet on Bitcoin
elcaju.me β’ Installation β’ Features β’ Technologies
ElCaju is a Cashu wallet (ecash on Bitcoin) with Cuban identity, brother of LaChispa (Lightning). Designed to offer privacy, offline transactions, and a warm tropical experience.
Cashu is an ecash protocol that enables Bitcoin transactions with maximum privacy. Cashu tokens are:
- Private: Fungible and untraceable
- Offline: Store and send tokens without internet connection
- Instant: No waiting for blockchain confirmations
| Feature | Description |
|---|---|
| π Total Privacy | Fungible ecash tokens, no traceable history |
| π΄ Works Offline | Store and share tokens without internet |
| β‘ Lightning Bridge | Deposit and withdraw sats via Lightning Network |
| π¦ Multi-Mint | Connect to multiple Cashu mints simultaneously |
| π± Multi-Unit | Support for sat, USD, EUR and more |
| π Your Seed, Your Money | Backup with 12 words (BIP39) |
| π Optional PIN | Protect access to your wallet |
| π Bilingual | Spanish and English |
| π Friendly UX | Visual effects and confetti when receiving funds |
- Flutter 3.27+: Cross-platform framework
- Dart: Programming language
- Provider: State management
- QR Flutter: QR code generation
- cdk-flutter: Cashu Development Kit (Rust FFI)
- SQLite: Local persistence via cdk-sqlite
- Flutter Secure Storage: Secure storage for seed and PIN
- Cashu: NUT-00 to NUT-13 (ecash protocol)
- Lightning Network: Deposits and withdrawals via BOLT11
- BIP39: Seed phrase generation
- Flutter SDK (>=3.27.0)
- Dart SDK (>=3.6.0)
- Android Studio with Android SDK
- Android NDK 26.3+ (install via Android Studio > SDK Manager > SDK Tools)
- Rust toolchain (>=1.85.0)
git clone https://github.com/Forte11Cuba/elcaju.git
cd elcajuflutter pub get# Install Rust if not already installed
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Update to latest stable (requires >= 1.85.0)
rustup update stable
# Install Android targets
rustup target add aarch64-linux-android # arm64-v8a (modern devices)
rustup target add armv7-linux-androideabi # armeabi-v7a (older devices)
rustup target add x86_64-linux-android # x86_64 (emulators)Create or edit ~/.cargo/config.toml with your NDK path:
[target.x86_64-unknown-linux-gnu]
linker = "gcc"
rustflags = ["-C", "link-arg=-fuse-ld=bfd"]
[target.aarch64-linux-android]
linker = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
[target.armv7-linux-androideabi]
linker = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
[target.x86_64-linux-android]
linker = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang"
[env]
CC_armv7-linux-androideabi = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
AR_armv7-linux-androideabi = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
CC_x86_64-linux-android = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android24-clang"
AR_x86_64-linux-android = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
CC_aarch64-linux-android = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
AR_aarch64-linux-android = "/path/to/Android/Sdk/ndk/26.3.11579264/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"Note: Replace
/path/to/Android/Sdkwith your actual Android SDK path (usually~/Android/Sdkon Linux or~/Library/Android/sdkon macOS).
The cdk_flutter native libraries must be compiled manually:
# Navigate to cdk_flutter rust directory
cd ~/.pub-cache/git/cdk_flutter-*/rust
# Build for each architecture
cargo build --release --target aarch64-linux-android
cargo build --release --target armv7-linux-androideabi
cargo build --release --target x86_64-linux-android
# Copy libraries to project
mkdir -p /path/to/elcaju/android/app/src/main/jniLibs/{arm64-v8a,armeabi-v7a,x86_64}
cp target/aarch64-linux-android/release/libcdk_flutter.so \
/path/to/elcaju/android/app/src/main/jniLibs/arm64-v8a/
cp target/armv7-linux-androideabi/release/libcdk_flutter.so \
/path/to/elcaju/android/app/src/main/jniLibs/armeabi-v7a/
cp target/x86_64-linux-android/release/libcdk_flutter.so \
/path/to/elcaju/android/app/src/main/jniLibs/x86_64/flutter run# Android APK (includes all architectures, ~55MB)
flutter build apk --release
# Android App Bundle (recommended for Play Store)
flutter build appbundle --releaseFor faster builds targeting only modern devices:
# Build only arm64 library
cargo build --release --target aarch64-linux-android
# Copy to project
cp target/aarch64-linux-android/release/libcdk_flutter.so \
android/app/src/main/jniLibs/arm64-v8a/
# Build APK (~40MB)
flutter build apk --releaseβββββββββββββββββββββββββββββββββββββββββββ
β Flutter UI (Dart) β
β Provider + Streams + Intl β
βββββββββββββββββββββββββββββββββββββββββββ€
β WalletProvider / SettingsProvider β
β (Multi-unit: Map<mintUrl:unit>) β
βββββββββββββββββββββββββββββββββββββββββββ€
β cdk-flutter (FFI) β
β flutter_rust_bridge v2.11.1 β
βββββββββββββββββββββββββββββββββββββββββββ€
β Rust Core (CDK) β
β Cashu 0.13.4 + SQLite + Bitcoin β
βββββββββββββββββββββββββββββββββββββββββββ
elcaju/
βββ lib/
β βββ main.dart # Entry point
β βββ core/
β β βββ constants/ # Colors, dimensions
β β βββ theme/ # App theme
β β βββ utils/ # Formatters, validators
β βββ providers/
β β βββ wallet_provider.dart # Wallet logic
β β βββ settings_provider.dart# Preferences and PIN
β βββ screens/
β β βββ 1_splash/ # Loading screen
β β βββ 2_onboarding/ # Create/restore wallet
β β βββ 3_home/ # Main screen
β β βββ 4_receive/ # Receive tokens
β β βββ 5_send/ # Send tokens
β β βββ 6_mint/ # Deposit via Lightning
β β βββ 7_melt/ # Withdraw to Lightning
β β βββ 8_settings/ # Settings
β βββ widgets/
β β βββ common/ # Buttons, cards, etc.
β β βββ effects/ # Confetti and animations
β βββ l10n/ # Translations ES/EN
βββ assets/
βββ img/ # Logo and assets
| Feature | Implementation |
|---|---|
| Seed Phrase | Stored with Flutter Secure Storage (native encryption) |
| PIN | Secure hash, local verification |
| Local Data | SQLite with proofs encrypted by Cashu protocol |
| No Tracking | We don't collect user data |
| Open Source | 100% auditable |
β οΈ Backup your seed phrase (12 words). Without it, you won't be able to recover your funds if you lose your device.
| Platform | Status | Minimum Version |
|---|---|---|
| β Android | Supported | API 24 (Android 7.0) |
| π§ iOS | Coming soon | iOS 12.0+ |
| π§ Web | Coming soon | - |
ElCaju comes preconfigured with the Cuba Bitcoin mint:
https://mint.cubabitcoin.org
You can add other Cashu mints from the settings.
Contributions are welcome!
- Fork the repository
- Create a branch for your feature (
git checkout -b feature/new-feature) - Commit your changes (
git commit -m 'Add new feature') - Push to the branch (
git push origin feature/new-feature) - Open a Pull Request
Open an issue with:
- Problem description
- Steps to reproduce
- Android version/device
- Relevant logs
This project is under the MIT License - see the LICENSE file for more details.
- Cashu - Ecash protocol
- cdk-flutter - Cashu Development Kit
- Cashu4Community - Global Cashu community
- Cuba Bitcoin - Cuban Bitcoin community
Made with π§‘ by Forte11
Cashu4Community β’ Cuba Bitcoin β’ elcaju.me





