No playground in v1
What we did
We cut the live Cloudflare playground from v1. All four personas in round 2 independently agreed. A static side-by-side raw-SDK vs ToolRoute diff plus the captured rejection below — both committed to the repo — are the calling card instead.toolroute@0.1.0
Why
A live playground inside a Cloudflare Worker would have meant:
- A model proxy (or BYO API key flow) — net new product surface, with abuse and rate-limit concerns.
- A streaming UI — a frontend project that competes for attention with the package itself.
- A v2-shaped maintenance commitment from day one, when the package is supposed to be "solo-shippable in ≤ 2 weeks."
Theo Browne's round 2 quote: "paid tier would be a distraction at this stage and the audience (solo devs, small teams) needs to trust it first." Same reasoning applies to a playground — it is high-glamour infrastructure that delays shipping the actual primitive.
The recording is the simpler artefact that does the same job:
- It shows the type-level rejection (
tscerror on the illegal hop). - It shows the runtime rejection (
ToolRouteViolationthrown at execution time). - It plays back deterministically — the cast file is committed, so the demo cannot bit-rot the way a hosted playground silently can.
- It is embeddable everywhere: the README, the docs site, the launch thread, a Slack channel. A playground only works in a browser.
What v2 might look like
If the package gains traction and a playground becomes worth the
maintenance, it lives in issues/999-v2-deferred.md:
Live Cloudflare playground (cut UNANIMOUSLY by all four personas in round 2; replaced by recorded terminal + side-by-side diff).
The trigger condition is adoption signal, not calendar. If hand-typed examples are not enough for a meaningful chunk of users to form an opinion, that is when a playground stops being a distraction and starts being a learning tool.
Related
- v2 deferred index.
- The recording itself:
assets/recordings/readme-hero.cast.