Secure private self-hosted end-to-end encryption messaging app.
For Whisper server, see whisper-server repository.
Also see Wiki!
![]() |
![]() |
![]() |
You can download the app here in the releases.
- basic_utils
- used for cryptography
- bcrypt
- used for password hashing
- crypto
- used for cryptography
- cryptography
- used for cryptography
- dart_jsonwebtoken
- used for JWT token handling
- easy_localization
- used for app internationalization
- email_validator
- used for email format validation
- flutter_colorpicker
- used for color selection in UI
- flutter_launcher_icons
- used for generating app icons
- flutter_local_notifications
- used for local push notifications
- fluttertoast
- used for showing toast messages
- hive
- used for local data storage
- http
- used for HTTP requests
- json_annotation
- used for JSON serialization annotations
- jwt_decoder
- used for JWT token decoding
- local_auth
- used for biometric authentication
- mobile_scanner
- used for QR code scanning
- page_transition
- used for custom page transitions
- path_provider
- used for accessing device file system paths
- pointycastle
- used for cryptographic algorithms
- provider
- used for state management
- qr_code_scanner_plus
- used for enhanced QR code scanning
- sprintf
- used for string formatting
- url_launcher
- used for launching URLs
- vibration
- used for device vibration feedback
- whisper_openapi_client_dart
- used for API communication with Whisper server
- whisper_websocket_client_dart
- used for real-time WebSocket communication with Whisper server
- flutter_test
- used for unit and widget testing
- flutter_lints
- used for code linting and style enforcement
- hive_generator
- used for generating Hive type adapters
- build_runner
- used for code generation
- run
dart run build_runner buildto generate code+
- json_serializable
- used for generating JSON serialization code
- flutter_launcher_icons
- used for generating app icons
- run
dart run flutter_launcher_iconsto generate icons - see configuration file flutter_launcher_icons.yaml
- Firebase
- used for push notifications when user is offline
- see Firebase setup for Flutter and Firebase Cloud Messaging for Flutter for more details how to implement this
- app specific configuration files are not included in the repository, you need to create them yourself if you plan self host Whisper (refer to whisper-server repository for more details)
The application uses GitHub Actions to automatically build and release the APK file when pushing to the main branch. For this process to work correctly, the following secret keys must be set in the repository settings (Settings > Secrets and variables > Actions):
FIREBASE_JSON_BASE64- base64 encoded contents of thefirebase.jsonfileFIREBASE_OPTIONS_DART_BASE64- base64 encoded contents of thelib/firebase_options.dartfile (required)GOOGLE_SERVICES_JSON_BASE64- base64 encoded contents of theandroid/app/google-services.jsonfile
These secret keys will be used during application build to generate the necessary Firebase configuration files, which are not included in the repository for security reasons. The base64 encoding ensures safe transmission and prevents issues with special characters.
- In the repository, go to Settings > Secrets and variables > Actions
- For each configuration file, encode it to base64 format:
- Linux/macOS:
base64 -w 0 < firebase.json(copy the output) - Windows:
[Convert]::ToBase64String([IO.File]::ReadAllBytes("firebase.json"))(in PowerShell)
- Linux/macOS:
- Click on "New repository secret" for each of the secret keys listed above
- Paste the base64 encoded content as the secret key value
After setting these secret keys, the workflow will automatically build the APK on every push to the main branch and create a new GitHub Release with the version according to pubspec.yaml.


