void 0.10.12 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS_TEMPLATE.md +6 -0
- package/{skills/void/docs/node_modules/void/node_modules/pglite-server/LICENSE.md → LICENSE} +1 -1
- package/README.md +34 -8
- package/dist/{auth-qgMlYp7Z.d.mts → auth-DkcFflXV.d.mts} +10 -11
- package/dist/auth-W9WII-mN.mjs +630 -0
- package/dist/{auth-cmd-BqsdZJp5.mjs → auth-cmd-CYVhSNFy.mjs} +4 -3
- package/dist/{auth-migrations-BTZ-ATvQ.mjs → auth-migrations-9vif1uj8.mjs} +53 -12
- package/dist/{better-auth-shared-BQooDxbw.mjs → better-auth-shared-CYw1T3k4.mjs} +7 -10
- package/dist/{better-auth-shared-DealXecJ.d.mts → better-auth-shared-DSCeohOK.d.mts} +10 -5
- package/dist/{build-cmd-Bujrv5q-.mjs → build-cmd-CkVD1uOh.mjs} +6 -4
- package/dist/{cache-C11V8Fxq.mjs → cache-QcUfR-ff.mjs} +9 -5
- package/dist/{cancel-deploy-fwFYF04b.mjs → cancel-deploy-DsvWKFTe.mjs} +3 -2
- package/dist/cf-access-AJ1ehiFR.mjs +42 -0
- package/dist/cf-access-DsSsZUPr.mjs +67 -0
- package/dist/cli/cli.d.mts +1 -1
- package/dist/cli/cli.mjs +1592 -153
- package/dist/cli/env-schema-probe.d.mts +48 -61
- package/dist/cli/env-schema-probe.mjs +10 -58
- package/dist/{client-Gb71-XkG.mjs → client-CyCHWSO_.mjs} +61 -463
- package/dist/cloudflare-auth-DRkGe7-s.mjs +170 -0
- package/dist/cloudflare-cmd-D3ME2GAe.mjs +62 -0
- package/dist/cloudflare-connect-BivMefMA.mjs +56 -0
- package/dist/cloudflare-operations-CPTpRW6d.mjs +566 -0
- package/dist/{config-BkTvs43g.mjs → config-BQFq7QvD.mjs} +85 -41
- package/dist/{config-CutEMNGJ.mjs → config-NOG_U1aK.mjs} +10 -15
- package/dist/connect-D9Yr-T5f.mjs +79 -0
- package/dist/{create-project-DsYvl3TB.mjs → create-project-DMV-csEm.mjs} +26 -16
- package/dist/database-provider.d.mts +21 -0
- package/dist/database-provider.mjs +6 -0
- package/dist/{db-DOiJMRt2.mjs → db-BxoUWL0F.mjs} +600 -115
- package/dist/{delete-mh6p-zkQ.mjs → delete-iJOqxBz1.mjs} +9 -6
- package/dist/{deploy-u7Rv9q_q.mjs → deploy-CcDoeBIf.mjs} +3451 -1986
- package/dist/dev-inbox-DkgRWLkW.mjs +307 -0
- package/dist/{discover-CJHyvYfR.mjs → discover-xvfrgJeo.mjs} +3 -3
- package/dist/{magic-string.es-ZQjdJFFn.mjs → dist-BR1quN_w.mjs} +570 -216
- package/dist/{dist-DaKKDf8D.mjs → dist-BrsS7cai.mjs} +17 -2
- package/dist/{dist-BuiRJkTd.mjs → dist-m40_XgNh.mjs} +48 -33
- package/dist/{domain-DiaNQbrl.mjs → domain-gu_iaHmn.mjs} +41 -4
- package/dist/dotenv-VQxupEUv.mjs +181 -0
- package/dist/edge.d.mts +2 -0
- package/dist/edge.mjs +2 -0
- package/dist/email-Ce6SQq-i.mjs +182 -0
- package/dist/email-r6DHJyAB.mjs +262 -0
- package/dist/{entry-D7yy4xVH.mjs → entry-DU3oDoQ3.mjs} +2 -2
- package/dist/env-D4Emu-M_.mjs +95 -0
- package/dist/env-DmU2To0C.mjs +73 -0
- package/dist/env-helpers-CyKtOBpj.d.mts +22 -0
- package/dist/env-public-D_6u46fX.d.mts +135 -0
- package/dist/{env-types-QBj-ndax.mjs → env-types-BNPhro-M.mjs} +2 -2
- package/dist/{env-validation-Dea3v3ej.mjs → env-validation-ENpMy6Ez.mjs} +68 -122
- package/dist/{gen-o_w-8yI8.mjs → gen-BKw6qHIg.mjs} +70 -15
- package/dist/{github-cmd-DKcGUNsj.mjs → github-cmd-DJS5Ab-H.mjs} +39 -31
- package/dist/{handler-Cjh8uM3Y.d.mts → handler-D1hLsObx.d.mts} +124 -122
- package/dist/{head-nmvOgFjd.d.mts → head-Do8P4puT.d.mts} +9 -8
- package/dist/{headers-nsHIFixA.mjs → headers-D8QfRX9Y.mjs} +12 -10
- package/dist/inbound-BJ70in1n.d.mts +354 -0
- package/dist/inbound-CNKxb3FY.mjs +694 -0
- package/dist/index.d.mts +61 -34
- package/dist/index.mjs +1048 -321
- package/dist/{init-3rgHKBVi.mjs → init-Dx5cgKqK.mjs} +329 -271
- package/dist/link-D_rm5sRH.mjs +52 -0
- package/dist/{list-CPwFDZ_c.mjs → list-M8XShti7.mjs} +37 -5
- package/dist/{runner-kapo9aPs.mjs → local-d1-BE8KBbMy.mjs} +116 -6
- package/dist/{login-BT3H8PN3.mjs → login-C8-UuLnp.mjs} +17 -15
- package/dist/{logs-Bt313ax7.mjs → logs-DwFU7dMW.mjs} +16 -2
- package/dist/mime-BJD7d_qL.mjs +1216 -0
- package/dist/neon-DHwd2zvC.mjs +54 -0
- package/dist/{node-Da0UcsGA.mjs → node-BkaXcpAc.mjs} +29 -8
- package/dist/operator-cmd-DYWRbWUA.mjs +348 -0
- package/dist/{agents-CtgBYqld.mjs → output-tFQLLj26.mjs} +676 -211
- package/dist/{package-json-Cx1osYo6.mjs → package-json-CPoWX79C.mjs} +1 -1
- package/dist/pages/client.d.mts +43 -41
- package/dist/pages/client.mjs +40 -33
- package/dist/pages/head-client.d.mts +10 -12
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/index.d.mts +37 -14
- package/dist/pages/index.mjs +5 -5
- package/dist/pages/islands-plugin.d.mts +25 -27
- package/dist/pages/islands-plugin.mjs +6 -4
- package/dist/pages/prefetch.d.mts +6 -7
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -1
- package/dist/pages/serialize.d.mts +7 -8
- package/dist/platform-cmd-BEOVv1PN.mjs +123 -0
- package/dist/platform-domain-BszUfiS8.mjs +228 -0
- package/dist/platform-lifecycle-CjSr6xf0.mjs +4450 -0
- package/dist/platform-management-W30iCaTL.mjs +698 -0
- package/dist/platform-recovery-pHHv4ZSg.mjs +99 -0
- package/dist/{plugin-inference-DMeavIJ6.mjs → plugin-inference-BDRfZngg.mjs} +35 -19
- package/dist/prepare-BfJvFUtJ.mjs +14 -0
- package/dist/{prepare-BoKHgMNx.mjs → prepare-CBetXvsN.mjs} +15 -24
- package/dist/{preset-BjyR3lzz.mjs → preset-lAy0B0BQ.mjs} +25 -212
- package/dist/{project-cmd-D_w-4w5B.mjs → project-cmd-DCpk1cDt.mjs} +25 -12
- package/dist/{project-paths-BQd7OmIo.mjs → project-paths-SK8nMHPp.mjs} +3 -1
- package/dist/{project-tsconfig-B-QtXjLQ.mjs → project-tsconfig-Ql2XsSQp.mjs} +2 -2
- package/dist/{protocol-Bnb0LFp3.d.mts → protocol-C-pqYJjE.d.mts} +3 -4
- package/dist/{provision-rShh6MKY.mjs → provision-Blnstcm2.mjs} +78 -45
- package/dist/r2-conditions-D1Wk8i7b.mjs +30 -0
- package/dist/{requests-B8sZxaFM.mjs → requests-Dn8Vheh1.mjs} +5 -3
- package/dist/{resolve-project-BBMtLLV9.mjs → resolve-project--Vxawf7z.mjs} +2 -2
- package/dist/rollback-CtlPXEBi.mjs +166 -0
- package/dist/{rolldown-runtime-DJK8HYOj.mjs → rolldown-runtime-rQ84J-ij.mjs} +1 -1
- package/dist/{route-types-COI2DsZv.mjs → route-types-Da-DpyUp.mjs} +85 -26
- package/dist/routes-stub.d.mts +22 -23
- package/dist/runner-mysql-CgRFl3s6.mjs +61 -0
- package/dist/{runner-pg-CHM76xuC.mjs → runner-pg-DCkWPsWS.mjs} +18 -6
- package/dist/runtime/ai.d.mts +21 -14
- package/dist/runtime/ai.mjs +5 -4
- package/dist/runtime/auth-client-react.d.mts +3 -5
- package/dist/runtime/auth-client-solid.d.mts +3 -5
- package/dist/runtime/auth-client-svelte.d.mts +3 -5
- package/dist/runtime/auth-client-vue.d.mts +3 -5
- package/dist/runtime/auth-client.d.mts +3 -5
- package/dist/runtime/auth.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.d.mts +10 -0
- package/dist/runtime/better-auth-mysql.mjs +49 -0
- package/dist/runtime/better-auth-pg.d.mts +8 -9
- package/dist/runtime/better-auth-pg.mjs +2 -2
- package/dist/runtime/better-auth.d.mts +8 -9
- package/dist/runtime/better-auth.mjs +2 -2
- package/dist/runtime/client-react.d.mts +1 -1
- package/dist/runtime/client-solid.d.mts +1 -1
- package/dist/runtime/client-svelte.d.mts +1 -1
- package/dist/runtime/client-vue.d.mts +1 -1
- package/dist/runtime/client.d.mts +1 -1
- package/dist/runtime/db-mysql.d.mts +2 -0
- package/dist/runtime/db-mysql.mjs +1 -0
- package/dist/runtime/db.d.mts +10 -11
- package/dist/runtime/durable.d.mts +47 -0
- package/dist/runtime/durable.mjs +146 -0
- package/dist/runtime/email/testing.d.mts +112 -0
- package/dist/runtime/email/testing.mjs +283 -0
- package/dist/runtime/email.d.mts +30 -0
- package/dist/runtime/email.mjs +573 -0
- package/dist/runtime/env-helpers.d.mts +2 -2
- package/dist/runtime/env-helpers.mjs +5 -42
- package/dist/runtime/env-public-client.d.mts +10 -11
- package/dist/runtime/env-public-client.mjs +1 -1
- package/dist/runtime/env-public.d.mts +2 -2
- package/dist/runtime/env-public.mjs +104 -49
- package/dist/runtime/env.d.mts +19 -18
- package/dist/runtime/env.mjs +15 -2
- package/dist/runtime/fetch-stream.d.mts +20 -21
- package/dist/runtime/fetch.d.mts +15 -16
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/isr.d.mts +21 -22
- package/dist/runtime/isr.mjs +26 -8
- package/dist/runtime/kv.d.mts +9 -10
- package/dist/runtime/live-client.d.mts +5 -7
- package/dist/runtime/live-client.mjs +9 -7
- package/dist/runtime/live-server.d.mts +4 -5
- package/dist/runtime/live.d.mts +22 -24
- package/dist/runtime/live.mjs +1 -1
- package/dist/runtime/log.d.mts +16 -17
- package/dist/runtime/migration-handler-mysql.d.mts +4 -0
- package/dist/runtime/migration-handler-mysql.mjs +81 -0
- package/dist/runtime/migration-handler-pg.d.mts +2 -4
- package/dist/runtime/migration-handler.d.mts +5 -6
- package/dist/runtime/migration-handler.mjs +4 -3
- package/dist/runtime/queues.d.mts +3 -4
- package/dist/runtime/queues.mjs +2 -1
- package/dist/runtime/remote/binding-handler.d.mts +10 -12
- package/dist/runtime/remote/binding-handler.mjs +24 -3
- package/dist/runtime/remote/index.d.mts +5 -6
- package/dist/runtime/remote/index.mjs +21 -18
- package/dist/runtime/response.d.mts +10 -11
- package/dist/runtime/sandbox.d.mts +56 -55
- package/dist/runtime/sandbox.mjs +57 -49
- package/dist/runtime/schema-mysql.d.mts +1 -0
- package/dist/runtime/schema-mysql.mjs +2 -0
- package/dist/runtime/seed.d.mts +14 -9
- package/dist/runtime/sse-client.d.mts +6 -7
- package/dist/runtime/sse.d.mts +11 -12
- package/dist/runtime/storage.d.mts +3 -4
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +12 -12
- package/dist/runtime/ws-server.mjs +32 -4
- package/dist/runtime/ws.d.mts +19 -21
- package/dist/{scan-DYXkrasO.mjs → scan-BMH4rzlv.mjs} +53 -31
- package/dist/{scan-DEwlM_Xy.mjs → scan-CpK-57ug.mjs} +9 -5
- package/dist/{secret-Dt32J6RI.mjs → secret-BqTxGqki.mjs} +62 -5
- package/dist/{skills-CLjN0uUO.mjs → skills-Q46GZMO-.mjs} +6 -4
- package/dist/{standard-schema-DJ0HW7QP.d.mts → standard-schema-Fo_vCAZh.d.mts} +6 -6
- package/dist/{subcommand-prompt-BzV8iQZo.mjs → subcommand-prompt-WfySCQ7S.mjs} +67 -48
- package/dist/sveltekit.d.mts +12 -11
- package/dist/sveltekit.mjs +1 -1
- package/dist/types-BAp5AEBU.d.mts +79 -0
- package/dist/types-CKWnYgfy.d.mts +1 -0
- package/dist/{validate-Cw_RLeTj.mjs → validate-Bihr8WBi.mjs} +3 -3
- package/dist/wrangler--imS8n0d.mjs +1796 -0
- package/dist/{yarn-pnp-DJn3SAHF.mjs → yarn-pnp-DxSInkzL.mjs} +1 -1
- package/package.json +79 -65
- package/schema.json +35 -3
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +1 -1
- package/skills/void/SKILL.md +59 -2
- package/skills/void/docs/guide/ai.md +32 -14
- package/skills/void/docs/guide/app-types.md +6 -6
- package/skills/void/docs/guide/auth.md +14 -16
- package/skills/void/docs/guide/database/d1.md +6 -0
- package/skills/void/docs/guide/database/mysql.md +60 -0
- package/skills/void/docs/guide/database/postgresql.md +14 -9
- package/skills/void/docs/guide/database.md +39 -26
- package/skills/void/docs/guide/deployment.md +163 -22
- package/skills/void/docs/guide/durable-state.md +140 -0
- package/skills/void/docs/guide/edge/headers.md +5 -5
- package/skills/void/docs/guide/edge/prerendering.md +2 -0
- package/skills/void/docs/guide/edge/revalidation.md +21 -6
- package/skills/void/docs/guide/edge/rewrites.md +18 -14
- package/skills/void/docs/guide/edge/static-assets.md +23 -8
- package/skills/void/docs/guide/email.md +609 -0
- package/skills/void/docs/guide/env-migration.md +109 -0
- package/skills/void/docs/guide/env-vars.md +70 -248
- package/skills/void/docs/guide/index.md +15 -17
- package/skills/void/docs/guide/jobs.md +8 -5
- package/skills/void/docs/guide/live.md +7 -15
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +8 -4
- package/skills/void/docs/guide/pages-routing/islands.md +3 -3
- package/skills/void/docs/guide/pages-routing/loaders.md +6 -4
- package/skills/void/docs/guide/pages-routing/overview.md +7 -7
- package/skills/void/docs/guide/platform-administration.md +212 -0
- package/skills/void/docs/guide/platform-development.md +235 -0
- package/skills/void/docs/guide/queues.md +10 -10
- package/skills/void/docs/guide/quickstart.md +46 -67
- package/skills/void/docs/guide/remote-dev.md +8 -6
- package/skills/void/docs/guide/sandboxes.md +33 -16
- package/skills/void/docs/guide/self-hosted-platform.md +553 -0
- package/skills/void/docs/guide/server-routing.md +25 -5
- package/skills/void/docs/guide/sse.md +4 -4
- package/skills/void/docs/guide/ssg.md +5 -3
- package/skills/void/docs/guide/storage.md +2 -2
- package/skills/void/docs/guide/websockets.md +18 -7
- package/skills/void/docs/index.md +3 -3
- package/skills/void/docs/integrations/agents.md +6 -64
- package/skills/void/docs/integrations/cloudflare.md +165 -146
- package/skills/void/docs/integrations/frameworks/analog.md +4 -4
- package/skills/void/docs/integrations/frameworks/astro.md +5 -5
- package/skills/void/docs/integrations/frameworks/nuxt.md +5 -5
- package/skills/void/docs/integrations/frameworks/overview.md +3 -3
- package/skills/void/docs/integrations/frameworks/react-router.md +3 -3
- package/skills/void/docs/integrations/frameworks/sveltekit.md +3 -3
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +2 -2
- package/skills/void/docs/integrations/nodejs-bun-deno.md +11 -4
- package/skills/void/docs/reference/api.md +42 -6
- package/skills/void/docs/reference/cli.md +637 -159
- package/skills/void/docs/reference/config.md +80 -25
- package/skills/void/docs/reference/resource-inference.md +13 -9
- package/skills/void/docs/reference/structure.md +10 -11
- package/AGENT_PROMPT.md +0 -19
- package/dist/cf-access-Bqw81xAf.mjs +0 -22
- package/dist/env-CZy5MorI.mjs +0 -299
- package/dist/env-helpers-z4stu8uc.d.mts +0 -52
- package/dist/env-mask-Dd47NbR6.mjs +0 -90
- package/dist/env-public-BfiLcMBk.d.mts +0 -140
- package/dist/link-CdGHSIy-.mjs +0 -45
- package/dist/mcp-DoM3_nhd.mjs +0 -377
- package/dist/project-paths-GpziKeQQ.d.mts +0 -25
- package/dist/providers-BNKRacMr.d.mts +0 -7
- package/dist/proxy-D-3_D-Gl.mjs +0 -5
- package/dist/rollback-CkvTFXx5.mjs +0 -90
- package/dist/runtime/isr-cache.d.mts +0 -207
- package/dist/runtime/isr-cache.mjs +0 -523
- package/dist/types-lLjNE9Qp.d.mts +0 -51
- package/getting-started-prompt.txt +0 -28
- package/skills/void/command/void.md +0 -7
- package/skills/void/docs/integrations/auth-providers.md +0 -0
- package/skills/void/docs/integrations/payment-processors.md +0 -0
- package/skills/void/docs/node_modules/@iconify/vue/README.md +0 -408
- package/skills/void/docs/node_modules/@iconify/vue/offline/readme.md +0 -5
- package/skills/void/docs/node_modules/@voidzero-dev/vitepress-theme/README.md +0 -103
- package/skills/void/docs/node_modules/oxc-minify/README.md +0 -78
- package/skills/void/docs/node_modules/reka-ui/README.md +0 -80
- package/skills/void/docs/node_modules/vitepress/README.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/api-examples.md +0 -49
- package/skills/void/docs/node_modules/vitepress/template/index.md +0 -28
- package/skills/void/docs/node_modules/vitepress/template/markdown-examples.md +0 -85
- package/skills/void/docs/node_modules/vitepress-plugin-group-icons/README.md +0 -101
- package/skills/void/docs/node_modules/void/AGENT_PROMPT.md +0 -19
- package/skills/void/docs/node_modules/void/CLAUDE.md +0 -219
- package/skills/void/docs/node_modules/void/README.md +0 -90
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +0 -685
- package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +0 -396
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +0 -219
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/vite-plugin/README.md +0 -37
- package/skills/void/docs/node_modules/void/node_modules/@cloudflare/workers-types/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +0 -189
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/CHANGELOG.md +0 -143
- package/skills/void/docs/node_modules/void/node_modules/@hono/oauth-providers/README.md +0 -1272
- package/skills/void/docs/node_modules/void/node_modules/@napi-rs/keyring/README.md +0 -19
- package/skills/void/docs/node_modules/void/node_modules/@types/better-sqlite3/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/pg/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@types/proper-lockfile/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/README.md +0 -22
- package/skills/void/docs/node_modules/void/node_modules/@typescript/native-preview/vendor/vscode-jsonrpc/README.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/README.md +0 -153
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/engine-javascript/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@shikijs/transformers/README.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/CHANGELOG.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/gray-matter/README.md +0 -565
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +0 -127
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-anchor/README.md +0 -600
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +0 -386
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-container/README.md +0 -95
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-emoji/README.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-footnote/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/shiki/README.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vue/README.md +0 -58
- package/skills/void/docs/node_modules/void/node_modules/arktype/README.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/better-auth/LICENSE.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/better-auth/README.md +0 -32
- package/skills/void/docs/node_modules/void/node_modules/better-sqlite3/README.md +0 -99
- package/skills/void/docs/node_modules/void/node_modules/blake3-jit/README.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/drizzle-arktype/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-kit/README.md +0 -79
- package/skills/void/docs/node_modules/void/node_modules/drizzle-orm/README.md +0 -44
- package/skills/void/docs/node_modules/void/node_modules/drizzle-valibot/README.md +0 -51
- package/skills/void/docs/node_modules/void/node_modules/drizzle-zod/README.md +0 -65
- package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +0 -403
- package/skills/void/docs/node_modules/void/node_modules/estree-walker/README.md +0 -48
- package/skills/void/docs/node_modules/void/node_modules/hono/README.md +0 -85
- package/skills/void/docs/node_modules/void/node_modules/ignore/README.md +0 -452
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/CHANGELOG.md +0 -76
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/LICENSE.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/README.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/jsonc-parser/SECURITY.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/magic-string/README.md +0 -325
- package/skills/void/docs/node_modules/void/node_modules/ofetch/README.md +0 -398
- package/skills/void/docs/node_modules/void/node_modules/pathslash/README.md +0 -64
- package/skills/void/docs/node_modules/void/node_modules/pg/README.md +0 -96
- package/skills/void/docs/node_modules/void/node_modules/pglite-server/README.md +0 -135
- package/skills/void/docs/node_modules/void/node_modules/picocolors/README.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/CHANGELOG.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/proper-lockfile/README.md +0 -183
- package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +0 -25
- package/skills/void/docs/node_modules/void/node_modules/valibot/LICENSE.md +0 -9
- package/skills/void/docs/node_modules/void/node_modules/valibot/README.md +0 -94
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +0 -16
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +0 -220
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +0 -21
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +0 -70
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +0 -20
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +0 -26
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +0 -17
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +0 -364
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +0 -15
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +0 -18
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +0 -145
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/build.md +0 -40
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +0 -107
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +0 -62
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +0 -60
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +0 -341
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/dev.md +0 -24
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +0 -175
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +0 -167
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/fmt.md +0 -41
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +0 -165
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/implode.md +0 -23
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +0 -134
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +0 -199
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/lint.md +0 -50
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +0 -347
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +0 -197
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +0 -176
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +0 -69
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +0 -356
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/test.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +0 -108
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +0 -101
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/vpx.md +0 -66
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/why.md +0 -39
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/index.md +0 -12
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/team.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/generator/README.md +0 -35
- package/skills/void/docs/node_modules/void/node_modules/vite-plus/templates/monorepo/README.md +0 -29
- package/skills/void/docs/node_modules/void/node_modules/wrangler/README.md +0 -63
- package/skills/void/docs/node_modules/void/node_modules/zod/README.md +0 -191
- package/skills/void/docs/node_modules/void/skills/migrate-vite-cloudflare-to-void/SKILL.md +0 -175
- package/skills/void/docs/node_modules/void/skills/void/SKILL.md +0 -76
- package/skills/void/docs/node_modules/void/skills/void/command/void.md +0 -7
- package/skills/void/docs/node_modules/void/test/e2e/README.md +0 -85
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Developing a Void Platform
|
|
6
|
+
|
|
7
|
+
The framework, CLI, and platform live in one repository. You can change the platform, test it locally, and deploy a runtime built from your fork into your own Cloudflare account.
|
|
8
|
+
|
|
9
|
+
If you want to run the released platform without changing its implementation, start with [Install a Void Platform](./self-hosted-platform.md). Use [Platform Administration](./platform-administration.md) for managing an installed platform.
|
|
10
|
+
|
|
11
|
+
## Setting Up the Repository
|
|
12
|
+
|
|
13
|
+
Clone your fork and install the workspace dependencies with Vite+:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
git clone https://github.com/your-org/void.git
|
|
17
|
+
cd void
|
|
18
|
+
vp install
|
|
19
|
+
vpr install:void-dev
|
|
20
|
+
void-dev --help
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Use the Node.js version recorded in `.node-version`. The workspace uses public npm packages; a GitHub Packages token is not required.
|
|
24
|
+
|
|
25
|
+
`install:void-dev` builds the CLI, shared packages, and platform runtime, then makes this checkout's built CLI globally available as `void-dev`. Public packages export their built files, so run `vp run build:core` after later source changes to refresh the alias. The installer refuses to replace an unrelated global command. Remove only this checkout's alias with `vpr uninstall:void-dev`. All commands in this guide run from the repository root.
|
|
26
|
+
|
|
27
|
+
## Finding the Implementation
|
|
28
|
+
|
|
29
|
+
| Directory | Purpose |
|
|
30
|
+
| ---------------------------------------------------- | -------------------------------------------------------------------- |
|
|
31
|
+
| `packages/void` | Framework, application runtime, and CLI |
|
|
32
|
+
| `packages/platform` | Installer contracts, packaged Workers, and platform migrations |
|
|
33
|
+
| `packages/deploy-core`, `packages/deploy-cloudflare` | Shared deployment contracts and Cloudflare upload code |
|
|
34
|
+
| `platform/packages/api` | Users, projects, deployments, provisioning, and administrator API/UI |
|
|
35
|
+
| `platform/packages/dispatch` | Application routing and static assets |
|
|
36
|
+
| `platform/packages/proxy` | AI, remote bindings, and revalidation |
|
|
37
|
+
| `platform/packages/tail` | Runtime log ingestion |
|
|
38
|
+
| `platform/packages/dashboard` | Dashboard source and local UI components in `ui/` |
|
|
39
|
+
|
|
40
|
+
The `@voidcloud/*` names identify workspace implementation packages. Their `private: true` flags prevent publishing those packages to npm. Deployable core Workers are bundled into the public `@void/platform` package.
|
|
41
|
+
|
|
42
|
+
The core installer creates the API, dispatch, proxy, and tail Workers. The dashboard and managed GitHub build services are available in the source tree but are not included in that installation. Adding an optional service requires its infrastructure, bindings, authentication, and capability configuration together.
|
|
43
|
+
|
|
44
|
+
## Running the API Locally
|
|
45
|
+
|
|
46
|
+
Start a local PostgreSQL server and make `psql` and `pg_isready` available on your path. Then create the development database, apply its migrations, and seed an administrator:
|
|
47
|
+
|
|
48
|
+
```sh
|
|
49
|
+
vp run --filter @voidcloud/api setup --admin-email dev@example.com
|
|
50
|
+
vp run --filter @voidcloud/api dev --local --enable-containers=false --host localhost --port 8787
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The command disables the optional build containers, so basic API and admin work
|
|
54
|
+
does not require Docker. To develop managed builds, install Docker and run the
|
|
55
|
+
API with containers enabled.
|
|
56
|
+
|
|
57
|
+
Open `http://localhost:8787/admin/`. Setup writes local development values to the API and dashboard `.dev.vars` files, including the development authentication bypass and local database connection. Those files are ignored by Git. Production installations get separate credentials through the installer.
|
|
58
|
+
|
|
59
|
+
The API's development bypass lets you work on the browser admin UI without setting up OAuth. Operator CLI sessions still require administrator authentication; they do not use the browser bypass.
|
|
60
|
+
|
|
61
|
+
## Running the Dashboard Locally
|
|
62
|
+
|
|
63
|
+
The dashboard is a separate source app. After API setup, start it in another terminal:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
vp run --filter @voidcloud/dashboard dev
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Its local `.dev.vars` should point to the API you started:
|
|
70
|
+
|
|
71
|
+
```dotenv
|
|
72
|
+
API_URL=http://localhost:8787
|
|
73
|
+
SITE_DOMAIN=apps.example.com
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Open the Vite URL and choose **Dev login (local API)**. That button appears for a localhost API and uses the local development sign-in endpoint.
|
|
77
|
+
|
|
78
|
+
You can also point the dashboard at an API that you operate. If Cloudflare Access protects that API, install `cloudflared` and opt into the dashboard's local token helper with matching origins:
|
|
79
|
+
|
|
80
|
+
```dotenv
|
|
81
|
+
API_URL=https://platform.example.com
|
|
82
|
+
CF_ACCESS_APP_URL=https://platform.example.com
|
|
83
|
+
SITE_DOMAIN=apps.example.com
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The helper refreshes an Access session before the dev server starts. A configured `CF_ACCESS_CLIENT_ID` and `CF_ACCESS_CLIENT_SECRET` pair can be used for automation instead. This is dashboard development configuration; Access credentials are separate from platform login credentials.
|
|
87
|
+
|
|
88
|
+
## Testing Changes
|
|
89
|
+
|
|
90
|
+
Run tests for the area you changed while developing:
|
|
91
|
+
|
|
92
|
+
```sh
|
|
93
|
+
vp test run platform/packages/api/test/integration/operator-auth.test.ts
|
|
94
|
+
vp run check
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Before preparing a release, build the packages and run the complete checks:
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
vp run build:all
|
|
101
|
+
vp run check
|
|
102
|
+
vp lint
|
|
103
|
+
vp run lint:platform
|
|
104
|
+
vp fmt --check
|
|
105
|
+
vp test run
|
|
106
|
+
vp run build:docs
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Platform integration tests use their local test database by default. To test against PostgreSQL, set `VOID_TEST_DATABASE_URL` to a disposable database: these tests clear tables between cases.
|
|
110
|
+
|
|
111
|
+
To exercise a deployed application, deploy a disposable copy of `playground/kitchen-sink` and pass its URL as `SMOKE_URL` to the smoke test described in `platform/scripts/kitchen-sink-smoke-test.md`. That test creates and removes application data.
|
|
112
|
+
|
|
113
|
+
## Deploying Your Runtime
|
|
114
|
+
|
|
115
|
+
Build the runtime. From a Git checkout, the build automatically records the current commit in the runtime manifest. An uncommitted checkout is recorded with a `-dirty` suffix:
|
|
116
|
+
|
|
117
|
+
```sh
|
|
118
|
+
vp run build:core
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Build systems may set `VOID_PLATFORM_SOURCE_REVISION` when they need to override automatic detection with another immutable revision. A source archive without Git metadata builds normally but leaves the revision unrecorded.
|
|
122
|
+
|
|
123
|
+
The runtime is written to `packages/platform/dist/runtime`. Use the built CLI to preview a new installation from those files:
|
|
124
|
+
|
|
125
|
+
```sh
|
|
126
|
+
void-dev platform install \
|
|
127
|
+
--name my-team \
|
|
128
|
+
--application-domain example.app \
|
|
129
|
+
--zone example.app \
|
|
130
|
+
--runtime packages/platform/dist/runtime \
|
|
131
|
+
--plan
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Before applying the plan, complete the [first-install walkthrough](./self-hosted-platform.md). Run the command without `--plan` to install. For testing before your domain is ready, replace `--application-domain` and `--zone` with `--workers-dev`; PostgreSQL and the runtime/GitHub/R2 credentials are still needed. Use `void-dev` in place of `void` and keep `--runtime packages/platform/dist/runtime` on install and resume commands. For an interrupted installation, keep that runtime build available until it completes.
|
|
135
|
+
|
|
136
|
+
Later, run `void-dev platform domain set example.app`. Domain setup uses the existing installed runtime and needs no `--runtime`, rebuild, or app redeploy. It keeps the platform API URL and original workers.dev app URLs available.
|
|
137
|
+
|
|
138
|
+
For an existing installation, preview an upgrade using its connection ID:
|
|
139
|
+
|
|
140
|
+
```sh
|
|
141
|
+
void-dev platform upgrade <installation-id> \
|
|
142
|
+
--runtime packages/platform/dist/runtime --plan
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Then run it without `--plan` to apply the upgrade. Source-built runtimes go through the same artifact, database, ownership, and health checks as released runtimes. The CLI preserves a disabled installation's state and records the source revision in its installation checkpoint.
|
|
146
|
+
|
|
147
|
+
## Deploying Source Builds from CI {#source-build-ci}
|
|
148
|
+
|
|
149
|
+
Build `@void/platform` from your checkout and pass its runtime directory to `install`, `upgrade`, `repair`, `enable`, or `rollback` with `--runtime`. Custom runtimes get the same integrity, migration, health, and rollback checks as packaged releases.
|
|
150
|
+
|
|
151
|
+
Void records the runtime's manifest digest, whether it was packaged or custom, and its source revision. A build from a Git checkout automatically records `HEAD`, or `<HEAD>-dirty` when the checkout has uncommitted files. Build systems can set `VOID_PLATFORM_SOURCE_REVISION` to override automatic detection.
|
|
152
|
+
|
|
153
|
+
A fresh CI runner can discover the installation each time. Set `CLOUDFLARE_API_TOKEN` and `VOID_PLATFORM_DATABASE_URL` through its protected environment, then:
|
|
154
|
+
|
|
155
|
+
::: details CI commands and recovery inputs
|
|
156
|
+
|
|
157
|
+
```sh
|
|
158
|
+
vp run build:core
|
|
159
|
+
|
|
160
|
+
export VOID_PLATFORM_REGISTRY_DIR="$RUNNER_TEMP/void-platform-registry"
|
|
161
|
+
export VOID_PLATFORM_RECOVERY_KEY="$(openssl rand -base64 32)"
|
|
162
|
+
node packages/void/dist/cli/cli.mjs platform discover --account "$CLOUDFLARE_ACCOUNT_ID" \
|
|
163
|
+
--installation "$VOID_PLATFORM_INSTALLATION"
|
|
164
|
+
node packages/void/dist/cli/cli.mjs platform upgrade "$VOID_PLATFORM_INSTALLATION" \
|
|
165
|
+
--runtime packages/platform/dist/runtime --plan
|
|
166
|
+
node packages/void/dist/cli/cli.mjs platform upgrade "$VOID_PLATFORM_INSTALLATION" \
|
|
167
|
+
--runtime packages/platform/dist/runtime --yes
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Omit the installation selector only if the account has one discoverable installation. Run one deployment per installation at a time, and let it finish before starting the next. Cancelling during migrations or Worker rollout can leave an installation waiting for recovery.
|
|
171
|
+
|
|
172
|
+
Keep the management token, database URL, JWT signing secret, and complete project-encryption keyring in a protected CI environment. Upgrades inherit deployed Worker secrets. The original values are needed when recreating a missing Worker; configuration credentials are also needed when explicitly rotating them.
|
|
173
|
+
|
|
174
|
+
:::
|
|
175
|
+
|
|
176
|
+
## Changing the Platform Schema
|
|
177
|
+
|
|
178
|
+
The schema lives in `platform/packages/api/src/schema.ts`. Generate a migration after changing it:
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
vp run --filter @voidcloud/api db:generate
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Review the generated SQL and migration journal before committing them. Released migrations are append-only. An upgrade applies new migrations while the previous Workers may still serve requests, so schema changes must remain compatible with that code.
|
|
185
|
+
|
|
186
|
+
`platform/packages/api/drizzle/compatibility.json` records which earlier runtimes have been verified against the new schema. Add an edge only after testing that compatibility. The runtime build checks that the migration files and recorded schema history agree. See `packages/platform/README.md` for the manifest contract.
|
|
187
|
+
|
|
188
|
+
## CI in a Fork
|
|
189
|
+
|
|
190
|
+
The uncredentialed test workflows use GitHub-hosted runners in forks. They build and test the workspace without requiring Void Cloud accounts, tokens, or deployment access.
|
|
191
|
+
|
|
192
|
+
If your fork has a released platform version, set the repository variable
|
|
193
|
+
`VOID_PLATFORM_PRODUCTION_REF` to its immutable 40-character commit SHA. Platform
|
|
194
|
+
pull requests then create that version's database, seed representative user,
|
|
195
|
+
project, and encrypted-secret records, and apply the proposed migrations. The
|
|
196
|
+
check verifies existing data and runs the previous runtime against the upgraded
|
|
197
|
+
schema. Mutable branch or tag names are rejected.
|
|
198
|
+
|
|
199
|
+
Without an explicit SHA, required compatibility checks use the latest successful
|
|
200
|
+
GitHub deployment to `Prod` (or `VOID_PLATFORM_PRODUCTION_ENV`). They require
|
|
201
|
+
read access to deployment history and stop if no completed deployment is found.
|
|
202
|
+
Advancing the production branch does not change the selected baseline. Fork
|
|
203
|
+
workflows that call platform CI must grant `deployments: read` alongside
|
|
204
|
+
`contents: read`.
|
|
205
|
+
|
|
206
|
+
The upstream repository also contains workflows for deploying Void Cloud and publishing the official npm packages. Forks should configure their own release workflow around the built CLI and `platform upgrade --runtime`; the [source-build CI example](#source-build-ci) shows the required inputs. Keep production credentials in protected environments restricted to the appropriate release refs.
|
|
207
|
+
|
|
208
|
+
Public releases use matching versions for the CLI, scaffolder, adapters, and
|
|
209
|
+
packaged platform. The publish workflow rejects mismatched versions and previously
|
|
210
|
+
unpublished `void` versions that npm cannot reuse. Stable versions use `latest`;
|
|
211
|
+
prereleases use their named channel, such as `beta` or `rc`. Numeric prereleases
|
|
212
|
+
use `next`. The scaffolder installs its exact matching CLI version, so
|
|
213
|
+
`create-void@beta` cannot silently select the stable CLI. Packaged platform
|
|
214
|
+
runtimes record the release commit as their source revision.
|
|
215
|
+
|
|
216
|
+
The npm release job uses [trusted publishing](https://docs.npmjs.com/trusted-publishers/)
|
|
217
|
+
from GitHub-hosted runners, with `id-token: write` and no stored npm publishing
|
|
218
|
+
token. Configure a trusted publisher for each public package using this
|
|
219
|
+
repository, `publish.yml`, and the `Release` environment, allowing direct
|
|
220
|
+
`npm publish`. A brand-new package
|
|
221
|
+
needs an initial authenticated publication before its trusted publisher can be
|
|
222
|
+
configured; subsequent releases use OIDC.
|
|
223
|
+
|
|
224
|
+
The managed build fallback CLI also derives its version from
|
|
225
|
+
`packages/void/package.json`; there are no separate version pins to update.
|
|
226
|
+
Build its image from the repository root with
|
|
227
|
+
`docker build --file platform/packages/api/container/Dockerfile .`.
|
|
228
|
+
The root `.dockerignore` limits that build context to the agent, Dockerfile,
|
|
229
|
+
and public SDK manifest.
|
|
230
|
+
|
|
231
|
+
Publishing requires both SDK CI and platform CI, including the platform unit and
|
|
232
|
+
API integration suites. Release tags also run the Windows SDK checks; a passing
|
|
233
|
+
SDK-only build cannot publish a changed control plane.
|
|
234
|
+
|
|
235
|
+
For implementation history, use the design archive at `platform/meta/design-docs/README.md`. Its proposals explain earlier decisions; the source and current guides define the supported behavior.
|
|
@@ -4,17 +4,17 @@ outline: deep
|
|
|
4
4
|
|
|
5
5
|
# Queues
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Use queues to process work asynchronously, such as sending emails or handling uploads. Define a consumer in `queues/`, then send it typed messages from your app.
|
|
8
8
|
|
|
9
9
|
## Defining queues
|
|
10
10
|
|
|
11
|
-
Create files in `queues/**/*.ts`; `.mts`, `.js`, and `.mjs` also work. The queue name is inferred from
|
|
11
|
+
Create files in `queues/**/*.ts`; `.mts`, `.js`, and `.mjs` also work. The queue name is inferred from its path, with nested path segments joined by `-`. For example, `queues/emails.ts` creates a queue named `"emails"`, and `queues/order/notifications.ts` creates `"order-notifications"`. A nested path must not normalize to the same name as another file: `queues/order/notifications.ts` and `queues/order-notifications.ts` conflict, so Void reports the collision and asks you to rename one.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
Cloudflare queue names allow only letters, digits and `-`, so a name containing `/` is rejected when the queue is provisioned — on both the managed platform and a self-hosted `--backend cloudflare` deploy. Nested files work in local development, but keep queue files flat (`queues/order-notifications.ts` → `"order-notifications"`) for any app you intend to deploy.
|
|
15
|
-
:::
|
|
13
|
+
The resulting name must follow Cloudflare's queue naming rules: 1–63 characters, only letters, digits, and `-`, beginning and ending with a letter or digit.
|
|
16
14
|
|
|
17
|
-
|
|
15
|
+
If you previously used a nested queue locally, update producer calls from `queues['order/notifications']` to `queues['order-notifications']`. The derived binding remains `QUEUE_ORDER_NOTIFICATIONS`.
|
|
16
|
+
|
|
17
|
+
Each queue file should export a default handler wrapped with [`defineQueue`](../reference/api.md#definequeue-t-handler). The generic `<T>` parameter defines the message body type. That is the type of each `msg.body` in the batch, and it is also used by the typed `queues` proxy for `send()` calls.
|
|
18
18
|
|
|
19
19
|
```ts
|
|
20
20
|
// queues/emails.ts
|
|
@@ -56,7 +56,7 @@ export const POST = defineHandler(async (c) => {
|
|
|
56
56
|
});
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
The binding name is derived automatically: `QUEUE_` + queue name uppercased with non-alphanumeric characters replaced by `_`. For example, `queues/emails.ts` creates binding `QUEUE_EMAILS`.
|
|
59
|
+
The binding name is derived automatically: `QUEUE_` + queue name uppercased with non-alphanumeric characters replaced by `_`. For example, `queues/emails.ts` creates binding `QUEUE_EMAILS`, while `queues/order/notifications.ts` creates binding `QUEUE_ORDER_NOTIFICATIONS`.
|
|
60
60
|
|
|
61
61
|
## Per-message acknowledgment
|
|
62
62
|
|
|
@@ -120,7 +120,7 @@ On deploy, Void includes all discovered queues in the deploy manifest. The platf
|
|
|
120
120
|
|
|
121
121
|
## Local development
|
|
122
122
|
|
|
123
|
-
In
|
|
123
|
+
In native Void apps, sending a message through a queue binding automatically invokes the consumer in Miniflare. Local delivery uses the same handler as production.
|
|
124
124
|
|
|
125
125
|
You can also manually dispatch a batch by POSTing to the dev endpoint Void exposes:
|
|
126
126
|
|
|
@@ -139,6 +139,6 @@ curl -X POST http://localhost:5173/__void/queue \
|
|
|
139
139
|
-d '{"queue":"my-queue","messages":[{"id":"1","timestamp":'"$(date +%s000)"',"body":{"hello":"world"},"attempts":1}]}'
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
If you set `__VOID_PROXY_TOKEN` in `.
|
|
142
|
+
If you set `__VOID_PROXY_TOKEN` in `.env`, that explicit token takes precedence and the printed curl command uses `x-void-internal: <your-token>` instead.
|
|
143
143
|
|
|
144
|
-
In
|
|
144
|
+
In supported meta-frameworks, use `/__void/queue` to test a consumer manually. It runs inside the framework adapter's development runtime with that adapter's bindings. Sending to a queue binding doesn't automatically invoke the consumer in this mode.
|
|
@@ -4,39 +4,47 @@ outline: deep
|
|
|
4
4
|
|
|
5
5
|
# Quickstart
|
|
6
6
|
|
|
7
|
+
Let's create a Void app, run it locally, and deploy it. You can start in an empty directory or [add Void to an existing Vite app](#adding-to-an-existing-vite-app).
|
|
8
|
+
|
|
9
|
+
Use Node.js 24.21.0 or later. New projects pin the SDK's tested Workers
|
|
10
|
+
compatibility date, so the bundled local runtime can start them. An existing
|
|
11
|
+
compatibility date in your project is preserved.
|
|
12
|
+
|
|
7
13
|
## Start in an Empty Directory
|
|
8
14
|
|
|
9
|
-
Install
|
|
15
|
+
Install Void in your project directory:
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
::: code-group
|
|
12
18
|
|
|
13
|
-
```sh
|
|
19
|
+
```sh [npm]
|
|
14
20
|
npm install -D void
|
|
15
21
|
```
|
|
16
22
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
```sh
|
|
23
|
+
```sh [pnpm]
|
|
20
24
|
pnpm add -D void
|
|
21
25
|
```
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
```sh
|
|
27
|
+
```sh [yarn]
|
|
26
28
|
yarn add -D void
|
|
27
29
|
```
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
```sh
|
|
31
|
+
```sh [bun]
|
|
32
32
|
bun add -D void
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
:::
|
|
36
|
+
|
|
37
|
+
Then run the setup command:
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
With pnpm, you can also start with `pnpm create void my-app`; the scaffolder sets
|
|
40
|
+
up the required native build permissions before installing Void. If a manual
|
|
41
|
+
installation reports blocked build scripts, approve `esbuild`, `sharp`, and
|
|
42
|
+
`workerd` with `pnpm approve-builds`. Set `better-sqlite3: false` in
|
|
43
|
+
`pnpm-workspace.yaml`'s `allowBuilds`: Void uses version 13's bundled binaries,
|
|
44
|
+
so it does not need a native rebuild.
|
|
38
45
|
|
|
39
|
-
|
|
46
|
+
The setup install updates the pnpm lockfile to match the generated dependencies,
|
|
47
|
+
including when setup runs in CI. Later builds can use `pnpm install --frozen-lockfile`.
|
|
40
48
|
|
|
41
49
|
::: code-group
|
|
42
50
|
|
|
@@ -58,36 +66,36 @@ bunx void init
|
|
|
58
66
|
|
|
59
67
|
:::
|
|
60
68
|
|
|
61
|
-
|
|
69
|
+
Void asks you to choose Vite+ or plain Vite, a UI framework, and a starter. Vite+ is the default. For a database app, D1 needs no local database server; PostgreSQL and MySQL are available if you want to use an external database. Static Pages starts with pages only.
|
|
62
70
|
|
|
63
|
-
|
|
71
|
+
Setup also asks where you want to deploy. Choose Cloudflare to use your own account, or Void to connect to your team's platform. You can skip this and decide later.
|
|
64
72
|
|
|
65
73
|
<details>
|
|
66
74
|
<summary style="cursor:pointer">
|
|
67
75
|
💡 <b>Notes on <code>void</code> binary usage</b>
|
|
68
76
|
</summary>
|
|
69
77
|
|
|
70
|
-
`void`
|
|
78
|
+
The docs use `void` for brevity. Because it's installed in your project, run it through your package manager outside package scripts: `npx void`, `pnpm void`, `yarn void`, or `bunx void`.
|
|
71
79
|
|
|
72
80
|
Alternatively, you can add `./node_modules/.bin` to your `PATH` so that you can invoke `void` directly when you are in the root directory of your app.
|
|
73
81
|
|
|
74
82
|
:::warning ⚠️ Prefer local install
|
|
75
|
-
|
|
83
|
+
Install `void` locally so the CLI and your app use the same version.
|
|
76
84
|
:::
|
|
77
85
|
|
|
78
86
|
</details>
|
|
79
87
|
|
|
80
88
|
## Using with Coding Agents
|
|
81
89
|
|
|
82
|
-
`void init` detects your agent
|
|
90
|
+
`void init` detects your coding agent and sets up the matching instructions and skills.
|
|
83
91
|
|
|
84
92
|
If auto-detection fails, `void init` asks you to choose from a short list (Claude, Cursor, Codex, Gemini CLI, Generic).
|
|
85
93
|
|
|
86
|
-
In
|
|
94
|
+
In agents that support it, use the `/void` skill to load the relevant guidance, then describe the app you want to build. See [Coding Agents](../integrations/agents) for setup details.
|
|
87
95
|
|
|
88
96
|
## Meta Frameworks
|
|
89
97
|
|
|
90
|
-
|
|
98
|
+
You can build pages directly with Void's [Pages routing](./pages-routing/overview), or keep an existing framework such as TanStack Start, React Router, or SvelteKit. Follow the [framework integration guides](../integrations/frameworks/overview) for framework-specific setup.
|
|
91
99
|
|
|
92
100
|
## Adding to an Existing Vite App
|
|
93
101
|
|
|
@@ -111,7 +119,7 @@ bun add -D void
|
|
|
111
119
|
|
|
112
120
|
:::
|
|
113
121
|
|
|
114
|
-
Enable the plugin in `vite.config.ts
|
|
122
|
+
Enable the plugin in `vite.config.ts`:
|
|
115
123
|
|
|
116
124
|
```ts
|
|
117
125
|
import { defineConfig } from 'vite';
|
|
@@ -122,7 +130,7 @@ export default defineConfig({
|
|
|
122
130
|
});
|
|
123
131
|
```
|
|
124
132
|
|
|
125
|
-
|
|
133
|
+
Run setup to configure the remaining project files:
|
|
126
134
|
|
|
127
135
|
::: code-group
|
|
128
136
|
|
|
@@ -148,7 +156,7 @@ bunx void init
|
|
|
148
156
|
|
|
149
157
|
### 1. Edit the generated API route
|
|
150
158
|
|
|
151
|
-
|
|
159
|
+
Database-backed starters include `routes/api/hello.ts`. You can edit its `GET` handler, or create this file if you started with Static Pages:
|
|
152
160
|
|
|
153
161
|
```ts
|
|
154
162
|
import { defineHandler } from 'void';
|
|
@@ -169,61 +177,32 @@ Then visit:
|
|
|
169
177
|
- App: `http://localhost:5173`
|
|
170
178
|
- API route: `http://localhost:5173/api/hello`
|
|
171
179
|
|
|
172
|
-
### 3.
|
|
180
|
+
### 3. Choose where to deploy
|
|
181
|
+
|
|
182
|
+
If you chose a deployment target during setup, you're ready. If you skipped it, run `void init` again or choose Cloudflare for the first deploy:
|
|
173
183
|
|
|
174
184
|
```sh
|
|
175
|
-
void
|
|
185
|
+
void deploy --platform cloudflare
|
|
176
186
|
```
|
|
177
187
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
### 4. Deploy
|
|
181
|
-
|
|
182
|
-
Set secrets once before deploying, if any:
|
|
188
|
+
Void opens your browser to sign in when needed. To use your team's platform, connect using the API URL from your administrator:
|
|
183
189
|
|
|
184
190
|
```sh
|
|
185
|
-
void
|
|
191
|
+
void connect https://platform.example.com
|
|
192
|
+
void project link
|
|
186
193
|
```
|
|
187
194
|
|
|
188
|
-
|
|
195
|
+
### 4. Deploy
|
|
196
|
+
|
|
197
|
+
With your target configured, run:
|
|
189
198
|
|
|
190
199
|
```sh
|
|
191
200
|
void deploy
|
|
192
201
|
```
|
|
193
202
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
◇ Building...
|
|
198
|
-
│ (vite build output)
|
|
199
|
-
│
|
|
200
|
-
ℹ Found N migration(s)
|
|
201
|
-
│
|
|
202
|
-
◇ Checking assets...
|
|
203
|
-
◇ Uploading X/Y assets (Z cached)
|
|
204
|
-
◇ Packaging...
|
|
205
|
-
◇ Deploying...
|
|
206
|
-
◇ Deployed!
|
|
207
|
-
│
|
|
208
|
-
│ ╭─────────────────────────────────────────╮
|
|
209
|
-
│ │ https://my-app.void.app │
|
|
210
|
-
│ │ │
|
|
211
|
-
│ │ 2 worker module(s), 5 static asset(s) │
|
|
212
|
-
│ │ 1 migration(s) applied │
|
|
213
|
-
│ │ SSR enabled │
|
|
214
|
-
│ ╰─────────────────────────────────────────╯
|
|
215
|
-
│
|
|
216
|
-
└ Done!
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
On first deploy, Void will:
|
|
220
|
-
|
|
221
|
-
- build your app
|
|
222
|
-
- create or link a project if you did not already do that during `void init`
|
|
223
|
-
- provision required resources (for example D1/KV/R2 when inferred)
|
|
224
|
-
- deploy to `https://<slug>.void.app`
|
|
225
|
-
|
|
226
|
-
Right now, only deploys via the CLI is supported. To setup push-to-deploy GitHub, run `void init --github`.
|
|
203
|
+
Void builds the app, provisions the resources it uses, applies pending migrations, and prints the deployed URL. If it reports a missing production secret, [configure that secret](./env-vars.md) and deploy again.
|
|
204
|
+
|
|
205
|
+
Subsequent deploys use the same target. See [Deployment](./deployment.md) for CI setup, migrations, and rollback. To generate a supported push-to-deploy workflow, run `void init --github`.
|
|
227
206
|
|
|
228
207
|
## Next steps
|
|
229
208
|
|
|
@@ -4,16 +4,16 @@ outline: deep
|
|
|
4
4
|
|
|
5
5
|
# Remote Development
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Void normally uses local D1, KV, and R2 through [Miniflare](https://miniflare.dev/). Remote mode lets you run local code against a project deployed to your Void platform, for example to test with existing data or investigate an issue.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Calls such as `db.select()` and `env.KV.get()` use the deployed resources without changing your application code. Writes affect real data, so use a staging project when possible.
|
|
10
10
|
|
|
11
11
|
## Prerequisites
|
|
12
12
|
|
|
13
13
|
Before enabling remote mode, you need:
|
|
14
14
|
|
|
15
|
-
1.
|
|
16
|
-
2.
|
|
15
|
+
1. Connect to your team's platform with `void connect <url>`. It signs you in when needed.
|
|
16
|
+
2. Link a project with `void project link`. Deploy it at least once so its resources exist.
|
|
17
17
|
|
|
18
18
|
## Enabling Remote Mode
|
|
19
19
|
|
|
@@ -46,7 +46,7 @@ AI inference is always routed through the proxy regardless of remote mode. There
|
|
|
46
46
|
|
|
47
47
|
## How It Works
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
In remote mode, binding calls go through your platform's proxy, authenticated with your login token. The proxy uses the linked project's configuration to choose the D1 database, KV namespace, or R2 bucket.
|
|
50
50
|
|
|
51
51
|
You don't need to change any code. Imports like `import { db } from "void/db"` and direct binding access via `c.env.KV` both work transparently.
|
|
52
52
|
|
|
@@ -61,7 +61,9 @@ When the dev server starts with remote mode active, it prints:
|
|
|
61
61
|
|
|
62
62
|
## Limitations
|
|
63
63
|
|
|
64
|
-
- **Network latency:**
|
|
64
|
+
- **Network latency:** each binding call makes a network request, so responses may be slower than local development.
|
|
65
65
|
- **R2 multipart uploads:** `createMultipartUpload()` and `resumeMultipartUpload()` are not supported in remote mode.
|
|
66
|
+
- **R2 conditional writes:** `put(..., { onlyIf })` requires a current Void platform and an active deployment with the native remote-binding handler. Update the platform and redeploy the project if this operation is unavailable. Failed preconditions return `null`; Void never retries a conditional write as an unconditional REST upload.
|
|
66
67
|
- **D1 dump:** `db.dump()` is not supported in remote mode.
|
|
68
|
+
- **D1 batch compatibility:** `db.batch()` requires an active deployment with the native remote-binding handler. Void does not split a batch into REST calls because that would lose D1's atomic all-or-nothing behavior.
|
|
67
69
|
- **Writes affect real data:** remote mode connects to your actual deployed resources. Inserts, updates, and deletes are real, so use it carefully or point it at a staging project.
|
|
@@ -4,7 +4,24 @@ outline: deep
|
|
|
4
4
|
|
|
5
5
|
# Sandboxes
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
> **Managed platform beta paused:** New managed Sandbox deployments and retained
|
|
8
|
+
> Sandbox rollbacks are currently disabled. Native Cloudflare deployments keep
|
|
9
|
+
> using Cloudflare Sandboxes directly. Platform operators upgrading an existing
|
|
10
|
+
> installation must preview and complete
|
|
11
|
+
> `void platform system sandbox-drain` before reopening platform traffic. The
|
|
12
|
+
> preview is bounded; pass its `nextCursor` back with `--cursor` to inspect later
|
|
13
|
+
> pages. Apply is resumable through a leased database checkpoint: rerun it after
|
|
14
|
+
> active deployments settle, after it advances a page, or after resolving any
|
|
15
|
+
> ownership verification blocker.
|
|
16
|
+
|
|
17
|
+
For an `unverified_container` blocker, use the reported resource, project,
|
|
18
|
+
binding, application ID, and application name to compare the application's
|
|
19
|
+
Durable Object namespace with the project's managed dispatch script. Never
|
|
20
|
+
delete an account application by name alone. Remove the application and stale
|
|
21
|
+
resource row only after proving that both belong to this platform installation,
|
|
22
|
+
then rerun the drain.
|
|
23
|
+
|
|
24
|
+
Use a Cloudflare Sandbox to run commands, work with files, and expose ports from server code. Each session gets an isolated container.
|
|
8
25
|
|
|
9
26
|
```ts
|
|
10
27
|
import { defineHandler } from 'void';
|
|
@@ -23,7 +40,7 @@ Importing from `void/sandbox` enables the `SANDBOX` Durable Object binding, expo
|
|
|
23
40
|
|
|
24
41
|
## Configuration
|
|
25
42
|
|
|
26
|
-
Most apps do not need config. The default binding is `SANDBOX`, the Durable Object class is `Sandbox`, local development
|
|
43
|
+
Most apps do not need config. The default binding is `SANDBOX`, the Durable Object class is `Sandbox`, and local development, native Cloudflare deploys, and Void Platform all use the published image matching the installed `@cloudflare/sandbox` version.
|
|
27
44
|
|
|
28
45
|
Use `void.json` when you need a custom image or container size:
|
|
29
46
|
|
|
@@ -40,16 +57,16 @@ Use `void.json` when you need a custom image or container size:
|
|
|
40
57
|
|
|
41
58
|
Available fields:
|
|
42
59
|
|
|
43
|
-
| Field | Default
|
|
44
|
-
| ------------------- |
|
|
45
|
-
| `binding` | `SANDBOX`
|
|
46
|
-
| `className` | `Sandbox`
|
|
47
|
-
| `containerName` | `void-sandbox`
|
|
48
|
-
| `image` |
|
|
49
|
-
| `imageBuildContext` | Directory of `image`
|
|
50
|
-
| `platformImage` | Matching sandbox SDK image
|
|
51
|
-
| `instanceType` | `lite` on Void deploy
|
|
52
|
-
| `maxInstances` | `20` on Void deploy
|
|
60
|
+
| Field | Default | Description |
|
|
61
|
+
| ------------------- | -------------------------- | --------------------------------------------------------------------- |
|
|
62
|
+
| `binding` | `SANDBOX` | Worker binding name |
|
|
63
|
+
| `className` | `Sandbox` | Durable Object class exported by the Worker |
|
|
64
|
+
| `containerName` | `void-sandbox` | Cloudflare container app name |
|
|
65
|
+
| `image` | Matching sandbox SDK image | Dockerfile path or registry image for local and native Cloudflare use |
|
|
66
|
+
| `imageBuildContext` | Directory of `image` | Docker build context for local and native Cloudflare use |
|
|
67
|
+
| `platformImage` | Matching sandbox SDK image | Registry image used by `void deploy` |
|
|
68
|
+
| `instanceType` | `lite` on Void deploy | Container size, such as `lite`, `basic`, `standard-1` |
|
|
69
|
+
| `maxInstances` | `20` on Void deploy | Maximum number of container instances |
|
|
53
70
|
|
|
54
71
|
## Runtime API
|
|
55
72
|
|
|
@@ -68,13 +85,13 @@ You can also use the namespace directly from `c.env.SANDBOX` when you need lower
|
|
|
68
85
|
|
|
69
86
|
## State persistence
|
|
70
87
|
|
|
71
|
-
|
|
88
|
+
A sandbox has a persistent Durable Object identity and a container that can restart:
|
|
72
89
|
|
|
73
|
-
`getSandbox(id)`
|
|
90
|
+
`getSandbox(id)` selects the same Durable Object for that ID across deploys and rollbacks. Data saved in its persistent storage, including its SQLite database, survives container restarts. Use that storage for session metadata and other state you need to keep.
|
|
74
91
|
|
|
75
|
-
|
|
92
|
+
Files, running processes, exposed ports, and in-memory shell sessions last only as long as the container. It can stop after inactivity (the SDK defaults to `sleepAfter: "10m"`), crash, or restart during platform scheduling. `keepAlive: true` disables the idle timer but doesn't prevent other restarts.
|
|
76
93
|
|
|
77
|
-
|
|
94
|
+
Save anything you need to keep in Durable Object storage, your database, KV, or R2. The SDK also provides helpers to back up and restore directories through R2. Deleting the project on a Void platform removes both layers; routine container restarts only lose container state.
|
|
78
95
|
|
|
79
96
|
## Deployment
|
|
80
97
|
|