WebSockets in Hono
From the Hono cheat sheet · Streaming & SSE · verified Jul 2026
WebSockets
Real-time bidirectional communication
typescript
import { Hono } from 'hono'
import { upgradeWebSocket } from 'hono/cloudflare-workers'
// or: 'hono/bun', 'hono/deno'
const app = new Hono()
app.get('/ws', upgradeWebSocket((c) => {
return {
onOpen(event, ws) {
console.log('Client connected')
ws.send('Welcome!')
},
onMessage(event, ws) {
console.log('Received:', event.data)
ws.send(\`Echo: \${event.data}\`)
},
onClose(event, ws) {
console.log('Client disconnected')
},
onError(event, ws) {
console.log('Error:', event)
},
}
}))💡 Import upgradeWebSocket from runtime-specific path
⚡ Bun requires exporting websocket with app.fetch
📌 onOpen not supported on Cloudflare Workers
🎯 Use RPC mode for type-safe WebSocket client