Keychat users can set the media relay to their own Blossom server, which corresponds to Blossom’s first use case mentioned in the note below.
View quoted note →
Keychat
npub1h0uj...rwx8
Keychat is the super app for Bitcoiners.
Autonomous IDs, Bitcoin wallet, secure chat, Mini Apps — all in Keychat.
Autonomy. Security. Richness.
Contact us for feedback 👇
https://www.keychat.io/u/?k=npub1h0uj825jgcr9lzxyp37ehasuenq070707pj63je07n8mkcsg3u0qnsrwx8
BTC + Web


Good results 🌝
View quoted note →
Keychat Mini Game
Keychat v1.33.1 +6392 is live!
Now available on the App Store, ZapStore, and GitHub.
What’s new
Bring-your-own media relay – point media relay to your own Blossom server and have all images, videos, and files flow through it, fully encrypted and under your control.
Drag-and-drop bookmark sorting in the built-in browser – organise your favourites any way you like.
More Mini Apps – @PayPerQ Nostter, and @YakiHonne
👉 App Store:
👉 GitHub:

App Store
keychat.io App - App Store
Download keychat.io by KEYME PTE. LTD. on the App Store. See screenshots, ratings and reviews, user tips and more games like keychat.io.
GitHub
Release v1.38.1+6489 · keychat-io/keychat-app
Keychat 1.38.1+6489
Android and Linux support UnifiedPush for push notifications.
Added biometric authentication for privacy operations.
Refactore...

We look forward to Keychat becoming the bridge that helps Bitcoiners introduce their friends to the Bitcoin world.
View quoted note →
Keet uses the Holepunch stack—not WebRTC—for its real-time voice calls. In a one-to-one call the connection likewise falls into three logical stages:
1 · Peer-discovery exchange
Each endpoint relies on HyperDHT ( Distributed Hash Table) to locate the other party:
The caller joins the network with the callee’s 32-byte Ed25519 public key.
Nearby DHT nodes return the latest announce record published by that key—essentially “I’m online at 203.0.113.7:54567”.
A short-lived, signed invitation token proves the request really comes from the owner of the calling key, preventing spam.
No central signaling server is involved; the DHT itself is the rendez-vous layer.
2 · Distributed hole-punch — DHP → direct connection
The two devices attempt to break through their NATs with DHP (Distributed Hole Punching) and then talk over UDX (Ultra-Datagram eXchange):
Each side enlists several random DHT peers as hole-punch helpers—they play the same role that STUN servers do in WebRTC but are fully decentralized.
Both endpoints fire simultaneous UDX probes at every candidate (IP:port) they learn.
As soon as one path succeeds, a one-round-trip Noise_XX handshake derives a session key, and encrypted audio frames start flowing directly between devices.
In residential or mobile networks this succeeds ~70 %–80 % of the time, giving a pure P2P (peer-to-peer) path with minimal latency—no relay, no bandwidth fees.
3 · Volunteer relay fallback
If symmetric NAT (Network Address Translation), CGNAT (Carrier-Grade NAT), or a strict firewall blocks every hole-punch attempt:
Keet asks nearby peers whether any is willing to act as a relay for this call.
If at least one agrees, the audio stream is tunneled through that peer—still encrypted end-to-end by Noise—so neither relay nor network can eavesdrop.
When no volunteer relay is available, the call fails; Keet has no equivalent to TURN (Traversal Using Relays around NAT) hosted in a central data-center.
View quoted note →
Signal, WhatsApp, and Telegram all rely on WebRTC (Web Real-Time Communication) for their real-time voice and video calls. In a one-to-one call, the connection process can be divided into three stages:
Signaling exchange
Each endpoint uses the app’s signaling server to exchange SDP (Session Description Protocol) messages and ICE (Interactive Connectivity Establishment) candidates—IP address, port, encryption parameters, and so on.
NAT traversal attempt — STUN → direct connection
The client leverages a STUN (Session Traversal Utilities for NAT) server to discover its public-facing address and then starts ICE connectivity checks. In typical home or mobile networks, about 75 % – 80 % of calls succeed in establishing a P2P (peer-to-peer) connection, with media flowing directly between the two devices over SRTP (Secure Real-time Transport Protocol) and no relay involved.
Fallback relay — TURN
If NAT (Network Address Translation) types such as symmetric NAT, CGNAT (Carrier-Grade NAT), a corporate firewall, or a VPN (Virtual Private Network) blocks direct connectivity, ICE automatically abandons P2P and switches to TURN (Traversal Using Relays around NAT) to relay the media. This happens in roughly 20 % of cases, but TURN ensures the call can still be established under the worst network conditions—at the cost of higher bandwidth usage and added latency.
Evolution of Receiving Addresses in Signal, Simplex Chat, and Keychat
A receiving address is indispensable to any chat application—just as an envelope needs only the recipient’s address. Because this address is exposed plaintext metadata, its design determines how much metadata privacy the user enjoys.
Signal each user has a single receiving address that is also their ID. For Bob and Carl alike, Alice’s address is always the same—simply A—and it never changes.
Simplex Chat Here, the receiving address (smp://<queueKey>@<relay-host>/<queueId>) is different for every contact. Alice has one fixed address for Bob, A(b), and another for Carl, A(c). Having separate—but constant—addresses for each contact is already a significant improvement over Signal’s single, global address.
Keychat Keychat goes a step further: the address not only differs per contact but also rotates over time. Alice begins with A(b1)for Bob and A(c1) for Carl; after she replies, they become A(b2) and A(c2), and so on. Each time Alice responds to Bob, her address is refreshed. This dynamic, per-contact rotation provides even stronger privacy than Simplex’s static per-contact addresses.
On the Signal app’s Advanced settings page, you can choose how voice and video calls are routed.
• Peer-to-peer WebRTC – The call travels directly between you and your contact, so no media passes through Signal’s servers, but each party sees the other’s IP address.
• Relayed through Signal’s servers – The call is tunneled via Signal’s relay server, which hides your IP address from your contact but exposes it to Signal.
In the relayed mode you can run the app over a VPN to hide your real IP from Signal as well. In peer-to-peer mode, using a VPN often makes it hard (and sometimes impossible) to establish a direct connection.


Messages are encrypted locally on the client, independently of how they're transmitted. They can be relayed through a server or sent directly over a peer-to-peer channel.
View quoted note →
The more we’ve studied various chat apps, the more convinced we are that Keychat’s essence lies in creating an online version of the self — with chat and browser serving as its natural extensions.
View quoted note →
"WhatsApp Introduces Ads in Its App"
There is no long-lasting free lunch.
View quoted note →
Nostr video-sharing web apps:
https://kinostr.com/
View quoted note →
nostu.be
A modern Nostr video client
StreamCat
StreamCat - Nostr Live Streams
Watch and discover live streams on the Nostr network

zap.stream
zap.stream - Nostr Live Streaming
Nostr live streaming powered by Bitcoin lightning. Stream freely with Bitcoin payments, no censorship, open source.
Two more Nostr photo-sharing web apps: and — both look like great fits for Keychat Mini Apps. Thanks @Dikaios1517
LUMINA
An effortless, enjoyable, and innovative way to capture, enhance, and share moments with everyone, decentralized and boundless.
Zappix - Social Image Sharing on Nostr
Share and discover amazing images on the decentralized Nostr network. Built with React, TailwindCSS, and Nostrify.