Chat without limits. Online + offline mesh, live audio/video, voice notes, file sharing — all in one immersive, minimal & cute app.
Mino Chat is an open-source, immersive chat app inspired by WhatsApp, Telegram, and Line. Built with Flutter + Kotlin + Supabase + Render. Made with love by Lost Weeds (Abhinit), owned by X Hub.
- Google Sign-In only — no OTP, no email/password, no phone. One tap and you're in.
- 1:1 + group chats — up to 500 members per group
- Rich messages — text, replies, forwards, edits, deletes, reactions, polls, contacts, locations
- Voice notes — press-and-hold to record, waveform preview, lock mode, up to 10 min
- File sharing — all formats, up to 2 GB per file, progress + previews (image / video / pdf / archive / doc / audio)
- Stories — image / video / text stories with 24h expiry, color picker, reactions
- Channels — broadcast channels for one-to-many publishing
- Calls — 1:1 and group audio/video calls (WebRTC)
- Live rooms — audio rooms (Clubhouse-style), video broadcasts, screen share — up to 500 viewers
- BLE chat — discover + chat with nearby Mino users without internet
- BLE file transfer — send files peer-to-peer over Bluetooth
- Wi-Fi Direct — faster file transfer for larger files via
nearby_connections - Foreground service — keeps mesh alive in background (Android)
- Lavender Mint theme — soft, calm, modern, cute
- Dark mode — automatic + manual toggle
- Adaptive splash + icons — Android 12+ SplashScreen API
- Read receipts, typing indicators, presence
- Pin / mute / archive chats
- Encrypted local storage (Hive + secure storage)
- i18n — English, Hindi, Spanish, Arabic (RTL-ready)
- Offline-first — messages queued and synced when back online
┌──────────────────────────────────────────────────────────┐
│ Flutter App │
│ Riverpod · GoRouter · Hive · Freezed · Material 3 │
└───────┬───────────────────────────────┬───────────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────────┐
│ Supabase │ │ Render │
│ ────────────── │ │ ────────────────── │
│ • Auth (Google) │ │ • WebRTC signaling │
│ • Postgres + │ │ • SFU-ready (swap │
│ Realtime │ │ for LiveKit) │
│ • Storage │ │ • WebSocket /ws │
│ • Edge Functions│ │ │
└──────────────────┘ └──────────────────────┘
│
▼
┌──────────────────┐
│ Android Native │
│ ────────────── │
│ • BLE GATT │
│ • Foreground │
│ services │
│ • Google Auth │
└──────────────────┘
Why this split?
- Supabase owns auth, persistent data, realtime pub/sub, and file storage — managed, scalable, free tier covers the entire small-group use case.
- Render runs only the WebRTC signaling server (and optionally an SFU). It's cheap to host and easy to scale horizontally.
- Android native (Kotlin) handles BLE mesh + foreground services — things Flutter plugins alone can't keep alive reliably.
- Flutter 3.22+
- Dart 3.4+
- Android SDK 34 (minSdk 24)
- A Supabase project
- A Google Cloud OAuth client (Android + Web)
- (Optional) A Render account
git clone https://github.com/xhub/mino_chat.git
cd mino_chat
flutter pub getcp .env.example .env
# Fill in your Supabase URL + anon key + Google OAuth client IDsOr pass via --dart-define:
flutter run \
--dart-define=SUPABASE_URL=... \
--dart-define=SUPABASE_ANON_KEY=... \
--dart-define=GOOGLE_WEB_CLIENT_ID=...# Install supabase CLI: https://supabase.com/docs/guides/cli
supabase db pushOr paste supabase/migrations/0001_initial.sql into the Supabase SQL editor.
- Google Cloud Console → APIs & Services → Credentials → Create OAuth client ID
- Application type: Android
- Package name:
com.xhub.minochat - SHA-1:
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
- Supabase dashboard → Authentication → Providers → Google → enable, paste the Web client ID + secret
- Add the Web client ID to
.envasGOOGLE_WEB_CLIENT_ID
cd render_server
# Connect your GitHub repo on Render dashboard, it'll auto-detect render.yaml
# Or use the Render CLI:
render deployflutter runflutter build apk --release
# Output: build/app/outputs/flutter-apk/app-release.apkmino_chat/
├── android/ # Kotlin native (BLE, foreground services, MainActivity)
│ └── app/src/main/
│ ├── kotlin/com/xhub/minochat/
│ │ ├── MainActivity.kt
│ │ ├── ble/MinoBleBridge.kt # BLE GATT server + client
│ │ ├── service/MinoMeshService.kt # Foreground mesh keep-alive
│ │ └── voice/MinoVoiceService.kt # Foreground voice/live
│ └── res/ # Icons, splash, themes, manifest
├── lib/ # Flutter / Dart
│ ├── core/ # Constants, theme, router, utils, errors
│ ├── data/ # Models, Supabase repository, storage
│ ├── features/
│ │ ├── auth/ # Google Sign-In only (no OTP)
│ │ ├── chat/ # 1:1 + group + message bubbles + list
│ │ ├── voice/ # Voice recorder bar + waveform
│ │ ├── files/ # File picker + attachment helpers
│ │ ├── live/ # Audio rooms + video broadcast
│ │ ├── bluetooth/ # BLE mesh screens + controller
│ │ ├── stories/ # Story viewer + camera
│ │ ├── channels/ # Broadcast channels
│ │ ├── calls/ # 1:1 + group calls
│ │ ├── profile/ # User profile
│ │ └── settings/ # Settings + privacy + themes
│ ├── widgets/ # Shared widgets
│ └── main.dart
├── assets/
│ ├── images/logo.png # Mino Chat logo (1254×1254)
│ ├── fonts/ # Plus Jakarta Sans (optional)
│ └── sounds/
├── l10n/ # ARB files (en, hi, es, ar)
├── supabase/
│ ├── migrations/ # SQL schema + RLS + RPC + triggers
│ └── functions/ # Edge functions (fcm-token, push-fanout, live-schedule)
├── render_server/ # Node.js WebRTC signaling + Dockerfile
├── .github/
│ ├── workflows/ # CI/CD
│ └── ISSUE_TEMPLATE/
├── pubspec.yaml
├── analysis_options.yaml
├── render.yaml
└── README.md
- Google Sign-In only — no passwords to leak
- Row-Level Security on every Supabase table — users can only read/write what they're a member of
- Encrypted local storage via
flutter_secure_storage+ Hive - No phone number required at any point
- Read receipts and last-seen are toggleable in Settings
- E2E encryption for secret chats is on the roadmap (see ROADMAP.md)
See ROADMAP.md for the full plan. Highlights:
- End-to-end encrypted "secret chats" (Signal protocol)
- Disappearing messages
- Multi-device sync
- iOS support (currently Android-only)
- Desktop (macOS / Windows / Linux)
- Custom stickers + GIF maker
- LiveKit integration for full SFU
- Web app (Flutter Web)
We welcome contributions! Please read CONTRIBUTING.md and our Code of Conduct before opening a PR.
Quick start:
- Fork → branch
feat/your-feature flutter analyzemust passflutter testmust pass- Open a PR using the template
MIT — see LICENSE.
- Made by: Lost Weeds (Abhinit) —
lostweeds - Owned by: X Hub
- Inspired by: WhatsApp, Telegram, Line, Signal
- Built with: Flutter, Kotlin, Supabase, Render, WebRTC, Flutter Blue Plus, LiveKit Client, and many amazing open-source packages
Mino Chat · Made with 💜 by Lost Weeds · © X Hub