@voltro/cli 0.30.2 → 0.32.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/CHANGELOG.md +278 -0
- package/dist/{apiBuild-BUS1RfPi.js → apiBuild-C4uEbs3s.js} +2 -2
- package/dist/apiBuild-OJEjtwcn.js +2 -0
- package/dist/appGraph-CvQCte0z.js +2 -0
- package/dist/appGraph-gQ_6GkQQ.js +110 -0
- package/dist/bin.js +3 -3
- package/dist/checkCommand-CwMrzAgV.js +2 -0
- package/dist/{checkCommand-D_wdOFhw.js → checkCommand-dm7OHtPt.js} +401 -505
- package/dist/{commands-BgGAUcku.js → commands-C0nEePif.js} +2601 -2498
- package/dist/dbCommand-By__Ev0R.js +2 -0
- package/dist/{dbCommand-CbPRCD1x.js → dbCommand-ifOMafuG.js} +112 -84
- package/dist/{dev-GAOIot9G.js → dev-5ficNnvF.js} +1843 -1832
- package/dist/{dev-tPcOmjPJ.js → dev-rc3fwPSZ.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/{inspectMetrics-BM1vrsga.js → inspectMetrics-BqO4E9G0.js} +1008 -719
- package/dist/{sdkgen-BV4fFucu.js → sdkgen-B_5mHQS2.js} +1 -1
- package/dist/{serveCommand-ClqXCX1y.js → serveCommand-PxMmn96o.js} +454 -454
- package/dist/serveEntry.js +2 -2
- package/dist/{start-CTnNvKlk.js → start-D1-8eKrO.js} +204 -199
- package/dist/startEntry.js +2 -2
- package/package.json +417 -17
- package/templates/AGENTS.md +43 -43
- package/templates/agent-docs/_index.md +43 -43
- package/templates/agent-docs/_manifest.json +84 -42
- package/templates/agent-docs/database/migrations.md +14 -1
- package/templates/agent-docs/internationalization.md +29 -0
- package/templates/agent-docs/plugins/ai-flows.md +148 -0
- package/templates/agent-docs/plugins/analytics-postgres.md +90 -0
- package/templates/agent-docs/plugins/atlassian.md +378 -0
- package/templates/agent-docs/plugins/audit.md +348 -0
- package/templates/agent-docs/plugins/auth-auth0.md +92 -0
- package/templates/agent-docs/plugins/auth-clerk.md +90 -0
- package/templates/agent-docs/plugins/auth-kinde.md +88 -0
- package/templates/agent-docs/plugins/auth-oidc.md +95 -0
- package/templates/agent-docs/plugins/auth-supabase.md +103 -0
- package/templates/agent-docs/plugins/auth-workos.md +105 -0
- package/templates/agent-docs/plugins/auth.md +227 -0
- package/templates/agent-docs/plugins/billing.md +324 -0
- package/templates/agent-docs/plugins/broadcast.md +144 -0
- package/templates/agent-docs/plugins/cdc-out.md +116 -0
- package/templates/agent-docs/plugins/clickhouse.md +91 -0
- package/templates/agent-docs/plugins/datadog.md +105 -0
- package/templates/agent-docs/plugins/deactivation.md +114 -0
- package/templates/agent-docs/plugins/duckdb.md +82 -0
- package/templates/agent-docs/plugins/flags.md +146 -0
- package/templates/agent-docs/plugins/governance.md +143 -0
- package/templates/agent-docs/plugins/licensing.md +74 -0
- package/templates/agent-docs/plugins/logship.md +56 -0
- package/templates/agent-docs/plugins/mail.md +334 -0
- package/templates/agent-docs/plugins/moderation.md +65 -0
- package/templates/agent-docs/plugins/multitenancy.md +99 -0
- package/templates/agent-docs/plugins/notifications.md +252 -0
- package/templates/agent-docs/plugins/openapi.md +94 -0
- package/templates/agent-docs/plugins/postgis.md +140 -0
- package/templates/agent-docs/plugins/posthog.md +91 -0
- package/templates/agent-docs/plugins/presence.md +115 -0
- package/templates/agent-docs/plugins/prometheus.md +124 -0
- package/templates/agent-docs/plugins/ratelimit.md +274 -0
- package/templates/agent-docs/plugins/rbac.md +270 -0
- package/templates/agent-docs/plugins/scim.md +63 -0
- package/templates/agent-docs/plugins/search.md +116 -0
- package/templates/agent-docs/plugins/sentry.md +192 -0
- package/templates/agent-docs/plugins/soft-delete.md +72 -0
- package/templates/agent-docs/plugins/sso-saml.md +132 -0
- package/templates/agent-docs/plugins/storage.md +709 -0
- package/templates/agent-docs/plugins/tinybird.md +92 -0
- package/templates/agent-docs/plugins/versioning.md +226 -0
- package/templates/agent-docs/plugins/webhooks.md +585 -0
- package/templates/agent-docs/security.md +21 -1
- package/templates/agent-docs/whats-new.md +137 -22
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +10 -10
- package/templates/apps/api-collab/package.json +8 -8
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +9 -9
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/package.json +2 -2
- package/dist/apiBuild-DMlxvL8h.js +0 -2
- package/dist/checkCommand-CARZ36Tr.js +0 -2
- package/dist/dbCommand-Ht47LrV-.js +0 -2
package/dist/startEntry.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t } from "./start-
|
|
1
|
+
import { ct as e } from "./inspectMetrics-BqO4E9G0.js";
|
|
2
|
+
import { t } from "./start-D1-8eKrO.js";
|
|
3
3
|
export { e as loadDotEnv, t as runStartCommand };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -55,6 +55,406 @@
|
|
|
55
55
|
"main": "./dist/index.js",
|
|
56
56
|
"module": "./dist/index.js",
|
|
57
57
|
"types": "./dist/index.d.ts",
|
|
58
|
+
"voltro": {
|
|
59
|
+
"codemods": [
|
|
60
|
+
{
|
|
61
|
+
"version": "0.10.0",
|
|
62
|
+
"id": "0.10.0/01_render-mode-client-to-spa",
|
|
63
|
+
"title": "renderMode is a closed set — `'client'` becomes `'spa'`",
|
|
64
|
+
"kind": "transform"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"version": "0.10.0",
|
|
68
|
+
"id": "0.10.0/02_router-state-carries-its-path",
|
|
69
|
+
"title": "`renderRouterStateScript` now requires the `path` it rendered",
|
|
70
|
+
"kind": "manual"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"version": "0.10.0",
|
|
74
|
+
"id": "0.10.0/03_workflow-caller-context-resolved",
|
|
75
|
+
"title": "workflow `buildContext` receives a RESOLVED caller context",
|
|
76
|
+
"kind": "manual"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"version": "0.10.0",
|
|
80
|
+
"id": "0.10.0/04_seed-run-status-skipped",
|
|
81
|
+
"title": "seed run status gained `skipped`",
|
|
82
|
+
"kind": "manual"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"version": "0.10.0",
|
|
86
|
+
"id": "0.10.0/05_subscription-idle-state",
|
|
87
|
+
"title": "`useSubscription` gained an idle state for `skip`",
|
|
88
|
+
"kind": "manual"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"version": "0.11.0",
|
|
92
|
+
"id": "0.11.0/01_step-options-type-params",
|
|
93
|
+
"title": "`StepOptions` takes the context type first",
|
|
94
|
+
"kind": "manual"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"version": "0.12.0",
|
|
98
|
+
"id": "0.12.0/01_outbound-http-ssrf-guard",
|
|
99
|
+
"title": "Outbound HttpClient blocks internal targets by default (add `http.allowHosts` if you call one)",
|
|
100
|
+
"kind": "manual"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"version": "0.12.0",
|
|
104
|
+
"id": "0.12.0/02_api-key-revoke-tenant-scope",
|
|
105
|
+
"title": "apiKeyService.revoke/rotate now require the caller's tenantId",
|
|
106
|
+
"kind": "manual"
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"version": "0.12.0",
|
|
110
|
+
"id": "0.12.0/03_api-key-on-behalf-of",
|
|
111
|
+
"title": "API keys: createdBy is provenance, onBehalfOf is ownership",
|
|
112
|
+
"kind": "manual"
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"version": "0.12.0",
|
|
116
|
+
"id": "0.12.0/04_inspect-fail-closed",
|
|
117
|
+
"title": "The inspect surface requires VOLTRO_INSPECT_TOKEN (previously open when unset)",
|
|
118
|
+
"kind": "manual"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"version": "0.13.0",
|
|
122
|
+
"id": "0.13.0/01_bearer-gates-fail-closed",
|
|
123
|
+
"title": "checkBearer is fail-closed; scimPlugin refuses an empty token",
|
|
124
|
+
"kind": "manual"
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"version": "0.13.0",
|
|
128
|
+
"id": "0.13.0/02_storage-grants-owner-only",
|
|
129
|
+
"title": "storage.share / revoke / listGrants require ownership",
|
|
130
|
+
"kind": "manual"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"version": "0.13.0",
|
|
134
|
+
"id": "0.13.0/03_apply-plan-convergence-proof",
|
|
135
|
+
"title": "applyPlan requires a `replan` convergence proof",
|
|
136
|
+
"kind": "manual"
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"version": "0.14.0",
|
|
140
|
+
"id": "0.14.0/01_resolve-scopes-store",
|
|
141
|
+
"title": "auth.resolveScopes receives the app DataStore",
|
|
142
|
+
"kind": "manual"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"version": "0.14.0",
|
|
146
|
+
"id": "0.14.0/02_reactive-by-default",
|
|
147
|
+
"title": "Reactivity is the default; .reactive() is removed",
|
|
148
|
+
"kind": "transform"
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"version": "0.14.0",
|
|
152
|
+
"id": "0.14.0/03_pages-suffix",
|
|
153
|
+
"title": "Pages are declared with a .page.tsx suffix",
|
|
154
|
+
"kind": "transform"
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"version": "0.14.0",
|
|
158
|
+
"id": "0.14.0/04_file-taxonomy",
|
|
159
|
+
"title": "Web files declare their contract (*.component.tsx / *.hook.ts / *.types.ts)",
|
|
160
|
+
"kind": "transform"
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"version": "0.14.0",
|
|
164
|
+
"id": "0.14.0/05_typed-tracking",
|
|
165
|
+
"title": "Tracking catalogues are typed against the component props",
|
|
166
|
+
"kind": "manual"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"version": "0.14.0",
|
|
170
|
+
"id": "0.14.0/06_voltro-test-skips-e2e",
|
|
171
|
+
"title": "`voltro test` leaves `e2e/` to `voltro e2e`",
|
|
172
|
+
"kind": "manual"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"version": "0.14.0",
|
|
176
|
+
"id": "0.14.0/07_dev-remote-file-migrations",
|
|
177
|
+
"title": "voltro dev refuses unattended file migrations against a remote database",
|
|
178
|
+
"kind": "manual"
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
"version": "0.15.0",
|
|
182
|
+
"id": "0.15.0/01_undo-mistaken-taxonomy-renames",
|
|
183
|
+
"title": "Undo the two file renames 0.14.0 got wrong (framework primitives, side-effect modules)",
|
|
184
|
+
"kind": "transform"
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
"version": "0.15.0",
|
|
188
|
+
"id": "0.15.0/02_error-tag-in-protocol",
|
|
189
|
+
"title": "`errorTag` is imported from @voltro/protocol",
|
|
190
|
+
"kind": "transform"
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
"version": "0.17.0",
|
|
194
|
+
"id": "0.17.0/01_pages-are-directories",
|
|
195
|
+
"title": "A directory is a route segment; its route is page.tsx",
|
|
196
|
+
"kind": "transform"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"version": "0.18.0",
|
|
200
|
+
"id": "0.18.0/01_where-like-removed",
|
|
201
|
+
"title": "the `'like'` where-operator is removed — pick `contains` or `startsWith`",
|
|
202
|
+
"kind": "manual"
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"version": "0.19.0",
|
|
206
|
+
"id": "0.19.0/01_server-only-gates-the-boot",
|
|
207
|
+
"title": "`.serverOnly()` now FAILS the boot under `voltro serve` — it used to only warn",
|
|
208
|
+
"kind": "manual"
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
"version": "0.19.0",
|
|
212
|
+
"id": "0.19.0/02_audit-redact-input-default",
|
|
213
|
+
"title": "`auditPlugin` now redacts mutation input by default (`redactInput: 'all'`)",
|
|
214
|
+
"kind": "manual"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"version": "0.20.0",
|
|
218
|
+
"id": "0.20.0/01_write-recorder-port",
|
|
219
|
+
"title": "`WriteRecorder` takes a port (`{ append, maxOf }`) instead of a bare `append`",
|
|
220
|
+
"kind": "manual"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
"version": "0.21.0",
|
|
224
|
+
"id": "0.21.0/01_maxlength-now-migrates",
|
|
225
|
+
"title": "`text().maxLength(n)` now migrates EXISTING columns — plan before you apply",
|
|
226
|
+
"kind": "manual"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"version": "0.22.0",
|
|
230
|
+
"id": "0.22.0/01_rename-index-op",
|
|
231
|
+
"title": "`MigrationOperation` gained a `rename-index` kind",
|
|
232
|
+
"kind": "manual"
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"version": "0.22.0",
|
|
236
|
+
"id": "0.22.0/02_plugin-tables-voltro-prefixed",
|
|
237
|
+
"title": "plugin-owned tables are `_voltro_`-prefixed (the rows move themselves)",
|
|
238
|
+
"kind": "manual"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"version": "0.22.0",
|
|
242
|
+
"id": "0.22.0/03_cache-scope-gained-tenant",
|
|
243
|
+
"title": "`cache.scope` gained 'tenant' — an exhaustive switch over it needs a branch",
|
|
244
|
+
"kind": "manual"
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
"version": "0.22.0",
|
|
248
|
+
"id": "0.22.0/04_inspect-write-credential",
|
|
249
|
+
"title": "Mutating `/_voltro/inspect/*` endpoints need VOLTRO_INSPECT_WRITE_TOKEN",
|
|
250
|
+
"kind": "manual"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"version": "0.23.0",
|
|
254
|
+
"id": "0.23.0/01_versioning-is-opt-out",
|
|
255
|
+
"title": "versioningPlugin: `tables: string[]` → opt-out by default, `include` / `exclude` by value",
|
|
256
|
+
"kind": "manual"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"version": "0.24.0",
|
|
260
|
+
"id": "0.24.0/01_agent-tables-voltro-prefixed",
|
|
261
|
+
"title": "the two agent tables are `_voltro_`-prefixed (the rows move themselves)",
|
|
262
|
+
"kind": "manual"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"version": "0.25.0",
|
|
266
|
+
"id": "0.25.0/01_events-emit-to-publish",
|
|
267
|
+
"title": "`ctx.events.emit(name, data)` → `ctx.events.publish(descriptor, key, payload)`",
|
|
268
|
+
"kind": "manual"
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"version": "0.25.0",
|
|
272
|
+
"id": "0.25.0/02_outgoing-event-to-define-event",
|
|
273
|
+
"title": "`defineOutgoingEvent` → `defineEvent({ …, webhook: { … } })`",
|
|
274
|
+
"kind": "transform"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"version": "0.25.0",
|
|
278
|
+
"id": "0.25.0/03_broadcast-channel-to-namespace",
|
|
279
|
+
"title": "`broadcast({ channel })` → `broadcast({ namespace })`",
|
|
280
|
+
"kind": "transform"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"version": "0.26.0",
|
|
284
|
+
"id": "0.26.0/01_event-webhook-retry-removed",
|
|
285
|
+
"title": "`defineEvent({ webhook: { retry } })` is gone — it never did anything",
|
|
286
|
+
"kind": "manual"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"version": "0.26.0",
|
|
290
|
+
"id": "0.26.0/02_step-retry-enforced",
|
|
291
|
+
"title": "workflow step `retry:` is now ENFORCED (was metadata) — drop any redundant manual retry",
|
|
292
|
+
"kind": "manual"
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"version": "0.28.0",
|
|
296
|
+
"id": "0.28.0/01_notifications-resolve-subject-id-async",
|
|
297
|
+
"title": "`makeSubjectId` returns a Promise; `resolveSubjectId` may be async",
|
|
298
|
+
"kind": "manual"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"version": "0.28.0",
|
|
302
|
+
"id": "0.28.0/02_plugin-ref-change-event",
|
|
303
|
+
"title": "`PluginRefChange` is removed — the change channel's `ChangeEvent` is the one shape",
|
|
304
|
+
"kind": "manual"
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
"version": "0.28.0",
|
|
308
|
+
"id": "0.28.0/03_atlassian-credentials-context",
|
|
309
|
+
"title": "`credentialsResolver` receives `{ subject, store }` instead of a bare Subject",
|
|
310
|
+
"kind": "manual"
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
"version": "0.28.0",
|
|
314
|
+
"id": "0.28.0/04_audit-redacts-subject-metadata",
|
|
315
|
+
"title": "`auditPlugin` redacts `subject.metadata` by default",
|
|
316
|
+
"kind": "manual"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"version": "0.29.0",
|
|
320
|
+
"id": "0.29.0/01_loader-data-absence",
|
|
321
|
+
"title": "`useLoaderData()` throws at a level that declares no `loader`",
|
|
322
|
+
"kind": "manual"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"version": "0.3.0",
|
|
326
|
+
"id": "0.3.0/01_prod-serve-requires-build",
|
|
327
|
+
"title": "Production `voltro serve` requires a precompiled bundle (build before serve)",
|
|
328
|
+
"kind": "manual"
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"version": "0.30.0",
|
|
332
|
+
"id": "0.30.0/01_locale-cookie-rename",
|
|
333
|
+
"title": "the language-preference cookie is `voltro:locale` (was `voltro:lang`)",
|
|
334
|
+
"kind": "transform"
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"version": "0.30.0",
|
|
338
|
+
"id": "0.30.0/02_audit-purge-query-recheck",
|
|
339
|
+
"title": "re-run the credential-purge query — the 0.28.0 spelling under-reported on MySQL/MariaDB",
|
|
340
|
+
"kind": "manual"
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"version": "0.30.0",
|
|
344
|
+
"id": "0.30.0/03_webhook-emit-durable-deferral",
|
|
345
|
+
"title": "a deferred `webhooks.emit` rides the transactional outbox; `{ immediate: true }` opts out",
|
|
346
|
+
"kind": "manual"
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"version": "0.30.0",
|
|
350
|
+
"id": "0.30.0/04_workflow-run-handle-nullable-execution",
|
|
351
|
+
"title": "`WorkflowRunHandle.executionId` is `string | null`; `status` gains queued/dropped/skipped",
|
|
352
|
+
"kind": "manual"
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"version": "0.31.0",
|
|
356
|
+
"id": "0.31.0/01_rerun-credential-scan",
|
|
357
|
+
"title": "re-run `voltro db scan-credentials` — on 0.30.0–0.30.2 it skipped the column credentials land in",
|
|
358
|
+
"kind": "manual"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"version": "0.32.0",
|
|
362
|
+
"id": "0.32.0/01_audit-redacts-outcome",
|
|
363
|
+
"title": "`auditPlugin` now redacts `outcome` by default — opt out if your trail reads it",
|
|
364
|
+
"kind": "manual"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"version": "0.4.0",
|
|
368
|
+
"id": "0.4.0/01_rbac-forbidden-to-scopeerror",
|
|
369
|
+
"title": "@voltro/plugin-rbac: `Forbidden` → protocol `ScopeError` (one denial tag)",
|
|
370
|
+
"kind": "transform"
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
"version": "0.4.0",
|
|
374
|
+
"id": "0.4.0/02_rbac-web-to-client-permissions",
|
|
375
|
+
"title": "@voltro/plugin-rbac/web removed — the UI gate lives in @voltro/client",
|
|
376
|
+
"kind": "transform"
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"version": "0.5.0",
|
|
380
|
+
"id": "0.5.0/01_one-terminal-exactly-one",
|
|
381
|
+
"title": ".one() now fails on MORE than one row; NoRowFound is a declarable typed error",
|
|
382
|
+
"kind": "manual"
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"version": "0.5.0",
|
|
386
|
+
"id": "0.5.0/02_typed-store-rows",
|
|
387
|
+
"title": "store.query() now returns the row type — casts on row fields may stop compiling",
|
|
388
|
+
"kind": "manual"
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"version": "0.6.0",
|
|
392
|
+
"id": "0.6.0/01_no-dev-session-secret",
|
|
393
|
+
"title": "The built-in dev session secret is removed; VOLTRO_SESSION_SECRET is required",
|
|
394
|
+
"kind": "manual"
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"version": "0.6.0",
|
|
398
|
+
"id": "0.6.0/02_subscription-state-union",
|
|
399
|
+
"title": "SubscriptionState is a discriminated union — `loading` now narrows `data`",
|
|
400
|
+
"kind": "manual"
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"version": "0.6.0",
|
|
404
|
+
"id": "0.6.0/03_billing-on-stripe-sdk",
|
|
405
|
+
"title": "Billing moved onto the Stripe SDK; proration + dunning are now Stripe’s",
|
|
406
|
+
"kind": "manual"
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"version": "0.6.0",
|
|
410
|
+
"id": "0.6.0/04_relation-key-validation",
|
|
411
|
+
"title": "relation key options are validated at boot; `one` now fails on more than one match",
|
|
412
|
+
"kind": "manual"
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"version": "0.6.0",
|
|
416
|
+
"id": "0.6.0/05_atlassian-avatar-mode",
|
|
417
|
+
"title": "atlassianPlugin's `avatar` config requires an explicit `mode: 'service' | 'perUser'`",
|
|
418
|
+
"kind": "transform"
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"version": "0.6.0",
|
|
422
|
+
"id": "0.6.0/06_ui-strings-connect-account",
|
|
423
|
+
"title": "UiStrings gained a required `connectAccount` section",
|
|
424
|
+
"kind": "manual"
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"version": "0.7.0",
|
|
428
|
+
"id": "0.7.0/01_row-filter-load-failure",
|
|
429
|
+
"title": "A row filter that fails to load now errors instead of returning zero rows",
|
|
430
|
+
"kind": "manual"
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
"version": "0.7.0",
|
|
434
|
+
"id": "0.7.0/02_testing-invoke-effect-handlers",
|
|
435
|
+
"title": "@voltro/testing: invoke() runs Effect handlers; executor types widened",
|
|
436
|
+
"kind": "manual"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"version": "0.8.0",
|
|
440
|
+
"id": "0.8.0/01_optional-password-hash",
|
|
441
|
+
"title": "`UserRecord.passwordHash` is optional — password-less identities are now first-class",
|
|
442
|
+
"kind": "manual"
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"version": "0.8.0",
|
|
446
|
+
"id": "0.8.0/02_ssr-streams-and-loaderdata",
|
|
447
|
+
"title": "`ssr` pages stream; `useLoaderData<T>()` returns `LoaderData<T>`",
|
|
448
|
+
"kind": "manual"
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"version": "0.9.0",
|
|
452
|
+
"id": "0.9.0/01_ssr-layout-shell-for-spa",
|
|
453
|
+
"title": "A `renderMode:'spa'` page under a layout now server-renders that layout",
|
|
454
|
+
"kind": "manual"
|
|
455
|
+
}
|
|
456
|
+
]
|
|
457
|
+
},
|
|
58
458
|
"engines": {
|
|
59
459
|
"node": ">=24.0.0"
|
|
60
460
|
},
|
|
@@ -62,22 +462,22 @@
|
|
|
62
462
|
"@effect/platform-node": "^0.108.0",
|
|
63
463
|
"@effect/sql": "^0.52.0",
|
|
64
464
|
"@effect/workflow": "^0.19.0",
|
|
65
|
-
"@voltro/ai": "0.
|
|
66
|
-
"@voltro/cache": "0.
|
|
67
|
-
"@voltro/data-transfer": "0.
|
|
68
|
-
"@voltro/database": "0.
|
|
69
|
-
"@voltro/env": "0.
|
|
70
|
-
"@voltro/kv": "0.
|
|
71
|
-
"@voltro/logger": "0.
|
|
72
|
-
"@voltro/plugin-auth": "0.
|
|
73
|
-
"@voltro/plugin-broadcast": "0.
|
|
74
|
-
"@voltro/plugin-mail": "0.
|
|
75
|
-
"@voltro/plugin-storage": "0.
|
|
76
|
-
"@voltro/plugin-webhooks": "0.
|
|
77
|
-
"@voltro/protocol": "0.
|
|
78
|
-
"@voltro/runtime": "0.
|
|
79
|
-
"@voltro/serverless": "0.
|
|
80
|
-
"@voltro/workflow": "0.
|
|
465
|
+
"@voltro/ai": "0.32.0",
|
|
466
|
+
"@voltro/cache": "0.32.0",
|
|
467
|
+
"@voltro/data-transfer": "0.32.0",
|
|
468
|
+
"@voltro/database": "0.32.0",
|
|
469
|
+
"@voltro/env": "0.32.0",
|
|
470
|
+
"@voltro/kv": "0.32.0",
|
|
471
|
+
"@voltro/logger": "0.32.0",
|
|
472
|
+
"@voltro/plugin-auth": "0.32.0",
|
|
473
|
+
"@voltro/plugin-broadcast": "0.32.0",
|
|
474
|
+
"@voltro/plugin-mail": "0.32.0",
|
|
475
|
+
"@voltro/plugin-storage": "0.32.0",
|
|
476
|
+
"@voltro/plugin-webhooks": "0.32.0",
|
|
477
|
+
"@voltro/protocol": "0.32.0",
|
|
478
|
+
"@voltro/runtime": "0.32.0",
|
|
479
|
+
"@voltro/serverless": "0.32.0",
|
|
480
|
+
"@voltro/workflow": "0.32.0",
|
|
81
481
|
"chokidar": "^5.0.0",
|
|
82
482
|
"ioredis": "^5.11.1",
|
|
83
483
|
"tinyglobby": "^0.2.17",
|
package/templates/AGENTS.md
CHANGED
|
@@ -652,7 +652,7 @@ each plugin's own README.
|
|
|
652
652
|
|
|
653
653
|
| Topic | Open | Summary |
|
|
654
654
|
|---|---|---|
|
|
655
|
-
| **What's new in 0.
|
|
655
|
+
| **What's new in 0.32.0** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
|
|
656
656
|
| AI | `node_modules/@voltro/cli/templates/agent-docs/ai.md` | How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework. |
|
|
657
657
|
| Authentication | `node_modules/@voltro/cli/templates/agent-docs/authentication.md` | How @voltro/plugin-auth wires password + session-cookie auth across api + web, plus the pluggable identity-strategy protocol. |
|
|
658
658
|
| Caching | `node_modules/@voltro/cli/templates/agent-docs/caching.md` | Voltro's caching layer (@voltro/cache) — an always-on memory default, swappable Redis-compatible backends, a low-level wrap primitive, and automatic query-result invalidation. |
|
|
@@ -695,48 +695,48 @@ each plugin's own README.
|
|
|
695
695
|
|
|
696
696
|
| Plugin | Open | Summary |
|
|
697
697
|
|---|---|---|
|
|
698
|
-
| ai-flows | `node_modules/@voltro/plugin-ai-flows/README.md` | Durable multi-step AI pipelines — deterministic or agentic, with human-in-the-loop, chaining, and cadence. Author flows in code (defineFlow) or as data (visual-editor rows); one engine runs both. |
|
|
699
|
-
| analytics-postgres | `node_modules/@voltro/plugin-analytics-postgres/README.md` | First-party lite AnalyticsSink — stores events in the main DataStore, cross-dialect, zero external infra. ~10M events/day ceiling. |
|
|
700
|
-
| atlassian | `node_modules/@voltro/plugin-atlassian/README.md` | JiraService + ConfluenceService over the Atlassian REST / Greenhopper / Agile APIs, with a per-subject PAT resolver, transient retry, SSRF guard, an avatar proxy, and per-tenant caching. |
|
|
701
|
-
| audit | `node_modules/@voltro/plugin-audit/README.md` | Mutation audit log — sinks (console/memory/custom), include/exclude filters, the audit() mixin, testing with the memory buffer. |
|
|
702
|
-
| auth | `node_modules/@voltro/plugin-auth/README.md` | Password + session-cookie auth — overview. Full docs in the Authentication section. |
|
|
703
|
-
| auth-auth0 | `node_modules/@voltro/plugin-auth-auth0/README.md` | Auth0 AuthStrategy — verifies Auth0-issued JWTs via the tenant's JWKS (no client secret) and maps a namespaced custom claim → tenantId. |
|
|
704
|
-
| auth-clerk | `node_modules/@voltro/plugin-auth-clerk/README.md` | Clerk AuthStrategy — verifies Clerk-issued __session JWTs via the Frontend API JWKS (no secret key) and maps org_id → tenantId. |
|
|
705
|
-
| auth-kinde | `node_modules/@voltro/plugin-auth-kinde/README.md` | Kinde AuthStrategy — verifies Kinde-issued JWTs via JWKS at the configured issuer (no client secret) and maps org_code → tenantId. |
|
|
706
|
-
| auth-oidc | `node_modules/@voltro/plugin-auth-oidc/README.md` | Generic OIDC AuthStrategy — verifies any OpenID-Connect IdP's JWTs via JWKS (Okta, Keycloak, Cognito, Azure AD, Google Workspace). Discovery or explicit JWKS URL; maps a claim → tenantId. |
|
|
707
|
-
| auth-supabase | `node_modules/@voltro/plugin-auth-supabase/README.md` | Supabase Auth (GoTrue) AuthStrategy — verifies Supabase-issued JWTs via the project's JWKS and maps app_metadata.tenant_id → tenantId. |
|
|
708
|
-
| auth-workos | `node_modules/@voltro/plugin-auth-workos/README.md` | WorkOS AuthStrategy — verifies WorkOS AuthKit / SSO JWTs via JWKS (no API key) and maps org_id → tenantId. |
|
|
709
|
-
| billing | `node_modules/@voltro/plugin-billing/README.md` | Subscriptions, plans, entitlements, and usage metering over a pluggable provider (Stripe + mock). Money is integer minor units. |
|
|
710
|
-
| broadcast | `node_modules/@voltro/plugin-broadcast/README.md` | Cross-replica reactivity over a pub/sub bus (Redis / NATS) for non-postgres dialects — closes the single-instance gap so a write on one pod surfaces on another. |
|
|
711
|
-
| cdc-out | `node_modules/@voltro/plugin-cdc-out/README.md` | Declaratively mirror table changes outward to external sinks (webhook / Kafka / Snowflake / BigQuery) through a durable outbox — ordered per pipe, at-least-once from enqueue, retried with backoff, dead-lettered. |
|
|
712
|
-
| clickhouse | `node_modules/@voltro/plugin-clickhouse/README.md` | Production-grade OLAP AnalyticsSink over ClickHouse — self-hosted or ClickHouse Cloud — for billions of events with millisecond aggregates. |
|
|
713
|
-
| datadog | `node_modules/@voltro/plugin-datadog/README.md` | Agentless Datadog metrics exporter — pushes the unified Metrics-API to Datadog's /api/v2/series HTTP intake. |
|
|
714
|
-
| deactivation | `node_modules/@voltro/plugin-deactivation/README.md` | A schema mixin that marks a subject as deactivated (can't log in) while keeping its data fully visible — the deliberate opposite of soft-delete. |
|
|
715
|
-
| duckdb | `node_modules/@voltro/plugin-duckdb/README.md` | Embedded DuckDB AnalyticsSink — real column-store OLAP in-process, no external service to run. |
|
|
716
|
-
| flags | `node_modules/@voltro/plugin-flags/README.md` | Feature flags — per-subject / per-tenant targeting, deterministic % rollouts, kill-switch, declarative rpc gating + client UI gating. |
|
|
717
|
-
| governance | `node_modules/@voltro/plugin-governance/README.md` | Data governance — retention TTL sweep, GDPR export + erasure, consent ledger, and field-level encryption for .encrypted() columns. Builds on audit + soft-delete. |
|
|
718
|
-
| licensing | `node_modules/@voltro/plugin-licensing/README.md` | Offline-verified EdDSA license keys + cloud-issued entitlement snapshots that feed plugin-billing; pricing decided server-side, never baked into a published version. |
|
|
719
|
-
| logship | `node_modules/@voltro/plugin-logship/README.md` | Ship structured logs to Better Stack / Axiom / Loki / any HTTP sink — batched, redacted, fail-soft. Rides the framework log-sink hook. |
|
|
720
|
-
| mail | `node_modules/@voltro/plugin-mail/README.md` | Transactional email — Resend / Postmark / SendGrid / SMTP, React-Email templates with auto-discovery, per-tenant suppression, bounce/complaint handling, durable delivery via workflows. |
|
|
721
|
-
| moderation | `node_modules/@voltro/plugin-moderation/README.md` | Moderate user content before it commits — keyword denylist or AI provider, block or flag via rpc interceptor, plus an in-handler redact helper. |
|
|
722
|
-
| multitenancy | `node_modules/@voltro/plugin-multitenancy/README.md` | The tenant() schema mixin (auto-scope reads + auto-fill writes), the assertOwnTenant write-guard, and the typed TenantMismatch error. |
|
|
723
|
-
| notifications | `node_modules/@voltro/plugin-notifications/README.md` | Unified notifications — one send API across email / Slack / SMS / push / in-app, with per-user channel preferences, an in-app inbox, and delivery records. |
|
|
724
|
-
| openapi | `node_modules/@voltro/plugin-openapi/README.md` | Generate an OpenAPI 3.1 spec + Swagger-UI docs from your defineRestRoute descriptors and (opt-in) your rpc procedures. Your routes ARE the API docs — nothing hand-maintained. |
|
|
725
|
-
| postgis | `node_modules/@voltro/plugin-postgis/README.md` | Postgres-native geography / geometry columns, geometry constructors (point/line/polygon/multi/GeoJSON), spatial predicates (ST_DWithin, ST_Within, ST_Contains, ST_Intersects, ST_Buffer, bbox &&), ST_Distance projection + <-> KNN ordering, and GiST indexes via expressionIndex. Postgres-only by design. |
|
|
726
|
-
| posthog | `node_modules/@voltro/plugin-posthog/README.md` | Track-only AnalyticsSink that forwards events to PostHog's /capture endpoint — compose it with a second sink that owns reads. |
|
|
727
|
-
| presence | `node_modules/@voltro/plugin-presence/README.md` | Ephemeral realtime presence — who's online in a channel, with heartbeat, live roster, and per-member metadata (status, cursor). Works cross-instance. |
|
|
728
|
-
| prometheus | `node_modules/@voltro/plugin-prometheus/README.md` | Prometheus exporter — scrapes the unified Metrics-API at GET /metrics in text exposition format. |
|
|
729
|
-
| ratelimit | `node_modules/@voltro/plugin-ratelimit/README.md` | Per-endpoint, per-subject and per-tenant request limits via the rpc interceptors. Sliding-window / fixed-window / token-bucket, memory / postgres / redis stores. |
|
|
730
|
-
| rbac | `node_modules/@voltro/plugin-rbac/README.md` | Roles + permissions + the permission() handler guard. Roles compile to scopes. |
|
|
731
|
-
| scim | `node_modules/@voltro/plugin-scim/README.md` | SCIM 2.0 provisioning — Users + Groups REST endpoints so an enterprise IdP (Okta, Entra, OneLogin) can create / update / deactivate users in your app. |
|
|
732
|
-
| search | `node_modules/@voltro/plugin-search/README.md` | Keep an external search index (Typesense / Meilisearch / Algolia) in sync with your tables via the ChangeEvent tap, query it tenant-scoped through a typed action + hook. |
|
|
733
|
-
| sentry | `node_modules/@voltro/plugin-sentry/README.md` | Deep Sentry integration — errors correlated to the distributed trace, breadcrumbs from the log sink, and opt-in performance traces. |
|
|
734
|
-
| soft-delete | `node_modules/@voltro/plugin-soft-delete/README.md` | The softDelete() schema mixin — deletedAt / deletedBy columns, delete() redirected to an UPDATE, default reads filtered, hardDelete() bypass. |
|
|
735
|
-
| sso-saml | `node_modules/@voltro/plugin-sso-saml/README.md` | Enterprise SAML 2.0 SSO — SP-initiated login, ACS assertion consumer, SP metadata. Signature verification via @node-saml/node-saml; framework session minting built in. |
|
|
736
|
-
| storage | `node_modules/@voltro/plugin-storage/README.md` | File storage behind one StorageService — public objects served direct from the bucket/CDN, private objects gated by an access policy + per-object grants. S3 / R2 / GCS / MinIO / filesystem / memory providers, presigned URLs, a dashboard browser. |
|
|
737
|
-
| tinybird | `node_modules/@voltro/plugin-tinybird/README.md` | Hosted-ClickHouse AnalyticsSink over Tinybird's Events API + Pipes — pay-as-you-go OLAP without operating a cluster. |
|
|
738
|
-
| versioning | `node_modules/@voltro/plugin-versioning/README.md` | Full row history + time-travel. audit() records who/when; versioning records what-changed-to-what — a value snapshot of every row on every write, with as-of queries. |
|
|
739
|
-
| webhooks | `node_modules/@voltro/plugin-webhooks/README.md` | First-class outgoing + incoming webhooks — declared events with a webhook: block, defineIncomingWebhook in *.webhook.tsx files, runtime subscriptions, durable delivery via @effect/workflow, HMAC signing, provider presets, and idempotency. |
|
|
698
|
+
| ai-flows | `node_modules/@voltro/cli/templates/agent-docs/plugins/ai-flows.md` (or `node_modules/@voltro/plugin-ai-flows/README.md`) | Durable multi-step AI pipelines — deterministic or agentic, with human-in-the-loop, chaining, and cadence. Author flows in code (defineFlow) or as data (visual-editor rows); one engine runs both. |
|
|
699
|
+
| analytics-postgres | `node_modules/@voltro/cli/templates/agent-docs/plugins/analytics-postgres.md` (or `node_modules/@voltro/plugin-analytics-postgres/README.md`) | First-party lite AnalyticsSink — stores events in the main DataStore, cross-dialect, zero external infra. ~10M events/day ceiling. |
|
|
700
|
+
| atlassian | `node_modules/@voltro/cli/templates/agent-docs/plugins/atlassian.md` (or `node_modules/@voltro/plugin-atlassian/README.md`) | JiraService + ConfluenceService over the Atlassian REST / Greenhopper / Agile APIs, with a per-subject PAT resolver, transient retry, SSRF guard, an avatar proxy, and per-tenant caching. |
|
|
701
|
+
| audit | `node_modules/@voltro/cli/templates/agent-docs/plugins/audit.md` (or `node_modules/@voltro/plugin-audit/README.md`) | Mutation audit log — sinks (console/memory/custom), include/exclude filters, the audit() mixin, testing with the memory buffer. |
|
|
702
|
+
| auth | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth.md` (or `node_modules/@voltro/plugin-auth/README.md`) | Password + session-cookie auth — overview. Full docs in the Authentication section. |
|
|
703
|
+
| auth-auth0 | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-auth0.md` (or `node_modules/@voltro/plugin-auth-auth0/README.md`) | Auth0 AuthStrategy — verifies Auth0-issued JWTs via the tenant's JWKS (no client secret) and maps a namespaced custom claim → tenantId. |
|
|
704
|
+
| auth-clerk | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-clerk.md` (or `node_modules/@voltro/plugin-auth-clerk/README.md`) | Clerk AuthStrategy — verifies Clerk-issued __session JWTs via the Frontend API JWKS (no secret key) and maps org_id → tenantId. |
|
|
705
|
+
| auth-kinde | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-kinde.md` (or `node_modules/@voltro/plugin-auth-kinde/README.md`) | Kinde AuthStrategy — verifies Kinde-issued JWTs via JWKS at the configured issuer (no client secret) and maps org_code → tenantId. |
|
|
706
|
+
| auth-oidc | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-oidc.md` (or `node_modules/@voltro/plugin-auth-oidc/README.md`) | Generic OIDC AuthStrategy — verifies any OpenID-Connect IdP's JWTs via JWKS (Okta, Keycloak, Cognito, Azure AD, Google Workspace). Discovery or explicit JWKS URL; maps a claim → tenantId. |
|
|
707
|
+
| auth-supabase | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-supabase.md` (or `node_modules/@voltro/plugin-auth-supabase/README.md`) | Supabase Auth (GoTrue) AuthStrategy — verifies Supabase-issued JWTs via the project's JWKS and maps app_metadata.tenant_id → tenantId. |
|
|
708
|
+
| auth-workos | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-workos.md` (or `node_modules/@voltro/plugin-auth-workos/README.md`) | WorkOS AuthStrategy — verifies WorkOS AuthKit / SSO JWTs via JWKS (no API key) and maps org_id → tenantId. |
|
|
709
|
+
| billing | `node_modules/@voltro/cli/templates/agent-docs/plugins/billing.md` (or `node_modules/@voltro/plugin-billing/README.md`) | Subscriptions, plans, entitlements, and usage metering over a pluggable provider (Stripe + mock). Money is integer minor units. |
|
|
710
|
+
| broadcast | `node_modules/@voltro/cli/templates/agent-docs/plugins/broadcast.md` (or `node_modules/@voltro/plugin-broadcast/README.md`) | Cross-replica reactivity over a pub/sub bus (Redis / NATS) for non-postgres dialects — closes the single-instance gap so a write on one pod surfaces on another. |
|
|
711
|
+
| cdc-out | `node_modules/@voltro/cli/templates/agent-docs/plugins/cdc-out.md` (or `node_modules/@voltro/plugin-cdc-out/README.md`) | Declaratively mirror table changes outward to external sinks (webhook / Kafka / Snowflake / BigQuery) through a durable outbox — ordered per pipe, at-least-once from enqueue, retried with backoff, dead-lettered. |
|
|
712
|
+
| clickhouse | `node_modules/@voltro/cli/templates/agent-docs/plugins/clickhouse.md` (or `node_modules/@voltro/plugin-clickhouse/README.md`) | Production-grade OLAP AnalyticsSink over ClickHouse — self-hosted or ClickHouse Cloud — for billions of events with millisecond aggregates. |
|
|
713
|
+
| datadog | `node_modules/@voltro/cli/templates/agent-docs/plugins/datadog.md` (or `node_modules/@voltro/plugin-datadog/README.md`) | Agentless Datadog metrics exporter — pushes the unified Metrics-API to Datadog's /api/v2/series HTTP intake. |
|
|
714
|
+
| deactivation | `node_modules/@voltro/cli/templates/agent-docs/plugins/deactivation.md` (or `node_modules/@voltro/plugin-deactivation/README.md`) | A schema mixin that marks a subject as deactivated (can't log in) while keeping its data fully visible — the deliberate opposite of soft-delete. |
|
|
715
|
+
| duckdb | `node_modules/@voltro/cli/templates/agent-docs/plugins/duckdb.md` (or `node_modules/@voltro/plugin-duckdb/README.md`) | Embedded DuckDB AnalyticsSink — real column-store OLAP in-process, no external service to run. |
|
|
716
|
+
| flags | `node_modules/@voltro/cli/templates/agent-docs/plugins/flags.md` (or `node_modules/@voltro/plugin-flags/README.md`) | Feature flags — per-subject / per-tenant targeting, deterministic % rollouts, kill-switch, declarative rpc gating + client UI gating. |
|
|
717
|
+
| governance | `node_modules/@voltro/cli/templates/agent-docs/plugins/governance.md` (or `node_modules/@voltro/plugin-governance/README.md`) | Data governance — retention TTL sweep, GDPR export + erasure, consent ledger, and field-level encryption for .encrypted() columns. Builds on audit + soft-delete. |
|
|
718
|
+
| licensing | `node_modules/@voltro/cli/templates/agent-docs/plugins/licensing.md` (or `node_modules/@voltro/plugin-licensing/README.md`) | Offline-verified EdDSA license keys + cloud-issued entitlement snapshots that feed plugin-billing; pricing decided server-side, never baked into a published version. |
|
|
719
|
+
| logship | `node_modules/@voltro/cli/templates/agent-docs/plugins/logship.md` (or `node_modules/@voltro/plugin-logship/README.md`) | Ship structured logs to Better Stack / Axiom / Loki / any HTTP sink — batched, redacted, fail-soft. Rides the framework log-sink hook. |
|
|
720
|
+
| mail | `node_modules/@voltro/cli/templates/agent-docs/plugins/mail.md` (or `node_modules/@voltro/plugin-mail/README.md`) | Transactional email — Resend / Postmark / SendGrid / SMTP, React-Email templates with auto-discovery, per-tenant suppression, bounce/complaint handling, durable delivery via workflows. |
|
|
721
|
+
| moderation | `node_modules/@voltro/cli/templates/agent-docs/plugins/moderation.md` (or `node_modules/@voltro/plugin-moderation/README.md`) | Moderate user content before it commits — keyword denylist or AI provider, block or flag via rpc interceptor, plus an in-handler redact helper. |
|
|
722
|
+
| multitenancy | `node_modules/@voltro/cli/templates/agent-docs/plugins/multitenancy.md` (or `node_modules/@voltro/plugin-multitenancy/README.md`) | The tenant() schema mixin (auto-scope reads + auto-fill writes), the assertOwnTenant write-guard, and the typed TenantMismatch error. |
|
|
723
|
+
| notifications | `node_modules/@voltro/cli/templates/agent-docs/plugins/notifications.md` (or `node_modules/@voltro/plugin-notifications/README.md`) | Unified notifications — one send API across email / Slack / SMS / push / in-app, with per-user channel preferences, an in-app inbox, and delivery records. |
|
|
724
|
+
| openapi | `node_modules/@voltro/cli/templates/agent-docs/plugins/openapi.md` (or `node_modules/@voltro/plugin-openapi/README.md`) | Generate an OpenAPI 3.1 spec + Swagger-UI docs from your defineRestRoute descriptors and (opt-in) your rpc procedures. Your routes ARE the API docs — nothing hand-maintained. |
|
|
725
|
+
| postgis | `node_modules/@voltro/cli/templates/agent-docs/plugins/postgis.md` (or `node_modules/@voltro/plugin-postgis/README.md`) | Postgres-native geography / geometry columns, geometry constructors (point/line/polygon/multi/GeoJSON), spatial predicates (ST_DWithin, ST_Within, ST_Contains, ST_Intersects, ST_Buffer, bbox &&), ST_Distance projection + <-> KNN ordering, and GiST indexes via expressionIndex. Postgres-only by design. |
|
|
726
|
+
| posthog | `node_modules/@voltro/cli/templates/agent-docs/plugins/posthog.md` (or `node_modules/@voltro/plugin-posthog/README.md`) | Track-only AnalyticsSink that forwards events to PostHog's /capture endpoint — compose it with a second sink that owns reads. |
|
|
727
|
+
| presence | `node_modules/@voltro/cli/templates/agent-docs/plugins/presence.md` (or `node_modules/@voltro/plugin-presence/README.md`) | Ephemeral realtime presence — who's online in a channel, with heartbeat, live roster, and per-member metadata (status, cursor). Works cross-instance. |
|
|
728
|
+
| prometheus | `node_modules/@voltro/cli/templates/agent-docs/plugins/prometheus.md` (or `node_modules/@voltro/plugin-prometheus/README.md`) | Prometheus exporter — scrapes the unified Metrics-API at GET /metrics in text exposition format. |
|
|
729
|
+
| ratelimit | `node_modules/@voltro/cli/templates/agent-docs/plugins/ratelimit.md` (or `node_modules/@voltro/plugin-ratelimit/README.md`) | Per-endpoint, per-subject and per-tenant request limits via the rpc interceptors. Sliding-window / fixed-window / token-bucket, memory / postgres / redis stores. |
|
|
730
|
+
| rbac | `node_modules/@voltro/cli/templates/agent-docs/plugins/rbac.md` (or `node_modules/@voltro/plugin-rbac/README.md`) | Roles + permissions + the permission() handler guard. Roles compile to scopes. |
|
|
731
|
+
| scim | `node_modules/@voltro/cli/templates/agent-docs/plugins/scim.md` (or `node_modules/@voltro/plugin-scim/README.md`) | SCIM 2.0 provisioning — Users + Groups REST endpoints so an enterprise IdP (Okta, Entra, OneLogin) can create / update / deactivate users in your app. |
|
|
732
|
+
| search | `node_modules/@voltro/cli/templates/agent-docs/plugins/search.md` (or `node_modules/@voltro/plugin-search/README.md`) | Keep an external search index (Typesense / Meilisearch / Algolia) in sync with your tables via the ChangeEvent tap, query it tenant-scoped through a typed action + hook. |
|
|
733
|
+
| sentry | `node_modules/@voltro/cli/templates/agent-docs/plugins/sentry.md` (or `node_modules/@voltro/plugin-sentry/README.md`) | Deep Sentry integration — errors correlated to the distributed trace, breadcrumbs from the log sink, and opt-in performance traces. |
|
|
734
|
+
| soft-delete | `node_modules/@voltro/cli/templates/agent-docs/plugins/soft-delete.md` (or `node_modules/@voltro/plugin-soft-delete/README.md`) | The softDelete() schema mixin — deletedAt / deletedBy columns, delete() redirected to an UPDATE, default reads filtered, hardDelete() bypass. |
|
|
735
|
+
| sso-saml | `node_modules/@voltro/cli/templates/agent-docs/plugins/sso-saml.md` (or `node_modules/@voltro/plugin-sso-saml/README.md`) | Enterprise SAML 2.0 SSO — SP-initiated login, ACS assertion consumer, SP metadata. Signature verification via @node-saml/node-saml; framework session minting built in. |
|
|
736
|
+
| storage | `node_modules/@voltro/cli/templates/agent-docs/plugins/storage.md` (or `node_modules/@voltro/plugin-storage/README.md`) | File storage behind one StorageService — public objects served direct from the bucket/CDN, private objects gated by an access policy + per-object grants. S3 / R2 / GCS / MinIO / filesystem / memory providers, presigned URLs, a dashboard browser. |
|
|
737
|
+
| tinybird | `node_modules/@voltro/cli/templates/agent-docs/plugins/tinybird.md` (or `node_modules/@voltro/plugin-tinybird/README.md`) | Hosted-ClickHouse AnalyticsSink over Tinybird's Events API + Pipes — pay-as-you-go OLAP without operating a cluster. |
|
|
738
|
+
| versioning | `node_modules/@voltro/cli/templates/agent-docs/plugins/versioning.md` (or `node_modules/@voltro/plugin-versioning/README.md`) | Full row history + time-travel. audit() records who/when; versioning records what-changed-to-what — a value snapshot of every row on every write, with as-of queries. |
|
|
739
|
+
| webhooks | `node_modules/@voltro/cli/templates/agent-docs/plugins/webhooks.md` (or `node_modules/@voltro/plugin-webhooks/README.md`) | First-class outgoing + incoming webhooks — declared events with a webhook: block, defineIncomingWebhook in *.webhook.tsx files, runtime subscriptions, durable delivery via @effect/workflow, HMAC signing, provider presets, and idempotency. |
|
|
740
740
|
|
|
741
741
|
|
|
742
742
|
---
|