A voice memos-like for Android and iOS. Written in Flutter. Transcription on iOS uses the native transcription APIs (mostly on-device) and on Android, uses Vosk. The codebase is still quite messy, but contributions welcome!
![]() | ![]() | ![]() |
This project is AGPLv3 but with an exception for the App Store. Learn More
- Install flutter
flutter run lib/main.dart
Place a 1024x1024 icon.png in assets/icon/icon.png and run
flutter pub run flutter_launcher_icons:main android/key.properties:
storePassword=keystore password keyPassword=key password keyAlias=key alias storeFile=/keystore/location For continuous integration:
| Env Var | Value |
|---|---|
| APPLE_ID | apple account email" |
| APP_IDENTIFIER | ios com.blabla.blabla |
| PLAY_APP_IDENTIFIER | android com.blablabla.bla |
| ITC_TEAM_ID | documented in fastlane |
| TEAM_ID | documented in fastlane |
| MATCH_GIT | github SSH URI for fastlane match |
| MATCH_PASSWORD | documented in fastlane |
| FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD | app specific password for fastlane |
| FASTLANE_USER | documented in fastlane |
| FASTLANE_PASSWORD | documented in fastlane |
| CONNECT_KEY | app store connect .p8 file contents |
| CONNECT_KEY_ID | app store connect key id |
| CONNECT_ISSUER_ID | app store connect key issuer id |
| GOOGLE_PLAY_JSON_CONTENT | base64 encoded json keys for google play fastlane |
| KEYSTORE | base64 encoded keystore.jks |
| KEY_PROPERTIES | key.properties seen above |
| SSH_PRIVATE_KEY | for github access |
| SENTRY_DSN | for sentry logging |
For local deployment, populate the following .env files:
ios/fastlane/.env:
MATCH_GIT=... APP_IDENTIFIER=... CONNECT_KEY_ID=... CONNECT_ISSUER_ID=... APPLE_ID=... FIRST_NAME=... LAST_NAME=... PHONE_NUMBER=... EMAIL_ADDRESS=... android/fastlane/.env:
PLAY_APP_IDENTIFIER=... .env:
SENTRY_DSN=... You can then use ./deploy_ios.sh and ./deploy_android.sh to deploy to the app stores.
ios/$ bundle update fastlane android/$ bundle update fastlane When running fastlane match development --generate_apple_certs, make sure to specify * for the bundle id, so that it can make provisioning profiles both for the .debug bundle identifier and the main one.


