Real-time messaging for the terminal
Terminal-native chat with Kafka-powered messaging, room-based conversations, and JWT authentication.
curl -sSL https://chatpulse.online/install.sh | bash
Recommended — handles PEP 668 automatically:
curl -sSL https://chatpulse.online/install.sh | bash
Or install directly with pip:
pip install chatpulse-cli
Install:
curl -sSL https://chatpulse.online/install.sh | bash
If chatpulse is not found after install, add to PATH:
echo 'export PATH="$HOME/Library/Python/3.13/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
Install with pip (run as admin if needed):
pip install chatpulse-cli
If chatpulse is not recognized, add to your PATH — search "Environment Variables" and append:
%APPDATA%\Python\Python313\Scripts
For interactive chat (chatpulse chat), use WSL.
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 -sSL 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 }