URL.createObjectURL(new Blob([bytes]))).
The embed entry point is built for that. The worker and core modules are packed into a single import-free file, so you can load the whole runtime from a blob and pass the engine bytes in yourself.
import { Sandbox } from "@capsule-run/vpod/embed" resolves to the same file and inlines it for you. The example above avoids the bare package name on purpose: it fetches the file and loads it from a blob, so it runs from a plain HTML page with no bundler and no import map to resolve the name.
What you supply
dist/embed/vpod.js is a single file with no imports, around 0.6 MB, with the
worker and the small core modules already baked in. Load it however your host
loads code, including from a blob.
The one thing it cannot bake in is the engine itself, so you pass it:
Handing over the engine is the trade for a caller with nothing to serve from. It
does mean the browser cannot cache it between visits or stream-compile it the way
it does on the default path, so a page that can serve files is better off with
the normal browser build.