Avatar
n
2d5b6404df532de082d9e77f7f4257a6f43fb79bb9de8dd3ac7df5e6d4b500b0

ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใƒŽใƒผใƒˆใฏใ‹ใคใฆใƒใƒผใƒ‰ใ‚ฆใ‚ฉใƒƒใƒใจๅ‘ผใฐใ‚Œใฆใ„ใพใ—ใŸใ€‚ใ‚คใƒผใƒญใƒณใŒๅๅ‰ใ‚’ๅค‰ใˆใพใ—ใŸใ€‚damusใ‚„primalใฎ่ฉๆฌบใ‚ขใ‚ซใ‚ฆใƒณใƒˆใชใฉใฎๆŠ•็จฟใซNIP-32ใฎใƒฉใƒ™ใƒซใ‚’ใคใ‘ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

nostr:nevent1qqsw6agd0y2rf4ele8terc6vea8062cp4hqgvnzg9wc96ksvp2wvjsgpzpmhxue69uhhjctzw5hx6ef0wccsygryg8plprlh07dj63znfty5dystc3tnx2x59k6yyz274zuhpjla9cpsgqqqqqqsp2fxza

้›ชใตใฃใฆใ‚‹

ใ‚ใ‘ใพใ—ใฆใŠใ‚ใงใจใ†๐ŸŽ

ใ‚ใ‘ใพใ—ใฆใŠใ‚ใงใจใ†๐ŸŽ

ใ‚ใ‘ใพใ—ใฆใŠใ‚ใงใจใ†ใ”ใ–ใ„ใพใ™๐ŸŽ

ใ‚ใ‘ใพใ—ใฆใŠใ‚ใงใจใ†ใ”ใ–ใ„ใพใ™๐ŸŽ

Replying to Avatar White Noise

Aaand... weโ€™re back with the monthly recap ๐Ÿ˜Ž

December was a big month for us: two conference talks, some real face time as a team, and solid progress toward real-time messaging.

๐ŸŽค Conferences and Speaking

- @Btrust Dev Day ๐Ÿš€ Josefina + Javier presented MIP-5: private mobile notifications without leaking metadata (reliable push, hidden social graph)

Watch the presentation: https://www.youtube.com/watch?v=bDxhY5p1yKQ&t=6360s

- Africa Bitcoin Conference: nostr:nprofile1qqst0mtgkp3du662ztj3l4fgts0purksu5fgek5n4vgmg9gt2hkn9lqpzamhxue69uhhyetvv9ujuct60fsk6mewdejhgtcppemhxue69uhkummn9ekx7mp0gf8npz introduced Marmot and why MLS-based group encryption brings real group messaging to Nostr.

Interested? The talk is here: https://www.youtube.com/watch?v=g2qKOw0xWVU&t=3280s

- nostr:nprofile1qqspwwwexlwgcrrnwz4zwkze8rq3ncjug8mvgsd96dxx6wzs8ccndmcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxrhwden5te0ve5kcar9wghxummnw3ezuamfdejj7n8dex9 also ran a two-hour hands-on workshop on building with Nostr and Marmot, unfortunately this was not recorded.

๐Ÿ๏ธTeam Gathering in Mauritius

With most of the team together for the conferences, we held a team meeting to discuss the streaming architecture work now underway.

Beyond the technical sessions, we answered questions from conference attendees curious about encrypted messaging on Nostr, met potential collaborators, and got to know each other better outside of GitHub and video calls.

๐Ÿ‘ฅ Community Call Highlights

The December community call (first Tuesday of each month, 1700 UTC) covered local WebSocket notifications and the battery and reliability tradeoffs for keeping connections alive on mobile.

We also did a deep dive on the privacy design decisions behind MIP-5.

๐Ÿงฉ The highlight was introducing Tubestr, the first non-chat Marmot client: Tubestr is a private video sharing app designed for kids to share their creations with a trusted circle only. Check it out at https://www.tubestr.app/

๐Ÿ”งTechnical Progress

Real-Time Messaging Architecture

Until now, White Noise polled for new messages every 2 seconds in the foreground and every 30 seconds in the background.

This works, but it means messages never arrive instantly and background delivery feels sluggish.

The streaming architecture work underway will change this: messages arrive the moment they're sent.

This is early work that will roll out over several releases. The groundwork includes a new subscribe_to_group_messages API that delivers an initial snapshot plus live updates for new messages, reactions, and deletions.

On the Flutter side, a new ChatStreamProvider consumes the Rust SDK stream directly, handling sorting and member resolution.

We also added an enriched chat list API that returns summaries with latest message previews, and fixed message reordering loops by using stable sorting with createdAt plus message id as a tiebreaker.

๐Ÿ“ฒ Android Platform Stability

Several fixes this month target real-world Android issues.

Notifications weren't arriving after device restart because the foreground service only initialized the Rust library without the full database configuration.

We created a WhitenoiseInitService that properly initializes the backend from both the foreground service and the main app, making it safe to call from either entry point.

We also fixed ๐Ÿงผ data cleanup on uninstall so chats and profiles no longer persist after reinstalling, simplified the battery optimization permission flow to avoid stuck denial loops, and added graceful camera permission handling with an "Open Settings" link when access is denied.

๐Ÿ’… UI and UX Improvements

Chat bubbles now follow a standardized layout and dimension spec.

We added a new WarningBox widget used across profile screens to remind users that their profile information is public.

The media modal got fade animations and stable image positioning so the image no longer shifts when toggling overlays.

The language selector now correctly shows the system language on first load.

๐Ÿฆซ Marmot Protocol Spec

MIP-00 and MIP-02 now specify base64 encoding for KeyPackage and Welcome content instead of hex. This reduces payload size by roughly 33% and uses a tag-based encoding declaration.

This is a protocol hard fork, so readers must accept both formats during the transition period, but new implementations must write base64.

โœ๏ธ Marmot TypeScript SDK

The TypeScript SDK saw significant development this month with 9 merged PRs.

The main focus was building out the MarmotClient class as the primary interface for developers.

The proposals and commits flow is now implemented, allowing proper MLS group state management.

Group message reading now includes retry logic for handling unreadable messages gracefully.

Member addition and group membership methods were refactored into cleaner abstractions, and the SDK picked up base64 content encoding to match the spec change.

A new generic NostrNetworkInterface makes it easier to integrate with different Nostr implementations.

๐Ÿ’ป MDK Language Bindings

MDK is now published to Rubygems and PyPI (as mdk-python), making it easier to integrate Marmot into Ruby and Python applications.

These join the existing Kotlin and Swift bindings, all generated via UniFFI from the core Rust crate.

๐Ÿ’ช Security Audit

We're currently undergoing a security audit with Least Authority. This month several fixes landed based on their findings.

MDK now uses a v2 group image format with separate upload seed derivation, ensuring uploaded images use a derived keypair rather than the encryption key directly.

Migration tooling handles the transition from v1 to v2 automatically while maintaining backward compatibility.

๐Ÿ› ๏ธ Expect more fixes and improvements in the coming months as the audit continues.

โณ In Progress

A few notable PRs are still in flight.

The optimistic UI work will make messages and reactions appear instantly while syncing with the server.

NIP-55 support will enable integration with Amber and other external signers.

Media layout standardization will bring dynamic grid sizing that respects screen width constraints.

๐ŸŒท Ecosystem Growth

Several new projects have expressed interest in adding Marmot to their stack.

More to share as those conversations develop.

โค๏ธ Contributors

Thanks to everyone who contributed this month: erskingardner, josefinalliende, hzrd149, gzuuus, untreu2, jgmontoya, codeswot, Quwaysim, ayushsaksena30, AbdulbasitSaid, mubarakcoded, dannym-arx, and kuba-04.

-

If you're building on Nostr and want to add encrypted messaging, check out the Marmot Protocol spec. https://x.com/whitenoisechat/status/2006075259406188550?s=46

If you want to contribute to the reference implementation, White Noise is open for PRs.

The next community call is the first Tuesday of January at 1700 UTC.

ใ‚‚ใ†ใฌใ‚‹ใฌใ‚‹ใ‚„ใ‚‹ใ“ใจใชใ„ใ‚“ใ ใ‘ใฉใชใ‚“ใ‹ใ‚ใ‚‹๏ผŸ

ๅˆฅใซใใ‚“ใช้ฃŸใ„ใŸใใญใˆใ—

ใ‚†ใ‚ใ‚ฟใ‚ฆใƒณ่กŒใ‘ใฐใ‚ใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใ‚“

nevent1qvzqqqqqqypzp7yh36mmsmdg2cajeusgxk0zuzhz0qtm6ctwgxq62edruflcazjsqyxhwumn8ghj77tpvf6jumt9qys8wumn8ghj7un9d3shjtt2wqhxummnw3ezuamfwfjkgmn9wshx5uqpz9mhxue69uhhytntda4xjunp9e5k7qpqpw2m0wg64np684ylh4z55f6y8qv3l34qpwwuxf520g4msh3sasascp05sm

้ขจใชใ„ใ‹ใ‚‰่ฒทใ„็‰ฉ่กŒใฃใฆใŠใ“ใ†

GM ใŠใฏใ‚ˆใ†ใ”ใ–ใ„ใพใ™

ใ‚„ใฃใฑใƒ—ใƒผใƒซใ ใ‚ˆใ€‚ใ‚ธใ‚งใƒƒใƒˆใ‚ณใƒผใ‚นใ‚ฟใƒผไน—ใ‚‹ใ‚„ใค้ ญใŠใ‹ใ—ใ„ใ‚ˆ

ใ‚นใƒใƒผใƒซใƒ‰ใƒฉใ‚ดใƒณใจใƒ›ใƒฏใ‚คใƒˆใ‚ตใ‚คใ‚ฏใƒญใƒณใฏ่พžใ‚ใจใ‘ใ€‚ๅ‹้”ใฏใ‚นใƒใƒผใƒซใƒ‰ใƒฉใ‚ดใƒณใงๅคฑ็ฅžใ—ใŸ

้ƒฝ้“ๅบœ็œŒใฃใฆๅฐๅญฆ็”Ÿใง่ฆšใˆใ‚‹ใ‚„ใคใ˜ใ‚ƒใชใ„ใฎ๏ผŸ

Trees are wonderful. They are natural.

ๆ—ฉใๆฅใ„ใ‚ˆใ€‚ใƒžใƒซใ‚ฟใ‚คใƒฉใƒผใƒกใƒณ้ฃŸในใชใŒใ‚‰ๅพ…ใฃใฆใ‚‹ใ‚ˆ

ใฌใ‚‹ใฌใ‚‹ใฎใƒญใƒผใƒ‡ใ‚ฃใƒณใ‚ฐไธญใฎใ‚ขใƒ‹ใƒกใƒผใ‚ทใƒงใƒณใ‚’ๅˆถไฝœไธญ

ใƒžใƒซใฎ็ˆช็ชใๅˆบใ•ใฃใฆใชใ„๏ผŸ

ใŠใจใชใ—ใ„ใ€‚ใ‚‚ใตใ‚‚ใตใงใ‹ใ‚ใ„ใ„

GM ใŠใฏใ‚ˆใ†ใ”ใ–ใ„ใพใ™

Replying to Avatar Derek Ross

Every Nostr event leaves me fired up and even more bullish on all of you, on this community and everything weโ€™re building together. Weโ€™re connected by more than random npubs and shared cryptography. Weโ€™re more than just GMs and PVs.

Weโ€™re a social layer, a collective of people who see the world clearly and understand what the future can become if we keep pushing.

So we build.

We build software.

We build services.

We build content.

We build relationships.

I met so many amazing Nostriches and Bitcoiners last week. Some for the first time, and others I hadnโ€™t seen in far too long. Thank you all for the memories and an incredible week. My family and I loved every moment we spent with you.

nostr:nprofile1qqs0qlstrtcxddyrswrrvzs69janw3pf48a64dvnqflnlnfm6w6uxecppemhxue69uhkummn9ekx7mp0qy28wumn8ghj7un9d3shjctzd3jjummjvuhszrnhwden5te009skyafwd4jj7pqtq2y Love you brother. I enjoyed our time together always my friend.

nostr:nprofile1qqswc7d4dz775c72vzgltwztp33ecy9qjx0pwhaqnfx7x920s2gx7fgpzdmhxue69uhhwmm59e6hg7r09ehkuef0rgdhp4 it was great to see you again and thank you for the artwork. Keep creating.

nostr:nprofile1qqsy2ga7trfetvd3j65m3jptqw9k39wtq2mg85xz2w542p5dhg06e5qppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qghwaehxw309aex2mrp0yh8qunfd4skctnwv46z75uptz7 Thanks for the good conversations and dinners together. Always something I look forward to.

nostr:nprofile1qqsg5386eve0fm9k9ky92kez4dw6v9ud7hdvmqjh4ru7rgs3gugrx3spr9mhxue69uhhqun9d45h2mfwwpexjmtpdshxuet59uqkvamnwvaz7tmxd9k8getj9ehx7um5wgh8w6twv5hkuur4vgcnxen6xq6x5et2xahxkarkw3mxwv35v34rjv3kvy6kxarrd4shwdn9ddcrjvpj8pjh27pnwparxcmn0pj8yut8vsmnw7t48a38ymmpv33kzum58468yat9qyghwumn8ghj7mn0wd68ytnhd9hx2tc2uycqv Thanks for the lunch conversations and beer. It was great!

nostr:nprofile1qqsrumtwafcjjsctfpfwgxx7gvva6vzjkuhy9g8vc7drkxuvj4vdnygpzemhxue69uhk2er9dchxummnw3ezumrpdejz7qgkwaehxw309ajkgetw9ehx7um5wghxcctwvshsz8thwden5te0dehhxarj9e3xjarrda5kuetj9eek7cmfv9kz7uqwpdj Finally! Have so many years. I am so happy to check this off my bucket list ๐Ÿ˜‚

nostr:nprofile1qqswswmx4rkj6d7q05dtafhpkqq2z42fc62s37jvtp642m2jkpfxc2cpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhszxrhwden5te0dehhyarfwvhxummnw3erztnrdakj7qgkwaehxw309a5xjum59ehx7um5wghxcctwvshsxpancm It was wonderful to meet you. Thanks for the laughs and good times.

nostr:nprofile1qqs9afryspzmk8ljyfj4mhfkumwwmhzrtyxzvzgvfp477w80g5x6t0gpzamhxue69uhhyetvv9ujumn0wd68ytnzv9hxgtcppemhxue69uhkummn9ekx7mp0qywhwumn8ghj7mn0wd68ytnzd96xxmmfdejhytnnda3kjctv9uz87n0z My family really enjoyed our time together. Thanks man! I appreciate you.

nostr:nprofile1qqsvfa085adgecmg84ffelcxx6zrn3ffu5jrc6cjtwng0zge3ptv43cpz9mhxue69uhkummnw3ezuamfdejj7qgcwaehxw309anxjmr5v4ezumn0wd68ytnhd9hx2tcwmah2e Thanks for everything. Truly. Without your kindness and hard work, none of last week would have been possible.

I don't want to create a hellthread, so I'll stop the tagging here. Just know that if we spoke last week, I truly enjoyed it and I look forward to our next. ๐Ÿซ‚๐Ÿค™๐Ÿป๐Ÿ’œ

P.S. If you need help with or have questions regarding Shakespeare, please slide into my DMs.

come on japan๐Ÿซ‚

ๅฟ™็Ž‹ใพใŸใฏ็‹‚็Ž‹ใซใชใ‚‹ใฎใ‹

ใƒžใ‚ธใงใ‹๏ผไฟบใ‚‚ใ‚ธใƒฃใƒƒใ‚ฏใฎ็œŸไผผใ—ใฆ้ผปใƒ”ใ‚ขใ‚น้–‹ใ‘ใฆใใ“ใงๅ‘ผๅธใ—ใ‚ˆใ†ใ‹ใช