· via Hacker News – Front Page (hnrss.org)
GrapheneOS rewrites its Messages app with Material 3, new controls and security fixes
GrapheneOS has released version 13 of its Messages app, a full rewrite in Jetpack Compose and Material 3 that adds conversation controls and tightens privacy defaults.
A ground-up rewrite
GrapheneOS has shipped version 13 of its Messages app, a near-total rewrite that replaces the legacy interface with one built on Jetpack Compose and Material 3. According to the release notes on GitHub, every screen has been rebuilt, and the app now offers a two-pane conversation layout on large screens, a new adaptive icon with a monochrome variant, and fresh onboarding that covers SMS privacy, permissions and default-app setup. The release surfaced on Hacker News's front page on September 11, 2026.
The onboarding is notable for what it tells users up front: SMS is unencrypted, and the app recommends end-to-end encryption for sensitive messages.
New conversation controls
The conversation list picks up long-requested features. Conversations can be pinned, notifications can be snoozed for 1, 8 or 24 hours or indefinitely, and threads can be marked as unread from the menu or with a swipe. Swipe gestures also archive and unarchive, quick actions hang off conversation avatars, and redesigned multi-select tools handle archiving, deletion, blocking and notification settings. The list now displays indicators for unread, pinned, snoozed, notification-muted, work-profile and pending-MMS conversations.
Inside threads, message bubbles, grouping and selection have been rebuilt. Users can select multiple messages for deletion, open a full-screen details view with copyable sender, recipient, timestamp, delivery status and size information, and watch an SMS segment and character counter while typing. MMS subjects can be added, edited or removed from the overflow menu, participants can be added to existing conversations or grouped from the new-chat screen, and a redesigned recipient picker organises contacts alphabetically and handles multiple numbers and email-style addresses. A blocked-sender banner includes a one-tap unblock action.
Media handling was rewritten as well: a new picker with photo and video capture and Android's embedded photo picker, audio recording with slide-to-cancel and a hands-free lock, attachment captions, a photo viewer with pinch-to-zoom, and a vCard viewer that can save contacts. Sharing flows through a new picker with search, recent conversations and multi-select, the same picker used by forwarding and the widget.
Privacy and security hardening
The release tightens the app's security posture in several areas. YouTube link previews are now opt-in and disabled by default. Shared-content validation rejects file URIs and private app files and verifies content-URI permissions, with text read from content URIs receiving the same checks. Widget receivers are no longer exported, widget intents are restricted to the app, and pending intents use FLAG_IMMUTABLE wherever mutability is not required.
Parser-level work adds allocation limits on EXIF APP1, MMS PDU and MMS content-type parsing, fixes GIF null dereferences and missing dimension checks before native transcoding, and pulls in upstream fixes for the AOSP vCard parser. A new Privacy section in settings consolidates the relevant options, and existing per-conversation notification settings are preserved across the update.
Reliability, notifications and accessibility
The changelog lists crash fixes for the widget, failed SMS database inserts, declined-call quick responses, settings for unsaved numbers and share intents. Notification behaviour improves too: incoming SMS imports immediately, failed-message notifications deliver correctly, unread notifications survive reboots, blocked conversations stay silent, inline replies no longer open the home screen, and sync no longer overwrites archive changes or notifies about deleted conversations.
Secondary users now see message content in notifications and are told when a pending MMS must be retrieved by the device's owner user, after which it becomes available to all users. Work-profile conversations are labelled. On accessibility, screens and rows carry screen-reader labels, timestamps announce full weekday names, copying message details works as an accessibility action, and sending a message produces an announcement and a sound.
The project also expanded unit and instrumented tests across the new data, domain and Compose UI layers, with tests, builds, static analysis and license checks running on every pull request. The app now requires minSdk 36, targets SDK 37, and builds with Kotlin 2.4.10, Android Gradle Plugin 9.3.2 and Gradle 9.7.1.
Why it matters
GrapheneOS is a privacy-hardened Android distribution, and its Messages app handles SMS and MMS for its users, so a rewrite of this scale touches everyday communication for the entire install base. Moving to Compose and Material 3 modernises a core app, while defaults such as opt-in YouTube previews reflect the project's position that network-fetched link previews are a privacy leak worth avoiding. For an operating system that positions itself as an alternative to Google's stock stack, shipping a mature and well-tested messaging client matters nearly as much as the OS itself.
- #grapheneos
- #android
- #messaging
- #open-source
- #material-3
- #privacy