Minimal Flutter app named Aether with a Discord-inspired dark theme.
Run:
flutter pub get
flutter runIf Google Drive backup/restore shows PlatformException(sign_in_failed, 10: ...), Google Sign-In is not configured for the current Android app id/signing key.
- Ensure the Android package name matches
android/app/build.gradle.kts(applicationId). - In Firebase Console (Project Settings → Your apps → Android), add your SHA-1 (and SHA-256) certificate fingerprints.
- Enable Google Sign-In for the project (Firebase Authentication → Sign-in method → Google).
- Download the updated
google-services.jsonand replaceandroid/app/google-services.json. - Rebuild the app.
To print the debug SHA-1 on Windows:
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore -storepass android -keypass android | findstr /C:"SHA1"For stable GitHub Release APKs (and stable Google Sign-In), configure a real release keystore.
Prereq: Java/JDK 17 (needed for Gradle + keytool). On Windows you can install it with:
winget install -e --id EclipseAdoptium.Temurin.17.JDK- Create a keystore (run from the repo root):
keytool -genkeypair -v -keystore android/aether-release.jks -alias aether -keyalg RSA -keysize 2048 -validity 10000- Create
android/key.properties(do not commit it). Start from:
android/key.properties.example
- Add the keystore SHA-1 to Firebase (Project settings → Android app → SHA certificate fingerprints):
keytool -list -v -keystore android/aether-release.jks -alias aether | findstr /C:"SHA1"- Re-download
android/app/google-services.jsonfrom Firebase and rebuild.
Build the release APK:
flutter clean && flutter pub get && flutter build apk --releaseThe app talks to the Rust backend in backend_rust/ via HTTP + WebSocket.
Cloud: use your deployed HTTPS URL (example: https://aether-swix.onrender.com)
If you're running via Docker Compose, the backend is published on a random free host port (so it won't collide with whatever is already using 8080).
Find the chosen port with:
docker compose port backend 8080Then use that port in the app, e.g. Android emulator: http://10.0.2.2:<PORT>.
If you're running the Rust backend directly (e.g. cargo run in backend_rust/), it defaults to port 8080 (override via PORT).
You can bake the backend URL into the build with --dart-define:
flutter build apk --release --dart-define=AETHER_BASE_URL=https://YOUR_BACKEND_HOSTThe WebSocket URL is derived from the same base URL (ws:// or wss://).
This is destructive and intended for local development.
-
Option A (fastest): wipe the local Postgres Docker volume
docker compose down -vdocker compose up -d
-
Option B (no volume delete): call the backend admin wipe endpoint
- Set
ADMIN_RESET_TOKENin your environment (docker-compose passes it through) - Find your backend port with
docker compose port backend 8080 - Then run:
./tool/reset_dev_db.ps1 -ViaEndpoint -BaseUrl http://localhost:<PORT> -IUnderstandThisWillDeleteEverything
- Set