Realtime nativo
sobre Postgres.
Subscriptions a postgres_changes, presença multi-usuário e broadcast de eventos efêmeros — tudo num único WebSocket. Drop-in do Supabase Realtime, com latência sub-10ms dentro do Brasil.
Veja seu app ao vivo no painel.
Canais, presença, broadcast e WebSocket — em PT-BR, dark por padrão, no Studio do SuperDB.
| Evento | Tabela | Payload | Canal | Quando |
|---|---|---|---|---|
| INSERT | proj_chat.messages | id: 4821, user: maria | chat-sala-1 | agora |
| UPDATE | proj_chat.reactions | msg_id: 4819, emoji: 👍 | chat-sala-1 | há 1s |
| INSERT | proj_chat.messages | id: 4820, user: joao | chat-sala-1 | há 3s |
| DELETE | proj_chat.messages | id: 4815 | chat-sala-1 | há 5s |
| INSERT | proj_shop.cart_items | cart: 91, product: 1284 | cart-updates | há 7s |
| UPDATE | proj_chat.users | id: 218, status: online | presence-online | há 12s |
| INSERT | proj_chat.messages | id: 4818, user: ana | chat-sala-1 | há 14s |
| Usuário | Sala | Estado | Última atividade |
|---|---|---|---|
| Mmaria.silva | chat-sala-1 | online | agora |
| Jjoao.dev | chat-sala-1 | digitando… | agora |
| Aana.costa | chat-sala-1 | online | há 2s |
| Ccarlos.lima | game-lobby | away | há 3min |
| Ppaula.tech | doc-edit-42 | digitando… | agora |
| Rrenato.eng | dash-live | online | há 4s |
| Lluiza.pm | chat-sala-2 | online | agora |
| Evento | Canal | Payload | De | Quando |
|---|---|---|---|---|
| typing | chat-sala-1 | { user_id: 218 } | maria | agora |
| cursor | doc-edit-42 | { x: 412, y: 89 } | paula | agora |
| reaction | chat-sala-1 | { emoji: '🎉', msg: 4819 } | joao | há 1s |
| typing | chat-sala-2 | { user_id: 142 } | luiza | há 2s |
| notify | notifications | { kind: 'mention', from: 47 } | system | há 3s |
| cursor | doc-edit-42 | { x: 218, y: 312 } | renato | há 4s |
| reaction | chat-sala-1 | { emoji: '👍', msg: 4818 } | ana | há 6s |
| Pool | Conexões | P50 latência | P99 latência | Status |
|---|---|---|---|---|
| br-sp-1 | 2.812 | 6ms | 14ms | ok |
| br-sp-2 | 2.418 | 7ms | 16ms | ok |
| br-rj-1 | 1.621 | 9ms | 22ms | ok |
| br-pe-1 | 987 | 12ms | 31ms | ok |
| br-rs-1 | 583 | 11ms | 27ms | degraded |
O que tem dentro.
Realtime que o frontend pede e o backend não bloqueia — sub-10ms dentro do Brasil.
postgres_changes
Subscriba a INSERT/UPDATE/DELETE em qualquer tabela com filtros por coluna. RLS aplicado por linha — o usuário só recebe o que pode ler.
Presence multi-usuário
Estado compartilhado por canal: quem tá online, digitando, onde tá o cursor. Sync com last-write-wins por chave.
Broadcast efêmero
Eventos in-memory que não passam pelo banco: typing indicators, cursor positions, reactions, notifications. Sub-ms de overhead.
Auth via JWT
O token do usuário autoriza canal e linha. Suporta refresh em runtime — quando o JWT renova, o socket continua sem reconectar.
Pools regionais BR
Pools em SP, RJ, PE e RS. Latência média sub-10ms dentro do Brasil. P99 abaixo de 30ms até no Nordeste.
Auto-reconnect
Reconexão com backoff exponencial, replay de eventos perdidos (com cursor) e fila de mensagens durante offline curto.
Backpressure
Rate limit por canal e por client. Drop de eventos antigos quando o consumidor não acompanha — sem travar o server.
Métricas no Studio
Connections ativas, msgs/sec, latência P50/P99, dropped %, pools. Dashboards prontos por projeto.
WAL nativo
Lê do Write-Ahead Log do Postgres direto. Zero polling, zero triggers customizados. Cobertura completa de alterações.
Drop-in Supabase
Mesma API de db.channel(...).on('postgres_changes').subscribe(). Troca o import e migra sem refactor.
Subscriba a um canal
com 1 import.
A API do @superdb/supabase-compat é idêntica à do @supabase/supabase-js. Os métodos db.channel(), .on('postgres_changes'), .on('presence') e .on('broadcast') funcionam exatamente igual.
Você combina os três tipos de evento no mesmo canal — mudanças de tabela, sincronização de presença e broadcasts efêmeros — num único WebSocket.
import { createClient } from '@superdb/supabase-compat'
const db = createClient(url, anonKey)
const channel = db.channel('chat-sala-1')
.on('postgres_changes',
{ event: 'INSERT', schema: 'proj_chat', table: 'messages' },
(payload) => addToUI(payload.new)
)
.on('presence', { event: 'sync' }, () => {
const online = Object.keys(channel.presenceState()).length
setOnline(online)
})
.on('broadcast', { event: 'typing' }, ({ payload }) => {
showTyping(payload.user_id)
})
.subscribe()
await channel.track({ user_id: session.user.id, name: 'Felipe' })
Realtime que entende a rede brasileira.
Pronto pra deixar o app ao vivo?
Tier Free generoso: 200 connections simultâneas, 2M de mensagens/mês, todos os tipos de canal. Sem cartão.