January has been one of our most productive months yet. The conference-free calendar gave the team a full month of uninterrupted focus on writing code. The results show across three major workstreams: the Sloth frontend rearchitecture, security audit fixes in MDK, and rapid progress on the TypeScript SDK.

Project Sloth: the big picture
Sloth is a complete rebuild of the White Noise Flutter frontend with a new design system, cleaner architecture, and streaming-first data flow. The goal is a more maintainable codebase that's easier to extend and a polished user experience with the new Slate design language. The name comes from our Costa Rica team gathering when the pig plans were deceived (long story, ask us on the community call).
We're tracking 81 features for parity with the current White Noise app. As of this writing, 39 features (48%) are fully implemented, 13 (16%) have backend support and need UI work, and 29 (36%) are yet to start. Progress is tracked in [issue #58](https://github.com/marmot-protocol/sloth/issues/58). The plan is to merge Sloth into the main White Noise repo and ship it in #twoweeks.
The streaming-first architecture is already paying off. Messages, reactions, and chat list updates flow in real-time, and the whole experience feels snappy. Clean data flow makes features easier to build and the app more responsive.
Multi-account support is now working in Sloth. You can manage several profiles, each with its own keys and metadata, and switch between them seamlessly. The profile screens handle the full lifecycle from key viewing to QR sharing.
We also took the opportunity to rethink settings from scratch. The redesigned screen puts connection and sharing front and center, makes theme switching seamless, and gives users real control over their relay configuration. Small details that add up to an app that feels more considered.
Design system: Slate
Slate is a novel visual concept built around layered, animated surfaces, and it's beautiful. Think of it as sheets of material that slide, expand, and settle into place. Every interaction has considered motion: panels open from strips to full height then settle, modals expand from their anchor point, context menus wrap their origin and grow outward. The result feels fluid, intentional, and genuinely delightful to use. We're incredibly proud of how this turned out.
The design work wrapped up this month. Vlad delivered complete Figma specs covering the full component system: foundations and tokens (primitive and semantic colors, typography scales, spacing, shadows, motion durations and easing curves, haptics), the Slate container system (strip, fit, and full variants with header patterns, list patterns, and input behaviors), and detailed animation specs for every surface type. We're now integrating these designs into the Flutter codebase, and Slate will ship as part of the Sloth release.
On the implementation side, we shipped the semantic color system with full light/dark theming via ThemeExtension. All Material icons are replaced with our custom SVG icon set. We consolidated button variants into a unified WnButton component and built WnMenu, WnMenuItem, and WnDropdownSelector with smooth expanding animations. Widgetbook setup is in progress so designers can review components in isolation and verify edge cases.
Security audit progress
The Least Authority security audit drove significant work in MDK this month. We merged over 25 PRs addressing audit findings and hardening the core. On the authorization front, we added admin checks for MLS commit messages and implemented comprehensive Nostr-based validations for message processing. Input validation now prevents memory exhaustion attacks, and we fixed edge cases around removed member commit processing.
Performance saw meaningful improvements. The save_message function went from O(n) to O(1), which matters when conversations grow large. We fixed cache collision bugs and stale key entry issues in memory storage that were causing subtle reliability problems. Deterministic commit race resolution per MIP-03 ensures consistent behavior when multiple clients commit simultaneously. Failed messages now preserve their context and can be retried cleanly.
On the protocol side, we added GREASE support for MLS extensibility, ensuring future protocol versions can add new features while maintaining compatibility with existing clients. Legacy code got a thorough cleanup: the 64-byte credential identity format and several other deprecated code paths are removed. We bumped rust-nostr to version 0.44 for the latest Nostr protocol support.
Platform-specific fixes rounded out the month. SQLite mutex handling now runs cleanly on Android. Cross-compilation for Android got proper OpenSSL support, and Windows builds for UniFFI bindings are working again.
TypeScript SDK
The [marmot-ts](https://github.com/marmot-protocol/marmot-ts) SDK saw major progress this month, driven by hzrd149 and gzuuus. They've been building out a complete TypeScript implementation of the Marmot protocol on top of ts-mls, and the work is paying off. The example chat app is now functional, demonstrating the full flow from key package creation through group messaging. Invite and join flows handle welcome messages properly, and client state migrated from JSON to binary serialization for better efficiency.
Message history support is in active development, which will let applications load and display conversation history. An update to ts-mls v2.0.0-rc.4 is in progress, bringing the latest MLS protocol improvements. The SDK is becoming a viable option for web developers who want to add Marmot-based encrypted messaging to JavaScript and TypeScript applications.
What's next
We know it's been a while since the last release, and we appreciate your patience. The wait will be worth it.
Several major features are close to landing. Start chat and chat info screens with follow/unfollow functionality are in review. Amber integration for NIP-55 external signer support is progressing, this has been the #1 most requested feature from you, and we're thrilled to finally deliver it in the next release. Widgetbook setup will give designers a proper environment for component review.
The push to feature parity continues. Media sending, replies, group creation, and notifications are the major gaps remaining. Once we hit critical mass, Sloth merges into White Noise and ships with the beautiful new Slate design. This will be a substantially bigger release than usual, and we think you're going to love it. The security audit continues into Q1 with more fixes landing as findings are addressed.
Contributors
Thanks to everyone who contributed this month: josefinalliende, erskingardner, untreu2, jgmontoya, dannym-arx, mubarakcoded, hzrd149, gzuuus, and vladimir-krstic.

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 Sloth rewrite is happening at [marmot-protocol/sloth](https://github.com/marmot-protocol/sloth).
For TypeScript developers, [marmot-ts](https://github.com/marmot-protocol/marmot-ts) is shaping up nicely. We welcome contributors across all repos.
The next community call is the first Tuesday of February at 1600 UTC.