Request and returns a standard Response, so it
runs anywhere the Web platform does. CI bundles the server entry for a Worker
and boots it under real workerd on every change.
What init writes
Runnpx vendo init --framework custom. Detection lands here on its own when
the host is neither Next.js nor Express.
It generates vendo/server.ts: a lazy composition that takes Request in,
returns Response, and reads the environment per call.
vendo/server.ts
Route your runtime through it
Cloudflare Workers
Bun · Deno · Hono
<VendoProvider> with your base path and
put <VendoOverlay /> inside it.
The three rules
1
Construct lazily.
Workers forbids async work in module scope, and environment variables only
exist per request there. Keep the lazy-singleton shape above.
2
Pass every adapter.
The default model ladder and the local store engines need Node, so on a
Worker they refuse with guidance instead of half working. The generated
wiring names all of them, which is why it runs unchanged.
3
Set VENDO_BASE_URL.
Your deployed app’s full public URL, path prefix included.
Present-credential forwarding fails closed without it.
vendoModel() on a Worker and it throws that same sentence back at you.
@vendoai/vendo/sandbox/edge type-checks against vendored lib bytes, so install the
exact typescript its EDGE_TYPESCRIPT_VERSION names. The peer range is wide
and will not nudge you there.Mounting the handler yourself
Skip the generated adapter and mountvendo.handler by hand, and your adapter
has to do five things.
vendo doctor judges an unknown-framework host by its wiring, never by another
framework’s file layout. A missing server half reports
E-WIRE-007, a missing client half
E-WIRE-008.