void 0.25.0 → 0.26.1
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 +1 -3
- package/README.md +19 -9
- package/dist/{account-cmd-DcR1ywt8.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
- package/dist/{application-analysis-BVsVqc11.mjs → application-analysis-DKy02UY0.mjs} +21 -32
- package/dist/{application-routing-B7QEjqSR.mjs → application-routing-DQyUh_5S.mjs} +1 -1
- package/dist/{auth-7wuZ5ob8.mjs → auth-B5_tZLxT.mjs} +9 -9
- package/dist/{auth-CdgZ9uag.mjs → auth-BgX2qYSY.mjs} +1 -1
- package/dist/{auth-link-Z6E5DYvM.mjs → auth-link-D5RmKnzh.mjs} +5 -5
- package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
- package/dist/{auth-router-BdM4avI8.mjs → auth-router-Bap-pvbn.mjs} +6 -19
- package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
- package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
- package/dist/{build-cmd-CEE7D-hM.mjs → build-cmd-B58c8iS8.mjs} +8 -7
- package/dist/{cache-TcZnBLtH.mjs → cache-Bo52trKF.mjs} +8 -8
- package/dist/{cancel-deploy-CYoZmcmR.mjs → cancel-deploy-BZNz3Q26.mjs} +6 -5
- package/dist/{cf-access-AHKBzmuu.mjs → cf-access-ngGqZpHZ.mjs} +11 -12
- package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
- package/dist/cf-build-output-H9a97vME.mjs +2 -0
- package/dist/cli/cli.mjs +48 -83
- package/dist/cli/cloudflare-operation-process.mjs +71 -77
- package/dist/cli/env-schema-probe.d.mts +1 -1
- package/dist/cli/env-schema-probe.mjs +5 -6
- package/dist/client-By4JjMw_.mjs +2 -0
- package/dist/{client-RsPo8wsP.mjs → client-C2Prx_Bi.mjs} +30 -8
- package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
- package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
- package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
- package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
- package/dist/{cloudflare-operations-BhbK6yTq.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
- package/dist/{cloudflare-operations-CjaV4lZi.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
- package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
- package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
- package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
- package/dist/config-BtSFvXZx.mjs +2 -0
- package/dist/config-CLYAosnQ.mjs +78 -0
- package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
- package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
- package/dist/config-entry.d.mts +1 -1
- package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
- package/dist/{connect-DCvUmPXY.mjs → connect-X0MUA1gk.mjs} +12 -11
- package/dist/{create-project-eAPgYq35.mjs → create-project-DxiyW6iX.mjs} +7 -7
- package/dist/{create-project-C734I-Mu.mjs → create-project-iwkbqiBU.mjs} +1 -1
- package/dist/{db-C07GEdKF.mjs → db-XnVMHzoV.mjs} +101 -133
- package/dist/{delete-pKMVsrpJ.mjs → delete-esYlMiSJ.mjs} +8 -8
- package/dist/{deploy-DfsAe-T0.mjs → deploy-BsEvnlJl.mjs} +2377 -2512
- package/dist/deploy-C1d-YTfp.mjs +2 -0
- package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
- package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
- package/dist/discover-EDUf6JJw.mjs +2 -0
- package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
- package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
- package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
- package/dist/{domain-D3uA9ize.mjs → domain-CbbBWhWE.mjs} +29 -30
- package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
- package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
- package/dist/{email-z3o2cwjH.mjs → email-CpuT42g7.mjs} +24 -19
- package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
- package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
- package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
- package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
- package/dist/{env-public-BX_r8HR6.d.mts → env-public-DR7ZM6d-.d.mts} +1 -1
- package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
- package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
- package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
- package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
- package/dist/{env-3Q8-_2IH.mjs → env-w9jOyGZn.mjs} +10 -9
- package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
- package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
- package/dist/{fetch-stream-IvCYKyQL.mjs → fetch-stream-PGgz4uGz.mjs} +26 -24
- package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
- package/dist/{gen-NjwoG9FK.mjs → gen-DtkQhvQg.mjs} +40 -57
- package/dist/gen-dA9hW7AV.mjs +2 -0
- package/dist/{github-cmd-DquUq-b1.mjs → github-cmd-D_FsOFxq.mjs} +65 -164
- package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
- package/dist/{handler-CZ4nAylQ.d.mts → handler-CNAwjRcW.d.mts} +5 -12
- package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
- package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
- package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
- package/dist/{help-DRZXC4fj.mjs → help-CVFBTmBx.mjs} +23 -38
- package/dist/help-DzKUrQvk.mjs +2 -0
- package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
- package/dist/index.d.mts +19 -2
- package/dist/index.mjs +632 -532
- package/dist/{info-BmA3_IFZ.mjs → info-PYWwkWyt.mjs} +4 -4
- package/dist/{init-DT7yuuyl.mjs → init-Bw-fRKGp.mjs} +161 -197
- package/dist/{limits-Bq5LG8Id.d.mts → limits-CFsDKQvU.d.mts} +1 -10
- package/dist/{limits-Cjuk2VPm.mjs → limits-D0vD1M9A.mjs} +1 -22
- package/dist/{link-CXOlqh2F.mjs → link-DlPG8iX3.mjs} +10 -10
- package/dist/{list-eEWVJEPn.mjs → list-2GN7_ueV.mjs} +11 -9
- package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
- package/dist/{live-Chw1eIMv.d.mts → live-Du8jXwOW.d.mts} +4 -2
- package/dist/{local-d1-Df4XpwhW.mjs → local-d1-ga5O_idV.mjs} +2 -2
- package/dist/{login-pWQHYVu2.mjs → login-D-Q4xw3Q.mjs} +7 -7
- package/dist/login-Dc-wuTDq.mjs +2 -0
- package/dist/{logs-DnxVX7TR.mjs → logs-rd8J-OFh.mjs} +28 -11
- package/dist/migrate-BHp07yJE.mjs +2 -0
- package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
- package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
- package/dist/{node-BkyRWRx8.mjs → node-DJicPvPj.mjs} +5 -5
- package/dist/{operator-args-CAVcmwUt.mjs → operator-args-BNsW5gfp.mjs} +10 -1
- package/dist/{operator-auth-CkmTE3rt.mjs → operator-auth-AzVLbrr3.mjs} +4 -8
- package/dist/{operator-client-LmwjxT6q.mjs → operator-client-BQtzyG-g.mjs} +3 -3
- package/dist/{operator-cmd-d-IEKgNk.mjs → operator-cmd-B6f6Cg9Z.mjs} +45 -14
- package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
- package/dist/{output-BBsUwdyT.mjs → output-C50ag2r3.mjs} +44 -2
- package/dist/pages/client.d.mts +19 -51
- package/dist/pages/client.mjs +204 -225
- package/dist/pages/head-client.d.mts +1 -1
- package/dist/pages/head.d.mts +1 -1
- package/dist/pages/head.mjs +1 -1
- package/dist/pages/index.d.mts +2 -2
- package/dist/pages/index.mjs +6 -12
- package/dist/pages/islands-plugin.d.mts +1 -1
- package/dist/pages/islands-plugin.mjs +21 -25
- package/dist/pages/protocol.d.mts +2 -2
- package/dist/pages/protocol.mjs +2 -2
- package/dist/{plan-NPpwZ_kc.mjs → plan-BhLO2p4w.mjs} +4 -3
- package/dist/plan-CH2G51je.mjs +2 -0
- package/dist/{platform-args-Bzf8JPc2.mjs → platform-args-BoZkWQnJ.mjs} +4 -2
- package/dist/platform-args-DYgITk0D.mjs +2 -0
- package/dist/{platform-auth-config-0V0lA3pF.mjs → platform-auth-config-n603OANg.mjs} +45 -40
- package/dist/{platform-auth-protection-DFeJ-JkK.mjs → platform-auth-protection-zxDr0hWW.mjs} +9 -8
- package/dist/{platform-auth-recovery-ICy4muq6.mjs → platform-auth-recovery-tw9lgtgE.mjs} +8 -7
- package/dist/{platform-cmd-D7vSWMvV.mjs → platform-cmd-B8-bCb7t.mjs} +48 -23
- package/dist/{platform-cmd-BPySFOew.mjs → platform-cmd-C00YM14r.mjs} +1 -1
- package/dist/{platform-discovery-DDDUvnqp.mjs → platform-discovery-BC0HCKYt.mjs} +18 -4
- package/dist/{platform-domain-CUdY064e.mjs → platform-domain-p0kobLV8.mjs} +6 -5
- package/dist/{platform-lifecycle-Dm09JNkn.mjs → platform-lifecycle-D_QEY32D.mjs} +906 -389
- package/dist/{platform-lifecycle-BaUdTRPU.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
- package/dist/{platform-management-BSEc_ZeG.mjs → platform-management-BdYblvvE.mjs} +175 -32
- package/dist/{platform-management-Bp6aoH2C.mjs → platform-management-oi-SvI3f.mjs} +1 -1
- package/dist/{platform-plans-config-B0pOVQyW.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
- package/dist/{platform-recovery-WOZ95Uze.mjs → platform-recovery-PvNS9Nl2.mjs} +3 -3
- package/dist/{platform-registry-KfNEF84O.mjs → platform-registry-P387v42A.mjs} +17 -10
- package/dist/platform-setup-DVe42Ws7.mjs +299 -0
- package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
- package/dist/prepare-DRUV-g3X.mjs +2 -0
- package/dist/{prepare-DnaKBi--.mjs → prepare-Do96654b.mjs} +8 -8
- package/dist/{prepare-39EvOhI6.mjs → prepare-Dq9hTIbo.mjs} +4 -3
- package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
- package/dist/prerender-render.mjs +1 -1
- package/dist/{project-IOjBU8R6.mjs → project-BiaPQ7ur.mjs} +1 -1
- package/dist/{project-BkbfDs0V.mjs → project-DQstYTxO.mjs} +1 -1
- package/dist/{project-cmd-Bs5A392E.mjs → project-cmd-ti8_yTcA.mjs} +19 -19
- package/dist/{project-team-ohAWWaew.mjs → project-team-CDPE1Tsg.mjs} +15 -18
- package/dist/{project-token-CP01Jna6.mjs → project-token-CkZ1cN0Z.mjs} +14 -17
- package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
- package/dist/{project-zero-trust-BzkVgx35.mjs → project-zero-trust-DdjLR61k.mjs} +12 -9
- package/dist/{protocol-CjF_iI9X.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
- package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
- package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
- package/dist/{provision-Btj1jppf.mjs → provision-BfaLiWbj.mjs} +51 -42
- package/dist/{provision-BEv0k-qz.mjs → provision-Wu9ZBk9L.mjs} +2 -3
- package/dist/{requests-B3PBuGlX.mjs → requests-DFAqyYy8.mjs} +5 -5
- package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
- package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
- package/dist/{rollback-DDub9GsO.mjs → rollback-BKYXBduI.mjs} +30 -37
- package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
- package/dist/route-url-BgPja1GS.d.mts +5 -0
- package/dist/route-url-BjGv_KKY.mjs +28 -0
- package/dist/runner-9wjsSZx-.mjs +2 -0
- package/dist/{runner-Ol0TNjk6.mjs → runner-DMBKSrRk.mjs} +2 -2
- package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
- package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
- package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
- package/dist/runtime/ai.d.mts +11 -12
- package/dist/runtime/ai.mjs +47 -113
- package/dist/runtime/better-auth-mysql.d.mts +1 -1
- package/dist/runtime/better-auth-mysql.mjs +4 -9
- package/dist/runtime/better-auth-pg.d.mts +1 -1
- package/dist/runtime/better-auth-pg.mjs +5 -10
- package/dist/runtime/better-auth.d.mts +1 -1
- package/dist/runtime/better-auth.mjs +3 -3
- package/dist/runtime/client-react.d.mts +2 -3
- package/dist/runtime/client-react.mjs +2 -2
- package/dist/runtime/client-solid.d.mts +2 -3
- package/dist/runtime/client-solid.mjs +2 -2
- package/dist/runtime/client-svelte.d.mts +2 -3
- package/dist/runtime/client-svelte.mjs +2 -2
- package/dist/runtime/client-vue.d.mts +2 -3
- package/dist/runtime/client-vue.mjs +2 -2
- package/dist/runtime/client.d.mts +2 -3
- package/dist/runtime/client.mjs +2 -2
- package/dist/runtime/db.mjs +1 -1
- package/dist/runtime/durable.mjs +3 -10
- package/dist/runtime/email/testing.mjs +5 -5
- package/dist/runtime/email.d.mts +2 -1
- package/dist/runtime/email.mjs +11 -27
- package/dist/runtime/env-public.d.mts +1 -1
- package/dist/runtime/env-public.mjs +15 -20
- package/dist/runtime/env.mjs +1 -1
- package/dist/runtime/fetch-stream.d.mts +2 -2
- package/dist/runtime/fetch-stream.mjs +1 -1
- package/dist/runtime/fetch.d.mts +2 -3
- package/dist/runtime/fetch.mjs +1 -1
- package/dist/runtime/handler.d.mts +1 -1
- package/dist/runtime/handler.mjs +2 -2
- package/dist/runtime/isr.mjs +1 -1
- package/dist/runtime/kv.mjs +10 -11
- package/dist/runtime/limits.d.mts +2 -2
- package/dist/runtime/limits.mjs +2 -2
- package/dist/runtime/live-client.d.mts +1 -1
- package/dist/runtime/live-client.mjs +12 -22
- package/dist/runtime/live-server.mjs +27 -35
- package/dist/runtime/live.d.mts +2 -2
- package/dist/runtime/live.mjs +2 -2
- package/dist/runtime/migration-handler.mjs +35 -86
- package/dist/runtime/queues.mjs +1 -1
- package/dist/runtime/remote/binding-handler.d.mts +2 -2
- package/dist/runtime/remote/binding-handler.mjs +8 -9
- package/dist/runtime/remote/index.mjs +27 -77
- package/dist/runtime/route-url.d.mts +2 -4
- package/dist/runtime/route-url.mjs +1 -1
- package/dist/runtime/routing.d.mts +1 -1
- package/dist/runtime/routing.mjs +15 -26
- package/dist/runtime/sandbox.d.mts +1 -1
- package/dist/runtime/sandbox.mjs +14 -24
- package/dist/runtime/sse.mjs +1 -1
- package/dist/runtime/storage.mjs +1 -1
- package/dist/runtime/validator.d.mts +1 -1
- package/dist/runtime/ws-server.d.mts +2 -2
- package/dist/runtime/ws-server.mjs +30 -61
- package/dist/runtime/ws.d.mts +1 -1
- package/dist/runtime/ws.mjs +1 -1
- package/dist/{sandbox-XZAqzFlG.d.mts → sandbox-C5LFoJMf.d.mts} +7 -7
- package/dist/{scan-C7okrLyM.mjs → scan-C3uDzz6J.mjs} +21 -18
- package/dist/{secret-3c72lY1U.mjs → secret-BAt2KMmO.mjs} +15 -15
- package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
- package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
- package/dist/{subcommand-prompt-Dhom39bd.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
- package/dist/sveltekit.d.mts +0 -2
- package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
- package/dist/validate-BJr9LfXy.mjs +2 -0
- package/dist/{validate-ctOrgiS3.mjs → validate-C9qJArv7.mjs} +9 -28
- package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
- package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
- package/dist/{ws-CL1w7GXU.d.mts → ws-CChrrAU-.d.mts} +1 -1
- package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
- package/{skills/void/docs → docs}/guide/ai.md +69 -64
- package/{skills/void/docs → docs}/guide/app-types.md +1 -1
- package/{skills/void/docs → docs}/guide/auth.md +37 -1
- package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
- package/{skills/void/docs → docs}/guide/database.md +23 -8
- package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
- package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
- package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
- package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
- package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
- package/{skills/void/docs → docs}/guide/jobs.md +2 -2
- package/{skills/void/docs → docs}/guide/live.md +12 -5
- package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +21 -9
- package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
- package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
- package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
- package/{skills/void/docs → docs}/guide/platform/administration/access.md +2 -10
- package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
- package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
- package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
- package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +2 -2
- package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
- package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +8 -2
- package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +7 -1
- package/{skills/void/docs → docs}/guide/platform/installation/setup.md +1 -1
- package/docs/guide/platform/installation/uninstall.md +102 -0
- package/{skills/void/docs → docs}/guide/project-collaboration.md +6 -2
- package/{skills/void/docs → docs}/guide/queues.md +0 -2
- package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
- package/{skills/void/docs → docs}/guide/sandboxes.md +41 -22
- package/{skills/void/docs → docs}/guide/sse.md +0 -2
- package/{skills/void/docs → docs}/guide/storage.md +7 -2
- package/{skills/void/docs → docs}/guide/websockets.md +4 -0
- package/docs/integrations/agents.md +37 -0
- package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
- package/{skills/void/docs → docs}/integrations/hono.md +15 -7
- package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
- package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
- package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
- package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
- package/{skills/void/docs → docs}/reference/api/resources.md +11 -14
- package/{skills/void/docs → docs}/reference/api.md +35 -34
- package/{skills/void/docs → docs}/reference/cli/auth.md +3 -6
- package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
- package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
- package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
- package/{skills/void/docs → docs}/reference/cli/platform-config.md +3 -3
- package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
- package/{skills/void/docs → docs}/reference/cli/platform-installation.md +15 -13
- package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
- package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
- package/{skills/void/docs → docs}/reference/cli/platform.md +4 -2
- package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
- package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
- package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
- package/{skills/void/docs → docs}/reference/cli.md +2 -2
- package/{skills/void/docs → docs}/reference/config.md +13 -13
- package/{skills/void/docs → docs}/reference/resource-inference.md +2 -16
- package/package.json +34 -30
- package/schema.json +1 -1
- package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
- package/skills/void/SKILL.md +11 -5
- package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
- package/dist/client-B4Me-9HE.mjs +0 -2
- package/dist/config-0acf1oys.mjs +0 -2
- package/dist/config-D8MOgiQV.mjs +0 -32
- package/dist/deploy-BDu1vhSH.mjs +0 -2
- package/dist/discover-AMCBXivQ.mjs +0 -2
- package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
- package/dist/gen-ById9r2j.mjs +0 -2
- package/dist/help-DPGBwomV.mjs +0 -2
- package/dist/login-C98-sw79.mjs +0 -2
- package/dist/migrate-CEu2X5DB.mjs +0 -2
- package/dist/plan-D1Q5rf-r.mjs +0 -2
- package/dist/platform-args-Cq6EjQro.mjs +0 -2
- package/dist/prepare-CnjcTV2s.mjs +0 -2
- package/dist/resolve-project-DtbidV4y.mjs +0 -2
- package/dist/route-url-CG7U-cRN.mjs +0 -15
- package/dist/runner-CXA9Fh8h.mjs +0 -2
- package/dist/validate-Dq_L3s0S.mjs +0 -2
- package/skills/void/docs/guide/platform/installation/uninstall.md +0 -69
- package/skills/void/docs/integrations/agents.md +0 -26
- package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
- package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
- package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
- package/{skills/void/docs → docs}/guide/deployment.md +0 -0
- package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
- package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
- package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
- package/{skills/void/docs → docs}/guide/email.md +0 -0
- package/{skills/void/docs → docs}/guide/index.md +0 -0
- package/{skills/void/docs → docs}/guide/kv.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
- package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
- package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
- package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
- package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
- package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
- package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
- package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
- package/{skills/void/docs → docs}/guide/ssg.md +0 -0
- package/{skills/void/docs → docs}/guide/ssr.md +0 -0
- package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
- package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
- package/{skills/void/docs → docs}/index.md +0 -0
- package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
- package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
- package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
- package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
- package/{skills/void/docs → docs}/reference/api/client.md +0 -0
- package/{skills/void/docs → docs}/reference/api/database.md +2 -2
- /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
- /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/deploy.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
- /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
- /package/{skills/void/docs → docs}/reference/structure.md +0 -0
|
@@ -11,11 +11,11 @@ A loader fetches the data a page needs. Define it in a companion `.server.ts` fi
|
|
|
11
11
|
`loader` runs on GET requests and returns an object that becomes the page's props:
|
|
12
12
|
|
|
13
13
|
```ts
|
|
14
|
+
import { users } from '@schema';
|
|
14
15
|
// pages/users/index.server.ts
|
|
15
16
|
import { defineHandler } from 'void';
|
|
16
17
|
import type { InferProps } from 'void';
|
|
17
18
|
import { db } from 'void/db';
|
|
18
|
-
import { users } from '@schema';
|
|
19
19
|
|
|
20
20
|
export type Props = InferProps<typeof loader>; // [!code highlight]
|
|
21
21
|
|
|
@@ -79,9 +79,9 @@ defineProps<Props>();
|
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
```tsx [Solid]
|
|
82
|
+
import { For } from 'solid-js';
|
|
82
83
|
// pages/users/index.tsx
|
|
83
84
|
import type { Props } from './index.server';
|
|
84
|
-
import { For } from 'solid-js';
|
|
85
85
|
|
|
86
86
|
export default function UsersPage(props: Props) {
|
|
87
87
|
return (
|
|
@@ -102,11 +102,11 @@ export default function UsersPage(props: Props) {
|
|
|
102
102
|
Use `defer()` for slow data. The page renders immediately and receives the result when it is ready:
|
|
103
103
|
|
|
104
104
|
```ts
|
|
105
|
+
import { projects } from '@schema';
|
|
105
106
|
// pages/dashboard.server.ts
|
|
106
107
|
import { defineHandler, defer } from 'void';
|
|
107
108
|
import type { InferProps } from 'void';
|
|
108
109
|
import { db } from 'void/db';
|
|
109
|
-
import { projects } from '@schema';
|
|
110
110
|
|
|
111
111
|
export type Props = InferProps<typeof loader>;
|
|
112
112
|
|
|
@@ -157,6 +157,10 @@ around the Suspense boundary when the page should render a custom failure state.
|
|
|
157
157
|
For explicit React prop annotations, import `Deferred` from `@void/react`; the
|
|
158
158
|
adapter export is typed as `Promise<T>`.
|
|
159
159
|
|
|
160
|
+
In production, an unexpected error in a deferred prop reaches the page as
|
|
161
|
+
`Internal Server Error`; throw an
|
|
162
|
+
[`HTTPException`](../../integrations/hono.md#utilities) to show your own message.
|
|
163
|
+
|
|
160
164
|
In Vue, Svelte, and Solid, `Deferred<T>` behaves as a [discriminated union](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#discriminated-unions) with three states:
|
|
161
165
|
|
|
162
166
|
```ts
|
|
@@ -64,11 +64,11 @@ Add the plugin to your Vite config **after** the framework adapter:
|
|
|
64
64
|
::: code-group
|
|
65
65
|
|
|
66
66
|
```ts [React]
|
|
67
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
68
|
+
import { voidReact } from '@void/react/plugin';
|
|
67
69
|
// vite.config.ts
|
|
68
70
|
import { defineConfig } from 'vite';
|
|
69
71
|
import { voidPlugin } from 'void';
|
|
70
|
-
import { voidReact } from '@void/react/plugin';
|
|
71
|
-
import { voidMarkdown } from '@void/md/plugin';
|
|
72
72
|
|
|
73
73
|
export default defineConfig({
|
|
74
74
|
plugins: [voidPlugin(), voidReact(), voidMarkdown()],
|
|
@@ -76,11 +76,11 @@ export default defineConfig({
|
|
|
76
76
|
```
|
|
77
77
|
|
|
78
78
|
```ts [Vue]
|
|
79
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
80
|
+
import { voidVue } from '@void/vue/plugin';
|
|
79
81
|
// vite.config.ts
|
|
80
82
|
import { defineConfig } from 'vite';
|
|
81
83
|
import { voidPlugin } from 'void';
|
|
82
|
-
import { voidVue } from '@void/vue/plugin';
|
|
83
|
-
import { voidMarkdown } from '@void/md/plugin';
|
|
84
84
|
|
|
85
85
|
export default defineConfig({
|
|
86
86
|
plugins: [voidPlugin(), voidVue(), voidMarkdown()],
|
|
@@ -88,11 +88,11 @@ export default defineConfig({
|
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
```ts [Svelte]
|
|
91
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
92
|
+
import { voidSvelte } from '@void/svelte/plugin';
|
|
91
93
|
// vite.config.ts
|
|
92
94
|
import { defineConfig } from 'vite';
|
|
93
95
|
import { voidPlugin } from 'void';
|
|
94
|
-
import { voidSvelte } from '@void/svelte/plugin';
|
|
95
|
-
import { voidMarkdown } from '@void/md/plugin';
|
|
96
96
|
|
|
97
97
|
export default defineConfig({
|
|
98
98
|
plugins: [voidPlugin(), voidSvelte(), voidMarkdown()],
|
|
@@ -100,11 +100,11 @@ export default defineConfig({
|
|
|
100
100
|
```
|
|
101
101
|
|
|
102
102
|
```ts [Solid]
|
|
103
|
+
import { voidMarkdown } from '@void/md/plugin';
|
|
104
|
+
import { voidSolid } from '@void/solid/plugin';
|
|
103
105
|
// vite.config.ts
|
|
104
106
|
import { defineConfig } from 'vite';
|
|
105
107
|
import { voidPlugin } from 'void';
|
|
106
|
-
import { voidSolid } from '@void/solid/plugin';
|
|
107
|
-
import { voidMarkdown } from '@void/md/plugin';
|
|
108
108
|
|
|
109
109
|
export default defineConfig({
|
|
110
110
|
plugins: [voidPlugin(), voidSolid(), voidMarkdown()],
|
|
@@ -401,7 +401,7 @@ Code blocks include a copy button.
|
|
|
401
401
|
|
|
402
402
|
### Line Numbers
|
|
403
403
|
|
|
404
|
-
Enable per code block with `:line-numbers
|
|
404
|
+
Enable per code block with `:line-numbers`:
|
|
405
405
|
|
|
406
406
|
````md
|
|
407
407
|
```ts :line-numbers
|
|
@@ -412,14 +412,6 @@ const b = 2;
|
|
|
412
412
|
|
|
413
413
|
Start from a specific number with `:line-numbers=5`.
|
|
414
414
|
|
|
415
|
-
### Snippet Imports
|
|
416
|
-
|
|
417
|
-
Import code from external files:
|
|
418
|
-
|
|
419
|
-
```md
|
|
420
|
-
<<< ./path/to/file.ts
|
|
421
|
-
```
|
|
422
|
-
|
|
423
415
|
### Emoji
|
|
424
416
|
|
|
425
417
|
Shortcodes convert to unicode: `:tada:` becomes :tada:, `:rocket:` becomes :rocket:.
|
|
@@ -455,16 +447,16 @@ Headings include permalink anchors. Use `[[toc]]` for a table of contents. Image
|
|
|
455
447
|
```ts
|
|
456
448
|
voidMarkdown({
|
|
457
449
|
shiki: {
|
|
458
|
-
themes: { light: 'github-light', dark: 'github-dark' },
|
|
459
|
-
langs: ['sql', 'graphql'], // additional languages
|
|
450
|
+
themes: { light: 'github-light', dark: 'github-dark' },
|
|
460
451
|
},
|
|
461
452
|
});
|
|
462
453
|
```
|
|
463
454
|
|
|
464
|
-
| Option | Type | Default | Description
|
|
465
|
-
| -------------- | -------------------------------- | ------------------------------------------------ |
|
|
466
|
-
| `shiki.themes` | `{ light: string; dark: string}` | `{ light: "github-light", dark: "github-dark" }` | Shiki color themes
|
|
467
|
-
|
|
455
|
+
| Option | Type | Default | Description |
|
|
456
|
+
| -------------- | -------------------------------- | ------------------------------------------------ | ------------------ |
|
|
457
|
+
| `shiki.themes` | `{ light: string; dark: string}` | `{ light: "github-light", dark: "github-dark" }` | Shiki color themes |
|
|
458
|
+
|
|
459
|
+
Code block languages load on demand from Shiki's bundled languages.
|
|
468
460
|
|
|
469
461
|
## Building a Sidebar
|
|
470
462
|
|
|
@@ -41,10 +41,10 @@ Add both plugins to your Vite config:
|
|
|
41
41
|
::: code-group
|
|
42
42
|
|
|
43
43
|
```ts [React]
|
|
44
|
+
import { voidReact } from '@void/react/plugin';
|
|
44
45
|
// vite.config.ts
|
|
45
46
|
import { defineConfig } from 'vite';
|
|
46
47
|
import { voidPlugin } from 'void';
|
|
47
|
-
import { voidReact } from '@void/react/plugin';
|
|
48
48
|
|
|
49
49
|
export default defineConfig({
|
|
50
50
|
plugins: [voidPlugin(), voidReact()],
|
|
@@ -52,10 +52,10 @@ export default defineConfig({
|
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
```ts [Vue]
|
|
55
|
+
import { voidVue } from '@void/vue/plugin';
|
|
55
56
|
// vite.config.ts
|
|
56
57
|
import { defineConfig } from 'vite';
|
|
57
58
|
import { voidPlugin } from 'void';
|
|
58
|
-
import { voidVue } from '@void/vue/plugin';
|
|
59
59
|
|
|
60
60
|
export default defineConfig({
|
|
61
61
|
plugins: [voidPlugin(), voidVue()],
|
|
@@ -63,10 +63,10 @@ export default defineConfig({
|
|
|
63
63
|
```
|
|
64
64
|
|
|
65
65
|
```ts [Svelte]
|
|
66
|
+
import { voidSvelte } from '@void/svelte/plugin';
|
|
66
67
|
// vite.config.ts
|
|
67
68
|
import { defineConfig } from 'vite';
|
|
68
69
|
import { voidPlugin } from 'void';
|
|
69
|
-
import { voidSvelte } from '@void/svelte/plugin';
|
|
70
70
|
|
|
71
71
|
export default defineConfig({
|
|
72
72
|
plugins: [voidPlugin(), voidSvelte()],
|
|
@@ -74,10 +74,10 @@ export default defineConfig({
|
|
|
74
74
|
```
|
|
75
75
|
|
|
76
76
|
```ts [Solid]
|
|
77
|
+
import { voidSolid } from '@void/solid/plugin';
|
|
77
78
|
// vite.config.ts
|
|
78
79
|
import { defineConfig } from 'vite';
|
|
79
80
|
import { voidPlugin } from 'void';
|
|
80
|
-
import { voidSolid } from '@void/solid/plugin';
|
|
81
81
|
|
|
82
82
|
export default defineConfig({
|
|
83
83
|
plugins: [voidPlugin(), voidSolid()],
|
|
@@ -212,6 +212,8 @@ router.refresh(); // re-fetch current page props
|
|
|
212
212
|
router.visit('/logout', { method: 'POST' }); // non-GET navigation
|
|
213
213
|
```
|
|
214
214
|
|
|
215
|
+
`router.visit()` updates the page in place for same-origin URLs. `http(s)` URLs on another origin get a full page load, and other schemes such as `javascript:` are rejected.
|
|
216
|
+
|
|
215
217
|
For dynamic route params, use `useParams()` from the same adapter package:
|
|
216
218
|
|
|
217
219
|
```tsx
|
|
@@ -30,15 +30,7 @@ the company sign-in before Void login. Interactive Access authentication uses a
|
|
|
30
30
|
locally installed `cloudflared` and saves its short-lived credential in your
|
|
31
31
|
system keychain for that platform origin. You do not need to copy browser cookies.
|
|
32
32
|
|
|
33
|
-
For CI, use a [project deploy token](/guide/platform/installation/first-deployment) alongside your Access credentials
|
|
34
|
-
|
|
35
|
-
Store Access credentials in origin-keyed `VOID_ACCESS_CREDENTIALS`. A deploy
|
|
36
|
-
that uses prerendering or remote bindings needs entries for both the exact API
|
|
37
|
-
and proxy HTTPS origins, even when both entries contain the same admitted
|
|
38
|
-
service-token pair. `VOID_ACCESS_ORIGIN` selects only one recipient and therefore
|
|
39
|
-
cannot cover both calls. Keep the JSON value in your secret manager, not in
|
|
40
|
-
application configuration. See [CI deployment setup](/guide/platform/installation/first-deployment)
|
|
41
|
-
for the required shape.
|
|
33
|
+
For CI, use a [project deploy token](/guide/platform/installation/first-deployment) alongside your Access credentials in origin-keyed `VOID_ACCESS_CREDENTIALS`. An Access service token does not authorize a Void deployment. See [CI deployment setup](/guide/platform/installation/first-deployment) for the required origins and shape.
|
|
42
34
|
|
|
43
35
|
## Choosing a Platform
|
|
44
36
|
|
|
@@ -165,4 +157,4 @@ void platform invitation list
|
|
|
165
157
|
Invitation history remains available after an involved account is removed. The stored actor ID
|
|
166
158
|
remains visible when that account's login no longer exists.
|
|
167
159
|
|
|
168
|
-
`void platform signup open` allows anyone to sign up. Use `void platform signup restrict` to require an allowlist match again. Disallowing an entry affects future signup; it does not suspend an existing account.
|
|
160
|
+
`void platform signup open` allows anyone to sign up. Everyone who signs up can deploy apps on your application domain, so check how those apps [share cookies](/guide/platform/installation/domains#adding-a-domain) before opening signup. Use `void platform signup restrict` to require an allowlist match again. Disallowing an entry affects future signup; it does not suspend an existing account.
|
|
@@ -66,18 +66,9 @@ The dashboard’s **System Status** page refreshes health checks every 30 second
|
|
|
66
66
|
|
|
67
67
|
Use `void platform upgrade`, `repair`, `disable`, and `enable` to maintain your platform. See [platform maintenance](/guide/platform/installation/maintenance#resume-repair-recover-and-upgrade).
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
refreshes automatically and shows saved progress and the API's traffic state
|
|
73
|
-
while the API and authentication database remain reachable. If a status refresh
|
|
74
|
-
fails, the last confirmed snapshot is marked as stale. Normal administrator
|
|
75
|
-
changes stay paused during maintenance.
|
|
76
|
-
If the CLI reports an error or a waiting state, follow its recovery instructions
|
|
77
|
-
to resume the operation. See
|
|
78
|
-
[Follow upgrade and rollback progress](/guide/platform/installation/maintenance#follow-upgrade-and-rollback-progress).
|
|
79
|
-
|
|
80
|
-
For disaster recovery, keep a matching PostgreSQL backup, provider data backups, installation identity and complete project-encryption keyring, and immutable runtime artifacts. Keep traffic disabled while restoring data, run `discover` to reconstruct verified local metadata, and review `repair --plan` before recreating missing installer-owned infrastructure. Neither command restores backed-up data. See [Prepare for disaster recovery](/guide/platform/installation/maintenance#prepare-for-disaster-recovery) for the full sequence.
|
|
69
|
+
During an upgrade or rollback, the admin UI shows progress at `/admin/status`. See [Follow upgrade and rollback progress](/guide/platform/installation/maintenance#follow-upgrade-and-rollback-progress).
|
|
70
|
+
|
|
71
|
+
For backups and restores, see [Prepare for disaster recovery](/guide/platform/installation/maintenance#prepare-for-disaster-recovery).
|
|
81
72
|
|
|
82
73
|
## Using Scripts
|
|
83
74
|
|
|
@@ -23,7 +23,7 @@ void platform project show <project-id>
|
|
|
23
23
|
|
|
24
24
|
Project details include resources, domains, and recent builds and deployments. The [command reference](../../../reference/cli/platform.md#operator-commands) also covers suspending and restoring users, deleting projects, and removing accounts.
|
|
25
25
|
|
|
26
|
-
In the admin dashboard, open a project to view its team. Search for a platform user and choose a role to add them immediately; an email address is not required. You can also change or remove existing members. Pending invitations created through other project workflows remain visible until accepted or revoked. If email is unavailable for a pending invitation, share its ID so the user can accept it with `void project team accept <invitation-id>`. The owner cannot be removed from the team; transfer ownership first.
|
|
26
|
+
In the admin dashboard, open a project to view its team. Search for a platform user and choose a role to add them immediately; an email address is not required. You can also change or remove existing members. Pending invitations created through other project workflows remain visible until accepted or revoked. If email is unavailable for a pending invitation, share its ID so the user can accept it with `void project team accept <invitation-id>`. The owner cannot be removed from the team; transfer ownership first. Removing a collaborator or admin, changing one to reader, or suspending or deleting their account [replaces the project's platform credentials](../../project-collaboration.md#change-or-remove-access), the same as the CLI.
|
|
27
27
|
|
|
28
28
|
### Transferring Project Ownership
|
|
29
29
|
|
|
@@ -36,7 +36,7 @@ Use the Node.js version recorded in `.node-version`.
|
|
|
36
36
|
|
|
37
37
|
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.
|
|
38
38
|
|
|
39
|
-
The core installer creates the API, dispatch, proxy, and
|
|
39
|
+
The core installer creates the API, dispatch, proxy, tail, and email gateway 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.
|
|
40
40
|
|
|
41
41
|
## Running the API Locally
|
|
42
42
|
|
|
@@ -44,7 +44,7 @@ Start a local PostgreSQL server and make `psql` and `pg_isready` available on yo
|
|
|
44
44
|
|
|
45
45
|
```sh
|
|
46
46
|
vp run --filter @voidcloud/api setup --admin-email dev@example.com
|
|
47
|
-
vp run --filter @voidcloud/api dev
|
|
47
|
+
vp run --filter @voidcloud/api dev:admin
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
The command disables the optional build containers, so basic API and admin work
|
|
@@ -55,6 +55,8 @@ Open `http://localhost:8787/admin/`. Setup writes the API's local database conne
|
|
|
55
55
|
|
|
56
56
|
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.
|
|
57
57
|
|
|
58
|
+
`dev:admin` watches source files and automatically reloads the browser after edits. Keep it running while working on the admin dashboard's React components and styles; no platform deployment is needed. The setup includes sample users, projects, and deployments for trying each view locally.
|
|
59
|
+
|
|
58
60
|
## Running the Dashboard Locally
|
|
59
61
|
|
|
60
62
|
The dashboard is a separate source app. After API setup, start it in another terminal:
|
|
@@ -25,7 +25,7 @@ void-dev platform install \
|
|
|
25
25
|
--plan
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
Before applying the plan, complete the [installation guides](/guide/self-hosted-platform). 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
|
|
28
|
+
Before applying the plan, complete the [installation guides](/guide/self-hosted-platform). 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, login-provider, and 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.
|
|
29
29
|
|
|
30
30
|
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.
|
|
31
31
|
|
|
@@ -20,7 +20,7 @@ Review the generated SQL and migration journal before committing them. Released
|
|
|
20
20
|
|
|
21
21
|
`@void/platform` contains installation manifests, resource naming, discovery contracts, Worker configuration, and deployable bundles under the `./installer` export. Platform source lives in `platform/packages/`.
|
|
22
22
|
|
|
23
|
-
Runtime artifacts include migration SQL, its journal, and a rollback compatibility manifest. Drizzle authoring snapshots remain in the source tree.
|
|
23
|
+
Runtime artifacts include migration SQL, its journal, and a rollback compatibility manifest. Drizzle authoring snapshots remain in the source tree.
|
|
24
24
|
|
|
25
25
|
## CI in a Fork
|
|
26
26
|
|
|
@@ -8,7 +8,7 @@ Keep one password-manager entry for this platform. Paste the saved values into t
|
|
|
8
8
|
|
|
9
9
|
## Cloudflare API Tokens {#runtime-token-permissions}
|
|
10
10
|
|
|
11
|
-
For a domain installation or Cloudflare Access setup, the installer guides you through creating separate management and runtime tokens using Cloudflare's [API token setup](https://developers.cloudflare.com/fundamentals/api/get-started/create-token/). Its links preselect the permissions and suggest names based on your platform's display name
|
|
11
|
+
For a domain installation or Cloudflare Access setup, the installer guides you through creating separate management and runtime tokens using Cloudflare's [API token setup](https://developers.cloudflare.com/fundamentals/api/get-started/create-token/). Its links preselect the permissions and suggest names based on your platform's display name, but Cloudflare's form cannot preselect a zone: for a domain installation, change the zone policy from **All Domains** to **Specified Domains** and select your zone. If Void will create the zone, keep **All Domains** on both tokens: the zone does not exist yet, and the runtime token needs it to purge cache. Save the tokens in your password manager and paste them into the masked CLI prompts.
|
|
12
12
|
|
|
13
13
|
For workers.dev testing with the default API hostname, browser login can authorize
|
|
14
14
|
infrastructure setup. Void also checks account-wide Access requirements; if the
|
|
@@ -21,7 +21,7 @@ Browser login does not grant AI Gateway access. Include **Account → AI Gateway
|
|
|
21
21
|
|
|
22
22
|
The management token lets your CLI install and maintain the platform. The runtime token is stored as a Worker secret so the platform can deploy apps after you close your terminal. They are separate credentials.
|
|
23
23
|
|
|
24
|
-
Compare each token's form with the permission checklist below
|
|
24
|
+
Compare each token's form with the permission checklist below. The installer saves a management token entered at the prompt in this installation’s encrypted local checkpoint and reuses it on resume. Upgrades, repairs, and other lifecycle maintenance also use that saved management token. During installation, a rejected token can be replaced at the prompt. An explicit `CLOUDFLARE_API_TOKEN` or `CF_API_TOKEN` takes precedence. Keep your password-manager copy for maintenance or another machine; scripts supply it through `CLOUDFLARE_API_TOKEN`.
|
|
25
25
|
|
|
26
26
|
::: details Permissions to select for each token
|
|
27
27
|
|
|
@@ -23,6 +23,8 @@ Choose an application domain whose wildcard leaves existing Worker Custom Domain
|
|
|
23
23
|
|
|
24
24
|
Browser login sessions are specific to each origin. Apps using their own OAuth providers may need to register their new callback URLs. Void's built-in auth uses the request origin automatically unless the app overrides that configuration.
|
|
25
25
|
|
|
26
|
+
Apps on one application domain can set cookies that the other apps there receive. With a nested domain such as `apps.example.com`, apps can also set cookies for `example.com` and its other subdomains. Apps on `workers.dev` testing URLs can set cookies that every Worker on your account's `workers.dev` subdomain receives. If people outside your team can deploy, use a domain that serves only Void apps. A platform that serves thousands of independent developers can also apply to list its application domain on the [Public Suffix List](https://github.com/publicsuffix/list/wiki/Guidelines).
|
|
27
|
+
|
|
26
28
|
### What Changes in Testing Mode?
|
|
27
29
|
|
|
28
30
|
In testing mode, each app gets a `workers.dev` URL. These URLs continue working after you add a domain; new apps then use the domain.
|
|
@@ -91,7 +93,7 @@ New platform resources use deterministic `void-<installation-name>-<role>` names
|
|
|
91
93
|
| Workers | 5, plus one per app using workers.dev | API/control plane, proxy, tail ingestion, dispatch, email gateway, and test-origin forwarders |
|
|
92
94
|
| KV namespaces | 3 | Routing, ISR cache, and static asset storage |
|
|
93
95
|
| R2 buckets | 1 | Static and deployment assets |
|
|
94
|
-
| Queues |
|
|
96
|
+
| Queues | 3 | Usage events, cron firing, and deployments |
|
|
95
97
|
| Workers for Platforms dispatch namespaces | 1 | User application Workers |
|
|
96
98
|
| Hyperdrive configurations | 1 | External platform PostgreSQL |
|
|
97
99
|
| AI Gateways | 1 | Installation-isolated AI routing and metering |
|
|
@@ -4,6 +4,8 @@ outline: deep
|
|
|
4
4
|
|
|
5
5
|
# First Deployment
|
|
6
6
|
|
|
7
|
+
Open your platform's API URL in a browser to see its welcome page, CLI connection instructions, and a link to the administrator dashboard. Share this URL with teammates so they can connect to your platform.
|
|
8
|
+
|
|
7
9
|
First verify the new platform and sign in with the administrator login method selected during setup:
|
|
8
10
|
|
|
9
11
|
```sh
|
|
@@ -34,7 +36,11 @@ void project token create --name ci --expires-in 30
|
|
|
34
36
|
|
|
35
37
|
Store the printed `VOID_TOKEN` and `VOID_API_URL` in the CI secret manager, then
|
|
36
38
|
run `void connect "$VOID_API_URL" --no-login` before deploying in each fresh CI
|
|
37
|
-
environment. Project files do not replace this connection step.
|
|
39
|
+
environment. Project files do not replace this connection step. CI cannot answer
|
|
40
|
+
the project prompt, so choose the project before `void deploy`: set `VOID_PROJECT`,
|
|
41
|
+
pass `--project <slug>`, or commit `.void/project.json` from `void project link`.
|
|
42
|
+
New apps ignore `.void` in `.gitignore`; to commit the link, replace that line
|
|
43
|
+
with `.void/*` and `!.void/project.json`. Rotate with `void project token renew <id>` and revoke with
|
|
38
44
|
`void project token revoke <id>`. A human login token is not a CI credential.
|
|
39
45
|
|
|
40
46
|
If Cloudflare Access protects the platform, Access proof and the project
|
|
@@ -79,7 +85,7 @@ void platform signup allow github teammate
|
|
|
79
85
|
|
|
80
86
|
Void shows the proposed access change and asks you to confirm it. Once approved, `teammate` can connect to the platform's API URL and sign in with GitHub.
|
|
81
87
|
|
|
82
|
-
To
|
|
88
|
+
To allow email addresses, domains, or OIDC identities, or to open signup, see [Giving People Access](/guide/platform/administration/access#giving-people-access).
|
|
83
89
|
|
|
84
90
|
Your administrator session lasts for one hour. Use it to inspect users, projects, logs, and platform health. The [Platform Administration guide](/guide/platform-administration) walks through those workflows, previews, and automation. You can also open `<API origin>/admin/login` to use the browser admin UI.
|
|
85
91
|
|
|
@@ -6,7 +6,7 @@ outline: deep
|
|
|
6
6
|
|
|
7
7
|
## Resume, repair, recover, and upgrade
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Run `void platform list` to find the installation slug beside its name. Lifecycle commands accept this slug, an installation ID, or a saved connection ID. You can omit the selector when only one installation is configured. With several installations, choose one interactively or pass its slug or ID in CI.
|
|
10
10
|
|
|
11
11
|
### Resume an installation
|
|
12
12
|
|
|
@@ -74,6 +74,8 @@ void platform upgrade [id]
|
|
|
74
74
|
|
|
75
75
|
An upgrade validates the runtime, applies supported pending migrations, deploys the Workers, and checks their health. Existing Worker secrets are preserved.
|
|
76
76
|
|
|
77
|
+
Before starting, Void checks access to the installation's Cloudflare account, Workers, and existing R2 buckets. If credentials are rejected, set `CLOUDFLARE_API_TOKEN` to a management token scoped to that account and retry. This overrides the installation's saved management token.
|
|
78
|
+
|
|
77
79
|
::: details Migration safety, credential rotation, and interrupted upgrades
|
|
78
80
|
|
|
79
81
|
Some upgrades briefly put the platform into maintenance mode. Traffic resumes after the new version passes health checks. If an upgrade is interrupted during maintenance, rerun the same command to complete it.
|
|
@@ -96,6 +98,10 @@ void platform rollback [id] --runtime /path/to/earlier/runtime
|
|
|
96
98
|
|
|
97
99
|
Keep the earlier runtime files if you need rollback. If the installed version is a custom build, also pass its files with `--from-runtime /path/to/current/runtime`. Void checks that the earlier version can run against your current database and refuses incompatible rollbacks. A later `upgrade` can move forward again. See [Platform Development](/guide/platform/development/runtime#deploying-your-runtime) for working with custom builds.
|
|
98
100
|
|
|
101
|
+
Do not roll back to 0.26.0 or earlier after upgrading to a later release. Void does not refuse this rollback, but those releases reject the credentials that later releases give your apps. Every project deployed or rotated since the upgrade loses AI, email, ISR revalidation, remote D1, KV, and R2, and prerendering until you upgrade again. If you have rolled back that far, upgrade again, then run `void platform system rotate-proxy-tokens --all --yes` and check with `--plan` until nothing is pending or failed.
|
|
102
|
+
|
|
103
|
+
Let running rotations finish before you roll back. If an older proxy runs next to a newer API, prerendering and remote D1, KV, and R2 fail until both run the same release. After a rollback to the release just before credential rotation, projects deployed since the upgrade lose prerendering and remote D1, KV, and R2 until they are deployed again or you upgrade again. A rotated project deployed during any rollback stays broken after you upgrade again, and 0.26.0 and earlier also drop rotations that have not finished. After upgrading again from any rollback, run the same `rotate-proxy-tokens` commands.
|
|
104
|
+
|
|
99
105
|
:::
|
|
100
106
|
|
|
101
107
|
### Follow upgrade and rollback progress
|
|
@@ -12,7 +12,7 @@ For workers.dev testing, start the interactive install and choose your login met
|
|
|
12
12
|
void platform install --workers-dev
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
For a domain installation or Access setup, Void guides you to create a management API token and paste it into a masked prompt. Browser login can preview DNS, but cannot change it or configure Access. The token-creation link preselects the permissions for your choices
|
|
15
|
+
For a domain installation or Access setup, Void guides you to create a management API token and paste it into a masked prompt. Browser login can preview DNS, but cannot change it or configure Access. The token-creation link preselects the permissions for your choices. When using an existing domain, change the zone policy from **All Domains** to **Specified Domains** and select your zone, as the CLI prompt describes. No shell environment variable is needed for interactive installation.
|
|
16
16
|
|
|
17
17
|
::: details Use an existing management token from the shell
|
|
18
18
|
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
outline: deep
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Disable and Uninstall
|
|
6
|
+
|
|
7
|
+
To pause a platform without removing its data:
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
void platform disable [id] --plan
|
|
11
|
+
void platform disable [id]
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Disabled platforms reject application traffic while retaining domains and routes. The platform API also rejects requests, so CLI commands that use it, including login and deploy, fail until you enable the platform again. Only the administrator status page at `<api-url>/admin/status` and administrator sign-in stay available. Repair and upgrade preserve that state.
|
|
15
|
+
|
|
16
|
+
Enabling redeploys the platform Workers from the selected runtime, verifies them, and then restores traffic. Pass `--runtime <path>` to enable with a custom platform build:
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
void platform enable [id] --plan
|
|
20
|
+
void platform enable [id]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Add `--yes` to commands that make changes in a non-interactive shell.
|
|
24
|
+
|
|
25
|
+
While disabled, the platform retries queue batches after five minutes instead of delivering them to apps. Queue retention and retry limits still apply. For a long pause, plan a dead-letter queue or another way to recover messages.
|
|
26
|
+
|
|
27
|
+
## Uninstall
|
|
28
|
+
|
|
29
|
+
Preview removal before applying it:
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
void platform uninstall [id] --plan
|
|
33
|
+
void platform uninstall [id]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Uninstall blocks platform traffic, removes Queues that no remaining platform Worker uses, and lists the resources left for you to review. Use `--plan` to review deletions and retained resources before making changes. By default, Workers, the Queues they use, KV, R2, Hyperdrive, the dispatch namespace, and AI Gateway remain in your account. Adopted resources, external PostgreSQL, and zones are always retained. Email Routing settings are retained; `--purge-resources` removes only the rules that send mail to the platform. DNS records, routes, custom domains, and Cloudflare Access resources are retained unless you use `--purge-resources`.
|
|
37
|
+
|
|
38
|
+
When uninstall finishes, the record of what was kept stays at `~/.void/platforms/<account-id>/<installation-id>.json`. Without `--purge-data`, the encrypted credentials file `<installation-id>.recovery.enc` next to it is kept too. Delete both once you have finished the manual cleanup below.
|
|
39
|
+
|
|
40
|
+
To also remove eligible data resources owned by the installer:
|
|
41
|
+
|
|
42
|
+
```sh
|
|
43
|
+
void platform uninstall [id] --purge-data
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Even with `--purge-data`, Void retains Workers, the Queues they use, R2, AI Gateway, DNS records, routes, custom domains, Access resources, adopted resources, external PostgreSQL, and zones. Review those in the Cloudflare dashboard if you want to remove them, or use `--purge-resources`.
|
|
47
|
+
|
|
48
|
+
### Remove everything Void created
|
|
49
|
+
|
|
50
|
+
To delete every Cloudflare resource the installation created:
|
|
51
|
+
|
|
52
|
+
```sh
|
|
53
|
+
void platform uninstall [id] --purge-resources --plan
|
|
54
|
+
void platform uninstall [id] --purge-resources
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`--purge-resources` includes `--purge-data`. It also deletes the platform Workers, Queues, the application Workers left in the dispatch namespace, the R2 bucket and its objects, the AI Gateway, the platform DNS record, Worker routes and custom domains, and the Access applications and service tokens the installer created. The plan lists each resource in deletion order, and everything that stays. If Cloudflare shows that the AI Gateway was created after installation, for example because it was deleted and created again under the same name, it is kept and listed.
|
|
58
|
+
|
|
59
|
+
If the platform sends email, it first deletes the Email Routing rules in the sender domain's zone that send mail to the platform email gateway Worker, and resets such a catch-all rule to drop mail. It leaves Email Routing enabled and keeps the sender domain's MX, SPF, and DKIM records.
|
|
60
|
+
|
|
61
|
+
It never removes zones, adopted resources, external PostgreSQL, other Email Routing settings, Analytics Engine datasets, Access policies or identity providers you chose, or API tokens. Revoke the API tokens you created for the platform afterward.
|
|
62
|
+
|
|
63
|
+
Before making changes, `--purge-resources` checks that no projects remain and that it can read the resources it plans to delete. Delete any projects with `void project delete <name>` first.
|
|
64
|
+
|
|
65
|
+
Set `CLOUDFLARE_API_TOKEN` to a token with the Edit permissions listed by `--plan`. Browser login cannot delete DNS records or Access resources. Access resources in a separate identity account need permissions in that account; email-enabled platforms also need **Zone → Email Routing Rules → Edit** for the sender domain's zone.
|
|
66
|
+
|
|
67
|
+
The read checks cannot verify Edit permissions. If a deletion is denied, uninstall may have already disabled traffic or removed resources. Update the token permissions and rerun the command to resume.
|
|
68
|
+
|
|
69
|
+
If a route, custom domain, DNS record, or Access resource no longer matches what the installation recorded, for example a route that now sends traffic to another Worker, it is kept and listed with the reason, and uninstall continues. Do not run `--purge-resources` while someone else is changing the platform's Workers, routes, or custom domains: a change made after Void checks a resource and before it deletes it is not detected.
|
|
70
|
+
|
|
71
|
+
If Cloudflare refuses a deletion, for example because a Worker you created yourself still sends logs to the platform tail Worker, uninstall stops and names the resource. Fix it, then rerun the same command to continue.
|
|
72
|
+
|
|
73
|
+
If a plain or `--purge-data` uninstall stopped before it finished, rerun it with `--purge-resources` to also delete what it kept. Once an uninstall finishes, use the manual steps below instead.
|
|
74
|
+
|
|
75
|
+
### Remove retained resources
|
|
76
|
+
|
|
77
|
+
After an uninstall without `--purge-resources`, Cloudflare refuses to delete a resource while a platform Worker still uses it. In the Cloudflare dashboard, remove what is left in this order, skipping anything already gone:
|
|
78
|
+
|
|
79
|
+
1. Delete the platform DNS record, Worker routes, and custom domains.
|
|
80
|
+
2. If the platform sends email, open **Email Routing** for the sender domain's zone. Delete the routing rules and any catch-all rule that send mail to the platform email gateway Worker. Then remove the sender subdomain from Email Routing, or disable Email Routing if you enabled it only for the platform.
|
|
81
|
+
3. Open each platform Queue and remove the platform API Worker from its consumers.
|
|
82
|
+
4. Delete the platform Workers, except the tail Worker (its name ends in `-tail`).
|
|
83
|
+
5. Delete the platform Queues.
|
|
84
|
+
6. Delete the application Workers in the dispatch namespace, then delete the namespace.
|
|
85
|
+
7. Delete the tail Worker. Cloudflare refuses while other Workers still send logs to it.
|
|
86
|
+
8. Delete the platform KV namespaces and Hyperdrive configuration.
|
|
87
|
+
9. Empty the R2 bucket, then delete it.
|
|
88
|
+
10. Delete the AI Gateway.
|
|
89
|
+
|
|
90
|
+
If installation configured Cloudflare Access, the uninstall plan lists its recorded applications and service tokens with their ownership and IDs. Review them in Zero Trust after uninstall. Remove installer-created resources only when nothing else uses them; resources connected from an existing company setup remain under their owner's control.
|
|
91
|
+
|
|
92
|
+
Uninstall does not remove the applications created for [project Zero Trust](/guide/platform/administration/zero-trust). While Zero Trust is enabled or still has Access applications, uninstall and `--plan` stop before any change and list those applications. Run `void platform zero-trust disable` first. Uninstall reads this from the installation database, so it also stops when the database cannot be reached.
|
|
93
|
+
|
|
94
|
+
::: details Why some resources require manual cleanup
|
|
95
|
+
|
|
96
|
+
Resources that may have been shared or repurposed require manual review before deletion. Void verifies ownership, keeps those resources in place, and blocks platform traffic.
|
|
97
|
+
|
|
98
|
+
If removal is interrupted, rerun the command to continue. If a resource has changed ownership, resolve the reported conflict before retrying.
|
|
99
|
+
|
|
100
|
+
External PostgreSQL and its data always remain under your control.
|
|
101
|
+
|
|
102
|
+
:::
|
|
@@ -66,8 +66,8 @@ An invitation is bound to the registered account. Forwarding its ID does not let
|
|
|
66
66
|
These three commands use the active platform connection selected by
|
|
67
67
|
`void connect`, even inside a directory linked to another project or deployed
|
|
68
68
|
directly to Cloudflare. `VOID_API_URL` takes precedence when set. If you use
|
|
69
|
-
`VOID_TOKEN`, set `VOID_API_URL` to the matching platform
|
|
70
|
-
|
|
69
|
+
`VOID_TOKEN`, also set `VOID_API_URL` to the matching platform. Each command
|
|
70
|
+
shows the platform it contacts.
|
|
71
71
|
|
|
72
72
|
Accepting an invitation grants access without linking your current directory.
|
|
73
73
|
Open the invited application's directory and run `void project link` if it is
|
|
@@ -92,3 +92,7 @@ void project team revoke <invitation-id>
|
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
A non-owner member can leave with `void project team leave`. The owner cannot leave; an installation administrator must [transfer ownership](./platform/administration/projects.md#transferring-project-ownership) first.
|
|
95
|
+
|
|
96
|
+
When a collaborator or admin is removed, leaves, or is changed to reader, the platform replaces the credentials the project's Workers use to call platform services such as AI, email, and remote bindings. The old credentials stop working once every Worker of the project has the new ones, usually within about 10 minutes, later while a deploy is running. If the replacement cannot finish, the old credentials keep working until it does, and owners and admins see a warning in `void project status` and `void project team list`. WebSocket connections reconnect once. While a Worker is switched to the new credentials, its calls to platform services can fail for a moment, a scheduled run can be skipped, and queue messages are delivered again a couple of minutes later.
|
|
97
|
+
|
|
98
|
+
Code the removed person deployed keeps running until you replace it. If you no longer trust it, deploy code you trust; the platform replaces the credentials again after that deploy. Earlier deployments of theirs kept for rollback keep the old credentials, so after a rollback to one of them, AI, email, and ISR revalidation fail until you deploy again.
|
|
@@ -137,6 +137,4 @@ curl -X POST http://localhost:5173/__void/queue \
|
|
|
137
137
|
-d '{"queue":"my-queue","messages":[{"id":"1","timestamp":'"$(date +%s000)"',"body":{"hello":"world"},"attempts":1}]}'
|
|
138
138
|
```
|
|
139
139
|
|
|
140
|
-
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.
|
|
141
|
-
|
|
142
140
|
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.
|
|
@@ -49,16 +49,16 @@ AI requests use your platform’s account and allowance in both local and remote
|
|
|
49
49
|
When the dev server starts with remote mode active, it prints:
|
|
50
50
|
|
|
51
51
|
```
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
[void] Remote bindings active
|
|
53
|
+
DB → remote D1
|
|
54
|
+
KV → remote KV
|
|
55
|
+
STORAGE → remote R2
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
## Limitations
|
|
59
59
|
|
|
60
60
|
- **Network latency:** each binding call makes a network request, so responses may be slower than local development.
|
|
61
61
|
- **R2 multipart uploads:** `createMultipartUpload()` and `resumeMultipartUpload()` are not supported in remote mode.
|
|
62
|
-
- **R2 conditional writes:** `put(..., { onlyIf })` requires
|
|
62
|
+
- **R2 conditional writes:** `put(..., { onlyIf })` requires an updated platform and project deployment. Failed preconditions return `null`.
|
|
63
63
|
- **D1 dump:** `db.dump()` is not supported in remote mode.
|
|
64
64
|
- **D1 batches:** `db.batch()` requires an updated platform and project deployment.
|