⚠️ This is an untested, vibe-coded 30th-anniversary tribute to ICQ. It compiles and launches, but nothing beyond that has been verified. Do not use it to carry anything you care about. Bugs, protocol gaps, and rough edges are expected.
A NOSTR-native instant messenger in the spirit of classic desktop pagers.
Unofficial fan project. Not affiliated with, endorsed by, or sponsored by VK or the holders of the ICQ® trademark. "ICQ" and the five-petal daisy logo are trademarks of their respective owners. nICQ uses a distinct six-petal hex-flower glyph and entirely new, synthesized notification sounds.
Every nICQ node runs its own embedded NOSTR relay and joins a libp2p gossip mesh, so messages deliver peer-to-peer across LAN (mDNS) and WAN (QUIC + WebRTC + DCUtR hole-punching). Public NOSTR relays are used as fallback inbox for recipients who aren't on the mesh.
| NIP | Role in nICQ |
|---|---|
| 01 | Event sign/verify |
| 02 | Contact list = buddy list |
| 05 | DNS-based identifier (alice@nicq.im) |
| 17 | Private DMs (kind:14 chat rumors) |
| 19 | bech32 identities (npub/nsec) |
| 28 | Public chat rooms |
| 38 | User status (Online/Away/N/A/Occupied/DND/Free4Chat) |
| 44 | Payload encryption (ChaCha20 + HMAC) |
| 51 | Ignore list |
| 59 | Gift-wrap / seal |
| 65 | Relay list metadata (inbox/outbox) |
- Frontend: Tauri 2 + Svelte 5 (runes) + TypeScript,
98.cssskin - Mesh relay sidecar: Rust — embedded NIP-01 relay over SQLite + libp2p gossipsub/mDNS/QUIC/WebRTC/DCUtR
- Crypto:
@noble/curves(schnorr),nostr-tools(NIP-19/44 reference) - Keystore: OS keychain via
keyring-rs
npm install
npm run tauri:dev # develop
npm run tauri:build # package for current OSsrc/ Svelte UI + NIP protocol layer (TS)
lib/nostr/ NIP-01/02/05/17/19/28/38/44/51/59/65 + UIN derivation
lib/ui/ Skeuomorphic widgets
lib/stores/ session, roster, chats (Svelte 5 runes)
src-tauri/ Tauri shell (Rust)
relay-sidecar/ Embedded relay + libp2p mesh (Rust crate)
MIT. See LICENSE.