Count: 0

The Live Conduit for Python

HTML-over-the-wire without the JavaScript hangover.

01 · Server

State lives on the server

Variables wrapped in wire() become reactive data sources that drive UI updates.

02 · Wire

Diffs over the wire

When state changes, the server pushes a DOM diff over a WebSocket.

03 · Browser

The page patches in place

Each diff lands on the element it changed. Click Add one to send an event up the wire.

Why pywire

The frontend ergonomics of Svelte. The simplicity of Python.

counter.wire
---
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>

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)

One file, many languages

.wire single-file components: Python on top of HTML. First-class JS and CSS in the same file. JS component islands coming soon.

counter.wire

Live by default

DOM diffs stream from the server over your transport of choice. No JSON APIs to invent, no client state to sync.

WebSocketWebTransportHTTP Long Polling