"Choose the transport by the shape of the traffic. Rekindle has nothing the backend must continuously read — so plain HTTP wins."
Match the Transport to the Traffic
A WebSocket is a persistent, bidirectional pipe — powerful, and more complex to run and reason about than plain HTTP. The right question isn't "which is fancier" but "what shape is the traffic?" Rekindle's traffic is simple: you send a message and get a streamed reply; you select text and fire a one-shot rewrite. Nothing flows continuously from the editor into the backend. So Rekindle uses REST to bind and SSE to stream — the same embed model cwkBonfire uses — and skips the WebSocket entirely.
Why Cinder Needs a WebSocket and Rekindle Doesn't
The contrast with Cinder is the whole lesson. Cinder rides beside Photoshop, whose UXP plugin continuously pushes state the backend must read — a real producer leg, a constant upstream flow that justifies a persistent socket. Rekindle has no producer leg. The document context is pushed per turn, not streamed continuously; there's no live feed the backend must keep reading. Same family, different traffic shape, correctly different transport.
Surface Upstream flow Transport
------- --------------------------- ----------------------
Cinder Photoshop pushes constantly WebSocket (producer leg)
Rekindle a message, then a reply REST (bind) + SSE (stream)
# No continuous producer -> no WebSocket. Plain HTTP is the right size.
REST to Bind, SSE to Stream
Concretely: a REST call binds the document to a conversation and sends a turn; the reply streams back token-by-token over SSE, exactly as cwkPippa's own chat does. CMD+K is even simpler — a single POST that returns a rewrite. Both fit plain HTTP perfectly. Picking the smaller sufficient transport isn't timidity; it's the same discipline as borrowing the smallest sufficient layer (Track 3) and reusing the existing engine (Track 5). Don't run a persistent socket for traffic that a request-and-stream already serves.