White Noise next release

Lots of fixes, polish, and a few shiney new features!
White Noise next release

Video is in. Blocking now applies everywhere a blocked user could surface. The offline experience is complete. The White Noise app database is encrypted at rest. And three security issues in the Marmot Development Kit are closed.

If you missed the last release, you also got cross-conversation message search from the home screen and the ability to archive and unarchive chats. Both quietly changed how the app feels day to day, and both keep working in this release.

Video

You can now send and receive video in any conversation. Pick from your camera roll, send it encrypted end to end, play it inline. The video transfers correctly between any two devices on the network, not a workaround limited to a single phone. Long-press an image or video in the media modal to save it to your gallery.

Blocking, everywhere

The last release added the ability to block a user. This release makes blocking apply across the surface area where it matters. A blocked user is hidden from chat previews, message timelines, search results, group invites, and notifications. Their messages stop counting toward unread badges. Unblock and they come back. Block state is stored in an encrypted NIP-51 mute list, so the rule travels with your account across devices.

Offline awareness everywhere

The last release added an offline notice to the chat list. This one extends it to the rest of the app. When your device loses its connection, the notice appears on login and signup screens, profile screens, settings, relay configuration, and key package management. Actions that require a connection (adding a relay, publishing a key package, filing a bug report) are disabled until connectivity returns. The app now reflects its actual state at every screen.

Legacy key packages

When White Noise moved key packages to addressable events (kind:30443) in the last release, old kind:443 packages became legacy. This release surfaces them. The key packages screen labels legacy entries and lets you delete them specifically, preserving current packages untouched. The Marmot Development Kit’s acceptance window for legacy packages was extended through May 31, 2026 to give clients time to migrate.

Database encryption

The White Noise app database, which holds your aggregated message history, group state, and cached metadata, is now encrypted at rest using SQLCipher. The encryption key lives in the platform keychain. On first launch after this update, the app migrates your existing database to the encrypted format without data loss.

The MDK/MLS database that holds raw MLS message material was already encrypted. This release closes the remaining gap: the projection layer the app reads from is now encrypted too.

Security fixes

Three issues in the Marmot Development Kit were found and fixed.

First: the memory storage layer used LRU caches for dedup records and exporter secrets. Under message traffic, those caches could evict entries silently. A dropped dedup record means a replayed message could be accepted. A dropped exporter secret means past messages in that epoch become unreadable. Both caches are now unbounded maps that retain all entries.

Second: the Marmot Development Kit could accept a commit that removed all admins from a group. The commit would succeed on the receiver side, leaving a group nobody could administer. The receiver now validates the post-commit admin set before accepting any commit.

Third: when creating a group, the creator’s signing key was generated and stored before invitee key packages were validated. If validation failed, the key persisted as orphaned material. The order is corrected: validate first, generate after.

Marmot Development Kit 0.8.0 also includes a wave of internal hardening that does not directly change White Noise behavior, including debug-output redaction, secret-serialization guards, rumor-ID verification, welcome size bounds, and keyring rotation on fresh database creation. The full list is in the MDK changelog.

The refactor underneath

Over the past month, whitenoise-rs (the Rust library that powers the app) went through a 15-phase rearchitecture. A single global object held all state for every account on the device. It has been broken apart: shared infrastructure (relays, database connection, stream managers) lives in one layer, and each account has its own session with its own state.

The practical effects are in the next phases. This structure enables multi-device support, makes the codebase testable without spinning up a full process, and is what made the per-account database split tractable. The foundation is now correct.

Smaller things

  • Contact actions renamed from “Add/Remove as contact” to Follow and Unfollow, consistent with how Nostr describes the relationship

  • GrapheneOS notification icon fixed; the app icon now shows correctly in the status bar

  • Foreground service restarts automatically after a device reboot, so notifications work from the first relay connection

  • Camera permission loop in the QR scanner fixed: denying access no longer triggers repeated prompts

  • Chat list filter chips now hide with the search field, stay visible in archive view, and have correct spacing on small screens

  • Incoming message bubble contrast and dark mode colors corrected

Contributors

  • Jeff Gardner, Pepi, Danny Morabito, Mubarak Auwal, Javier Montoya, emir yorulmaz, Nikita L., Mehmet Efe Umit, Sergey, hzrd149, leesalminen.

Get the update

Download from the GitHub releases page. No phone. No email. Just keys.




Release notes: vNEXT release notes Report issues: marmot-protocol/whitenoise


Write a comment
No comments yet.