From Feb 10, 2025
Changemap
A detailed day-by-day record of every protocol decision, SDK milestone, and infrastructure improvement since ClawXP was first conceived.
ProtocolSDKInfraDocsSecurityIntegrationFix
Feb 21Day 12
Feb 21, 2025Day 12
Next.js 15 + React 19 upgrade, Playground launch
Docs- Upgraded from Next.js 14 to 15.1.9 - async params, full RSC support
- Upgraded React 18 → 19 to match Next.js 15 bundled runtime
- Migrated next-mdx-remote from v4.4.1 (CVE) to v6.0.0 (RSC API)
- Rewrote MDXContent as a server component - serialize step eliminated
- Launched interactive Playground page for real-time protocol testing
- Full brand rename: Clawde3Protocol → ClawXP across all files
- New footer with 4-column layout, legal pages, and OpenClaw attribution
- Added OpenClaw integration section to homepage with SVG flow diagram
Feb 20Day 11
Feb 20, 2025Day 11
v0.1.0 public release
Protocol- Tagged v0.1.0 of @clawxp/protocol and @clawxp/sdk
- Published both packages to npm under the @clawxp scope
- Documentation site went live at clawxp.xyz
- Added OpenGraph + Twitter card metadata for all marketing pages
- Launched sitemap.ts with priority/frequency for all routes
Feb 19Day 10
Feb 19, 2025Day 10
Documentation site & content
Docs- Wrote all seven core MDX documentation pages (introduction through troubleshooting)
- Built DocsSidebar with mobile drawer and active-link highlighting
- Built DocsTOC with IntersectionObserver-based active-heading tracking
- Implemented prev/next navigation between docs pages
- Added Callout component for info/warning/error/success callouts
- Configured rehype-slug and rehype-highlight for heading anchors and syntax coloring
Feb 18Day 9
Feb 18, 2025Day 9
First OpenClaw integration milestone
Integration- Established integration contract with OpenClaw agent runtime (openclaw.ai)
- ClawXP selected as real-time pub/sub transport for OpenClaw live streams
- Implemented `openclaw:agent-stream` channel convention
- Added stream-mode subscription for model output / thought streaming
- Integration test suite: verified sub-100ms end-to-end for agent events
Feb 17Day 8
Feb 17, 2025Day 8
Rate limiting & backpressure
Infra- Implemented token-bucket rate limiting per connection (configurable burst/refill)
- Added per-channel publish rate limits via server config
- Backpressure: server pauses stream when client buffer exceeds watermark
- Graceful degradation: drops oldest buffered datagrams under memory pressure
- Added `connection.ratelimited` event emitted to SDK on throttle
Feb 16Day 7
Feb 16, 2025Day 7
Redis adapter for horizontal scaling
Infra- Built pluggable adapter interface: `IClawXPAdapter` with `publish()` / `subscribe()`
- Implemented `InMemoryAdapter` as the default zero-dependency adapter
- Implemented `RedisAdapter` using ioredis pub/sub for cross-node fan-out
- Adapter hot-swap: replace in-memory with Redis by changing one config line
- Added `adapter.connected` and `adapter.error` health events
- Tested 10-node Redis cluster with 50k concurrent connections
Feb 15Day 6
Feb 15, 2025Day 6
@clawxp/sdk client library (v0.1.0-alpha)
SDK- Built ClawXPClient class with connection lifecycle management
- Implemented `subscribe(channel, { mode, onMessage, onStale })` API
- Implemented `publish(channel, data)` with automatic serialization
- Added automatic reconnection with exponential backoff (max 30s)
- Added automatic re-subscription after reconnect (restores all active subscriptions)
- Client-side freshness tracking: drops datagrams with seq ≤ last-seen-seq
- Added `connection.state` observable: connecting / connected / disconnecting / disconnected
- TypeScript-first: full generics on message payloads
Feb 14Day 5
Feb 14, 2025Day 5
@clawxp/protocol package (v0.1.0-alpha)
Protocol- Packaged the server runtime as `@clawxp/protocol`
- Exported `createServer(config)` factory and `ClawXPServer` class
- Config schema: `port`, `adapter`, `auth`, `rateLimits`, `origins`
- Added `server.on("connection")`, `server.on("subscribe")`, `server.on("publish")` hooks
- Wrote integration test harness with in-process server + SDK client
Feb 13Day 4
Feb 13, 2025Day 4
Authentication system (JWT)
Security- Designed auth flow: client sends JWT in `Authorization: Bearer` header on connect
- Server validates JWT signature, expiry, and audience before accepting connection
- Implemented configurable `auth.verify(token)` hook for custom auth logic
- Added per-channel ACL: `auth.can(claims, channel, action)` hook
- Reject unauthorized connections with structured `4001 Unauthorized` close frame
- Added HMAC-signed connection tokens as an alternative to JWT for simpler setups
Feb 12Day 3
Feb 12, 2025Day 3
WebSocket fallback + protocol wire format
Protocol- WebTransport (HTTP/3) primary path: each channel = independent QUIC stream
- WebSocket fallback path: multiplexed channels over a single WS connection
- SDK detects WebTransport support and falls back in < 50ms (no user impact)
- Designed binary wire format: `[type:1][seq:4][channel-len:2][channel][payload]`
- Message types: SUBSCRIBE / UNSUBSCRIBE / PUBLISH / ACK / ERROR / PING / PONG
- Datagram mode: uses WebTransport datagrams or WS with `seq` for freshness
- Stream mode: uses dedicated QUIC bidirectional stream or WS with ordering guarantee
Feb 11Day 2
Feb 11, 2025Day 2
Core QUIC/HTTP3 transport layer
Protocol- Evaluated h3, @fails-components/h3, and Node.js native QUIC (experimental)
- Selected WebTransport API for browser clients - available in Chrome 97+, Edge 97+
- Server uses Node.js QUIC with @webtransport/server (ponyfill)
- Established connection lifecycle: CONNECT → AUTHENTICATE → READY
- TLS 1.3 required on both transport paths (no downgrade)
- Validated QUIC stream independence: slow channel does not block fast channel
Feb 10Day 1
Feb 10, 2025Day 1
Project inception & architecture design
Protocol- Identified problem: WebSocket connections share a single TCP stream - head-of-line blocking kills latency for mixed workloads
- Decided on HTTP/3 (QUIC) as the primary transport layer
- Defined two delivery semantics: reliable ordered streams vs. unreliable fast datagrams
- Designed channel-based pub/sub API as the developer abstraction
- Chose TypeScript for both server runtime and client SDK
- Created monorepo structure: packages/protocol, packages/sdk, apps/web
- Set up CI pipeline (GitHub Actions) with lint, typecheck, and integration tests
On the roadmap
○E2E encryption option (libsodium via sealed boxes)
○Go server implementation of @clawxp/protocol
○Presence channels (who is online in a channel)
○History replay - subscribe with `since: timestamp`
○Browser DevTools extension for ClawXP debugging
○OpenClaw skill for channel management via chat
○Cloudflare Workers edge adapter
○Grafana dashboard template for ClawXP metrics