The Buzz mobile app is a Flutter client for iOS and Android that connects to a Buzz relay over WebSocket using the Nostr protocol. It is built with Dart SDKDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/block/buzz/llms.txt
Use this file to discover all available pages before exploring further.
^3.11.4, uses Riverpod and Hooks for state management, and shares the same Inter and GeistMono variable fonts and Catppuccin light/dark theme as the desktop app.
Active development. The mobile client is currently being wired up. Core infrastructure — state management, Nostr protocol, secure storage, and theming — is in place, but not all desktop features are available yet. Expect rapid iteration.
Tech stack
Framework
Flutter (Dart SDK
^3.11.4) — single codebase for iOS and Android.State management
hooks_riverpod ^3.0.3 + flutter_hooks ^0.21.3. All widgets extend HookConsumerWidget; no cross-feature imports except shared/.Protocol
nostr ^2.0.0 over web_socket_channel ^3.0.1. NIP-29 group chat and NIP-42 authentication.Security
flutter_secure_storage ^10.0.0 (Keychain/Keystore-backed) + pointycastle ^4.0.0 for cryptographic operations.Prerequisites
- Flutter SDK (Dart SDK
^3.11.4) - Xcode (for iOS) or Android Studio (for Android)
- Docker +
just(recommended — starts relay and simulator together)
Development setup
Run on an iOS simulator (recommended)
From the repo root — starts Docker services, the relay, and the iOS simulator together:This applies worktree-aware debug identity overrides automatically (see below), then runs
flutter run inside mobile/.For direct Flutter control (services must already be running):Worktree-aware debug identity
Debug builds from a git worktree get a unique app identifier keyed to the worktree directory name:- iOS:
com.buzz.buzzMobile.<slug> - Android:
xyz.block.buzz.mobile.<slug>
Buzz (my-branch)), or a short SHA when the worktree is detached. This means one worktree keeps exactly one installed app — and its login state — across branch switches, and builds from multiple worktrees install side by side.
just mobile-dev and just mobile-build-android apply these overrides automatically by running scripts/mobile-worktree-overrides.sh, which writes two gitignored files:
mobile/ios/Flutter/WorktreeOverrides.xcconfig— included by Debug builds onlymobile/android/worktree.properties— read by the debug build type only
flutter run development, run the script once per branch switch:
Buzz) and are never affected.
To remove stale worktree-suffixed installs from booted simulators and emulators:
Android release signing
Release builds require all upload-key inputs via environment variables:BUZZ_ANDROID_UPLOAD_* value is also set. Debug and development builds do not require any of these variables.
Code quality
Run all checks from the repo root:Key dependencies
Media capture and playback
Media capture and playback
| Package | Version | Purpose |
|---|---|---|
camera | ^0.12.0+2 | Camera access for image/video capture |
image_picker | ^1.1.2 | Photo/video picker from device library |
photo_manager | ^3.11.0 | Access device media assets |
video_player | ^2.10.1 | Inline video playback |
Communication and navigation
Communication and navigation
UI and content rendering
UI and content rendering
| Package | Version | Purpose |
|---|---|---|
gpt_markdown | ^1.1.6 | Render Markdown messages (including AI output) |
highlight | ^0.7.0 | Syntax highlighting in code blocks |
lucide_icons_flutter | ^3.1.0 | Icon set matching the desktop |
scrollable_positioned_list | ^0.3.8 | Efficient jump-to-message scrolling |
Shared assets
Shared assets
Architecture
HookConsumerWidget pattern throughout). The theme matches the desktop’s Catppuccin Latte (light) and Catppuccin Macchiato (dark) palette, and uses the same Grid spacing tokens for consistent layout. Feature modules are isolated — no cross-feature imports are allowed except through shared/.