okengine 0.10.2 → 0.11.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.
Files changed (343) hide show
  1. package/package.json +76 -10
  2. package/site/content/docs/ai/mcp.mdx +0 -1
  3. package/site/content/docs/deployment/docker-swarm.mdx +48 -111
  4. package/site/content/docs/deployment/docker.mdx +43 -36
  5. package/site/content/docs/deployment/index.mdx +9 -9
  6. package/site/content/docs/deployment/kubernetes.mdx +4 -4
  7. package/site/content/docs/elements/ai.mdx +7 -13
  8. package/site/content/docs/elements/channel.mdx +9 -13
  9. package/site/content/docs/elements/clock.mdx +8 -14
  10. package/site/content/docs/elements/flow.mdx +46 -54
  11. package/site/content/docs/elements/gate.mdx +6 -11
  12. package/site/content/docs/elements/signal.mdx +2 -8
  13. package/site/content/docs/elements/store.mdx +79 -93
  14. package/site/content/docs/elements/vault.mdx +89 -76
  15. package/site/content/docs/get-started/basic-usage.mdx +8 -14
  16. package/site/content/docs/get-started/installation.mdx +36 -36
  17. package/site/content/docs/get-started/introduction.mdx +11 -0
  18. package/site/content/docs/get-started/why.mdx +3 -4
  19. package/site/content/docs/index.mdx +0 -1
  20. package/site/content/docs/meta.json +0 -1
  21. package/site/content/docs/plugins/anonymous.mdx +1 -1
  22. package/site/content/docs/plugins/magic-link.mdx +11 -11
  23. package/site/content/docs/plugins/otp.mdx +2 -2
  24. package/site/content/docs/plugins/passkey.mdx +1 -1
  25. package/site/content/docs/plugins/two-factor.mdx +1 -1
  26. package/site/content/docs/plugins/username.mdx +1 -1
  27. package/site/content/docs/recipes/caddy.mdx +1 -1
  28. package/site/content/docs/recipes/cockroachdb.mdx +2 -2
  29. package/site/content/docs/recipes/dragonfly.mdx +1 -1
  30. package/site/content/docs/recipes/index.mdx +1 -2
  31. package/site/content/docs/recipes/llama-cpp.mdx +21 -23
  32. package/site/content/docs/recipes/mailpit.mdx +11 -11
  33. package/site/content/docs/recipes/meilisearch.mdx +10 -10
  34. package/site/content/docs/recipes/meta.json +0 -1
  35. package/site/content/docs/recipes/ollama.mdx +1 -1
  36. package/site/content/docs/recipes/pgdog.mdx +12 -9
  37. package/site/content/docs/recipes/postgres.mdx +3 -3
  38. package/site/content/docs/recipes/redis.mdx +2 -2
  39. package/site/content/docs/recipes/rustfs.mdx +10 -7
  40. package/site/content/docs/recipes/sglang.mdx +1 -1
  41. package/site/content/docs/recipes/supabase-docker.mdx +1 -1
  42. package/site/content/docs/recipes/timescale.mdx +2 -2
  43. package/site/content/docs/recipes/valkey.mdx +1 -1
  44. package/site/content/docs/recipes/vllm.mdx +1 -1
  45. package/site/content/docs/recipes/yugabytedb.mdx +2 -2
  46. package/site/content/docs/reference/cli.md +61 -38
  47. package/site/content/docs/reference/configuration.mdx +145 -70
  48. package/site/content/docs/reference/environment-variables.mdx +36 -28
  49. package/site/content/docs/reference/errors.mdx +28 -29
  50. package/site/content/docs/reference/fx.mdx +14 -7
  51. package/site/content/docs/reference/i18n.mdx +17 -6
  52. package/site/content/docs/reference/index.mdx +5 -0
  53. package/site/content/docs/reference/meta.json +1 -0
  54. package/site/content/docs/reference/migrating-environments.mdx +158 -0
  55. package/site/content/docs/reference/plugins.mdx +2 -2
  56. package/src/auth/gate-auth.test.ts +12 -10
  57. package/src/cli/ai-setup/ai-setup.test.ts +30 -16
  58. package/src/cli/ai-setup/apply.ts +111 -15
  59. package/src/cli/ai-setup/catalog.ts +3 -3
  60. package/src/cli/ai-setup/index.ts +1 -1
  61. package/src/cli/ai-setup/prompts.ts +1 -1
  62. package/src/cli/ai-setup/recommend.test.ts +1 -1
  63. package/src/cli/ask-seed.test.ts +3 -3
  64. package/src/cli/build.ts +8 -9
  65. package/src/cli/db-auto-push.test.ts +6 -3
  66. package/src/cli/db-auto-push.ts +7 -5
  67. package/src/cli/db-seed.ts +7 -8
  68. package/src/cli/db.test.ts +70 -71
  69. package/src/cli/db.ts +86 -12
  70. package/src/cli/dev-controller.test.ts +35 -0
  71. package/src/cli/dev-controller.ts +298 -0
  72. package/src/cli/dev-controls.ts +11 -65
  73. package/src/cli/dev-db-push.test.ts +47 -15
  74. package/src/cli/dev-schema-sync.test.ts +11 -11
  75. package/src/cli/dev-schema-sync.ts +10 -10
  76. package/src/cli/dev-session-lock.test.ts +106 -0
  77. package/src/cli/dev-session-lock.ts +209 -0
  78. package/src/cli/dev.test.ts +246 -114
  79. package/src/cli/dev.ts +153 -205
  80. package/src/cli/doc-staleness.test.ts +3 -6
  81. package/src/cli/docker-clean.test.ts +33 -1
  82. package/src/cli/docker-clean.ts +28 -33
  83. package/src/cli/docker-cli.test.ts +12 -11
  84. package/src/cli/docker.ts +95 -20
  85. package/src/cli/doctor.test.ts +40 -0
  86. package/src/cli/doctor.ts +142 -9
  87. package/src/cli/drizzle-env.test.ts +11 -13
  88. package/src/cli/drizzle-env.ts +18 -11
  89. package/src/cli/ensure-drizzle-config.ts +11 -14
  90. package/src/cli/hero-meta.test.ts +15 -15
  91. package/src/cli/hero-meta.ts +10 -9
  92. package/src/cli/index.ts +36 -6
  93. package/src/cli/load-config.images.test.ts +44 -10
  94. package/src/cli/load-config.source.test.ts +50 -0
  95. package/src/cli/load-config.ts +35 -29
  96. package/src/cli/meilisearch-local.ts +1 -2
  97. package/src/cli/mode.ts +7 -58
  98. package/src/cli/registry.ts +175 -19
  99. package/src/cli/resolve-dev-sql-env.test.ts +8 -16
  100. package/src/cli/resolve-dev-sql-env.ts +13 -15
  101. package/src/cli/safe-defaults.test.ts +29 -11
  102. package/src/cli/schema.ts +65 -16
  103. package/src/cli/test.ts +58 -0
  104. package/src/cli/tui/App.tsx +252 -0
  105. package/src/cli/tui/DevLive.tsx +116 -0
  106. package/src/cli/tui/components/ConfirmDialog.tsx +48 -0
  107. package/src/cli/tui/components/HeaderBar.tsx +67 -0
  108. package/src/cli/tui/components/LogStream.tsx +47 -0
  109. package/src/cli/tui/components/PanelCard.tsx +39 -0
  110. package/src/cli/tui/components/SelectRow.tsx +37 -0
  111. package/src/cli/tui/components/SlashPalette.tsx +172 -0
  112. package/src/cli/tui/components/Spinner.tsx +32 -0
  113. package/src/cli/tui/components/StatusBar.tsx +51 -0
  114. package/src/cli/tui/components/StatusDot.tsx +37 -0
  115. package/src/cli/tui/components/TabBar.tsx +49 -0
  116. package/src/cli/tui/components/Wordmark.tsx +43 -0
  117. package/src/cli/tui/format.ts +38 -0
  118. package/src/cli/tui/keys.test.ts +18 -0
  119. package/src/cli/tui/keys.ts +26 -0
  120. package/src/cli/tui/launch.test.ts +18 -0
  121. package/src/cli/tui/launch.ts +57 -0
  122. package/src/cli/tui/panels/Dashboard.tsx +201 -0
  123. package/src/cli/tui/panels/Database.tsx +198 -0
  124. package/src/cli/tui/panels/Dev.tsx +257 -0
  125. package/src/cli/tui/panels/Docker.tsx +357 -0
  126. package/src/cli/tui/panels/Navigator.test.ts +22 -0
  127. package/src/cli/tui/panels/Navigator.tsx +213 -0
  128. package/src/cli/tui/slash-catalog.test.ts +31 -0
  129. package/src/cli/tui/slash-catalog.ts +184 -0
  130. package/src/cli/tui/slash-run.ts +54 -0
  131. package/src/cli/tui/state/ports.ts +95 -0
  132. package/src/cli/tui/theme.ts +24 -0
  133. package/src/cli/vault-cmd.test.ts +402 -0
  134. package/src/cli/vault-cmd.ts +727 -69
  135. package/src/cli/vault-secure-input.test.ts +56 -0
  136. package/src/cli/vault-secure-input.ts +124 -0
  137. package/src/compiler/effects-infer.ts +7 -0
  138. package/src/compiler/extract.ts +12 -0
  139. package/src/compiler/fixtures/skyport/oke.config.ts +7 -5
  140. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -1
  141. package/src/compiler/fixtures/skyport.expected.json +1 -1
  142. package/src/compiler/generate-adopt.ts +27 -1
  143. package/src/compiler-entry.ts +7 -0
  144. package/src/config/define-config.test.ts +111 -47
  145. package/src/config/driver-defaults.test.ts +115 -0
  146. package/src/config/driver-defaults.ts +156 -0
  147. package/src/config/index.ts +246 -131
  148. package/src/config/resolve-driver.test.ts +14 -19
  149. package/src/console/server/app.ts +4 -2
  150. package/src/console/server/console.test.ts +58 -1
  151. package/src/console/server/flows.ts +22 -2
  152. package/src/console/server/index.ts +3 -0
  153. package/src/console/server/operator-db.test.ts +55 -13
  154. package/src/console/server/operator-db.ts +305 -263
  155. package/src/console/server/serve.ts +16 -7
  156. package/src/console/server/state.ts +31 -9
  157. package/src/console/server/vault.test.ts +120 -5
  158. package/src/console/server/vault.ts +208 -12
  159. package/src/console/ui/dist/assets/{index-D-9KFce5.js → index--Y0Uaz-m.js} +2 -2
  160. package/src/console/ui/dist/assets/panel-vault-BkZdJPX8.js +1 -0
  161. package/src/console/ui/dist/assets/style-C3L349iZ.css +3 -0
  162. package/src/console/ui/dist/index.html +2 -2
  163. package/src/console/ui/shell/client.ts +16 -0
  164. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +54 -1
  165. package/src/console/ui/vault/VaultA11yView.tsx +33 -1
  166. package/src/console/ui/vault/backend.test.ts +75 -0
  167. package/src/console/ui/vault/backend.ts +117 -0
  168. package/src/console/ui/vault/fixture.ts +21 -2
  169. package/src/console/ui/vault/index.ts +11 -1
  170. package/src/console/ui/vault/types.ts +26 -0
  171. package/src/docker/compose.ts +164 -61
  172. package/src/docker/derive.ts +106 -12
  173. package/src/docker/docker.test.ts +156 -110
  174. package/src/docker/helpers.ts +98 -0
  175. package/src/docker/images-config.test.ts +163 -0
  176. package/src/docker/index.ts +30 -5
  177. package/src/docker/recipes/index.ts +0 -3
  178. package/src/docker/recipes/llama-cpp.ts +4 -4
  179. package/src/docker/recipes/pgdog.ts +9 -2
  180. package/src/docker/resources.test.ts +71 -0
  181. package/src/docker/resources.ts +176 -0
  182. package/src/docker/stack-id.test.ts +11 -4
  183. package/src/docker/stack-id.ts +42 -32
  184. package/src/docker/stack.integration.test.ts +4 -15
  185. package/src/docker/types.ts +35 -3
  186. package/src/drivers/ai-ollama.integration.test.ts +2 -2
  187. package/src/drivers/conformance.test.ts +11 -12
  188. package/src/drivers/drizzle-dialect.test.ts +0 -4
  189. package/src/drivers/drizzle-dialect.ts +7 -13
  190. package/src/drivers/index.ts +24 -7
  191. package/src/drivers/journal-postgres.test.ts +3 -1
  192. package/src/drivers/journal-postgres.ts +4 -2
  193. package/src/drivers/meilisearch.ts +1 -1
  194. package/src/drivers/pglite.ts +28 -5
  195. package/src/drivers/types.ts +9 -11
  196. package/src/drivers/vault-aws-secrets-manager.test.ts +159 -0
  197. package/src/drivers/vault-aws-secrets-manager.ts +333 -0
  198. package/src/drivers/vault-builtin.test.ts +110 -0
  199. package/src/drivers/vault-builtin.ts +184 -0
  200. package/src/drivers/vault-driver-removal.test.ts +13 -0
  201. package/src/drivers/vault-managed.test.ts +95 -0
  202. package/src/drivers/vault-managed.ts +101 -25
  203. package/src/drivers/vault-types.ts +25 -5
  204. package/src/elements/ai/runtime.ts +1 -1
  205. package/src/elements/clock/chaos.test.ts +4 -1
  206. package/src/elements/clock/durable.ts +57 -4
  207. package/src/elements/clock.test.ts +13 -14
  208. package/src/elements/gate/constants.ts +18 -0
  209. package/src/elements/gate.test.ts +1 -1
  210. package/src/elements/gate.ts +2 -2
  211. package/src/elements/store/domain-ddl.test.ts +5 -12
  212. package/src/elements/store/emit-drizzle.ts +44 -19
  213. package/src/elements/store/index-boot.test.ts +15 -116
  214. package/src/elements/store/load-plugin-tables.ts +1 -1
  215. package/src/elements/store/resource-list-docs.fixture.ts +12 -6
  216. package/src/elements/store/resource-list-docs.test.ts +64 -44
  217. package/src/elements/store/resource.test.ts +17 -10
  218. package/src/elements/store/runtime.ts +9 -12
  219. package/src/elements/store/schema-decl.test.ts +16 -32
  220. package/src/elements/store/seed.test.ts +1 -2
  221. package/src/elements/store/seed.ts +7 -8
  222. package/src/elements/store/sql-condition.test.ts +2 -2
  223. package/src/elements/store/sql-session.test.ts +8 -10
  224. package/src/elements/store/sql-session.ts +10 -2
  225. package/src/elements/store.test.ts +13 -13
  226. package/src/elements/vault/audit.ts +233 -0
  227. package/src/elements/vault/boot-chain.test.ts +78 -0
  228. package/src/elements/vault/boot-chain.ts +43 -39
  229. package/src/elements/vault/builtin-adapter.test.ts +479 -0
  230. package/src/elements/vault/builtin-adapter.ts +1184 -0
  231. package/src/elements/vault/crypto.test.ts +237 -0
  232. package/src/elements/vault/crypto.ts +431 -0
  233. package/src/elements/vault/declare.ts +164 -3
  234. package/src/elements/vault/errors.ts +56 -0
  235. package/src/elements/vault/kms-unseal.test.ts +76 -0
  236. package/src/elements/vault/kms-unseal.ts +181 -0
  237. package/src/elements/vault/path.ts +90 -0
  238. package/src/elements/vault/resilience.test.ts +102 -0
  239. package/src/elements/vault/resilience.ts +107 -0
  240. package/src/elements/vault/runtime.ts +36 -4
  241. package/src/elements/vault/security-checklist.test.ts +130 -0
  242. package/src/elements/vault/storage.ts +448 -0
  243. package/src/elements/vault/types.ts +288 -0
  244. package/src/elements/vault/unseal.ts +150 -0
  245. package/src/elements/vault.test.ts +72 -4
  246. package/src/elements/vault.ts +91 -2
  247. package/src/full.ts +248 -0
  248. package/src/http.ts +41 -0
  249. package/src/i18n/interpolate-simple.ts +37 -0
  250. package/src/i18n/messages.ts +51 -4
  251. package/src/i18n-entry.ts +7 -0
  252. package/src/index.ts +35 -145
  253. package/src/journal-entry.ts +20 -0
  254. package/src/kernel/adopt-barrel-fresh.test.ts +25 -10
  255. package/src/kernel/app.ts +40 -42
  256. package/src/kernel/auto-registry.test.ts +2 -2
  257. package/src/kernel/boot-bind/ai.test.ts +5 -5
  258. package/src/kernel/boot-bind/ai.ts +2 -1
  259. package/src/kernel/boot-bind/channel.test.ts +6 -6
  260. package/src/kernel/boot-bind/channel.ts +5 -4
  261. package/src/kernel/boot-bind/clock.ts +5 -5
  262. package/src/kernel/boot-bind/gate.ts +6 -7
  263. package/src/kernel/boot-bind/honor-config.test.ts +42 -42
  264. package/src/kernel/boot-bind/journal.ts +5 -5
  265. package/src/kernel/boot-bind/signal.ts +3 -1
  266. package/src/kernel/boot-bind/store.test.ts +55 -37
  267. package/src/kernel/boot-bind/store.ts +24 -34
  268. package/src/kernel/boot-bind/vault.ts +19 -4
  269. package/src/kernel/boot.test.ts +12 -4
  270. package/src/kernel/boot.ts +31 -19
  271. package/src/kernel/budget-entry.ts +1 -1
  272. package/src/kernel/compensate.test.ts +288 -1
  273. package/src/kernel/compensate.ts +126 -0
  274. package/src/kernel/concurrency.test.ts +10 -9
  275. package/src/kernel/effects-stamping.test.ts +27 -2
  276. package/src/kernel/element-registries.ts +5 -3
  277. package/src/kernel/flow.ts +4 -2
  278. package/src/kernel/fx.test.ts +119 -3
  279. package/src/kernel/fx.ts +215 -40
  280. package/src/kernel/index.ts +14 -0
  281. package/src/kernel/journal.ts +130 -7
  282. package/src/kernel/pipeline.test.ts +20 -6
  283. package/src/kernel/redacted.test.ts +35 -0
  284. package/src/kernel/redacted.ts +24 -2
  285. package/src/kernel/router/create-default.ts +16 -0
  286. package/src/kernel/router/create-edge.ts +18 -0
  287. package/src/kernel/router/create.ts +23 -0
  288. package/src/kernel/router/index.ts +23 -0
  289. package/src/kernel/router/linear.ts +88 -0
  290. package/src/kernel/router/regexp.ts +188 -0
  291. package/src/kernel/router/smart.ts +120 -0
  292. package/src/kernel/router/trie.ts +108 -0
  293. package/src/kernel/router/types.ts +56 -0
  294. package/src/kernel/router.ts +18 -532
  295. package/src/kernel-entry.ts +43 -0
  296. package/src/manifest/fixtures/skyport.excerpt.json +1 -1
  297. package/src/manifest/fixtures/skyport.manifest.json +1 -1
  298. package/src/plugins/config-source.test.ts +7 -7
  299. package/src/release/build-lib.ts +58 -0
  300. package/src/release/exports.test.ts +4 -2
  301. package/src/release/exports.ts +30 -4
  302. package/src/release/measure.ts +101 -22
  303. package/src/runs/duckdb.ts +7 -2
  304. package/src/shared/optional-peer.ts +41 -0
  305. package/src/term.test.ts +3 -44
  306. package/src/test/create-test-app.ts +12 -0
  307. package/src/test/provisions.integration.test.ts +1 -1
  308. package/src/test/reset-element-registries.ts +2 -0
  309. package/src/upgrade/codemods.test.ts +7 -20
  310. package/src/upgrade/codemods.ts +93 -60
  311. package/site/content/docs/console/access.mdx +0 -29
  312. package/site/content/docs/console/ai.mdx +0 -35
  313. package/site/content/docs/console/architecture.mdx +0 -35
  314. package/site/content/docs/console/channels.mdx +0 -37
  315. package/site/content/docs/console/clock.mdx +0 -51
  316. package/site/content/docs/console/flows.mdx +0 -31
  317. package/site/content/docs/console/gates.mdx +0 -73
  318. package/site/content/docs/console/index.mdx +0 -54
  319. package/site/content/docs/console/manifest-diff.mdx +0 -34
  320. package/site/content/docs/console/meta.json +0 -24
  321. package/site/content/docs/console/overview.mdx +0 -40
  322. package/site/content/docs/console/plugins.mdx +0 -41
  323. package/site/content/docs/console/privacy.mdx +0 -32
  324. package/site/content/docs/console/runs.mdx +0 -50
  325. package/site/content/docs/console/signals.mdx +0 -40
  326. package/site/content/docs/console/store.mdx +0 -32
  327. package/site/content/docs/console/tenancy.mdx +0 -32
  328. package/site/content/docs/console/traces.mdx +0 -38
  329. package/site/content/docs/console/vault.mdx +0 -41
  330. package/site/content/docs/recipes/openbao.mdx +0 -141
  331. package/src/cli/ask-dev-mode.ts +0 -40
  332. package/src/cli/dev-mode.test.ts +0 -45
  333. package/src/cli/dev-mode.ts +0 -78
  334. package/src/cli/openbao-bootstrap.test.ts +0 -150
  335. package/src/cli/openbao-bootstrap.ts +0 -321
  336. package/src/cli/openbao-restart.integration.test.ts +0 -145
  337. package/src/console/ui/dist/assets/panel-vault-Za1GyJfM.js +0 -1
  338. package/src/console/ui/dist/assets/style-C8MxEWPd.css +0 -3
  339. package/src/docker/recipes/openbao.ts +0 -47
  340. package/src/drivers/libsql.ts +0 -179
  341. package/src/drivers/sqlite.ts +0 -44
  342. package/src/drivers/vault-openbao.test.ts +0 -97
  343. package/src/drivers/vault-openbao.ts +0 -143
@@ -186,7 +186,7 @@ await fx.store(db).delete(notes).where(lt(notes.createdAt, cutoff));
186
186
 
187
187
  ### Schema — declare once, generate per dialect
188
188
 
189
- The recommended path: declare tables ORM-agnostically, then let `oke db` emit real Drizzle for the active dialect (`sqliteTable` locally, `pgTable` in docker/prod) into `src/schema.generated.ts`.
189
+ The recommended path: declare tables ORM-agnostically, then let `oke db` emit real Drizzle (`pgTable` for Postgres / PGLite) into `src/db/schema.drizzle.ts`.
190
190
 
191
191
  | Field API | Meaning |
192
192
  | -------------------------------------------- | ----------------------------------------------- |
@@ -232,28 +232,28 @@ export const relations = store.schema.relations({ links, daily }, (r) => ({
232
232
  | `oke db generate` | Write versioned SQL under `drizzle/` for review |
233
233
  | `oke db migrate` | Apply those files — human or CI, **never** at boot |
234
234
 
235
- `oke dev` (local) auto-pushes when you save a schema _input_ (`schema.decl.ts`,
235
+ `oke dev` auto-pushes when you save a schema _input_ (`schema.decl.ts`,
236
236
  hand-written `schema.ts`, `app.ts` for plugin tables, or `drizzle.config.ts`) —
237
- not when emit rewrites `schema.generated.ts`.
237
+ not when emit rewrites `schema.drizzle.ts`.
238
238
 
239
- Opt out with `--no-db-push` or `db: { autoPush: false }`. Docker/prod **never**
240
- auto-apply DDL; a missing table fails as **OKE1101** (`oke db migrate`).
239
+ Opt out with `--no-db-push` or `db: { autoPush: false }`. `prod` **never**
240
+ auto-applies DDL; a missing table fails as **OKE1101** (`oke db migrate`).
241
241
 
242
242
  #### Multiple environments
243
243
 
244
- Local can `oke db push` freely — safe to wipe and regenerate.
244
+ `dev` can `oke db push` freely — safe to wipe and regenerate.
245
245
 
246
246
  Staging/prod accumulate versioned SQL under `drizzle/` (`oke db generate`).
247
247
  `oke db migrate` applies only unrecorded files in order — behind DBs catch up.
248
248
 
249
249
  | Environment | Sync |
250
250
  | -------------- | -------------------------------------------------------------- |
251
- | Local | `oke db push` (or auto-push from `oke dev`) |
251
+ | `dev` | `oke db push` (or auto-push from `oke dev`) |
252
252
  | Staging / prod | `oke db generate` → review files → `oke db migrate` on that DB |
253
253
 
254
254
  <Callout title="Connection pooling is infrastructure, not app code" type="info">
255
255
  Bun.SQL defaults to **10** connections per process — fine per instance. Scale out and `N × pool`
256
- can exceed Postgres `max_connections`. docker/prod puts **PgDog** in front; `DATABASE_URL` → port
256
+ can exceed Postgres `max_connections`. `dev`/`prod` put **PgDog** in front; `DATABASE_URL` → port
257
257
  `6432`. No app code changes.
258
258
  </Callout>
259
259
 
@@ -272,15 +272,13 @@ Seed proves existence (bootstrap rows); it does not correct schema-adjacent data
272
272
 
273
273
  <StoreSeeding />
274
274
 
275
- | env | `essential` | `dev` | `prod` |
276
- | -------- | ----------- | ----- | ------ |
277
- | `local` | yes | yes | no |
278
- | `docker` | yes | yes | no |
279
- | `test` | yes | no | no |
280
- | `prod` | yes | no | yes |
275
+ | env | `essential` | `dev` | `prod` |
276
+ | ------ | ----------- | ----- | ------ |
277
+ | `dev` | yes | yes | no |
278
+ | `test` | yes | no | no |
279
+ | `prod` | yes | no | yes |
281
280
 
282
- `docker` is a laptop profile with prod-shaped drivers still development, so `dev` runs.
283
- Outside `test`, exactly one of `dev` / `prod` runs with `essential`.
281
+ Outside `test`, exactly one of seed-category `dev` / `prod` runs with `essential`.
284
282
 
285
283
  **Simple form** — everything inline:
286
284
 
@@ -367,14 +365,14 @@ await fx.store(db).upsert(
367
365
  is for seed-owned rows you intentionally overwrite. Schema-wide data fixes still belong in
368
366
  migrations, not seed.
369
367
 
370
- | Env | Confirm |
371
- | ----------------- | ----------------------------------------------------- |
372
- | `local` / `test` | none |
373
- | `docker` / `prod` | print DB target; type the env name (`--force` for CI) |
368
+ | Env | Confirm |
369
+ | -------------- | ----------------------------------------------------- |
370
+ | `test` | none |
371
+ | `dev` / `prod` | print DB target; type the env name (`--force` for CI) |
374
372
 
375
373
  ```bash
376
- oke db seed # resolve env like other oke db commands (.oke/mode)
377
- oke db seed --env docker # explicit override
374
+ oke db seed # resolve env like other oke db commands
375
+ oke db seed --env dev # explicit override
378
376
  oke db seed --env prod --force
379
377
  ```
380
378
 
@@ -394,27 +392,25 @@ oke db seed --env prod --force
394
392
 
395
393
  Same flow code, different backends — configured once in `oke.config.ts`:
396
394
 
397
- | Facet | Local | Docker / prod | Runs as |
398
- | ----- | -------- | ------------- | --------------------------------------- |
399
- | `sql` | `sqlite` | `postgres` | file on diskcontainer + named volume |
395
+ | Facet | `dev` / `prod` | `test` | Runs as |
396
+ | ----- | -------------- | -------- | --------------------------------------------- |
397
+ | `sql` | `postgres` | `pglite` | Compose / deploy Postgres in-process PGLite |
400
398
 
401
- Defaults: `sqlite` locally, `postgres` in docker/prod, `memory` in test. Container images come from the `images` map — change the vendor by changing the pin, never the driver id.
399
+ Defaults: `postgres` for `dev`/`prod`, `pglite` for `test`. SQLite-family drivers (`sqlite`, `libsql`) are removed. Container images come from the `images` map — change the vendor by changing the pin, never the driver id.
402
400
 
403
401
  #### Opt-in SQL drivers
404
402
 
405
- Two more `store.sql` drivers cover specific parity needs. Both are optional peers — `bun add` them yourself; neither changes the `sqlite` local default.
403
+ | Driver | Install | Wire dialect | Choose for |
404
+ | -------- | -------------------------------------------------------- | ------------ | --------------------------------------------------------- |
405
+ | `pglite` | `@electric-sql/pglite` + `@electric-sql/pglite-pgvector` | postgresql | **required** for `store.sql.test`; also usable in-process |
406
406
 
407
- | Driver | Install | Wire dialect | Choose for |
408
- | -------- | -------------------------------------------------------- | ------------ | ------------------------------------------------------ |
409
- | `libsql` | `@libsql/client` | sqlite | local vector search without Docker (`index: "libsql"`) |
410
- | `pglite` | `@electric-sql/pglite` + `@electric-sql/pglite-pgvector` | postgresql | the real Postgres dialect + pgvector, in-process |
411
-
412
- <Callout title="PGlite is not a latency play">
413
- PGlite pays a one-time ~1 s WASM init, and warm CRUD is roughly 15× slower than `bun:sqlite`.
414
- Choose it for dialect/pgvector parity with prod — never as a faster local default.
407
+ <Callout title="PGlite is the test SQL driver">
408
+ `defineConfig` requires `drivers.store.sql.test` to be `pglite` when set. Use `oke test` (sets
409
+ `OKE_PGLITE_URL=memory://`). Choose PGLite for Postgres correctness in tests not as a Compose
410
+ substitute for `oke dev`.
415
411
  </Callout>
416
412
 
417
- SQL-backed index drivers (`pgvector`, `libsql`) share this facet's connection — see [Advanced — composing facets together](#advanced--composing-facets-together).
413
+ SQL-backed index driver `pgvector` shares this facet's connection — see [Advanced — composing facets together](#advanced--composing-facets-together).
418
414
 
419
415
  ## KV
420
416
 
@@ -470,8 +466,8 @@ Optional third argument on `set` is a duration string: `(\d+)(ms|s|m|h|d)` — e
470
466
 
471
467
  <StoreKvTtl />
472
468
 
473
- **Consequence:** a TTL you rely on in prod does nothing under the local `memory` driver. Test expiry
474
- against `redis` (docker) when lifetime matters.
469
+ **Consequence:** a TTL you rely on in prod does nothing under the `test` `memory` driver. Exercise
470
+ expiry against `redis` under `oke dev` when lifetime matters.
475
471
 
476
472
  ### Examples — what follows from each choice
477
473
 
@@ -490,34 +486,33 @@ await fx.store(sessions).set(`sess:${token}`, { userId }, "7d");
490
486
  const keys = await fx.store(sessions).list("sess:");
491
487
  ```
492
488
 
493
- **Consequence:** `list` is how the [Console · Store](/docs/console/store) browser enumerates a
494
- namespace. Prefer stable key prefixes (`user:`, `sess:`) so both your Flows and the Console stay
495
- readable.
489
+ **Consequence:** `list` enumerates a namespace. Prefer stable key prefixes (`user:`, `sess:`) so
490
+ your Flows and operator tools stay readable.
496
491
 
497
492
  ### Per-environment KV drivers
498
493
 
499
494
  ```typescript title="oke.config.ts"
500
495
  drivers: {
501
496
  store: {
502
- kv: { local: "memory", docker: "redis", test: "memory", prod: "redis" },
497
+ kv: { dev: "redis", test: "memory", prod: "redis" },
503
498
  },
504
499
  },
505
500
  images: {
506
- "store.kv": "redis:8-alpine",
501
+ store: { kv: "redis:8-alpine" },
507
502
  // or: "valkey/valkey:8-alpine"
508
503
  // or: "docker.dragonflydb.io/dragonflydb/dragonfly"
509
504
  },
510
505
  ```
511
506
 
512
- | Facet | Local | Docker / prod | Runs as |
513
- | ----- | -------- | ------------- | ---------------------- |
514
- | `kv` | `memory` | `redis` | in-process → container |
507
+ | Facet | `dev` / `prod` | `test` | Runs as |
508
+ | ----- | -------------- | -------- | ---------------------- |
509
+ | `kv` | `redis` | `memory` | container → in-process |
515
510
 
516
511
  | Variable | When |
517
512
  | ------------------ | -------------------------------- |
518
513
  | `REDIS_URL` | Required for the `redis` driver |
519
514
  | `OKE_STORE_KV_URL` | Override if `REDIS_URL` is unset |
520
- | `OKE_KV_DRIVER` | Force a driver id (docker) |
515
+ | `OKE_KV_DRIVER` | Force a driver id |
521
516
 
522
517
  Missing Redis URL fails boot loudly: `oke boot: redis driver needs REDIS_URL`.
523
518
 
@@ -614,32 +609,32 @@ Keys are opaque strings the driver stores as-is. Prefer path-like prefixes (`pho
614
609
  ```typescript title="oke.config.ts"
615
610
  drivers: {
616
611
  store: {
617
- files: { local: "fs", docker: "s3", test: "memory", prod: "s3" },
612
+ files: { dev: "s3", test: "memory", prod: "s3" },
618
613
  },
619
614
  },
620
615
  images: {
621
- "store.files": "rustfs/rustfs:1.0.0-beta.11",
616
+ store: { files: "rustfs/rustfs:1.0.0-beta.11" },
622
617
  },
623
618
  ```
624
619
 
625
- | Facet | Local | Docker / prod | Runs as |
626
- | ------- | ----- | ------------- | --------------------------------- |
627
- | `files` | `fs` | `s3` | project folderRustFS container |
620
+ | Facet | `dev` / `prod` | `test` | Runs as |
621
+ | ------- | -------------- | -------- | ------------------------ |
622
+ | `files` | `s3` | `memory` | RustFS / S3 in-process |
628
623
 
629
624
  | Variable | When |
630
625
  | ----------------------------- | -------------------------------------- |
631
626
  | `S3_BUCKET` | Required bucket for the `s3` driver |
632
627
  | `OKE_STORE_FILES_DB` | Override bucket name |
633
628
  | `S3_ENDPOINT` · keys · region | S3-compatible endpoint and credentials |
634
- | `OKE_FILES_DRIVER` | Force a driver id (docker) |
629
+ | `OKE_FILES_DRIVER` | Force a driver id |
635
630
 
636
631
  `memory` is the test default. Local `fs` writes under a temp root when no binding `root` is set.
637
632
 
638
- **Known limit:** `fs` is single-host. Under horizontal scale each replica sees its own filesystem (silently inconsistent object views). Boot prints a one-shot warning when `drivers.store.files` is `fs`. Use `s3` for docker/prod (create-oke templates already do).
633
+ **Known limit:** `fs` is single-host. Under horizontal scale each replica sees its own filesystem (silently inconsistent object views). Boot prints a one-shot warning when `drivers.store.files` is `fs`. Use `s3` for `dev`/`prod` (create-oke templates already do).
639
634
 
640
- <Callout title="Console can browse, not edit bytes">
641
- The [Console · Store](/docs/console/store) lists keys and can delete them. Direct edit is **KV +
642
- SQL only** — blob bodies are not patched from the Console.
635
+ <Callout title="Operator tools can browse, not edit bytes">
636
+ Operator tools can list keys and delete them. Direct edit is **KV + SQL only** — blob bodies are
637
+ not patched.
643
638
  </Callout>
644
639
 
645
640
  ### Images — `image` / `putImage`
@@ -748,11 +743,10 @@ runtime.
748
743
 
749
744
  ### Vector ANN
750
745
 
751
- | `store.index` id | Shares connection from | Real ANN via |
752
- | ---------------- | -------------------------- | ------------------------------------ |
753
- | `memory` | — (in-process, default) | Full scan cosine |
754
- | `pgvector` | `postgres` or `pglite` sql | HNSW + `cosineDistance` |
755
- | `libsql` | `libsql` sql | `libsql_vector_idx` + `vector_top_k` |
746
+ | `store.index` id | Shares connection from | Real ANN via |
747
+ | ---------------- | -------------------------- | ----------------------- |
748
+ | `memory` | — (in-process, default) | Full scan cosine |
749
+ | `pgvector` | `postgres` or `pglite` sql | HNSW + `cosineDistance` |
756
750
 
757
751
  **Consequence:** a configured SQL-backed index that cannot reach its engine — missing peer, missing
758
752
  `vector` extension, wrong sql driver — fails loudly at first use. It never silently falls back to
@@ -789,29 +783,27 @@ do: async ({ id, doc, q }, fx) => {
789
783
  ```typescript title="oke.config.ts"
790
784
  drivers: {
791
785
  store: {
792
- index: { local: "meilisearch", docker: "meilisearch", prod: "meilisearch" },
786
+ index: { dev: "meilisearch", test: "memory", prod: "meilisearch" },
793
787
  },
794
788
  },
795
789
  images: {
796
- "store.index": "getmeili/meilisearch:v1.37",
790
+ store: { index: "getmeili/meilisearch:v1.37" },
797
791
  },
798
792
  ```
799
793
 
800
- - **Local mode** needs the `meilisearch` binary on `PATH` (a documented prerequisite, like Docker for `--docker` OKE never auto-downloads binaries). `oke dev` spawns it with a generated master key persisted under `.oke/meilisearch/` (`0700`/`0600`).
801
- - **Docker / prod** uses the image recipe; the app gets `OKE_STORE_INDEX_URL` + `OKE_STORE_INDEX_KEY` from Compose — a standalone HTTP service, never the shared `sqlUrl`.
794
+ - **`oke dev` / prod** use the image recipe; the app gets `OKE_STORE_INDEX_URL` + `OKE_STORE_INDEX_KEY` from Compose a standalone HTTP service, never the shared `sqlUrl`.
802
795
  - **Fail-loud:** a configured meilisearch that is unreachable or unhealthy throws `MeilisearchUnavailableError` — never a silent memory fallback.
803
796
  - **Not for vectors:** `ai.embed` / `fx.search` stay vector-only; pointing an embed `into` a meilisearch index fails loud (embeddings don't apply).
804
- - **Alpine caveat:** the raw glibc binary fails on Alpine/musl _hosts_; the official image is musl-clean. Install the binary for your platform (e.g. Homebrew / install script), or use `--docker`.
805
797
 
806
798
  ### Per-environment Index drivers
807
799
 
808
- Unlike KV/Files, an unset `drivers.store.index` map stays **`memory` in every environment** — there is no docker fallback to `pgvector`. Opt in explicitly:
800
+ Unlike KV/Files, an unset `drivers.store.index` map stays **`memory` in every environment** — there is no automatic fallback to `pgvector`. Opt in explicitly:
809
801
 
810
802
  ```typescript title="oke.config.ts"
811
803
  drivers: {
812
804
  store: {
813
- sql: { local: "libsql", docker: "postgres", prod: "postgres" },
814
- index: { local: "libsql", docker: "pgvector", prod: "pgvector" },
805
+ sql: { dev: "postgres", test: "pglite", prod: "postgres" },
806
+ index: { dev: "pgvector", test: "memory", prod: "pgvector" },
815
807
  },
816
808
  },
817
809
  ```
@@ -832,25 +824,25 @@ target meilisearch.
832
824
 
833
825
  Facets are independent declarations. A Flow may touch several in one `do` — for example store a files key on a SQL row, or `upsert` into an index after a SQL write. There is no special sync API: `store.resource` `search:` is SQL substring match, not meilisearch.
834
826
 
835
- One real coupling: a SQL-backed index shares the sql facet's already-open connection, so configure the pair together:
827
+ One real coupling: `pgvector` shares the sql facet's already-open connection, so configure the pair together:
836
828
 
837
829
  ```typescript title="oke.config.ts"
838
830
  drivers: {
839
831
  store: {
840
- sql: { local: "libsql" },
841
- index: { local: "libsql" },
832
+ sql: { dev: "postgres", test: "pglite", prod: "postgres" },
833
+ index: { dev: "pgvector", test: "memory", prod: "pgvector" },
842
834
  },
843
835
  },
844
836
  ```
845
837
 
846
- Same idea for `pgvector` with `postgres` or `pglite`. The full per-environment map looks like this:
838
+ The full per-environment map looks like this:
847
839
 
848
840
  ```typescript title="oke.config.ts"
849
841
  drivers: {
850
842
  store: {
851
- sql: { local: "sqlite", docker: "postgres", test: "memory", prod: "postgres" },
852
- kv: { local: "memory", docker: "redis", test: "memory", prod: "redis" },
853
- files: { local: "fs", docker: "s3", test: "memory", prod: "s3" },
843
+ sql: { dev: "postgres", test: "pglite", prod: "postgres" },
844
+ kv: { dev: "redis", test: "memory", prod: "redis" },
845
+ files: { dev: "s3", test: "memory", prod: "s3" },
854
846
  },
855
847
  },
856
848
  ```
@@ -861,16 +853,16 @@ Container images come from the `images` map — change the vendor by changing th
861
853
 
862
854
  Columns tagged `.pii()` or `.sensitive()` are masked at the store boundary — flows, logs, and the Console see a mask, not the value. Revealing cleartext PII requires an explicit `pii:reveal` gate on the flow, so access is a permission, not a convention.
863
855
 
864
- Optional `description` on a store (and `.describe("…")` on fields) becomes the human title in the
865
- [Console · Store](/docs/console/store) browser. Single-table `reads` / `writes` in the Manifest
866
- power cache invalidation and that same PII masking — see the Callout under [Querying by hand](#querying-by-hand).
856
+ Optional `description` on a store (and `.describe("…")` on fields) becomes its human title in
857
+ operator tools. Single-table `reads` / `writes` in the Manifest power cache invalidation and that
858
+ same PII masking — see the Callout under [Querying by hand](#querying-by-hand).
867
859
 
868
860
  ## Troubleshooting
869
861
 
870
862
  <Accordions>
871
- <Accordion title="OKE1101 — missing table in docker or prod">
863
+ <Accordion title="OKE1101 — missing table in prod">
872
864
 
873
- Schema DDL never runs automatically outside local dev. Run `oke db push` against the target database for a dev-style sync, or `oke db generate` + `oke db migrate` for reviewed, versioned migrations.
865
+ Schema DDL never runs automatically in `prod`. Under `oke dev`, `db.autoPush` (default `true`) runs `oke db push`. For production use `oke db generate` + `oke db migrate`.
874
866
 
875
867
  </Accordion>
876
868
  <Accordion title="I need a join — with: is not supported">
@@ -888,14 +880,14 @@ You are on offset paging. Switch `list` to keyset by setting `cursor` columns wi
888
880
  `count: "exact"` runs `COUNT(*)` per page. Set `count: "none"` in the `list` options to skip it, or use keyset mode where totals are rarely needed.
889
881
 
890
882
  </Accordion>
891
- <Accordion title="KV TTL never expires locally">
883
+ <Accordion title="KV TTL never expires in tests">
892
884
 
893
- The local default is `memory`, which ignores TTL on `set`. Run against `redis` (`oke dev --docker` or `drivers.store.kv.local: "redis"` with `REDIS_URL`) when you need real expiry.
885
+ The `test` default is `memory`, which ignores TTL on `set`. Under `oke dev`, KV is `redis` by default — use that when you need real expiry.
894
886
 
895
887
  </Accordion>
896
888
  <Accordion title="oke boot: redis / meilisearch / S3 URL missing">
897
889
 
898
- Driver-backed facets fail boot when their URL is absent — Redis needs `REDIS_URL`, meilisearch needs `OKE_STORE_INDEX_URL`, S3 needs `S3_BUCKET`. Docker mode expects `oke dev -d` to write these into the compose env.
890
+ Driver-backed facets fail boot when their URL is absent — Redis needs `REDIS_URL`, meilisearch needs `OKE_STORE_INDEX_URL`, S3 needs `S3_BUCKET`. `oke dev` writes these into the Compose env.
899
891
 
900
892
  </Accordion>
901
893
  <Accordion title="vector dims X !== index dims Y">
@@ -903,9 +895,9 @@ Driver-backed facets fail boot when their URL is absent — Redis needs `REDIS_U
903
895
  The vector length must match `store.index(…, { dims })` (runtime default `3` if unset). Align `dims` with your embedder, or fix the vector you pass to `upsert` / `search`.
904
896
 
905
897
  </Accordion>
906
- <Accordion title="Index stays on memory in docker">
898
+ <Accordion title="Index stays on memory under oke dev">
907
899
 
908
- Unlike KV/Files, unset `drivers.store.index` does **not** promote to `pgvector` in docker — it stays `memory`. Set the map explicitly (and pair SQL for `pgvector` / `libsql`).
900
+ Unlike KV/Files, unset `drivers.store.index` does **not** promote to `pgvector` in `dev` — it stays `memory`. Set the map explicitly (and pair SQL for `pgvector`).
909
901
 
910
902
  </Accordion>
911
903
  </Accordions>
@@ -915,7 +907,6 @@ Unlike KV/Files, unset `drivers.store.index` does **not** promote to `pgvector`
915
907
  - [Flow](/docs/elements/flow) — the `fx.store` session inside `do`
916
908
  - [AI](/docs/elements/ai) — `ai.embed` into a vector `store.index`, searched via `fx.search`
917
909
  - [Gate](/docs/elements/gate) — `pii:reveal` and other permissions on flows
918
- - [Console · Store](/docs/console/store) — browse data, cache keys, PII masking
919
910
  - [CLI Reference](/docs/reference/cli) — `oke db push` · `generate` · `migrate`
920
911
  - [Configuration](/docs/reference/configuration) — `drivers.store` maps and `images` pins
921
912
  - [Environment variables](/docs/reference/environment-variables) — Redis · S3 · meilisearch URLs
@@ -929,9 +920,4 @@ Unlike KV/Files, unset `drivers.store.index` does **not** promote to `pgvector`
929
920
  description="Eight elements overview."
930
921
  href="/docs/get-started/introduction"
931
922
  />
932
- <Card
933
- title="Console"
934
- description="Panels derived from the Manifest."
935
- href="/docs/console/overview"
936
- />
937
923
  </Cards>