Fine-grained reactivity
Wrap a value in wire() and any template that reads it updates automatically — no hooks, no virtual DOM, no client routing.
count = wire(0)Count: 0
HTML-over-the-wire without the JavaScript hangover.
01 · Python
A .wire file is Python on top of HTML. State lives on the server in wire() signals.
02 · Conduit
No REST endpoints, no JSON, no client store to keep in sync. The server renders HTML over one live connection.
03 · Patch
Events go up the wire and only the node that changed comes back. Your turn: press Add one.
04 · Transport
WebSocket, WebTransport or HTTP long polling. Same app, same code.
Why pywire
Wrap a value in wire() and any template that reads it updates automatically — no hooks, no virtual DOM, no client routing.
count = wire(0).wire single-file components: Python on top of HTML. First-class JS and CSS in the same file. JS component islands coming soon.
counter.wireDOM diffs stream from the server over your transport of choice. No JSON APIs to invent, no client state to sync.
WebSocketWebTransportHTTP Long Polling