void 0.21.9 → 0.23.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/README.md +5 -1
- package/dist/{account-cmd-DZZGK80W.mjs → account-cmd-C84Ee8cO.mjs} +5 -5
- package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
- package/dist/application-routing-B7QEjqSR.mjs +27 -0
- package/dist/{auth-CZuiVsFh.mjs → auth-CCjt0hcq.mjs} +1 -1
- package/dist/{auth-DLNN0D3Z.mjs → auth-CSkdO2Bb.mjs} +4 -47
- package/dist/{auth-link-B_CeugBw.mjs → auth-link-CioEg6uY.mjs} +5 -5
- package/dist/{auth-router-BgEFRuvZ.mjs → auth-router-BsR981d4.mjs} +5 -5
- package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
- package/dist/{build-cmd-Dpt0jd-x.mjs → build-cmd-LzvNJORH.mjs} +19 -7
- package/dist/{cache-7_UeZdTk.mjs → cache-C4MvnrMH.mjs} +4 -4
- package/dist/{cancel-deploy-D23R1RXT.mjs → cancel-deploy-abUxpP2n.mjs} +4 -4
- package/dist/{cf-build-output-CGT03qCD.mjs → cf-build-output-BPqOT964.mjs} +141 -63
- package/dist/cf-build-output-_0HNWysu.mjs +2 -0
- package/dist/cli/cli.mjs +114 -460
- package/dist/cli/cloudflare-operation-process.mjs +1103 -0
- package/dist/cli/env-schema-probe.d.mts +2 -1
- package/dist/cli/env-schema-probe.mjs +3 -3
- package/dist/client-Cu7jWiF1.mjs +2 -0
- package/dist/{client-QTl6ko_D.mjs → client-RV8NVeB8.mjs} +165 -21
- package/dist/{cloudflare-auth-C4_GPZr0.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -43
- package/dist/{cloudflare-cmd-bSmZ1d5L.mjs → cloudflare-cmd-BcrVyTmJ.mjs} +9 -10
- package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
- package/dist/{cloudflare-connect-jAwacxxP.mjs → cloudflare-connect-B8uPZ4nx.mjs} +4 -4
- package/dist/{cloudflare-operations-BipGMJ5O.mjs → cloudflare-operations-AiWashgg.mjs} +1 -1
- package/dist/{cloudflare-operations-sMZXpk_S.mjs → cloudflare-operations-fxHb-byx.mjs} +118 -203
- package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
- package/dist/{config-CF69HgXc.d.mts → config-BMHb8RCj.d.mts} +2 -2
- package/dist/{config-CafTW6Cz.mjs → config-Br_JZD6u.mjs} +2 -7
- package/dist/config-C_XRIPx2.mjs +89 -0
- package/dist/{config-s7Xj7tPb.mjs → config-CyQ-wVd7.mjs} +1 -1
- package/dist/config-entry.d.mts +1 -1
- package/dist/{config-write-BSduPMY8.mjs → config-write-B1f88wJA.mjs} +1 -1
- package/dist/{connect-BsUSRzln.mjs → connect-Bd4kJd9U.mjs} +6 -6
- package/dist/{create-project-BniEV0OW.mjs → create-project-Boczwj5r.mjs} +1 -1
- package/dist/{create-project-DBfFSZKY.mjs → create-project-bMf6ffLZ.mjs} +9 -5
- package/dist/{db-hRrvZaq_.mjs → db-8uG64XLl.mjs} +26 -26
- package/dist/{delete-D6dZ9B6B.mjs → delete-NvbiyeJf.mjs} +4 -4
- package/dist/{deploy-WaAQez1O.mjs → deploy-DzAIwqNU.mjs} +944 -607
- package/dist/{deploy-DDz7c8LK.mjs → deploy-bjXdFCtn.mjs} +1 -1
- package/dist/{dist-BR1quN_w.mjs → dist-AoCzRTJE.mjs} +226 -60
- package/dist/{dist-C5fND3R0.mjs → dist-BuDuKZJv.mjs} +1 -1
- package/dist/{dist-Dn6nn2IU.mjs → dist-CTBk70IR.mjs} +42 -42
- package/dist/{domain-Dmhvb2oU.mjs → domain-y5Tvydvo.mjs} +5 -5
- package/dist/{email-DFi-s2t4.mjs → email-B3umsW75.mjs} +15 -30
- package/dist/{env-Csi-tMbT.mjs → env-BS6qYHDb.mjs} +6 -6
- package/dist/{env-public-D_6u46fX.d.mts → env-public-BX_r8HR6.d.mts} +2 -1
- package/dist/{env-validation-BB4GkLxn.mjs → env-validation-BPn7vk-V.mjs} +18 -71
- package/dist/{env-validation-BXge7uyK.mjs → env-validation-DbTg7-ar.mjs} +1 -1
- package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
- package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
- package/dist/{gen-Dz3X1Qab.mjs → gen-B580--vC.mjs} +5 -5
- package/dist/gen-BVaUUumi.mjs +2 -0
- package/dist/{github-cmd-BED3_9JD.mjs → github-cmd-v45BdfKX.mjs} +6 -8
- package/dist/{handler-BXJTXd02.d.mts → handler-CZ4nAylQ.d.mts} +2 -1
- package/dist/{headers-BOg_velo.mjs → headers-DWi2IXWx.mjs} +1 -1
- package/dist/help-DofyZuY7.mjs +2 -0
- package/dist/{help-DC7gdz7L.mjs → help-daGKjXGk.mjs} +268 -666
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +305 -1490
- package/dist/info-B97bTX9N.mjs +113 -0
- package/dist/{init-WO0JlPx8.mjs → init-Bvy7zrBo.mjs} +51 -20
- package/dist/limits-Bq5LG8Id.d.mts +27 -0
- package/dist/limits-Cjuk2VPm.mjs +68 -0
- package/dist/{link-CsHOinF7.mjs → link-CDqqCjFl.mjs} +5 -5
- package/dist/{list-CDb-4bZ1.mjs → list-CZj0dzKY.mjs} +5 -5
- package/dist/{live-CKiJilLr.d.mts → live-Chw1eIMv.d.mts} +1 -1
- package/dist/{local-d1-CC8sKFGu.mjs → local-d1-2CMnpuW_.mjs} +2 -2
- package/dist/login-DYt_An22.mjs +2 -0
- package/dist/{login-DvqXsfGs.mjs → login-UZKFM_u7.mjs} +5 -5
- package/dist/{logs-BdfiOezj.mjs → logs-CUZ6t9t3.mjs} +5 -5
- package/dist/migrate-8_2u55MD.mjs +2 -0
- package/dist/{migrate-B8KuoYsO.mjs → migrate-DHul7PRV.mjs} +5 -4
- package/dist/{node-BM43oz4G.mjs → node-BkyRWRx8.mjs} +2 -2
- package/dist/operator-args-CLgKGlwU.mjs +690 -0
- package/dist/{operator-cmd-03819ATr.mjs → operator-cmd-DBA6dl0m.mjs} +69 -23
- package/dist/output-Dm_A4Tbv.mjs +81 -0
- package/dist/pages/client.d.mts +34 -2
- package/dist/pages/client.mjs +59 -3
- package/dist/pages/index.d.mts +1 -1
- package/dist/pages/index.mjs +3 -3
- package/dist/pages/islands-plugin.d.mts +16 -6
- package/dist/pages/islands-plugin.mjs +2 -2
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -308
- package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
- package/dist/{output-CCH48AMM.mjs → picocolors-BTps1_gs.mjs} +2 -76
- package/dist/plan-D1Q5rf-r.mjs +2 -0
- package/dist/plan-NPpwZ_kc.mjs +58 -0
- package/dist/platform-args-BJdRtlLq.mjs +506 -0
- package/dist/platform-args-D3RXyR6h.mjs +2 -0
- package/dist/{platform-auth-config-z92h63q5.mjs → platform-auth-config-B56E9YP1.mjs} +4 -4
- package/dist/{platform-auth-protection-DeE3yr2R.mjs → platform-auth-protection-BDWO_aER.mjs} +3 -3
- package/dist/{platform-auth-recovery-o_340Ixx.mjs → platform-auth-recovery-1gg4CSRe.mjs} +4 -4
- package/dist/{platform-cmd-C4ZV3Vpy.mjs → platform-cmd-Bt-1w6pY.mjs} +1 -1
- package/dist/{platform-cmd-DNl8WosH.mjs → platform-cmd-DMcQStSc.mjs} +26 -5
- package/dist/{platform-domain-CU1JtJkW.mjs → platform-domain-BNkcz0OB.mjs} +36 -9
- package/dist/{platform-lifecycle-Bc047IeT.mjs → platform-lifecycle-9OyBALhH.mjs} +850 -276
- package/dist/{platform-lifecycle-Bs2qx1E3.mjs → platform-lifecycle-BE6C_jxh.mjs} +1 -1
- package/dist/{platform-management-CVpGI9Y5.mjs → platform-management-CjwLVQwN.mjs} +59 -11
- package/dist/{platform-management-C8tt6D8h.mjs → platform-management-CnyTdcWX.mjs} +1 -1
- package/dist/platform-plans-config-BNGKGr4P.mjs +359 -0
- package/dist/{platform-recovery-dvUaptLr.mjs → platform-recovery-D6KSpuFm.mjs} +2 -2
- package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
- package/dist/{prepare-DyZ-Yok5.mjs → prepare-B5Mkic5u.mjs} +3 -3
- package/dist/{prepare-C3kt3Rst.mjs → prepare-DOsL0CC9.mjs} +4 -20
- package/dist/prepare-cgvDMtSb.mjs +2 -0
- package/dist/{project-cmd-B44I8J_W.mjs → project-cmd-CNzrqvBv.mjs} +30 -16
- package/dist/{project-team-BkbYIsXN.mjs → project-team-DQOWPfQT.mjs} +4 -4
- package/dist/{project-token-C8xEEQnB.mjs → project-token-CTDYU0Cc.mjs} +4 -4
- package/dist/project-zero-trust-BNAkW-_0.mjs +63 -0
- package/dist/{protocol-ZH3jP4a7.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
- package/dist/protocol-U7bfjHmA.mjs +331 -0
- package/dist/{provision-DNtrtaVD.mjs → provision-C4ORE7G7.mjs} +1 -1
- package/dist/{provision-BhreDAOS.mjs → provision-CJFgTZY8.mjs} +111 -215
- package/dist/{requests-DFyhBMaf.mjs → requests-MhxYnau8.mjs} +4 -4
- package/dist/resource-name-C7LVpcRm.mjs +11 -0
- package/dist/{rollback-DHHxXZiS.mjs → rollback-CJ6iSDoU.mjs} +5 -5
- package/dist/route-url-CG7U-cRN.mjs +15 -0
- package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
- package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
- package/dist/runtime/ai.d.mts +12 -8
- package/dist/runtime/ai.mjs +84 -17
- package/dist/runtime/better-auth-mysql.mjs +1 -1
- package/dist/runtime/better-auth-pg.mjs +1 -1
- package/dist/runtime/better-auth.mjs +1 -1
- package/dist/runtime/client-react.mjs +2 -2
- package/dist/runtime/client-solid.mjs +2 -2
- package/dist/runtime/client-svelte.mjs +2 -2
- package/dist/runtime/client-vue.mjs +2 -2
- package/dist/runtime/client.mjs +2 -2
- package/dist/runtime/durable.d.mts +3 -1
- package/dist/runtime/durable.mjs +4 -1
- package/dist/runtime/email/testing.mjs +1 -1
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/kv.mjs +0 -1
- package/dist/runtime/limits.d.mts +2 -0
- package/dist/runtime/limits.mjs +2 -0
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-server.mjs +25 -16
- package/dist/runtime/live.d.mts +1 -1
- package/dist/runtime/migration-handler.mjs +62 -42
- package/dist/runtime/route-url.d.mts +4 -0
- package/dist/runtime/route-url.mjs +2 -0
- package/dist/runtime/routing.d.mts +180 -0
- package/dist/runtime/routing.mjs +1082 -0
- package/dist/runtime/sandbox-container.d.mts +3 -0
- package/dist/runtime/sandbox-container.mjs +2 -0
- package/dist/runtime/sandbox.d.mts +4 -32
- package/dist/runtime/sandbox.mjs +151 -75
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +4 -2
- package/dist/runtime/ws-server.mjs +27 -2
- package/dist/runtime/ws.d.mts +2 -2
- package/dist/runtime/ws.mjs +8 -6
- package/dist/sandbox-XZAqzFlG.d.mts +52 -0
- package/dist/sandbox-container-Bo0eiFKz.d.mts +73 -0
- package/dist/sandbox-container-C6ItmVuN.mjs +281 -0
- package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
- package/dist/{secret-DN9sSNiV.mjs → secret-Dli5fP0B.mjs} +6 -6
- package/dist/{skills-O6FUaizK.mjs → skills-D1II1Juz.mjs} +1 -1
- package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
- package/dist/{subcommand-prompt-BuGYkAkC.mjs → subcommand-prompt-CY1C4fvl.mjs} +2 -2
- package/dist/validate-Dq_L3s0S.mjs +2 -0
- package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
- package/dist/{wrangler-BymcxrRa.mjs → wrangler-7K-bW_DL.mjs} +14 -235
- package/dist/{ws-BwcqizuH.d.mts → ws-CL1w7GXU.d.mts} +13 -2
- package/package.json +48 -33
- package/sandbox.Dockerfile +4 -0
- package/schema.json +10 -22
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
- package/skills/void/SKILL.md +50 -133
- package/skills/void/docs/guide/ai.md +94 -84
- package/skills/void/docs/guide/app-types.md +3 -32
- package/skills/void/docs/guide/auth.md +12 -116
- package/skills/void/docs/guide/database/d1.md +9 -54
- package/skills/void/docs/guide/database/mysql.md +1 -1
- package/skills/void/docs/guide/database/postgresql.md +5 -26
- package/skills/void/docs/guide/database.md +23 -75
- package/skills/void/docs/guide/deployment.md +27 -113
- package/skills/void/docs/guide/durable-state.md +43 -18
- package/skills/void/docs/guide/edge/headers.md +3 -47
- package/skills/void/docs/guide/edge/prerendering.md +5 -20
- package/skills/void/docs/guide/edge/redirects.md +11 -64
- package/skills/void/docs/guide/edge/revalidation.md +6 -19
- package/skills/void/docs/guide/edge/rewrites.md +56 -284
- package/skills/void/docs/guide/edge/static-assets.md +23 -72
- package/skills/void/docs/guide/email/domains.md +112 -0
- package/skills/void/docs/guide/email/receiving.md +139 -0
- package/skills/void/docs/guide/email/sending.md +231 -0
- package/skills/void/docs/guide/email.md +13 -619
- package/skills/void/docs/guide/env-migration.md +11 -11
- package/skills/void/docs/guide/env-vars.md +9 -29
- package/skills/void/docs/guide/index.md +0 -15
- package/skills/void/docs/guide/jobs.md +3 -18
- package/skills/void/docs/guide/kv.md +5 -11
- package/skills/void/docs/guide/live.md +5 -56
- package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
- package/skills/void/docs/guide/pages-routing/head.md +10 -10
- package/skills/void/docs/guide/pages-routing/islands.md +6 -36
- package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
- package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
- package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
- package/skills/void/docs/guide/pages-routing/overview.md +7 -17
- package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
- package/skills/void/docs/guide/platform/administration/access.md +1 -4
- package/skills/void/docs/guide/platform/administration/email.md +35 -8
- package/skills/void/docs/guide/platform/administration/operations.md +26 -4
- package/skills/void/docs/guide/platform/administration/plans.md +126 -0
- package/skills/void/docs/guide/platform/administration/projects.md +5 -2
- package/skills/void/docs/guide/platform/administration/zero-trust.md +189 -0
- package/skills/void/docs/guide/platform/development/local.md +2 -2
- package/skills/void/docs/guide/platform/development/runtime.md +3 -13
- package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
- package/skills/void/docs/guide/platform/installation/credentials.md +6 -4
- package/skills/void/docs/guide/platform/installation/domains.md +31 -3
- package/skills/void/docs/guide/platform/installation/first-deployment.md +6 -0
- package/skills/void/docs/guide/platform/installation/maintenance.md +3 -1
- package/skills/void/docs/guide/platform/installation/prerequisites.md +21 -16
- package/skills/void/docs/guide/platform/installation/setup.md +9 -5
- package/skills/void/docs/guide/platform/installation/uninstall.md +17 -2
- package/skills/void/docs/guide/platform-administration.md +2 -0
- package/skills/void/docs/guide/queues.md +7 -9
- package/skills/void/docs/guide/quickstart.md +38 -37
- package/skills/void/docs/guide/remote-dev.md +4 -9
- package/skills/void/docs/guide/sandboxes.md +78 -41
- package/skills/void/docs/guide/server-routing.md +9 -72
- package/skills/void/docs/guide/sse.md +4 -18
- package/skills/void/docs/guide/ssg.md +3 -15
- package/skills/void/docs/guide/ssr.md +14 -62
- package/skills/void/docs/guide/storage.md +9 -4
- package/skills/void/docs/guide/type-safety.md +3 -14
- package/skills/void/docs/guide/typed-fetch.md +3 -7
- package/skills/void/docs/guide/websockets.md +68 -40
- package/skills/void/docs/integrations/agents.md +3 -3
- package/skills/void/docs/integrations/cloudflare.md +85 -316
- package/skills/void/docs/integrations/frameworks/analog.md +5 -64
- package/skills/void/docs/integrations/frameworks/astro.md +4 -73
- package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
- package/skills/void/docs/integrations/frameworks/overview.md +11 -54
- package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
- package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
- package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
- package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
- package/skills/void/docs/reference/api/auth.md +156 -0
- package/skills/void/docs/reference/api/client.md +87 -0
- package/skills/void/docs/reference/api/database.md +95 -0
- package/skills/void/docs/reference/api/durable.md +46 -0
- package/skills/void/docs/reference/api/env.md +50 -0
- package/skills/void/docs/reference/api/handlers.md +254 -0
- package/skills/void/docs/reference/api/pages.md +241 -0
- package/skills/void/docs/reference/api/plugin.md +39 -0
- package/skills/void/docs/reference/api/resources.md +109 -0
- package/skills/void/docs/reference/api/rewrites.md +76 -0
- package/skills/void/docs/reference/api/types.md +92 -0
- package/skills/void/docs/reference/api.md +56 -1218
- package/skills/void/docs/reference/cli/auth.md +88 -0
- package/skills/void/docs/reference/cli/database.md +128 -0
- package/skills/void/docs/reference/cli/deploy.md +85 -0
- package/skills/void/docs/reference/cli/domains.md +41 -0
- package/skills/void/docs/reference/cli/email.md +129 -0
- package/skills/void/docs/reference/cli/generate.md +116 -0
- package/skills/void/docs/reference/cli/github.md +189 -0
- package/skills/void/docs/reference/cli/platform-config.md +92 -0
- package/skills/void/docs/reference/cli/platform-email.md +81 -0
- package/skills/void/docs/reference/cli/platform-installation.md +127 -0
- package/skills/void/docs/reference/cli/platform-operations.md +90 -0
- package/skills/void/docs/reference/cli/platform-users.md +89 -0
- package/skills/void/docs/reference/cli/platform-zero-trust.md +45 -0
- package/skills/void/docs/reference/cli/platform.md +70 -0
- package/skills/void/docs/reference/cli/project.md +214 -0
- package/skills/void/docs/reference/cli/secrets.md +76 -0
- package/skills/void/docs/reference/cli/setup.md +70 -0
- package/skills/void/docs/reference/cli.md +33 -1621
- package/skills/void/docs/reference/config.md +26 -32
- package/skills/void/docs/reference/resource-inference.md +3 -58
- package/skills/void/docs/reference/structure.md +14 -41
- package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
- package/dist/cli/cf-compat.mjs +0 -968
- package/dist/client-4cDVv7BO.mjs +0 -2
- package/dist/gen-Vnv2f65C.mjs +0 -2
- package/dist/help-DQMfeKMz.mjs +0 -2
- package/dist/login-DFQk7rbW.mjs +0 -2
- package/dist/migrate-TsHGBnDA.mjs +0 -2
- package/dist/plan-BEZ8VJW0.mjs +0 -256
- package/dist/plan-DpuOr14e.mjs +0 -2
- package/dist/prepare-BZXkjdNe.mjs +0 -2
- package/dist/validate-EKmJWxmy.mjs +0 -2
- /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
|
@@ -1,175 +1,52 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: migrate-cloudflare-to-void
|
|
3
|
-
description: Migrate an existing Vite app using @cloudflare/vite-plugin to
|
|
3
|
+
description: Migrate an existing Vite app using @cloudflare/vite-plugin to Void while preserving its routes, bindings, and deployment identity.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Migrate
|
|
6
|
+
# Migrate a Cloudflare Vite app to Void
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Read the app's package manifest, Vite config, Worker entry, Cloudflare config,
|
|
9
|
+
and migrations. Identify its framework, endpoints, bindings, and deployed Worker
|
|
10
|
+
before changing them.
|
|
9
11
|
|
|
10
|
-
Use
|
|
12
|
+
Use the bundled guides under `../void/docs/`:
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
- `integrations/cloudflare.md` for existing Worker handoff and configuration.
|
|
15
|
+
- `integrations/frameworks/overview.md` and the matching framework guide when
|
|
16
|
+
another framework owns routing and SSR.
|
|
17
|
+
- `guide/server-routing.md` for native Void handlers and middleware.
|
|
18
|
+
- `guide/database.md` for schema and migration setup.
|
|
19
|
+
- `reference/cli.md` before running commands.
|
|
13
20
|
|
|
14
|
-
|
|
21
|
+
Add `void` and replace `cloudflare()` with `voidPlugin()`, preserving the
|
|
22
|
+
framework plugins and unrelated Vite settings. Remove dependencies and scripts
|
|
23
|
+
only when their replacement is working and no other workflow uses them.
|
|
15
24
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- `package.json`
|
|
19
|
-
- `vite.config.*`
|
|
20
|
-
- `wrangler.jsonc` (if present)
|
|
21
|
-
- Current worker entrypoint (`src/worker.*`, `src/index.*`, etc.)
|
|
22
|
-
- Any existing API handlers and migration SQL files
|
|
23
|
-
|
|
24
|
-
Confirm:
|
|
25
|
-
|
|
26
|
-
- existing routes/endpoints and HTTP methods
|
|
27
|
-
- bindings currently used (`DB`, `KV`, `R2`, etc.)
|
|
28
|
-
- whether the app uses framework SSR or only SPA + API
|
|
29
|
-
|
|
30
|
-
## Migration workflow
|
|
31
|
-
|
|
32
|
-
1. Update dependencies
|
|
33
|
-
|
|
34
|
-
- Remove `@cloudflare/vite-plugin` if it is only used for runtime/deploy.
|
|
35
|
-
- Add `void`.
|
|
36
|
-
- Keep existing framework plugins (React/Vue/Svelte/etc.).
|
|
37
|
-
|
|
38
|
-
2. Update Vite config
|
|
39
|
-
|
|
40
|
-
- Replace `cloudflare(...)` plugin usage with `voidPlugin()`.
|
|
41
|
-
- Keep plugin order stable unless there is a known conflict.
|
|
42
|
-
- Keep unrelated Vite settings unchanged.
|
|
43
|
-
|
|
44
|
-
Target shape:
|
|
25
|
+
For native Void routes, use one file per URL with named HTTP method exports:
|
|
45
26
|
|
|
46
27
|
```ts
|
|
47
|
-
|
|
48
|
-
import {
|
|
28
|
+
// routes/api/users/[id].ts
|
|
29
|
+
import { defineHandler } from 'void';
|
|
49
30
|
|
|
50
|
-
export
|
|
51
|
-
|
|
31
|
+
export const GET = defineHandler((c) => {
|
|
32
|
+
return { id: c.req.param('id') };
|
|
52
33
|
});
|
|
53
34
|
```
|
|
54
35
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- Convert each existing endpoint into route files:
|
|
59
|
-
- `routes/api/users.get.ts`
|
|
60
|
-
- `routes/api/users.post.ts`
|
|
61
|
-
- `routes/api/users/[id].get.ts`
|
|
62
|
-
- Use `defineHandler` from `void`.
|
|
63
|
-
- If there is shared logic, move it into regular modules and import from route files.
|
|
64
|
-
|
|
65
|
-
4. Migrate middleware
|
|
66
|
-
|
|
67
|
-
- Move request-wide middleware to `middleware/*.ts`.
|
|
68
|
-
- Export with `defineMiddleware`.
|
|
69
|
-
- Preserve behavior order by filename prefix when needed (`01.auth.ts`, `02.logger.ts`).
|
|
70
|
-
|
|
71
|
-
5. Preserve bindings with Void conventions
|
|
72
|
-
|
|
73
|
-
- Keep Cloudflare-style uppercase names on `c.env` (`DB`, `KV`, `STORAGE`, etc.).
|
|
74
|
-
- Remove manual binding config from Vite plugin config where Void now infers usage.
|
|
75
|
-
- Ensure route code actually references required bindings so inference can detect them.
|
|
76
|
-
|
|
77
|
-
6. Migrations
|
|
78
|
-
|
|
79
|
-
- Place SQL files in `migrations/` (sorted by filename).
|
|
80
|
-
- Keep destructive operations gated by explicit pragma if needed.
|
|
81
|
-
- If old migrations live elsewhere, copy/rename into this directory with stable ordering.
|
|
82
|
-
|
|
83
|
-
7. Deploy workflow migration
|
|
84
|
-
|
|
85
|
-
- Replace old deploy instructions with:
|
|
86
|
-
- `void account login`
|
|
87
|
-
- `void deploy`
|
|
88
|
-
- If CI must target a specific project, use:
|
|
89
|
-
- `void deploy --project <slug>`
|
|
90
|
-
- or `VOID_PROJECT=<slug> void deploy`
|
|
91
|
-
|
|
92
|
-
8. Post-migration cleanup (remove obsolete Wrangler wiring)
|
|
93
|
-
|
|
94
|
-
- If the app no longer uses direct Wrangler workflows, remove `wrangler.jsonc`.
|
|
95
|
-
- Remove direct `wrangler` dependency/devDependency from `package.json` when it is only used for old deploy/dev scripts.
|
|
96
|
-
- Remove or rewrite npm scripts that call `wrangler` directly (for example old deploy/publish scripts).
|
|
97
|
-
- Keep Wrangler only if the project still has explicit non-Void workflows that require it.
|
|
98
|
-
|
|
99
|
-
## Routing behavior reference (use during file conversion)
|
|
100
|
-
|
|
101
|
-
Apply these filename rules exactly when mapping old handlers to `routes/`:
|
|
102
|
-
|
|
103
|
-
1. Extension and suffix parsing order
|
|
104
|
-
|
|
105
|
-
- Strip extension (`.ts`, `.js`, `.mts`, `.mjs`).
|
|
106
|
-
- Strip env suffix (`.dev`, `.prod`). The suffix restricts the route to that environment, so only use it for handlers that must not ship to the other one.
|
|
107
|
-
- Strip HTTP method suffix (`.get`, `.post`, `.put`, `.delete`, `.patch`).
|
|
108
|
-
- Strip trailing `index` segment.
|
|
109
|
-
- Remove route group segments `(group-name)` from URL path.
|
|
110
|
-
|
|
111
|
-
2. Method mapping
|
|
112
|
-
|
|
113
|
-
- `users.get.ts` matches only `GET /users`.
|
|
114
|
-
- `users.post.ts` matches only `POST /users`.
|
|
115
|
-
- `users.ts` matches all methods.
|
|
116
|
-
- Split multi-method handlers into one file per method when preserving behavior matters.
|
|
117
|
-
|
|
118
|
-
3. Dynamic and catch-all params
|
|
119
|
-
|
|
120
|
-
- `[id]` -> `:id`
|
|
121
|
-
- `[...slug]` -> catch-all named param
|
|
122
|
-
- `[...]` -> catch-all unnamed fallback
|
|
123
|
-
- Use folder nesting for multiple params: `routes/api/org/[org]/repo/[repo].get.ts`.
|
|
124
|
-
|
|
125
|
-
4. Route groups and organization
|
|
126
|
-
|
|
127
|
-
- Directories like `(internal)` are for code organization only and do not appear in URL.
|
|
128
|
-
- Use them when reorganizing large route sets without changing public paths.
|
|
129
|
-
|
|
130
|
-
5. Ignored files
|
|
131
|
-
|
|
132
|
-
- Files or directories starting with `_` are ignored by route scanner.
|
|
133
|
-
- Do not place active handlers under `_legacy`, `_draft`, etc.
|
|
134
|
-
|
|
135
|
-
6. Middleware behavior
|
|
136
|
-
|
|
137
|
-
- Middleware files live in `middleware/` and run in filename order.
|
|
138
|
-
- Prefix numerically if order is important (`01.auth.ts`, `02.logger.ts`).
|
|
139
|
-
|
|
140
|
-
7. Concrete mapping examples
|
|
141
|
-
|
|
142
|
-
- `src/worker.ts` handling `GET /api/users/:id` -> `routes/api/users/[id].get.ts`
|
|
143
|
-
- single handler switching on method for `/api/users` -> `routes/api/users.get.ts` and `routes/api/users.post.ts`
|
|
144
|
-
- legacy `GET /health` endpoint -> `routes/health.get.ts`
|
|
145
|
-
|
|
146
|
-
## Verification checklist
|
|
147
|
-
|
|
148
|
-
Run and validate:
|
|
149
|
-
|
|
150
|
-
1. `npm run dev` (or project dev command)
|
|
151
|
-
2. Exercise representative API routes locally.
|
|
152
|
-
3. `npm run build`
|
|
153
|
-
4. `void deploy` and verify live URL responds.
|
|
154
|
-
5. Confirm no deploy-critical scripts still depend on `wrangler`.
|
|
155
|
-
|
|
156
|
-
In the Void deploy output, verify:
|
|
157
|
-
|
|
158
|
-
- worker modules uploaded
|
|
159
|
-
- static assets uploaded
|
|
160
|
-
- migrations applied (if present)
|
|
161
|
-
|
|
162
|
-
## Common migration pitfalls
|
|
163
|
-
|
|
164
|
-
- Importing from the main `void` runtime in worker route files when a lighter handler import is expected by tooling.
|
|
165
|
-
- Forgetting to split method-specific handlers (`GET`/`POST`) into filename suffixes.
|
|
166
|
-
- Keeping old custom worker entry wiring that conflicts with generated route runtime.
|
|
167
|
-
- Binding names changed to lowercase (`db`) instead of expected uppercase (`DB`), breaking inference/provisioning.
|
|
36
|
+
Keep GET and POST for the same URL in the same file. Middleware lives in
|
|
37
|
+
`middleware/` and runs in filename order. Preserve existing URLs and behavior;
|
|
38
|
+
framework apps keep their framework's routing conventions.
|
|
168
39
|
|
|
169
|
-
|
|
40
|
+
Preserve configured bindings and resource IDs. Use `void.config.ts` for authored
|
|
41
|
+
settings and `void.lock.json` for provisioned state. Let Void migrate supported
|
|
42
|
+
root Cloudflare configuration rather than deleting it before the handoff.
|
|
43
|
+
Database migrations live in `db/migrations/`; preserve their journal, ordering,
|
|
44
|
+
and deployed history instead of recreating them.
|
|
170
45
|
|
|
171
|
-
|
|
46
|
+
Verify the app's development server, representative routes, and production build.
|
|
47
|
+
When deployment is part of the user's request, follow the existing Worker
|
|
48
|
+
handoff in the Cloudflare guide and verify the reported URL. Keep new resources,
|
|
49
|
+
auth setup, and database or secret changes separate from that first handoff;
|
|
50
|
+
follow its explicit ISR cache choice when needed.
|
|
172
51
|
|
|
173
|
-
|
|
174
|
-
2. A list of moved or newly created route files.
|
|
175
|
-
3. Exact commands to run locally and in CI.
|
|
52
|
+
Summarize the changes and any remaining migration work.
|
package/skills/void/SKILL.md
CHANGED
|
@@ -1,127 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: void
|
|
3
|
-
description: Void
|
|
3
|
+
description: Build Void apps and use the Void CLI by loading the relevant bundled guides and references.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Void
|
|
6
|
+
# Void
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Read only the guides needed for the user's task. The bundled documentation lives
|
|
9
|
+
under `docs/` beside this skill; in an installed project it is available at
|
|
10
|
+
`node_modules/void/skills/void/docs/`.
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
Before running a Void command, find its group in `docs/reference/cli.md`, then
|
|
13
|
+
read the matching page under `docs/reference/cli/` for syntax, options, and
|
|
14
|
+
deployment target. Use Void commands for application and platform
|
|
15
|
+
workflows. Mention Wrangler only when the user needs to recognize a literal
|
|
16
|
+
configuration file or environment variable.
|
|
11
17
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
`void init --agents` always writes brief instructions to `AGENTS.md`, pointing to `node_modules/void/skills/void/docs/`. It preserves content outside its versioned block, leaves other instruction files untouched, and links skills for detected agents without asking which agent is in use.
|
|
15
|
-
|
|
16
|
-
`void init` offers Git initialization with `--git` / `--no-git` overrides and suggests an optional initial commit command. It preserves existing repositories and never commits automatically; see `docs/reference/cli.md` for CI and workspace behavior.
|
|
17
|
-
|
|
18
|
-
## Command Naming
|
|
19
|
-
|
|
20
|
-
For a new platform installation, prefer an app domain at the zone apex. Nested
|
|
21
|
-
app domains need an active wildcard edge certificate and SSL-and-Certificates
|
|
22
|
-
read permission; `void platform install --plan` verifies coverage. Use the
|
|
23
|
-
self-hosted platform guide for certificate setup rather than enabling a paid
|
|
24
|
-
product without an explicit request.
|
|
25
|
-
|
|
26
|
-
For first-time platform setup, follow the installation pages linked from `docs/guide/self-hosted-platform.md` in order and introduce credentials when the user reaches that step. Recommend a domain; offer explicit `void platform install --workers-dev` for testing before one is ready. PostgreSQL, credentials for the selected login methods, runtime/R2 credentials, and saved signing/encryption keys are required. GitHub is the default and is optional. `--auth-config` accepts nonsecret provider configuration with environment secret references; `--plan` does not read those secrets. Configurable installations finish first-administrator setup using a one-time code and browser identity confirmation. Domain-free installation skips zone/DNS/certificate operations and can use browser login. `void platform domain set <domain>` later performs resumable DNS/HTTPS setup while preserving existing test URLs and the API origin. The command checks the deployed runtime token's cache-purge permission for the new zone; it does not ask users to retrieve that token. Interactive installation asks whether Void should create Hyperdrive or use a separately managed one; if the latter is missing, it gives setup instructions and stops before provisioning. It still prompts for the owner PostgreSQL URL. Prefer interactive prompts for secrets and keep CI variables in the CI workflow. Void creates the platform infrastructure and database tables.
|
|
27
|
-
|
|
28
|
-
For an existing Cloudflare site, run `void deploy` with its root `wrangler.jsonc` or `wrangler.json`. An unlinked project gets a prompt to link and deploy using the existing Worker and resources. Accepting verifies and saves the destination, migrates the root config to `void.config.ts` and `void.lock.json`, then continues deployment. Keep new application resources, migrations, auth setup, and secret changes separate from this first handoff; ISR has its own explicit cache choice. The active Worker Version must be the latest upload so inherited secrets have an unambiguous source. Failed builds retain the link for retry. Read `docs/integrations/cloudflare.md` for the supported configuration and rollback behavior.
|
|
29
|
-
|
|
30
|
-
When linking reports missing inferred resources, check the listed bindings and inference reasons against the existing Worker and `void.config.ts`; preserve `.void/cloudflare-link.json` for retries. For prerendered/revalidated sites without a cache, migration saves an explicit `routing.isr` choice in `void.config.ts`. True provisions the cache during this deployment; false keeps ISR disabled on retries and later deployments until changed. Keep page-level exports with either choice. CI must configure the boolean before resuming a migration with no saved choice. An application KV binding explicitly named `ISR_CACHE` is still required. Existing D1 bindings without checked-in migrations retain their local migration settings during handoff.
|
|
31
|
-
|
|
32
|
-
For Cloudflare upload failures, use the detailed error message printed by the CLI and saved in the deploy log. A numeric error code alone may not identify the cause.
|
|
33
|
-
|
|
34
|
-
Platform administration uses `void platform auth login` and the nested
|
|
35
|
-
`user`, `project`, `deployment`, `build`, `signup`, `invitation`, `email`, `system`, and
|
|
36
|
-
hosted-only `worker` groups. Open the operator section of `docs/reference/cli.md`
|
|
37
|
-
before running these commands. Use `--json` for structured reads and `--plan`
|
|
38
|
-
to inspect mutations; approved noninteractive mutations require `--yes`.
|
|
39
|
-
The last active administrator cannot be deleted or suspended. If an allowed
|
|
40
|
-
administrator removal reports partial cleanup, access remains revoked; use a
|
|
41
|
-
remaining administrator to inspect the result and retry.
|
|
42
|
-
Use `void platform config auth` to configure login methods; `platform auth`
|
|
43
|
-
manages your administrator session. Test a pending configuration before enabling
|
|
44
|
-
it, explicitly link identities when switching methods, and verify a linked
|
|
45
|
-
alternative before disabling a method. Disabling revokes its human sessions,
|
|
46
|
-
including human tokens used in CI, while scoped deployment tokens remain valid.
|
|
47
|
-
Create CI credentials with `void project token create`; they are bound to one
|
|
48
|
-
project, expire within 90 days, and support explicit renewal and revocation.
|
|
49
|
-
Cloudflare Access service credentials pass only the perimeter and never renew or
|
|
50
|
-
elevate a human or operator token.
|
|
51
|
-
For scripted configuration, use nonsecret JSON with `--file` and read secrets
|
|
52
|
-
with `--client-secret-env`; never put client secrets in command arguments.
|
|
53
|
-
Use `void platform config auth admission` to select company-approved automatic
|
|
54
|
-
signup when the organization's identity policy already determines eligibility;
|
|
55
|
-
individual invitations remain optional. The same controls are available under
|
|
56
|
-
Settings in the administrator UI.
|
|
57
|
-
Access login and platform protection are independent. The installer can create
|
|
58
|
-
dedicated Access applications or connect existing ones, including a separate
|
|
59
|
-
identity account. Protection setup verifies API/proxy coverage and uses scoped
|
|
60
|
-
service credentials for installation and CI. Use `platform config auth protection`
|
|
61
|
-
to show, enable, or disable protection; retain the company gate when probes fail.
|
|
62
|
-
Users link another enabled method with `void account link [connection-id]` after
|
|
63
|
-
recent sign-in and explicit browser identity confirmation. For expired first-admin
|
|
64
|
-
codes, resume installation or repair completed provisioning. Lost-provider recovery
|
|
65
|
-
uses `platform config auth recover` with installation ownership, original recovery
|
|
66
|
-
keys, an existing administrator ID, and a real provider login; never reopen signup.
|
|
67
|
-
Operator credentials are separate from application deployment credentials and
|
|
68
|
-
ignore repository platform selections. `VOID_OPERATOR_TOKEN` requires an
|
|
69
|
-
explicit `VOID_API_URL` or `--connection`; credentials must never be written to
|
|
70
|
-
project files. `signup open` allows public signup and `signup restrict` enforces
|
|
71
|
-
the allowlist. For OIDC identities without verified email, use `signup allow identity
|
|
72
|
-
<connection-id> <subject>` and the exact `signup disallow` counterpart; never infer an
|
|
73
|
-
email or link accounts. Inspect `system events` and the target object after an ambiguous
|
|
74
|
-
mutation failure before retrying.
|
|
75
|
-
|
|
76
|
-
Use `void connect` for deployment onboarding: no arguments offers Cloudflare or a Void platform, `--platform cloudflare` signs in and selects an account, and a platform URL verifies discovery and signs in with a supported provider. It preserves existing project links when connecting elsewhere. `--no-login` saves only verified Void connection metadata; authenticated headless connection requires a valid origin-scoped keychain session or `VOID_TOKEN` with matching `VOID_API_URL`. Platform installation and administration use `void platform`.
|
|
77
|
-
|
|
78
|
-
For Void platform project access, use `void project team`: invite only an email already registered on that platform and assign `reader`, `collaborator`, or `admin`. The invited account uses `void connect <url>` followed by pending/accept/decline on that active connection, regardless of the current directory's project link or deploy target. `VOID_API_URL` overrides the connection; an unscoped `VOID_TOKEN` selects Void Cloud. Acceptance preserves directory links; run `void project link` in an unlinked checkout of the invited application. Project-scoped team management does not apply to direct Cloudflare deployments. Installation administrators transfer ownership with `void platform project owner <project-id> <user-id> --plan` and apply the reviewed transfer with `--yes`.
|
|
79
|
-
|
|
80
|
-
Use Void commands for every user-facing workflow. Never ask the user to install, authenticate, or run Wrangler directly. Say Cloudflare or Void instead, except when naming literal `wrangler.jsonc` / `wrangler.json` files or `WRANGLER_*` environment variables the user must inspect.
|
|
81
|
-
|
|
82
|
-
`void auth login|status|logout` follows the saved deploy destination or asks the user to choose; `void account` explicitly manages a Void platform account.
|
|
83
|
-
|
|
84
|
-
Use `void` in examples and commands in this skill. For first-time setup, prefer `void init` followed by `void deploy`; in an empty directory, install `void` first and let `void init` add the matching Pages adapter and starter dependencies with Vite+ as the default scaffold toolchain. In an existing app, `void init` configures Void in place by adding missing Vite scripts and creating or patching `vite.config.*` with `voidPlugin()`. For Cloudflare deployment, Void uses bundled tooling and secure browser OAuth; init or the first deploy saves the selected `account_id`, and `void cloudflare login|status|logout` manages the session; Void-managed deployment requires an explicitly connected platform. Use `void connect <url>` for an existing platform or `void platform install --plan` to preview a company control plane in the user's Cloudflare account. The core self-hosted platform excludes the dashboard, GitHub App, and build Containers; lifecycle commands are resumable and verify remote, Worker, and R2 ownership before mutations. `void platform disable` gates traffic through installation-owned routing storage and remains disabled through repair or upgrade; `void platform enable` explicitly restores traffic. Safe uninstall retains name-addressed Workers, R2, AI Gateway, external PostgreSQL, and zones for explicit manual cleanup. Direct Cloudflare deploys support native Void apps, static/SPA/SSG output, and Cloudflare builds from TanStack Start, React Router, vinext, SvelteKit, Nuxt, Analog, and Astro. They provision inferred resources, validate and apply migrations, require schema-declared server values in encrypted remote secret storage, upload and probe an immutable Worker Version, then activate and synchronize triggers. Native Void features are Workers Free-compatible by default; `void/sandbox` is an explicit exception because it uses Cloudflare Containers and therefore requires Workers Paid. A Sandbox deploy checks Containers access before provisioning/building, while apps without Sandbox perform no entitlement probe. Versions without preview URLs are staged at 0% and probed through workers.dev using a version override; the same safe fallback applies when Access blocks a generated preview alias but admits the stable Worker hostname. Set `CLOUDFLARE_WORKERS_SUBDOMAIN` in a fresh CI checkout, while local deploys cache it automatically. When Cloudflare Access protects `workers.dev`, use an admitted `CF_ACCESS_CLIENT_ID` / `CF_ACCESS_CLIENT_SECRET` service-token pair for CI, or a short-lived `CF_ACCESS_TOKEN` from `cloudflared` for an interactive local readiness probe. With Cloudflare saved in `.void/project.json`, secret, domain, project status/log/rollback, and remote database commands operate directly on the pinned Worker/account. Logs are a live tail. Rollback restores the selected version's saved schedules, queues, workflows, routes, and domains but never reverses database migrations; versions without complete trigger snapshots use code-only rollback and keep the current routes and schedules. On either deployment platform, auth-enabled `void deploy` preserves an existing `BETTER_AUTH_SECRET` or creates a persistent encrypted secret when missing; always use Void's deployment flow so it can manage that secret safely.
|
|
85
|
-
|
|
86
|
-
Use `void` and `@void/*` in code examples and package manifests.
|
|
87
|
-
|
|
88
|
-
Non-interactive self-hosted platform install, upgrade, repair, disable, enable, and uninstall commands require `--yes`; `--plan` is read-only and needs no acknowledgement.
|
|
89
|
-
|
|
90
|
-
Platform install plans show actual resource names, the GitHub callback, and credential links without opening credential pages or saving a draft; Cloudflare browser login still opens if needed. New platforms use `void-<name>-<role>` names without random suffixes. Conflicts stop installation; existing installations retain recorded names. Approved interactive installs open the runtime-token, GitHub OAuth, and R2 pages only when those credentials are missing, with fallback instructions. Local credential drafts preserve the callback across retries and encrypt partial inputs. Interactive installs list unfinished installs, including interrupted provisioning, or offer "Start a new platform install". Entering an unfinished name asks to resume it; declining returns to name entry. Completed platforms are excluded, and new installs never inherit or delete old credentials or resources. Use `--resume --name <id>` to continue directly or in CI. Do not generate replacement signing keys or create another installation to recover a cancelled prompt.
|
|
91
|
-
|
|
92
|
-
Cloudflare browser login does not grant AI Gateway access. A platform installation preview may mark that resource `inspect`; apply must verify it with the existing runtime-token input (Account → AI Gateway → Edit) before any provisioning. Never treat a permission failure as an empty resource inventory or skip ownership verification. The runtime token is used only for AI Gateway provider calls; other operations retain the operator credential.
|
|
93
|
-
|
|
94
|
-
Use `--runtime <directory>` on platform install, upgrade, repair, enable, or rollback when deploying a locally built `@void/platform` runtime. The directory must contain the generated integrity manifest, Worker artifacts, and migration tree. Build it with `vp run --filter @void/platform build`; Git source revisions are detected automatically, with `-dirty` for uncommitted changes. `VOID_PLATFORM_SOURCE_REVISION` is an optional override. Do not treat this as a safety bypass: custom and packaged runtimes follow the same verification and rollback path.
|
|
95
|
-
|
|
96
|
-
For self-hosted platform installation, require a dedicated empty PostgreSQL database. Interactive lifecycle commands use Cloudflare browser OAuth with keyring storage. Wrangler OAuth has Zone Read, so a plan that creates a zone or DNS record requires a scoped `CLOUDFLARE_API_TOKEN` with Account → Zone → Edit and/or Zone → DNS → Edit; finish Workers onboarding and choose a workers.dev subdomain for a fresh Cloudflare account. The installed platform uses a separate `VOID_PLATFORM_RUNTIME_CLOUDFLARE_API_TOKEN`. Its core permissions include Hyperdrive: Write at account scope and Cache Purge: Purge on the application zone; SSL and Certificates: Edit is needed only when a custom runtime enables custom project domains. Managed Sandbox apps additionally require Workers Paid plus Account → Containers → Edit and Account → Cloudchamber → Edit on that runtime token; these are checked on the first Sandbox application deploy, not during platform install or upgrade. The installer preflights account and Hyperdrive access and safely verifies Cache Purge for an existing zone with a unique nonexistent URL. Fresh installs require unique per-installation values from the operator's secret manager: `VOID_PLATFORM_JWT_SECRET` with at least 32 random bytes and `VOID_PLATFORM_PROJECT_SECRET_KEY` as canonical base64 for 32 random bytes. Never let a local checkpoint or ephemeral CI runner be their only custodian. Enabling email generates a separate signing key in encrypted recovery state; supply `VOID_PLATFORM_EMAIL_SIGNING_SECRET` from the secret manager for headless installs without persistent recovery files. The installer transactionally claims the database for one installation, pins that URL after a successful claim, never removes the claim during uninstall, and uses it for a cross-host lifecycle lock plus a secret-free authoritative lifecycle manifest. Local recovery checkpoints are AES-256-GCM encrypted with an OS-keychain key; never place platform secrets in plaintext files. After discovery on a new machine, provide `VOID_PLATFORM_DATABASE_URL`. For email-enabled installations without encrypted recovery state, also restore the original `VOID_PLATFORM_EMAIL_SIGNING_SECRET`; recreating only the email gateway needs this key, not JWT or runtime credentials. Normal upgrades preserve other deployed Worker secrets; restore the original runtime, GitHub, R2, JWT, and project-encryption values when recreating the API or proxy as documented. Upgrades enable managed Sandboxes automatically. An upgrade from the tenant-owned legacy may still require `void platform system sandbox-drain`: preview with `--plan`, follow each `nextCursor`, then apply with `--yes` until the DB-backed response reports `complete: true`; never delete an unverified app by name. The installer trusts only DB-backed sandbox-drain probe protocol v1. Before it accepts an empty inventory, the database admission barrier makes older deployment inserts finish and become visible or rejects them after the protocol floor is armed. Lifecycle redeploys preserve unmanaged Worker routes and custom domains in both the new trigger state and rollback snapshot. They stop before migrations or uploads when live Hyperdrive origin metadata differs from the pinned database. Platform upgrade SQL is forward-only: packaged hashes and the live Drizzle prefix must match, pending migrations require an exact source-version/schema rollback edge, and the old version remains authoritative until target health succeeds. Use `void platform rollback --runtime <earlier>` only when the installed runtime declares the exact earlier version/schema compatible; pass `--from-runtime` for the exact current custom artifact. Rollback preserves the forward database schema and cannot lower a database-required safety protocol. Safe uninstall retains Worker routes, custom domains, and R2 for explicit manual cleanup because Cloudflare cannot condition their deletion on an immutable generation.
|
|
97
|
-
|
|
98
|
-
For an organization-managed Hyperdrive, set `VOID_PLATFORM_HYPERDRIVE_ID`, `VOID_PLATFORM_HYPERDRIVE_ORIGIN_HOST`, and `VOID_PLATFORM_HYPERDRIVE_ORIGIN_USER` together before installation. Use `VOID_PLATFORM_DATABASE_URL` for a separate owner connection that runs migrations; the Hyperdrive must be named `void-<installation-name>-database` and have SQL result caching disabled. See `docs/guide/platform/installation/prerequisites.md`.
|
|
99
|
-
|
|
100
|
-
For self-hosted recovery, `VOID_PLATFORM_PROJECT_SECRET_KEY` restores an original `v1` project-secret keyring. After rotation, restore every retained version with `VOID_PLATFORM_PROJECT_SECRET_KEYS_JSON` and its active entry with `VOID_PLATFORM_PROJECT_SECRET_ACTIVE_KEY_VERSION`. These inputs restore a missing API Worker and never replace the live keyring of an existing Worker. Inject them from a secret manager without logging them or writing plaintext files.
|
|
101
|
-
|
|
102
|
-
For Cloudflare user switching, `void cloudflare login` always opens a fresh browser sign-in. `void cloudflare status` distinguishes the authenticated user and credential method from the project's pinned deployment account. Login never retargets a project. Remove API-credential environment overrides from the current shell before browser sign-in, without printing their values; automatic deployment checks continue to reuse valid sessions.
|
|
103
|
-
|
|
104
|
-
## No-Args Behavior
|
|
105
|
-
|
|
106
|
-
Published self-hosted platform routes and custom domains are observed and recorded as retained attachments. Lifecycle commands gate traffic through installation-owned routing storage but never delete those attachments unattended.
|
|
107
|
-
|
|
108
|
-
If invoked without a concrete task, do a brief app status check and report:
|
|
109
|
-
|
|
110
|
-
1. App type (`void`, `framework`, `spa`, `static`) using `docs/app-types.md` criteria.
|
|
111
|
-
2. Backend feature usage (`routes/`, `pages/`, `middleware/`, `migrations/`, `crons/`, `queues/`, SSR entries).
|
|
112
|
-
3. Runtime signals (`void/db`, `void/kv`, `void/storage`, queue usage).
|
|
113
|
-
4. Auth signals (`void/auth`, `auth` client imports, OAuth env vars).
|
|
114
|
-
5. Deployment platform and optional Void project linkage (`.void/project.json`), plus config readiness (`void.config.ts`, Cloudflare `account_id`, tsconfig extends).
|
|
115
|
-
6. Optional health checks (`void account whoami`, `void db status` when relevant).
|
|
116
|
-
|
|
117
|
-
Then ask what to do next.
|
|
18
|
+
Use `void` and `@void/*` in imports, examples, and package manifests. Follow the
|
|
19
|
+
project's existing framework and deployment destination.
|
|
118
20
|
|
|
119
21
|
## Task Routing
|
|
120
22
|
|
|
121
23
|
| User intent | Docs file(s) |
|
|
122
24
|
| ------------------------------------------ | ----------------------------------------------------------------------------------------- |
|
|
123
25
|
| CLI command syntax, flags, env vars | `docs/reference/cli.md` |
|
|
124
|
-
| Initial setup, onboarding, first app | `docs/guide/quickstart.md`, `docs/reference/cli.md`
|
|
26
|
+
| Initial setup, onboarding, first app | `docs/guide/quickstart.md`, `docs/reference/cli/setup.md` |
|
|
125
27
|
| App type detection and mode behavior | `docs/guide/app-types.md`, `docs/reference/config.md` |
|
|
126
28
|
| Server/API routing and middleware | `docs/guide/server-routing.md`, `docs/integrations/hono.md` |
|
|
127
29
|
| Pages mode, loader/action, forms, layouts | `docs/guide/pages-routing/*.md`, `docs/guide/type-safety.md` |
|
|
@@ -130,39 +32,54 @@ Then ask what to do next.
|
|
|
130
32
|
| Authentication | `docs/guide/auth.md`, `docs/guide/env-vars.md` |
|
|
131
33
|
| Cloudflare runtime bindings and config | `docs/integrations/cloudflare.md`, `docs/reference/config.md`, `docs/guide/env-vars.md` |
|
|
132
34
|
| AI inference (Workers AI, providers) | `docs/guide/ai.md` |
|
|
35
|
+
| Durable State and WebSockets | `docs/guide/durable-state.md`, `docs/guide/websockets.md` |
|
|
36
|
+
| Server-sent events and live streams | `docs/guide/sse.md`, `docs/guide/live.md` |
|
|
37
|
+
| Sandboxes | `docs/guide/sandboxes.md` |
|
|
38
|
+
| Email | `docs/guide/email.md`, then the matching guide under `docs/guide/email/` |
|
|
133
39
|
| KV / storage / queues / cron jobs | `docs/guide/kv.md`, `docs/guide/storage.md`, `docs/guide/queues.md`, `docs/guide/jobs.md` |
|
|
134
40
|
| SSR and caching | `docs/guide/ssr.md`, `docs/guide/edge/*.md` |
|
|
135
41
|
| Rewrites, redirects, fallbacks | `docs/guide/edge/rewrites.md`, `docs/guide/edge/redirects.md`, `docs/reference/config.md` |
|
|
136
42
|
| Static site generation | `docs/guide/ssg.md` |
|
|
137
|
-
| Deployment and CI | `docs/guide/deployment.md`, `docs/reference/cli.md`
|
|
138
|
-
| Install or maintain a company platform | `docs/guide/self-hosted-platform.md`, `docs/reference/cli.md`
|
|
43
|
+
| Deployment and CI | `docs/guide/deployment.md`, `docs/reference/cli/deploy.md` |
|
|
44
|
+
| Install or maintain a company platform | `docs/guide/self-hosted-platform.md`, `docs/reference/cli/platform-installation.md` |
|
|
139
45
|
| Develop or deploy a platform fork | `docs/guide/platform-development.md`, `docs/guide/self-hosted-platform.md` |
|
|
140
|
-
| Platform administration | `docs/guide/platform-administration.md`, `docs/reference/cli.md`
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
144
|
-
|
|
|
145
|
-
|
|
|
46
|
+
| Platform administration | `docs/guide/platform-administration.md`, `docs/reference/cli/platform.md` |
|
|
47
|
+
| Platform plans and account limits | `docs/guide/platform/administration/plans.md`, `docs/reference/cli/platform-config.md` |
|
|
48
|
+
| Self-host deploy to own Cloudflare account | `docs/integrations/cloudflare.md`, `docs/reference/cli/deploy.md` |
|
|
49
|
+
| Project status, deployment history | `docs/reference/cli/project.md` |
|
|
50
|
+
| Cache purging | `docs/reference/cli/project.md` |
|
|
51
|
+
| Project logs, runtime errors | `docs/reference/cli/project.md` |
|
|
52
|
+
| Secrets management (put/sync/delete) | `docs/reference/cli/secrets.md`, `docs/guide/env-vars.md` |
|
|
146
53
|
| Typed env vars (`defineEnv`, `env.ts`) | `docs/guide/env-vars.md` |
|
|
147
|
-
| Custom domain setup | `docs/reference/cli.md`
|
|
148
|
-
| Database status, reset, seed, export | `docs/reference/cli.md`, `docs/guide/database.md`
|
|
149
|
-
| Auth login/logout/whoami | `docs/reference/cli.md`
|
|
54
|
+
| Custom domain setup | `docs/reference/cli/domains.md` |
|
|
55
|
+
| Database status, reset, seed, export | `docs/reference/cli/database.md`, `docs/guide/database.md` |
|
|
56
|
+
| Auth login/logout/whoami | `docs/reference/cli/auth.md` |
|
|
150
57
|
| Overview / introduction | `docs/guide/index.md` |
|
|
151
58
|
| API surface details | `docs/reference/api.md` |
|
|
152
59
|
| Meta framework integration | `docs/integrations/frameworks/*.md` |
|
|
153
60
|
| Coding agent setup | `docs/integrations/agents.md` |
|
|
154
61
|
| Node.js / Bun / Deno targets | `docs/integrations/nodejs-bun-deno.md` |
|
|
155
|
-
| ORMs and external databases | `docs/
|
|
62
|
+
| ORMs and external databases | `docs/guide/database.md` |
|
|
156
63
|
| Project structure and conventions | `docs/reference/structure.md` |
|
|
157
64
|
| Resource/binding inference | `docs/reference/resource-inference.md` |
|
|
158
65
|
|
|
159
|
-
## Working
|
|
160
|
-
|
|
161
|
-
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
-
|
|
165
|
-
|
|
166
|
-
-
|
|
167
|
-
|
|
168
|
-
For platform
|
|
66
|
+
## Working rules
|
|
67
|
+
|
|
68
|
+
- Read the relevant guide before changing configuration, persistent resources,
|
|
69
|
+
authentication, or deployment workflows. The guides define current behavior;
|
|
70
|
+
avoid copying a second set of instructions into this skill.
|
|
71
|
+
- Before moving deployed Durable State or WebSocket definitions, read their
|
|
72
|
+
guides and use `void info` to preserve resource names and instance keys.
|
|
73
|
+
- Declare application environment keys in `env.ts` and access them through
|
|
74
|
+
`void/env`; follow `docs/guide/env-vars.md` for local and production values.
|
|
75
|
+
- For platform setup, follow the pages linked from
|
|
76
|
+
`docs/guide/self-hosted-platform.md`. For recovery, use its documented resume
|
|
77
|
+
or repair workflow and preserve the installation's credentials and resources.
|
|
78
|
+
- Use `--plan` to review platform changes. If an operation has an uncertain
|
|
79
|
+
outcome, inspect its status and events before retrying.
|
|
80
|
+
|
|
81
|
+
If the user invokes this skill without a task, inspect the app's local structure,
|
|
82
|
+
configuration, and saved deployment destination, give a brief status, and ask
|
|
83
|
+
what they want to work on.
|
|
84
|
+
|
|
85
|
+
For AI and Sandbox operations, use `.match({ ok, limited })` and choose a useful quota fallback. In Pages, prefer the adapter’s `Form` with `useForm()` so action failures remain visible and entered data is preserved. See `docs/guide/ai.md`, `docs/guide/sandboxes.md`, and `docs/guide/pages-routing/actions-and-forms.md`.
|