Supporters
JOIN MY SPONSORS
Zero config · Free forever

Zero-Config WebSockets.

No accounts, no API keys, nothing to deploy. Just connect and start sending.

466 bytes
min+gzip
0 setup
No Servers, No Accounts
$0 per month
Free Forever

Connect and go.

Import the client. Pick a channel name. Send messages. Everyone on the same channel hears everything — it's that simple.

No client boilerplate. No server to deploy. No accounts to create. Just instant pub/sub from any browser or runtime that supports WebSockets.

app.js
import { connect } from 'itty-sockets' // ~466 bytes

connect('my-channel')
  .on('message', ({ message }) => console.log(message))
  .send('hello world')   // strings
  .send([1, 2, 3])       // arrays
  .send({ foo: 'bar' })  // objects

Realtime apps in seconds.

Build multiplayer apps, live dashboards, collaborative tools, or just a simple chat room. The API is so small you'll memorize it on the first read.

chat.js
import { connect } from 'itty-sockets'

// two users, same channel
const alice = connect('chat-room', { as: 'Alice' })
const bob   = connect('chat-room', { as: 'Bob' })

alice.on('message', ({ message, alias }) =>
  console.log(`${alias}: ${message}`)
)

bob.send('hey Alice!')
// → "Bob: hey Alice!"
Zero Configuration
No accounts, no API keys, no server. Pick a private channel name and you're live. It's that simple.
Zero Cost
No tiers. No credit card. Built for the community.
Private by Default
No logging. No tracking. No storage. Your messages are relayed and forgotten. This is cheaper for me, and safer for you. Want even more privacy? Encrypt your messages before sending.
Send Anything
Strings, objects, arrays — anything JSON-serializable. I just deliver messages. You decide what they look like.
Reservations
Reserve your brand's namespace, controlling who can join or send channels — full access control without a backend.
Tiny Client
466 bytes gzipped and fully typed. It solves WebSocket race conditions, adds powerful message routing, one-line reconnections. You can't write your own WebSocket boilerplate for less.

Need a bit more control?

Reserve a namespace to control who can join or send on your channels. Set keys, manage overrides, all from your dashboard.

Sign in with GitHub
secure.js
import { connect } from 'itty-sockets'

// namespace-protected channel
connect('myapp:notifications', {
  joinKey: 'your-join-key',
  sendKey: 'your-send-key',
})