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 · Server
Variables wrapped in wire() become reactive data sources that drive UI updates.
02 · Wire
When state changes, the server pushes a DOM diff over a WebSocket.
03 · Browser
Each diff lands on the element it changed. Click Add one to send an event up the wire.
Why pywire
---
count = wire(0)
---
<p>Count: {count}</p>
<button @click={count += 1}>
Add One
</button>---
count = wire(0)
---
<p>Count: {count}</p>
<button @click={count += 1}>
Add One
</button>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