A native Android Nostr client built with Jetpack Compose and Material Design 3. Mycelium connects to relays via WebSocket and delivers decentralized social content through user-controlled relay configurations.
- Install
- Features
- NIP Support
- Architecture
- Build from Source
- Dependencies
- Contributing
- Credits
- License
Download the latest APK from GitHub Releases.
Auto-update via Obtainium using the repo URL:
https://github.com/TekkadanPlays/mycelium-android
Or the update manifest:
https://raw.githubusercontent.com/TekkadanPlays/mycelium-android/main/obtanium.json
Zapstore availability is planned for a future release.
F-Droid packaging is planned for a future release.
- Home feed with global and following filters, infinite scroll, and repost deduplication
- Forum-style topics with threaded reply chains
- Thread overlay stacks for chained exploration without losing scroll position
- Long-form article rendering with markdown support
- Live activity discovery and HLS playback with picture-in-picture
- Profile-based relay organization with per-relay health tracking and auto-blocking
- Slot utilization dashboard and relay discovery
- Three background connection modes: Always On, Adaptive, and When Active
- Encrypted direct messages with conversation list
- Lightning zaps via Wallet Connect or external wallet
- Embedded self-custodial Lightning wallet with encrypted seed storage and NWC service
- Relay selection for all compose flows with inbox/outbox awareness
- Auto-save drafts, note scheduling, and offline retry queue
- Blossom media upload with auth events
- Automatic URL tracking parameter sanitization and EXIF metadata stripping
- Live markdown syntax highlighting and decorative Unicode text styles
- Tabbed Notes/Replies/Media views with collapsible profile header
- Multi-account support with Amber (external signer) and nsec login
- 10-tab filtered view with Android push notifications across 8 channels
- Background DM relay checks alongside standard inbox polling
Mycelium implements the following Nostr Implementation Possibilities:
| NIP | Name | Usage in Mycelium |
|---|---|---|
| NIP-01 | Basic Protocol | Event model, relay communication, subscription filters |
| NIP-02 | Follow List | Kind-3 contact lists for Following feed filter |
| NIP-04 | Encrypted DM (v1) | Legacy DM decryption (superseded by NIP-17) |
| NIP-05 | DNS Identifiers | NIP-05 verification badge on profiles |
| NIP-10 | Reply Threading | e/E tag parsing for root/reply chain resolution |
| NIP-11 | Relay Info | Relay metadata display, icon, payment/auth detection |
| NIP-17 | Private DMs | Gift-wrapped encrypted DMs with dedicated DM relay routing |
| NIP-19 | Bech32 Entities | npub/nsec/note/nevent/nprofile encoding and inline rendering |
| NIP-22 | Comments | Kind-11 topics and kind-1111 threaded comments |
| NIP-23 | Long-Form Content | Kind-30023 article rendering with markdown |
| NIP-25 | Reactions | Kind-7 reactions with custom emoji support |
| NIP-30 | Custom Emoji | Emoji pack rendering in reactions and note content |
| NIP-33 | Parameterized Replaceable | Addressable events for relay sets, settings, articles |
| NIP-42 | Relay Authentication | AUTH challenge-response for restricted relays |
| NIP-44 | Encrypted Payloads (v2) | Modern encryption for NIP-17 gift wraps |
| NIP-47 | Wallet Connect | NWC for zap payments and embedded wallet NWC service |
| NIP-53 | Live Activities | Live stream discovery and HLS playback |
| NIP-55 | Android Signer | Amber external signer integration for key management |
| NIP-57 | Zaps | Lightning zap requests and receipt display |
| NIP-58 | Badges | Badge display on profiles |
| NIP-65 | Relay Lists | Kind-10002 inbox/outbox relay discovery and outbox feed routing |
| NIP-66 | Relay Discovery | Relay monitor data for onboarding and relay discovery |
| NIP-78 | App-Specific Data | Kind-30078 synced settings across clients |
| NIP-86 | Relay Management | Relay management API support |
| NIP-88 | Polls | Poll creation, voting, and result display |
| NIP-89 | Recommended Apps | Client tag for app discovery |
| NIP-92 | Media Attachments | imeta tag parsing for inline media metadata |
| NIP-96 | File Storage | Blossom media upload with BUD-01/02/04 |
Single-activity MVVM with Jetpack Navigation Compose.
| Module | Package | Role |
|---|---|---|
app/ |
social.mycelium.android |
Android application — UI, ViewModels, repositories, services, Room DB |
cybin/ |
com.example.cybin |
Nostr protocol library — events, crypto, NIP implementations, relay transport |
Cybin is included via Gradle composite build (includeBuild) — changes reflect immediately.
See docs/ for detailed architecture, relay system, navigation, and data model documentation.
Requirements: JDK 11+, Android SDK (compileSdk 36, minSdk 35)
git clone https://github.com/TekkadanPlays/mycelium-android.git
cd mycelium-android
./gradlew assembleRelease
adb install app/build/outputs/apk/release/app-release.apk| Library | Version | Purpose |
|---|---|---|
| Kotlin | 2.2.0 | Language |
| Ktor | 3.4.1 | HTTP + WebSocket (CIO engine) |
| Compose BOM | 2024.12.01 | UI framework |
| Coil | 2.5.0 | Image loading |
| Media3 | 1.3.1 | Video/livestream playback |
| secp256k1-kmp | 0.22.0 | Nostr cryptography |
| lightning-kmp | 1.11.5-SNAPSHOT | Embedded Lightning node |
| Kotlinx Serialization | 1.7.3 | JSON parsing |
| Room | 2.7.1 | Local database |
See CONTRIBUTING.md for guidelines. For AI agents, see AGENTS.md and CLAUDE.md.
- Amethyst / Quartz — Reference Nostr client architecture and outbox model
- NextPlayer — Video gesture system
- TinderStateMachine — Relay connection state machine
- nostr.watch — NIP-66 relay discovery data
- lightning-kmp / Phoenix — Embedded Lightning wallet (Apache 2.0)
- PureLink-Android — URL sanitization (MIT)
- Prism — Scheduling, drafts, image stripping, Blossom upload patterns
MIT — see LICENSE.md. Lightning wallet components from ACINQ are Apache 2.0 (included in LICENSE.md).