Marmot Protocol Monthly Recap: February 2026
Published on 1 Mar 2026

A packed month.
A lot shipped in February. Project Sloth landed as White Noise v0.3.0, the complete Flutter frontend rebuild we've been working toward since last summer. MDK v0.6.0 hit crates.io and the TypeScript SDK published its first npm package the same week. Nearly 200 pull requests merged across the organization. And as the month closes, the team is gathering in Florianopolis for Bitcoin++ and a big planning session for what comes next.
v0.3.0: Project Sloth Ships
In January, Project Sloth sat at 48% feature parity with the old codebase. By February 23, it was done. White Noise v0.3.0 rolls up over 160 merged improvements into a single release that replaces polling with real-time streaming, adds Amber support for external key management, brings images and media sharing into chats, and delivers group messaging that works.
v0.3.0 is a breaking release. All local data is wiped on upgrade because Marmot protocol changes and encrypted local storage made migration from the old unencrypted database too fragile to attempt safely.
⚠️ Users need to back up their nsec before upgrading. Profiles and contacts restore automatically from Nostr relays, but messages and group state start fresh. This is a one-time reset. Future updates will preserve data.
The release is available on Android via direct APK download and Zapstore. iOS is pending.
What's new in v0.3.0
Real-time messaging. Messages now arrive instantly over streaming connections instead of every 2-30 seconds via polling. The Rust SDK exposes a `subscribe_to_group_messages` API that delivers an initial snapshot plus live updates, and on the Flutter side a new `ChatStreamProvider` consumes the stream directly.
Amber and external signers. Full NIP-55 integration means your private key never needs to touch the app. Connect through Amber on Android and sign events externally. The login flow walks you through relay resolution step by step, with clear error states when relay lists are missing.
Images and media. Share images with upload progress tracking, blurhash placeholders, full-screen zoom, and automatic retry on failure. Media tags follow the MIP-04 v2 format.
Group messaging. Create groups, add members, manage settings from the group info screen. The chat list shows sender names and latest message previews. MLS encryption provides forward secrecy across every group.
Search. Find users by name with results expanding outward from your follows up to four degrees of separation. Results stream in as they're found, with group co-members appearing alongside contacts. QR code scanning handles both nsec and npub formats.
Replies and drafts. Reply to messages with scroll-to-referenced navigation. Typed text is saved per conversation and restores when you return, including reply context.
Read position and pinned chats. The app remembers where you left off in each conversation and scrolls there when you return. No read receipts are broadcast. Long-press any conversation to pin or unpin it.
Rust SDK and Backend. The Rust crate (`whitenoise-rs`) saw 38 merged PRs this month, with the heaviest work falling into three areas.
Key package infrastructure. Multiple PRs addressed the full KeyPackage lifecycle: detecting relay publish failures and retrying, looping deletion until relays confirm removal, verifying ownership before skipping a publish, delayed cleanup management, rotation of old packages, and a new `KeyPackageStatus` enum for detecting incompatible packages before attempting to start a chat. This was one of the most common sources of silent failures in earlier versions.
MLS group state correctness. Several critical fixes landed. Auto-committed proposals from `process_message` were not being published to relays, meaning other group members never saw them. The commit ordering was wrong: evolution events need to publish before calling `merge_pending_commit`, not after. And MLS self-update now fires immediately on joining a group, preventing stale key material from lingering.
User search. Built from scratch this month. The metadata lookup uses a 5-tier pipeline with batched relay fetches and NIP-65 discovery. Search starts with your follows, expands through social graph connections, includes group co-members, and falls back to connected relays. The radius cap was removed late in the month after testing showed it was too restrictive.
Login rework. Login now blocks when any of the three required relay lists (NIP-65, inbox, outbox) are missing, instead of silently proceeding with broken state. A slow-login bug affecting accounts with large follow lists was identified and fixed. Subscriptions now recover properly after re-registering with an external signer.
MDK v0.6.0
The Marmot Development Kit shipped its first formal versioned release on February 23, published to crates.io. This release includes 26 PRs merged in February alone, on top of the cumulative work since the repo was created.
Highlights:
- OpenMLS 0.8.0. Resolves security advisory GHSA-8x3w-qj7j-gqhf (improper tag validation).
- Postcard codec. MLS storage switched from JSON to postcard for better performance and smaller payloads. This is a breaking change; existing databases need to be recreated.
- `clear_pending_commit`. Lets callers roll back a failed relay publish without permanently blocking group operations. Discovered via a bug report from the Vector client team.
- Self-update tracking. New `SelfUpdateState` enum on the Group struct implements MIP-02 periodic key rotation.
- Admin pubkeys wire format. Switched to raw 32-byte arrays per MIP-01 v2, removing the hex-encoded string format.
- MIP-04 epoch fallback. Media decryption now handles key rotations gracefully across MLS epochs.
Least Authority has begun a security audit of MDK, following up on their earlier audit of the Marmot Protocol spec. Findings from the spec audit already drove several of the protocol changes described below. Expect MDK-specific fixes and hardening as this audit progresses.
The MDK language bindings (Kotlin, Ruby, Python, Swift) all received automated updates tracking the v0.6.0 release. Danny M also has an open PR adding C and Zig bindings alongside a JavaScript target.
TypeScript SDK: First Published Package
`@internet-privacy/marmots` v0.1.0 shipped to npm on February 16. The library migrated to the ts-mls v2 API, added MIP compliance for key packages and commits (relay acknowledgment before state transitions, post-join self-updates, key package rotation), and set up changeset-based versioning with CI publishing.
Alongside the SDK, hzrd149 bootstrapped `marmots-web-chat`, a reference web client deployed on GitHub Pages. A fully functional Marmot client running as a static site with zero infrastructure costs. Just HTML, JS, and a browser. The app went from first commit to working invite flows and group views in under three weeks. That a complete MLS-encrypted messenger can be deployed to free static hosting says something about the architecture. Nostr handles identity and transport. The SDK handles encryption client-side. There is nothing left that requires a server.
Protocol Spec
Four PRs merged to the Marmot spec repo, all driven by MDK audit findings:
- Hex encoding support removed. Base64 is now mandatory; hex must be rejected.
- Required `i` tag on KeyPackage events with a fully specified RefHash algorithm (SHA-256 for the default ciphersuite).
- NIP-70 protected tag removed from the KeyPackage example after testing showed many relays reject it.
- MIP-01 extension format bumped to v2 with QUIC varint encoding and raw 32-byte admin keys. Image encryption and upload auth now use HKDF-based key derivation.
Five open PRs signal where the protocol is heading. MIP-06 proposes multi-device support via External Commits with a two-phase out-of-band device pairing flow. A separate proposal introduces a shared group signing key for anti-spam protection on kind:445 events. And an early MIP for voice and video calling over SFrame is under discussion.
Dr. Marmot
A new diagnostic tool launched this month at [dr.marmot](https://github.com/marmot-protocol/dr.marmot). Dr. Marmot examines a Nostr user's relay and key package configuration and prescribes fixes. It checks for missing relay lists (NIP-65, inbox, outbox), orphaned key packages, and other common setup issues that prevent Marmot-based messaging from working. The tool has a web interface with mobile support and went from first commit to deployed in under a week.
Marmot Clients: Beyond White Noise
Three third-party clients now implement the Marmot Protocol, all shipping code in February.
Vector
[Vector](https://github.com/VectorPrivacy/Vector) is a privacy-focused desktop messenger that integrated MDK in its v0.3.0 release back in December 2025, adding MLS-based group messaging with forward secrecy. In February, the team shipped SIMD acceleration across the board: hex encoding 65x faster, image preview generation up to 38x faster, message lookups 184x faster via binary search, and npub storage cut 99.6% through interning. Memory usage dropped too, with message structs shrinking from 472 to 128 bytes. Vector also ships a Mini Apps platform (WebXDC-based P2P games), a decentralized app store called The Nexus, PIVX wallet integration, and message editing. The `clear_pending_commit` fix in MDK v0.6.0 came from a bug report by the Vector team.
Pika
[Pika](https://github.com/sledtools/pika) is a new MLS-encrypted messenger for iOS, Android, and desktop, built on MDK and nostr-sdk. The architecture uses a Rust core (`pika_core`) that owns all MLS state management and encryption, with thin native UI shells in SwiftUI and Kotlin connected via UniFFI and JNI bindings. State flows unidirectionally: UI dispatches actions to the Rust actor, which emits state snapshots back to the frontend. Pika shipped v0.5.3 on February 25 with file upload, drag-and-drop media support on desktop, and Cloudflare Workers deployment fixes. Still in alpha, but functional.
Burrow
[Burrow](https://github.com/CentauriAgent/burrow) takes a different angle: it implements Marmot for both human users and AI agents. Two interfaces ship together. A pure Rust CLI daemon with JSONL output mode handles automated and agent integration, while a Flutter app covers Android, iOS, Linux, macOS, and Windows. The agent side integrates with [OpenClaw](https://openclaw.ai) for AI participation in encrypted group chats with full tool access. WebRTC handles voice and video calls. Access control lists with audit logging manage contact and group permissions. Burrow appeared in late February and is the first Marmot client designed with machine-to-machine messaging as a primary use case.
What this means
Counting White Noise and hzrd149's web reference client, five independent implementations now speak Marmot. Each one exercises a different part of the stack: native mobile, desktop, web, CLI, agent runtime. The protocol is getting real-world testing across platforms, languages, use cases, and runtime environments that no single team could cover alone.
White Noise Website
The website picked up an LLM accessibility layer (llms.txt, structured data, dynamic sitemap, security.txt) and a fix for the Android APK download link pointing to the correct repository.
Bitcoin++ Florianopolis
The team is gathering at Bitcoin++ in Florianopolis at the end of the month. Beyond the conference itself, this is a dedicated planning session. With v0.3.0 shipped and the core feature set proven, the team is mapping out the next phase of development. More to share once the dust settles and priorities crystallize.
In progress
A few things still in flight as the month closes. Tracked message delivery status will replace fire-and-forget publishing so users know when a message actually reaches relays. The fast-thumbhash PR proposes replacing BlurHash with a 12x faster alternative. And several subscription reliability fixes are being tested to eliminate blind windows during relay reconnection.
On the spec side, the multi-device and anti-spam proposals are in active review.
By the Numbers
| Metric | Value |
|--------|-------|
| Merged PRs (org-wide) | ~195 |
| Releases shipped | 3 (v0.3.0, MDK v0.6.0, marmot-ts v0.1.0) |
| New repos launched | 2 (dr.marmot, marmots-web-chat) |
| Active repos | 12 |
| Issues opened | 50+ |
| Issues closed | 40+ |
Contributors
Thanks to everyone who contributed this month: erskingardner, josefinalliende, jgmontoya, untreu2, dannym-arx, mubarakcoded, hzrd149, gzuuus, codeswot, JSKitty, alltheseas, Datawav, SubatomicPlanets, vladimir-krstic, RenAndKiwi, justinmoon, benthecarman, and dechristopher.
If you're building on Nostr and want to add encrypted messaging, check out the [Marmot Protocol spec](https://github.com/marmot-protocol/marmot). The [TypeScript SDK](https://github.com/marmot-protocol/marmot-ts) and [MDK](https://github.com/marmot-protocol/mdk) are ready for integration. If you want to contribute to the reference implementation, [White Noise](https://github.com/marmot-protocol/whitenoise) is open for PRs.