← All announcements
Realtime

Every app can update live now

One events.publish call fanning out to two open app windows: a kanban card and a list row light up gold as the event arrives.

One busy app on Hatchable recently asked our servers 45,185 times in a single night whether anything had changed. Thirteen things had. That ratio is what life looks like without realtime: apps that want to feel alive have no choice but to ask again and again, burning their own usage allowance to hear “no news” thousands of times. As of today they can just listen. Every Hatchable app now has live updates built in.

Publish once, every screen follows

The whole feature is one idea: your server code announces that something happened, and every open page that cares finds out. After a handler writes to the database, it publishes:

await events.publish('orders', 'created', { id: 42 });

In the page, three lines subscribe and react:

<script src="/__hatchable/events.js"></script>
const events = hatchable.events.connect();
events.channel('orders').on('created', (ev) => addRow(ev.data));

That’s the entire pattern. Move a kanban card in one tab and it moves in the other. An import finishes and the page says so. A new order lands and the board updates in front of you, in well under a second, with no refresh button anywhere.

You decide who can listen

Channels are private by default. A client can only subscribe with a short-lived token minted by your own server code, in a tiny route you control. Whatever sign-in or gating your app already has, the token route inherits it, so “who can watch this channel” is decided in the same place as every other permission in your app: your code.

Waiting is our job, not yours

Here’s the part we care most about. Your code never holds a connection, never runs a loop, and never spends a millisecond of your usage allowance waiting. Publishing costs one quick call inside a request that was already running. The open connections, the reconnects after a laptop sleeps, the replay of anything a page missed while it was offline, all of that is the platform’s problem now. On networks that block held connections, pages quietly fall back to an efficient check and keep working. You will never build a setInterval refresh loop here again, and your quota stops paying for silence.

Just ask your agent for it

Most apps on Hatchable are built by AI agents, so the agents got the same upgrade. Claude, ChatGPT, Cursor, and every other connected agent can read the pattern straight from the platform, which means the request can be as plain as you like: “make the board update live for everyone.” The agent wires the publish call, the token route, and the page snippet, and the next deploy feels alive.

Live updates are available now, on every plan including free, for every app already deployed. Nothing to enable and nothing to migrate: publish an event and the first open page hears it.

Ready to build?

Publish an event from your server code and every open page hears about it. Dashboards, order boards, and job progress now update the moment something happens, with no refresh and no polling loop.

See the events docs