- Remove log count badge from Logs tab, add tab count badge to Tabs tab
- Add default settings: Request Timeout, Ready Timeout, Disable on File URLs
- Each tab now generates its own unique keyPair for connections
- Add swarm.listen() for incoming connections in native host
- Fix event routing: only send events to tabs that own the swarm
- Give each example its own directory: chat/, whiteboard/, sdk-demo/, hrpc-demo/, data-demo/, screenshare/
- Split each into index.html, style.css, and app.js (no inline script/style; CSP-friendly)
- Remove old flat files (e.g. chat.html, whiteboard.html, whiteboard.js)
- Update README, examples/README, and docs/HRPC to use new paths
strokeStart (mousedown): { type: 'strokeStart', id, color, width } — other peers create a draft for this id.
strokeDraft (mousemove, throttled): { type: 'strokeDraft', id, points } — peers update that draft’s points and redraw so the line grows as you move.
stroke (mouseup): unchanged — final stroke; peers remove the draft and add the stroke to the main list.
Implementation
drafts: Map of id → { color, width, points } for in-progress strokes from others.
currentStrokeId: Set on mousedown and used for all messages for that stroke.
Throttling: strokeDraft is sent at most every 32ms (~30 fps) to limit traffic while keeping motion smooth.
Redraw: Draws committed strokes, then all drafts, then your own current stroke.
Clear: Clears both strokes and drafts.
finishStroke(): Sends one last strokeDraft with the full points before sending stroke, so the final segment isn’t missing on other peers.
- Add spec/hyperschema and spec/hrpc codegen (scripts/build-hrpc.js)
with unary, request/response-stream, duplex, and send-only commands
- Run build:hrpc and build:protomux from install.sh so setup is one-step
- Native host: add attachHrpc (Protomux channel + generated HRPC),
handlers for ping, streamSum, fetchStream, duplex, notify
- Load HRPC lazily so missing spec does not crash host; use bare-stream
for Duplex under Bare; add bare-stream, compact-encoding deps