API Status: Online

ChatPulse

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
Linux Ubuntu, PopOS, Fedora, Arch

Recommended — handles PEP 668 automatically:

curl -sSL https://chatpulse.online/install.sh | bash

Or install directly with pip:

pip install chatpulse-cli
macOS Intel & Apple Silicon

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
Windows PowerShell / CMD

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.

chatpulse
$ chatpulse auth register alice alice@example.com
Password: ••••••••••••
✓ Registration successful.
$ chatpulse rooms create general
✓ Room 'general' created and joined!
$ chatpulse rooms list
┌──────┬─────────┬─────────┬─────────┬────────┐
│ ID │ Name │ Creator │ Members │ Joined │
├──────┼─────────┼─────────┼─────────┼────────┤
│ 1 │ general │ alice │ 1 │ (you) │
└──────┴─────────┴─────────┴─────────┴────────┘
$ chatpulse chat 1
ℹ Joined general (room 1)
ℹ Type your message and press Enter to send.
────────────────────────────────
10:30:01 alice: hello world
10:30:05 alice: anyone there?
> _

Why ChatPulse?

Terminal Native

No browser, no GUI, no Electron. Just your shell and a fast, responsive TUI.

Real-time via Kafka

Messages flow through Apache Kafka with pub/sub broadcast — instant delivery, no polling overhead.

Room-based Chat

Create rooms, invite members, and manage conversations. Rooms auto-delete when the creator leaves.

JWT Authentication

Secure token-based auth with auto-refresh. Tokens are isolated per terminal for multi-session safety.

Quick Start

1

Install the CLI

curl -sSL https://chatpulse.online/install.sh | bash
2

Register an account

chatpulse auth register username your@email.com
3

Login

chatpulse auth login username
4

Create a room and start chatting

chatpulse rooms create my-room
chatpulse chat 1

CLI Reference

Command Description
auth registerCreate a new account
auth loginLogin and store JWT tokens
auth logoutClear stored tokens
auth meShow current user profile
rooms listList all available rooms
rooms createCreate a room and auto-join
rooms showShow room details and members
rooms joinJoin a room
rooms leaveLeave a room (creators delete it)
messages sendSend a message to a room
messages historyShow message history with pagination
chatEnter interactive chat mode
config showShow current configuration
config set-api-urlSet persistent API URL override
config resetReset to default production URL

API Reference

POST /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 } }
POST /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 } }
GET /api/rooms/ List all rooms
# Response 200
[{ "id": 1, "name": "general", "creator": { "id": 1, "username": "alice" }, "member_count": 1, "is_member": true, "created_at": "..." }]
POST /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": "..." } }
GET /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 }

Architecture

CLI Python/Typer HTTPS Nginx Reverse Proxy proxy Django Gunicorn WSGI Kafka Producer topic Aiven Kafka Message Broker SASL_SSL Kafka Consumer PostgreSQL Neon (Cloud) persist Redis Upstash (Cloud) Pub/Sub produce cache