Build & deploy
This page is the implemented.stream build spec. It is derived from the upstream Deployment and Quickstart reference, but scoped to this monorepo (VitePress docs + static dist/), not a generic void init app.
Prerequisites
- Node.js 22.x (see repo
.nvmrcif present) - npm with workspaces (
docs,packages/*) - For production deploy: Cloudflare account with zone implemented.stream and API token with Workers + account access
Install
From the repository root:
npm install --legacy-peer-depsLegacy peer deps are required because the VitePress / Vite+ toolchain pins overlapping peer ranges.
Marketing site
The public site is VitePress under docs/, themed for implemented.stream (docs/.vitepress/theme/styles.css, docs/THEME-DEV-VOID-1.md).
| Step | Command | Output |
|---|---|---|
| Local dev | npm run dev | VitePress on port 3000 (see docs/package.json) |
| Production build | npm run build | dist/ at repo root (via scripts/build.mjs) |
Build copies artifacts to dist/ and build/ (both gitignored). Cloudflare uses dist/ only (wrangler.jsonc → assets.directory).
What the build includes
- implemented.stream branding (
docs/.vitepress/config.ts,docs/index.md) - Zip merge page (
docs/tools/zip-merge.md+ZipMergeTool.vue) - implemented.stream system docs (
docs/devxstacks/) - Upstream Void Guide and Reference (unchanged content, labeled as SDK reference on the system overview)
Zip merge library
Merge logic lives in rollspace/src/lib/mergeTwoZips.ts and is bundled into the docs app through docs/.vitepress/lib/mergeTwoZips.ts.
Verify with Drive fixtures (or your own zips):
ZIP_MERGE_FIXTURE_ROOT=/tmp/zips npx tsx rollspace/scripts/merge-two-zips.test.mjsDeploy to Cloudflare (production)
Configuration: wrangler.jsonc at repo root.
| Field | Value |
|---|---|
| Worker name | implemented-stream |
| Assets | ./dist |
| Custom domains | implemented.stream, www.implemented.stream |
Deploy after a successful build:
npm run build
./docs/node_modules/.bin/wrangler deploy --config wrangler.jsoncSet secrets in the environment (not in git):
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
Mapping from Void reference
| Void CLI flow | implemented.stream equivalent |
|---|---|
void deploy | npm run build + wrangler deploy (static assets worker) |
void.config.ts / Worker name | wrangler.jsonc → name, routes |
GitHub Actions void init --github | Optional: workflow that runs npm run build and wrangler deploy with repository secrets |
| Preview URL | https://implemented-stream.<account>.workers.dev plus custom domain |
Vercel (optional)
vercel.json at repo root targets the same npm run build → dist layout. Use a Deploy Hook or a token scoped to your team if Cloudflare is primary.
CI checklist
npm install --legacy-peer-depsnpm run build- (Optional)
ZIP_MERGE_FIXTURE_ROOT=... npx tsx rollspace/scripts/merge-two-zips.test.mjs wrangler deploy --config wrangler.jsonconmainor release tags
Troubleshooting
| Symptom | Fix |
|---|---|
assets.directory missing | Run npm run build before wrangler deploy |
| Peer dependency errors | Use --legacy-peer-deps |
| Old Void branding on live site | Hard refresh; confirm deploy uploaded new index.html title implemented.stream |
| Zip merge page blank | Confirm fflate in docs/package.json and rebuild |