Decentralized Obelisk: Nostr-native chat & voice with WoT filtering and mediasoup SFU
翻译准备中
正在加载完整 README。
查看完整 README ↗A Next.js app whose browser side talks directly to Nostr relays. Channels, members, admins, messages, DMs, voice, zaps, all reconstructed from NIP-29 / NIP-17 / NIP-04 events. There is no Postgres, no session server, no Socket.io: just the browser, a relay, and your keys.
npm run build + npm start, behind any reverse proxy.https://github.com/user-attachments/assets/4b6e31a9-a30d-43b3-b18a-dd21c1cf9c15
Full guided tours: obelisk.ar/desktop · obelisk.ar/mobile.
| Live | obelisk.ar: the client, pointed at a public relay I operate |
| La Crypta | A community of 20+ migrated from Discord |
| Self-host | git clone + npm run build + npm start. Bring your own relay. |
git clone https://github.com/obelisk-app/obelisk.git
cd obelisk
npm install
npm run dev # http://localhost:3000
No .env is required for local development. New installs currently start with wss://public.obelisk.ar and wss://lacrypta-relay.obelisk.ar; optional relay suggestions come from NEXT_PUBLIC_RECOMMENDED_RELAYS.
For HTTPS dev (needed for NIP-07 / mobile testing): npm run dev:raise (requires a Cloudflare tunnel, see docs/operations/cloudflare-tunnel.md).
/api/link-preview, unfurls OpenGraph cards so a link you only view never reaches a third-party service.src/lib/relay-hub/): the one owner of every relay socket: one socket per relay per identity, NIP-42 AUTH once per relay and key, shared subscriptions, bounded caches.src/services/nostr-bridge/): identity, the session, group and DM state, subscriptions, and the React hooks, reached through @/services/nostr-bridge and <BridgeProvider>. Read this first if you're contributing.useIsLoggedIn, useMyPubkey, useSignerReady. Don't introduce a backend session.See architecture, UI conventions and operations. AGENTS.md is the repository rules reference.
| Repo | What |
|---|---|
| obelisk-app/obelisk | This repo: the chat app (relay-only) |
| obelisk-app/obelisk-relay | NIP-29 groups relay (Rust, fork of verse-pbc/groups_relay) |
| obelisk-app/obelisk-sfu | mediasoup SFU for voice channels (Node, Nostr-RPC signaling) |
| obelisk-app/obelisk-agents | Nostr bots for NIP-29 groups (price ticker, admin/welcome bots, agent-friendly CLI) |
| obelisk-app/obelisk-sky | A 3D village that is an Obelisk client (sky.obelisk.ar) |
| obelisk-app/obelisk-apps | Games and apps published as Nostr events, run sandboxed by the client |
| obelisk-app/obelisk-menhir | Host a private chat server from your own computer, over Tor (MVP) |
| obelisk-app/obelisk-design | Design system, security workflows and development style |
| obelisk-app/obelisk-classic | Retired July 28, 2026: the original Postgres + Socket.io stack |
Three methods, all client-side:
| Method | How |
|---|---|
| NIP-07 extension | Click "Connect"; auto-detected (button hides if no extension) |
| nsec | Paste nsec1... |
| NIP-46 bunker | Paste a bunker:// URL or scan a Nostr Connect QR |
The session record lives in localStorage, but its secrets (an nsec, a bunker URL) are sealed first with a non-extractable AES-GCM key kept in IndexedDB, so nothing secret is stored in the clear. NIP-42 AUTH is answered once per relay and key by the relay hub.
NIP-01 · NIP-04 · NIP-05 · NIP-07 · NIP-11 · NIP-17 · NIP-29 · NIP-42 · NIP-44 · NIP-46 · NIP-50 · NIP-57 · NIP-59 · NIP-65 · NIP-78
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗