Skip to content

Direct Messaging (DMs) #169

Description

@alltheseas

Summary in quote form from a nostr DM User

I gave up. Either it works, but is not encrypted - or it doesn't work for me, in which case I just give up and fall back to "tools of the old world". -dissatisfied nostr DM user

app nip-04 nip-17 one-to-one nip-17+group double ratchet MLS comment
bitchat PR
0xchat
0xchat Lite aiming for compatibility with white noise NIP-104
amethyst ✅ read-only NIP-04 send deprecated, NIP-17 mandatory. Requires recipients have DM relay lists (kind 10050). PR#1877. Desktop DMs PR#1710
Chachi nip-17 note
n17.chat
damus POC NIP-17 in progress — PR#3590 closed unmerged, PR#3667 open
Flotilla
gossip NIP-17 if signaled with 10050 event
Iris yes* *interoperability not confirmed
keychat yes* yes* *interoperability not confirmed
white noise yes* *interoperability not confirmed. NIP-EE spec
rust-nostr MLS crate (nostr-mls) removed from repo — link was 404
Flash https://njump.me/nevent1qqsylfnj542yrze3h9t9vgucxm4l764vmr3pyn9y4uaq9y06hrlrdagf0aw04
Yakihonne secure DMs toggle is confusing]
nostrphp PR submitted
marketplaces working spec
Coracle NIP 04 is evil, MLS is hard (planning to add it when the typescript library is ready)
nostrudel https://njump.me/nevent1qqs84nnyc2jx796hrm3vsec9zaf6vwp2v8qaustrdq9raxkv3rp5xjsdysxan
Coop
Flightless https://njump.me/nevent1qqsgm9tjgwpp7z5q5e2aqj6x3km5a79zpr8sx8647k8ssnrawpe4a5qpr9mhxue69uhhqun0ve5kcetn9ehx7um5wgcjucm0d5q3wamnwvaz7tmswf5k6atn9ehx7um5wgcjucm0d578y9g6
notedeck Merge messages nip17 DM app by kernel
nostur NIP-17 confirmed via GiftWrapsManager.swift — PR#53 link was incorrect (that PR is outbox/NIP-66)
Vector NIP-17 PR #44
nospeak Web + Android (F-Droid). Supports kind 15 file messages.
diVine NIP-17 DMs incl. video share PR#2111
nak nak gift wrap/nak gift unwrap (NIP-59 gift wrap for NIP-17 DMs)
nostril CLI tool. --dm <pubkey> for NIP-04; --giftwrap-to <pubkey> creates kind 1059 gift wrap with NIP-44 encryption
Primal iOS ⚠️ NIP-04 only. No kind 14/13/1059/10050 in codebase. NostrKind.swift defines only kind 4. createNostrMessageEvent uses NIP-04 encryption.
Primal Android ⚠️ NIP-04 only. NostrEventKind.kt has only kind 4. NIP-44 exists but used for NWC only.
Primal Web ⚠️ NIP-04 only. constants.ts defines EncryptedDirectMessage=4 only. DM flow uses get_directmsg_contacts caching API.
Snort na-gro audit: web client, NIP-17+NIP-44; evidence: nip17.ts
Lume ⚠️ Unverified — claims based on nostr-sdk all-nips feature flag in Cargo.toml, but no NIP-17 DM UI code found in repo
Nostria NIP-04+NIP-17+NIP-17 groups. NIP-44 is present (required by NIP-17). Evidence: messaging.service.ts with computeGroupChatId()
Wisp v0.16.2-beta: NIP-17 full 3-layer gift wrap (kind 14 rumor → kind 13 seal → kind 1059 wrap). Fixed rumor id field (NIP-59 requires unsigned but identified rumors). evidence: PR #385, Nip17.kt

Libraries & SDKs

library/sdk nip-04 nip-17 nip-44 MLS comment
SNSTR TypeScript library
applesauce SDK Used by noStrudel, provides relay connections, signing, NIP-17 DM support
Vector SDK Rust library for building Nostr bots with private messaging, NIP-96 file uploads, gift wrap events
marmot-ts TypeScript MLS messaging SDK, MIP-03 group messaging
MDK Marmot Development Kit for MLS, v0.6.0
NDK Gift wrapping + NIP-17 + NIP-44 encryption

problem statement

Today there are at least four (4) direct messages standards implemented on nostr.

NIP-04 (used by iOS damus)
NIP-17 (amethyst)
double rachet signal (@mmalmi Iris)
MLS (used by white noise @erskingardner)

Example incompatibility betwee Amethyst and Damus: #152

When sending DMs to another profile on nostr, it is not always immediately clear which app(s), and which standard(s) the DM counterparty/receiver is able to receive and read.

Ideally, there is some under the hood communication that takes place, so that DM senders don't have to think about DM standards, and which apps implement which standard(s).

How might we solve this multi-DM standard problem?

cc @mmalmi @erskingardner @vitorpamplona @jb55

cryptography

NIP-17 is encrypted by NIP-44. NIP-44 has been audited. See https://github.com/paulmillr/nip44/blob/ce63c2eaf345e9f7f93b48f829e6bdeb7e7d7964/audit-2023.12.pdf and https://cure53.de/audit-report_nip44-implementations.pdf.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions