A decentralized, terminal-native SNS built on ed25519 elliptic curve cryptography. Every post is signed, every identity is your key — zero passwords, zero gatekeepers.
No browser bloat. Everything from posting to DMing is handled natively within your command line. Perfect with tmux or Zellij.
Your identity is your ed25519 public key. Secure authentication without passwords — every action is cryptographically signed.
WebSocket-powered live updates. Connect to the stream and see posts, DMs, and presence changes as they happen.
Every post carries an ed25519 signature, ensuring authenticity. Verify authorship without trusting a central authority.
Signed, authenticated DMs with real-time delivery via WebSocket. Every message is verifiable and tamper-proof.
Interactive DM chat mode with live WebSocket messaging. Connect to any user and chat in real-time with cryptographic signatures.
Update your display name, bio, and avatar URL directly from the CLI with the kb edit-profile command.
Built-in admin system with user management, account deletion with cascade, and admin privilege grants via dedicated API endpoints.
Full Nostr integration: generate/manage nsec/npub keys, push koshi posts to Nostr relays, pull events from the Nostr network. Cross-post seamlessly between koshi and Nostr.
Hypercore-powered peer-to-peer synchronization. Your posts and DMs are replicated across connected peers via hyperswarm DHT. No central server needed for data distribution.
Manage multiple identities from a single CLI. Switch between accounts with kb switch, register or import Nostr keys per account. All credentials stored securely in ~/.config/koshi/config.json.
End-to-end encrypted group messaging with Sender Keys. Create groups, invite members, share images/files. All groups are always E2EE — server never sees plaintext.
Full X3DH protocol support for E2E encryption. Register devices, fetch key bundles, manage one-time prekeys. Ready for Signal-style double ratchet.
First-class TypeScript types for client developers. import { Group, DM, Device, WSEventMap } from '@ryopc/koshi/types' — build your own client with full type safety.
Real-time typing start/stop events for both DMs and group chats. See when others are typing via WebSocket.
Unified read receipts for DMs and group messages. Delivered via WebSocket for instant cross-device sync.
| Command | Description | Auth |
|---|---|---|
kb register | Create a new account with ed25519 keypair | No |
kb login | Authenticate using existing keypair | No |
kb whoami | Show your profile information | Yes |
kb post | Create a new post on the board | Yes |
kb feed [--limit=N] | Display your post feed | Opt |
kb follow | Follow a user | Yes |
kb unfollow | Unfollow a user | Yes |
kb dm | Send a direct message | Yes |
kb dms [--unread] | View your direct messages | Yes |
kb chat | Interactive real-time DM chat | Yes |
kb edit-profile | Update your display name, bio, avatar | Yes |
kb profile [username] | View a user's profile | Opt |
kb search | Search users by username | Opt |
kb groups [list|create|delete|info] | Manage groups (E2EE group chats) | Yes |
kb group | Manage group members | Yes |
kb devices [list|remove] | Device management for E2E (X3DH) | Yes |
kb keys [rotate|bundle] | Key management (X3DH bundles) | Yes |
kb config set | Configuration management | Yes |
kb admin promote | Promote user to admin | Admin |
kb realtime | Connect to the live event stream | Yes |
kb serve [--port=N] [--daemon] | Start local serverless node (SQLite+P2P+Web UI) | No |
kb connect | Connect to a remote server / --reset for local mode | No |
kb admin | Admin: users, delete-user, grant, revoke | Admin |
kb p2p | P2P node: status, sync, peers | No |
kb nostr | Nostr: key, relay, push, pull | Yes |