Cliente de terminal
Interface feita com Ink, que é React renderizado no terminal. Salas, lista de quem está online, histórico com rolagem e uma cor estável por usuário.
O hackerchat é um cliente de chat que roda no terminal, um servidor WebSocket enxuto e um SDK em JavaScript. Você sobe o servidor, entra numa sala e conversa direto do shell, ou de qualquer interface que fale WebSocket.
Cliente, servidor e SDK trocam frames JSON por WebSocket. Cada peça é um repositório independente, e qualquer uma delas pode ser substituída por uma implementação sua.
Interface feita com Ink, que é React renderizado no terminal. Salas, lista de quem está online, histórico com rolagem e uma cor estável por usuário.
Hub em Node.js que cria salas sob demanda e roteia mensagens entre os clientes conectados. Sem banco de dados, sem cadastro, sem estado fora da memória.
Cliente para navegador ou Node, com bindings opcionais para React. Liga qualquer interface ao servidor em poucas linhas.
Cada mensagem é um objeto JSON com um evento e um payload. Quatro eventos cobrem tudo: entrar numa sala, enviar mensagem, receber a lista de usuários e saber quando alguém entra ou sai.
{ "event": "joinRoom",
"message": { "userName": "alice",
"roomId": "general" } }
{ "event": "message",
"message": "hello, world" }{ "event": "updateUsers",
"message": [{ "id": "…", "userName": "alice" }] }
{ "event": "newUserConnected",
"message": { "id": "…", "userName": "alice" } }
{ "event": "message",
"message": { "userName": "alice",
"message": "hello, world" } }
{ "event": "disconnectUser",
"message": { "id": "…", "userName": "alice" } }O servidor público foi desativado. Clone o servidor, rode localmente e aponte o cliente para ele. Leva menos de um minuto.
Requer Node.js 24 ou mais recente.
Clone o repositório e rode em modo de desenvolvimento. Ele escuta na porta 9898 por padrão; use a variável PORT para trocar.
git clone https://github.com/matheussartori/hackerchat-server.git
cd hackerchat-server
npm install
npm run dev
# listening on ws://0.0.0.0:9898Em outro terminal, rode o cliente com npx, sem instalar nada. As flags --username e --room são obrigatórias, e --hostUri aponta para o seu servidor.
npx @matheussartori/hackerchat-client \
--username alice \
--room general \
--hostUri ws://localhost:9898Abra um terceiro terminal com outro nome de usuário, ou entre pelo playground no fim da página, e veja as mensagens chegarem em tempo real.
npx @matheussartori/hackerchat-client \
--username bob \
--room general \
--hostUri ws://localhost:9898Instale o cliente globalmente e chame hackerchat direto.
npm install -g @matheussartori/hackerchat-client
hackerchat --username alice --room general --hostUri ws://localhost:9898Tudo o que o cliente e o servidor aceitam, num lugar só.
| flag | descrição | uso |
|---|---|---|
--username | Nome exibido na sala. | obrigatória |
--room | Sala para entrar. É criada se ainda não existir. | obrigatória |
--hostUri | URL WebSocket do servidor, com ws:// ou wss://. Sem ela, o cliente tenta o endereço público antigo, que foi desativado. | recomendada |
| tecla | ação |
|---|---|
| Enter | Envia a mensagem. |
| PgUp / PgDn | Rola o histórico uma página por vez. |
| Ctrl+U / Ctrl+D | Rola o histórico uma linha por vez. |
| Home / End | Vai para a mensagem mais antiga ou volta para a mais recente. |
| Esc / Ctrl+C | Sai do cliente. |
| variável | padrão | descrição |
|---|---|---|
PORT | 9898 | Porta TCP em que o servidor escuta. |
LOG_LEVEL | error | Nível mínimo de log: debug, info, warning ou error. |
Tudo em TypeScript, sob licença MIT. O servidor não é publicado no npm: clone e rode.
npx @matheussartori/hackerchat-clientnpm install @matheussartori/hackerchat-js-sdkEsta seção usa o @matheussartori/hackerchat-js-sdk para se conectar a um servidor hackerchat. Suba um servidor local, ou informe o endereço de um seu, e entre numa sala.
import { useHackerchat } from '@matheussartori/hackerchat-js-sdk/react'
const { status, users, messages, sendMessage } = useHackerchat({
url: 'ws://localhost:9898',
userName: 'alice',
roomId: 'general',
})