Stoatally
A native Android client for the Stoat chat platform, built with Kotlin and Jetpack Compose.
Features
Built from the ground up as a native Android app. No wrappers, no web views for core functionality.
Full API Coverage
All 121 Stoat API endpoints implemented. Every screen wired to live data — nothing stubbed.
Message Search
Search across channels or entire servers. Filter by date, author, pinned status, and sort order.
Server Administration
Role editor, permission matrix, ban and kick management, channel creation and reordering.
Push Notifications
FCM and UnifiedPush support via stoatcord-bot relay. Separate channels for mentions, DMs, and general.
Voice & Video
LiveKit integration for voice and video calls within channels and direct messages.
Rich Media
Image galleries, video and audio playback, file attachments with inline previews and download.
Custom Emoji
Full custom emoji rendering in messages, reactions, and autocomplete. Server emoji management.
Self-Hosted
Connect to any Stoat or Revolt-compatible instance. Not locked to a single server.
Discord to Stoat, bridged
A TypeScript bot running on Bun that connects Discord servers to Stoat. Bridge channels, migrate servers, relay push notifications, and export message history.
Discord Bridge
Bidirectional message relay between linked Discord and Stoat channels. Edits, deletes, and attachments sync in real time.
Server Migration
Clone channel structures, roles, and emoji from a Discord server into Stoat with a guided wizard.
Message Archive
Export Discord message history with pagination and import into Stoat channels with original attribution.
Push Relay
FCM and WebPush notification delivery for Stoat messages. VAPID-authenticated, self-hostable.
HTTP API
21+ endpoints for bridge management, diagnostics, migration status, and push subscription handling.
Reliability
Systematic fixes over the upstream codebase. Focused on stability, null-safety, and responsiveness.
Server join sync, blocked reply visibility, timeout races, deep link handling, scroll position, pending message management
Eliminated force-unwrap operators across message rendering, permission checks, and cache access
Replaced blocking calls with coroutines in user profiles, settings, and data loading
In-place message edits and prepends instead of full list recomposition. LRU eviction for caches
Get Started
Download
Grab the latest APK from GitHub Releases.
Sign in
Connect to any Stoat or Revolt-compatible instance.
Done
Start chatting. All features available immediately.