Real-time messaging for the terminal
Terminal-native chat with Kafka-powered messaging, room-based conversations, and JWT authentication.
curl -fsSL https://chatpulse.online/install.sh | bash
Installs pipx if needed, then installs the CLI in an isolated environment and configures your shell PATH:
curl -fsSL https://chatpulse.online/install.sh | bash
Or with pipx directly (universal, any OS):
pipx install chatpulse-cli && pipx ensurepath
Installs pipx if needed, then installs the CLI in an isolated environment and configures your user PATH:
irm https://chatpulse.online/install.ps1 | iex
Or install with pipx directly:
pipx install chatpulse-cli; pipx ensurepath
All commands work natively. For interactive chat (chatpulse chat), use WSL.
Prerequisite: Python 3.10+. After installation, open a new terminal so the persisted PATH change is loaded.
No browser, no GUI, no Electron. Just your shell and a fast, responsive TUI.
Messages flow through Apache Kafka with pub/sub broadcast — instant delivery, no polling overhead.
Create rooms, invite members, and manage conversations. Rooms auto-delete when the creator leaves.
Secure token-based auth with auto-refresh. Tokens are isolated per terminal for multi-session safety.
curl -fsSL https://chatpulse.online/install.sh | bash
chatpulse auth register username your@email.com
chatpulse auth login username
chatpulse rooms create my-room
chatpulse chat 1
| Command | Description |
|---|---|
auth register | Create a new account |
auth login | Login and store JWT tokens |
auth logout | Clear stored tokens |
auth me | Show current user profile |
rooms list | List all available rooms |
rooms create | Create a room and auto-join |
rooms show | Show room details and members |
rooms join | Join a room |
rooms leave | Leave a room (creators delete it) |
messages send | Send a message to a room |
messages history | Show message history with pagination |
chat | Enter interactive chat mode |
config show | Show current configuration |
config set-api-url | Set persistent API URL override |
config reset | Reset to default production URL |
/api/auth/register/
Register a new user
# Request { "username": "alice", "email": "alice@example.com", "password": "secret123", "password2": "secret123" } # Response 201 { "message": "Registration successful.", "user": { "id": 1, "username": "alice", "email": "alice@example.com", "is_online": false } }
/api/auth/login/
Authenticate and get JWT tokens
# Request { "username": "alice", "password": "secret123" } # Response 200 { "access": "<jwt-token>", "refresh": "<refresh-token>", "user": { "id": 1, "username": "alice", "email": "alice@example.com", "is_online": true } }
/api/rooms/
List all rooms
# Response 200
[{ "id": 1, "name": "general", "creator": { "id": 1, "username": "alice" }, "member_count": 1, "is_member": true, "created_at": "..." }]
/api/messages/send/
Send a message to a room
# Request { "room_id": 1, "content": "hello world" } # Response 202 { "status": "Message sent.", "message": { "room_id": 1, "sender_id": 1, "sender_username": "alice", "content": "hello world", "timestamp": "..." } }
/api/messages/?room_id=1&limit=50
Retrieve messages with cursor pagination
# Response 200
{ "messages": [{ "id": 1, "room_id": 1, "sender": { "id": 1, "username": "alice" }, "content": "hello world", "timestamp": "..." }], "has_more": false }