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
@@ -11,34 +11,41 @@ source: "docs/cli.md"
11
11
  bun add okengine # ONE package (project)
12
12
  bun install -g okengine # global `oke` on PATH
13
13
 
14
+ oke # interactive TUI (TTY) — Dashboard · Dev · Database · Docker · Navigator
15
+ oke --tui # force TUI even when other args were passed
16
+ oke --help # command list (also what bare `oke` prints when non-TTY / CI)
17
+
14
18
  oke dev # watch · hot reload · Console :6533 · app :6530 · MCP :6535 · docs MCP :6536
15
- # → client types + domain schema push on save (local)
16
- oke dev --local # -l session-only local (in-memory; never writes .oke/mode)
19
+ # → always Docker Compose under docker/ + host Bun
20
+ # → client types + domain schema push on save
17
21
  oke dev --no-db-push # opt out of auto oke db push on schema input save
18
- oke dev --docker # -d infra compose under docker/ (no app container; host Bun)
19
- # Ctrl-C / close terminal docker compose stop (volumes kept)
20
- oke dev -d store.sql,signal # partial: only these roles get real backends
21
- oke mode local|docker # get/set default oke dev mode (saved in .oke/mode)
22
+ oke dev -d store.sql,signal # optional role filter (still Compose; requires Docker)
23
+ oke test # bun test with PGLite posture (NODE_ENV=test, OKE_PGLITE_URL=memory://)
24
+ # does not start Docker Compose
25
+ oke mode # removed prints error; use oke dev (Compose) / oke test (PGLite)
22
26
 
23
27
  oke start # runs exactly what production runs (this is the Docker CMD)
24
28
  oke doctor # verify secrets, ports, drivers, tenancy, schema drift
25
29
  oke stack # preview resolved images/tags/ports — writes nothing
26
30
 
27
- oke schema generate # core + plugin stubs → schema/oke.ts (--check in CI)
28
- oke db push # domain schema.ts → live local DB (dev; drizzle-kit)
31
+ oke schema generate # core + plugin stubs → .oke/schema/oke.ts (--check in CI)
32
+ oke db push # domain schema.ts → live DB (dev; drizzle-kit)
29
33
  oke db generate # versioned SQL under drizzle/ (review)
30
34
  oke db migrate # apply migrations (explicit; never auto in prod)
31
35
  oke db seed # defineSeed (essential + env category); never at boot
32
- oke db seed --env prod --force # CI: skip docker/prod confirmation prompt
36
+ oke db seed --env prod --force # CI: skip prod confirmation prompt
37
+ oke db studio # drizzle-kit Studio (long-running)
33
38
  oke vault set STRIPE_KEY # also: list · import .env · key rotate
34
39
  oke client add <url> # types for a separate frontend repo
35
40
 
36
- oke docker # docker/Dockerfile + compose.yml + compose.<role>.yml + compose.all.yml ·
37
- # opt-in images.proxy Caddyfile (caddy) or Traefik labels + socket-proxy
38
- oke docker --prod # + compose.prod.yml (HEALTHCHECK /_/ready, deploy, limits); folded into compose.all.yml
39
- oke docker clean # TTY: pick oke-dev-* stacks down -v (containers, networks, volumes)
40
- oke docker clean --yes # non-TTY: current project stack only
41
- oke docker clean --all --yes # non-TTY: every oke-dev-* stack on this machine
41
+ oke docker # docker/Dockerfile + docker-compose.yml (prod-grade; 4 CPU / 8 GiB budget)
42
+ oke docker --split # layered compose.yml + compose.<role>.yml + compose.prod.yml
43
+ oke docker --stack # docker-stack.yml for docker stack deploy
44
+ oke docker --cpus 8 --memory 16 # override host budget used for deploy.resources
45
+ oke docker --no-prod # skip readiness / deploy / resource budget
46
+ oke docker clean # TTY: pick oke-dev-* projects down -v (containers, networks, volumes)
47
+ oke docker clean --yes # non-TTY: current project only
48
+ oke docker clean --all --yes # non-TTY: every oke-dev-* project on this machine
42
49
  oke images pin # tags → digests in oke.images.lock
43
50
 
44
51
  oke build --target edge # < 15 kB kernel profile
@@ -58,20 +65,31 @@ In development, app, Console, MCP, and docs MCP prefer the canonical ports and m
58
65
  when occupied. Docker infrastructure uses stable per-project offsets in disjoint ranges for
59
66
  each built-in service, preventing one service's offset port from overlapping another's.
60
67
 
61
- `oke dev` boot chrome prints immediately (wordmark + Starting + profile), then
62
- streams background work (compose up, vault, per-service health, AI probe) in a
63
- live progress pane no blank multi-second wait. That pane clears before the
64
- elements + Docker board. Status is green ready · yellow pending/loading ·
65
- red error · dim idle. Compose health keeps polling (`docker compose ps -a`)
66
- so updates live if you stop a container; AI tracks model phase while the
67
- AI container is up. Boot does not wait for the model to become ready.
68
-
69
- On a TTY with `-d`, keyboard controls stay active under Logs. Status ● for
70
- compose/AI live on the board **above** Logs (not as log lines) it already
71
- lists every service, so refresh is enough to see the stack; there is no
72
- separate services panel. Press `r` to clear the log pane and reprint the
73
- latest board. `?` also refreshes first so the help panel is not mixed into
74
- request logs.
68
+ Bare `oke` on a TTY opens an Ink interactive shell (optional deps `ink` +
69
+ `react`). The viewport is cleared before render so boot logs never sit above the
70
+ frame. Chrome matches `oke dev`: green OKE wordmark on Dashboard, green active
71
+ tabs, cyan focus rows. Panels cover live ports (App / Console / MCP / Docs MCP),
72
+ Dev start/stop/attach with live logs, Database action cards (including Studio),
73
+ Docker compose status, and a Manifest navigator. **Tab** / **←→** (on the tab
74
+ strip) switch panels; **↑↓** navigate inside a panel; **Esc** returns to the tab
75
+ strip, then confirms quit when a managed `oke dev` is running; **1–5** jump
76
+ panels from any focus. Press `/` for the **command palette** (Tab autofill,
77
+ Enter runs `oke …`; status shows in the global footer). If `oke dev` is already
78
+ running, the TUI shows **Connected** via `.oke/dev.json` + port probes and will
79
+ not spawn a second stack. Non-TTY / CI keeps the classic help listing
80
+ (`EXIT_USAGE`).
81
+
82
+ `oke dev` always starts Compose (requires a running Docker daemon). Boot chrome
83
+ prints immediately (wordmark + Starting + profile), then streams background work
84
+ (compose up, vault, per-service health, AI probe). Status ● is green ready ·
85
+ yellow pending/loading · red error · dim idle. Compose health keeps polling
86
+ (`docker compose ps -a`); AI ● tracks model phase while the AI container is up.
87
+ Boot does not wait for the model to become ready. A successful session writes
88
+ `.oke/dev.json` (pid · ports · startedAt) and clears it on stop.
89
+
90
+ On a TTY, Ink keyboard controls stay active after boot (`useInput` — same
91
+ shortcuts as before). Press `r` to clear the log pane and reprint the latest
92
+ board.
75
93
 
76
94
  | Key | Action |
77
95
  | --------- | ----------------------------------- |
@@ -83,6 +101,12 @@ request logs.
83
101
  Compose stays quiet unless it fails. Process-local boot notices print once under
84
102
  the hero (not once per process).
85
103
 
104
+ `oke test` sets `NODE_ENV=test` and `OKE_PGLITE_URL=memory://` when unset, checks
105
+ that `@electric-sql/pglite` resolves, then forwards argv to `bun test`.
106
+
107
+ `oke mode` and `oke dev --local` / `-l` are removed — they exit with an error.
108
+ See [Migrating environments](/docs/reference/migrating-environments).
109
+
86
110
  ### create-oke
87
111
 
88
112
  ```bash
@@ -95,13 +119,10 @@ bunx create-oke@latest my-app --no-ai
95
119
  ```
96
120
 
97
121
  On a TTY: pick **standard** or **advanced**, then recommended defaults or
98
- customize. Customize asks **local** or **docker** first, walks facets for that
99
- side only (including `store.index` with a `none` opt-out no separate enable
100
- prompt), then whether to customize the other (defaults if no). **AI setup**
101
- offers Recommended (llama.cpp) · Customize · Off. Writes user-global
102
- `~/.oke/create-defaults.json` (reuse only when `template` matches). Scaffold
103
- writes `.oke/mode` from the primary side. Non-TTY / `--yes` / explicit
104
- `--template` never prompt.
122
+ customize. Customize walks **Docker-first** facets once (including `store.index`
123
+ with a `none` opt-out), then **AI setup**: Recommended (llama.cpp) · Customize ·
124
+ Off. Writes user-global `~/.oke/create-defaults.json` (reuse only when `template`
125
+ matches). Non-TTY / `--yes` / explicit `--template` never prompt.
105
126
 
106
127
  ### Additional commands
107
128
 
@@ -132,8 +153,7 @@ Long form is canonical in docs; short form is convenience only. Shared letters f
132
153
 
133
154
  | Long | Short | Where |
134
155
  | -------------------- | ----- | ---------------------------------------------- |
135
- | `--local` | `-l` | `dev` |
136
- | `--docker` | `-d` | `dev` |
156
+ | `--docker` | `-d` | `dev` (optional Compose **role filter**) |
137
157
  | `--no-db-push` | | `dev` |
138
158
  | `--prod` | `-p` | `docker` |
139
159
  | `--yes` | `-y` | `docker clean` |
@@ -156,6 +176,9 @@ Long form is canonical in docs; short form is convenience only. Shared letters f
156
176
  | `--subject` | `-s` | `privacy erase` |
157
177
  | `--before` | `-b` | `doctor --diff` |
158
178
  | `--base` | `-B` | `doctor --diff` |
179
+ | `--env` | | `db *` (`dev` \| `test` \| `prod`) |
180
+ | `--force` | | `db seed` |
181
+ | `--local` / `-l` | | **removed** on `dev` (use `oke test`) |
159
182
 
160
183
  ### Exit codes
161
184
 
@@ -1,10 +1,10 @@
1
1
  ---
2
2
  title: "Configuration"
3
- description: "Every option in oke.config.ts — drivers per environment, images, i18n, tenancy, privacy, db sync, topology, ports, and console."
3
+ description: "Every option in oke.config.ts — three environments (dev · test · prod), drivers, images, i18n, tenancy, privacy, db sync, topology, ports, and console."
4
4
  icon: "Settings2"
5
5
  ---
6
6
 
7
- Complete reference for `oke.config.ts`. Every option below is verified against `defineConfig`; the four environment keys everywhere are `local` · `docker` · `test` · `prod`.
7
+ Complete reference for `oke.config.ts`. Options below match `defineConfig`. Driver maps use three keys: **dev** · **test** · **prod**.
8
8
 
9
9
  ```typescript title="oke.config.ts"
10
10
  import { defineConfig } from "okengine/config";
@@ -14,38 +14,104 @@ export default defineConfig({
14
14
  });
15
15
  ```
16
16
 
17
- ## drivers
17
+ <Callout title="Philosophy">
18
+ We test on what we deploy. Local development runs the same stack as production via Docker. Tests
19
+ use PGLite for speed without sacrificing Postgres correctness.
20
+ </Callout>
18
21
 
19
- Which backend each element talks to, per environment. A value is either a driver id string or a rich object:
22
+ ## Environments
23
+
24
+ | Key | When | Typical backends |
25
+ | ------ | -------------------------- | ----------------------------------------------------- |
26
+ | `dev` | `oke dev` (Docker Compose) | Same protocols as prod (Postgres, Redis, S3, SMTP, …) |
27
+ | `test` | `oke test` / `bun test` | PGLite for SQL; memory / frozen / console elsewhere |
28
+ | `prod` | Production deploy | Shared durable backends |
29
+
30
+ Missing `dev` pins fill from `prod` (`fillDevFromProd`). Only `dev` / `test` / `prod` keys are
31
+ valid — see [Migrating environments](/docs/reference/migrating-environments) if you still have
32
+ `local` / `docker` maps.
33
+
34
+ ## Quick start
35
+
36
+ <Steps>
37
+
38
+ <Step>
39
+ ### Pin drivers for three envs
40
+
41
+ Pin **only the env keys that differ** from the built-in defaults — omitted keys
42
+ keep `DRIVER_DEFAULTS`. create-oke templates ship that sparse shape:
43
+
44
+ ```typescript title="oke.config.ts"
45
+ import { defineConfig } from "okengine/config";
46
+
47
+ export default defineConfig({
48
+ drivers: {
49
+ // Default vault.dev is "env"; pin the built-in store for Docker-first apps.
50
+ vault: { dev: "vault" },
51
+ },
52
+ });
53
+ ```
54
+
55
+ </Step>
56
+
57
+ <Step>
58
+ ### Or use a string shorthand
59
+
60
+ A bare string (or `{ driver, … }` object) expands to all three envs:
20
61
 
21
62
  ```typescript
22
63
  drivers: {
23
- store: {
24
- sql: { local: "sqlite", docker: "postgres", test: "memory", prod: "postgres" },
25
- kv: { local: "memory", docker: "redis", test: "memory", prod: "redis" },
26
- files: { local: "fs", docker: "s3", test: "memory", prod: "s3" },
27
- },
28
- signal: { local: "memory", docker: "redis", test: "memory", prod: "redis" },
29
- clock: { local: "memory", docker: "postgres", test: "frozen", prod: "postgres" },
30
- journal: { local: "memory", docker: "postgres", test: "memory", prod: "postgres" },
31
- vault: { local: "env", docker: "openbao", test: "memory", prod: "openbao" },
32
- channel: {
33
- email: { local: "console", docker: "smtp", test: "console", prod: "smtp" },
34
- sms: { local: "console", docker: "taqnyat", test: "console", prod: "taqnyat" },
35
- },
64
+ signal: "redis", // → { dev: "redis", test: "redis", prod: "redis" }
36
65
  },
37
66
  ```
38
67
 
39
- | Key | Shape | Driver ids (verified) |
68
+ Prefer an explicit `{ dev, test, prod }` map (or a partial override) when test
69
+ should differ from the default for that driver.
70
+
71
+ </Step>
72
+
73
+ <Step>
74
+ ### Run and test
75
+
76
+ ```bash title="Terminal"
77
+ oke dev # Docker Compose + host Bun · drivers.dev
78
+ oke test # bun test · NODE_ENV=test · OKE_PGLITE_URL=memory://
79
+ ```
80
+
81
+ </Step>
82
+
83
+ </Steps>
84
+
85
+ ## Default driver maps
86
+
87
+ Built-in defaults (`DRIVER_DEFAULTS`) when a key is omitted:
88
+
89
+ | Map | `dev` | `test` | `prod` |
90
+ | --------------- | ---------- | --------- | ---------- |
91
+ | `store.sql` | `postgres` | `pglite` | `postgres` |
92
+ | `store.kv` | `redis` | `memory` | `redis` |
93
+ | `store.files` | `s3` | `memory` | `s3` |
94
+ | `signal` | `redis` | `memory` | `redis` |
95
+ | `clock` | `postgres` | `frozen` | `postgres` |
96
+ | `journal` | `postgres` | `memory` | `postgres` |
97
+ | `vault` | `env` | `memory` | `vault` |
98
+ | `channel.email` | `smtp` | `console` | `smtp` |
99
+ | `channel.sms` | — (opt-in) | — | — |
100
+
101
+ `store.index`, `channel.whatsapp` / `push`, and `ai` have no single three-env default table — set them explicitly when you need them. create-oke templates pin `vault.dev: "vault"` (built-in) because the default `dev` driver is `env`.
102
+
103
+ ## Driver keys and ids
104
+
105
+ | Key | Shape | Driver ids |
40
106
  | ------------------ | -------------- | ---------------------------------------------------------------------------- |
41
- | `store.sql` | env driver map | `sqlite` · `postgres` · `libsql` · `pglite` · `memory` |
107
+ | `store.sql` | env driver map | `postgres` · `pglite` · `memory` |
42
108
  | `store.kv` | env driver map | `memory` · `redis` |
43
109
  | `store.files` | env driver map | `memory` · `fs` · `s3` |
44
- | `store.index` | env driver map | `memory` · `pgvector` · `libsql` · `meilisearch` |
110
+ | `store.index` | env driver map | `memory` · `pgvector` · `meilisearch` |
45
111
  | `signal` | env driver map | `memory` · `redis` (boot); `postgres` · `nats` fail loud until clients bind |
46
112
  | `clock` | env driver map | `memory` · `postgres` · `file` · `frozen` |
47
113
  | `journal` | env driver map | `memory` · `file` · `postgres` |
48
- | `vault` | env driver map | `env` · `openbao` · `memory` · `managed` |
114
+ | `vault` | env driver map | `env` · `vault` · `memory` · `managed` |
49
115
  | `channel.email` | env driver map | `console` · `smtp` · `resend` · `sndr` · `taqnyat-mail` |
50
116
  | `channel.sms` | env driver map | `console` · `taqnyat` · `msegat` · `unifonic` |
51
117
  | `channel.whatsapp` | env driver map | `console` · `wa-cloud` |
@@ -54,7 +120,14 @@ drivers: {
54
120
  | `runs` | env driver map | runs-store driver (distinct from top-level `runs`) |
55
121
  | `prod` | `string[]` | flat protocol list for the Manifest — nested maps are preferred |
56
122
 
57
- When `docker` is omitted it inherits the `prod` driver. The rich object form adds connection detail:
123
+ ### Safety rules
124
+
125
+ `defineConfig` rejects unsafe pins:
126
+
127
+ - **`sqlite` is removed** — use `postgres` (dev/prod) or `pglite` (test).
128
+ - **`drivers.store.sql.test` must be `pglite`** when set — real Postgres semantics in tests.
129
+
130
+ ### Rich driver objects
58
131
 
59
132
  ```typescript
60
133
  sql: {
@@ -70,59 +143,41 @@ sql: {
70
143
 
71
144
  ## images
72
145
 
73
- Container image pins keyed by element role — vendor choice lives here, never in driver ids:
146
+ Nested pins by element role — vendor choice lives here, never in driver ids:
74
147
 
75
148
  ```typescript
76
149
  images: {
77
- "store.sql": "postgres:18",
150
+ store: {
151
+ sql: "postgres:18-alpine",
152
+ kv: "redis:8-alpine",
153
+ files: "rustfs/rustfs:1.0.0-beta.11",
154
+ },
155
+ channel: { email: "axllent/mailpit:v1.22.3" },
78
156
  pgdog: "ghcr.io/pgdogdev/pgdog:v0.1.51",
79
- "store.kv": "redis:8",
80
- // or: "valkey/valkey:8-alpine"
81
- // or: "docker.dragonflydb.io/dragonflydb/dragonfly"
82
- "store.files": "rustfs/rustfs:1.0.0-beta.11",
83
- "channel.email": "axllent/mailpit:v1.22.3",
84
- vault: "openbao/openbao:2.6.1",
85
- ai: "ghcr.io/ggml-org/llama.cpp:server-b10290", // default; or ollama/ollama:0.32.6
86
- // opt-in TLS edge — omit for the default (app publishes 6530):
87
- // proxy: "caddy:2-alpine", // simplest automatic HTTPS
88
- // proxy: "traefik:v3.3", // label auto-discovery for --scale app=N
157
+ // ai: "ghcr.io/ggml-org/llama.cpp:server-b10290",
158
+ // proxy: "caddy:2-alpine",
89
159
  },
90
160
  ```
91
161
 
92
- When both `store.sql` and `pgdog` are pinned, `DATABASE_URL` points at PgDog
93
- (`6432`) — wire-protocol transparent to Bun.SQL / Drizzle. See
94
- [Store · Multiple environments](/docs/elements/store#multiple-environments).
95
-
96
- For `store.kv`, pin Redis (default), Valkey, or Dragonfly — driver id stays
97
- `redis`, same `REDIS_URL`. Image table + licenses: [Store · KV](/docs/elements/store#kv).
98
-
99
- For `ai`, default is [llama.cpp](/docs/recipes/llama-cpp) (`OKE_AI_URL` →
100
- `/v1`, curated Docker Hub `ai/` model). Ollama / vLLM / SGLang are explicit
101
- alternatives — see [Recipes · AI](/docs/recipes#ai-local--self-hosted).
162
+ Omitted image keys mean no container for that role. When both `store.sql` and `pgdog` are pinned, `DATABASE_URL` points at PgDog — see [Store](/docs/elements/store#multiple-environments).
102
163
 
103
- For `proxy`, pin **either** Caddy or Traefiknever both. Opt-in only; see
104
- [Reverse proxy](/docs/deployment/reverse-proxy).
164
+ For `store.kv`, pin Redis (default), Valkey, or Dragonflydriver id stays `redis`. For `ai`, see [Recipes · AI](/docs/recipes#ai-local--self-hosted). For `proxy`, see [Reverse proxy](/docs/deployment/reverse-proxy).
105
165
 
106
166
  ## i18n
107
167
 
108
- | Option | Type | Default | Meaning |
109
- | --------- | ---------- | ------- | ------------------------------------------- |
110
- | `locales` | `string[]` | | Supported locales |
111
- | `default` | string | | Fallback locale (channel templates, `fx.t`) |
112
- | `dir` | record | — | Per-locale direction: `"ltr"` \| `"rtl"` |
168
+ | Option | Type | Default | Meaning |
169
+ | --------- | ---------- | --------------------- | ------------------------------------------- |
170
+ | `locales` | `string[]` | `["en"]` when omitted | Supported locales |
171
+ | `default` | string | `"en"` when omitted | Fallback locale (channel templates, `fx.t`) |
172
+ | `dir` | record | — | Per-locale direction: `"ltr"` \| `"rtl"` |
113
173
 
114
174
  ```typescript
115
- i18n: { locales: ["en", "ar"], default: "en", dir: { ar: "rtl" } },
175
+ i18n: { locales: ["en"], default: "en" },
176
+ // or with Arabic: { locales: ["en", "ar"], default: "en", dir: { ar: "rtl" } }
116
177
  ```
117
178
 
118
- `fx.t` catalogs are ICU strings from `defineLocale` / `defineMessages` — see
119
- [i18n](/docs/reference/i18n). Built-ins also cover failure `error.message` and
120
- OKE cause/fix; Channel templates keep separate `locales` + `{{field}}` bodies.
121
-
122
179
  ## tenancy
123
180
 
124
- Multi-tenant isolation policy.
125
-
126
181
  | Option | Type | Meaning |
127
182
  | ----------- | --------------------------------- | ---------------------------------------- |
128
183
  | `isolation` | `"row" \| "schema" \| "database"` | How tenants are separated in the store |
@@ -130,7 +185,7 @@ Multi-tenant isolation policy.
130
185
 
131
186
  ## privacy
132
187
 
133
- Presence of this block turns the CORE privacy tooling on in the Console — masking, classification surfaces. It is not a `.plug()` call.
188
+ Presence of this block turns CORE privacy tooling on in the Console — not a `.plug()` call.
134
189
 
135
190
  ```typescript
136
191
  privacy: {},
@@ -138,7 +193,7 @@ privacy: {},
138
193
 
139
194
  ## runs
140
195
 
141
- Runs retention and redaction at the config surface — **not** the same key as `drivers.runs`.
196
+ Runs retention and redaction — **not** the same key as `drivers.runs`.
142
197
 
143
198
  | Option | Type | Meaning |
144
199
  | -------- | ------------------------ | ----------------------------------------------------- |
@@ -148,13 +203,13 @@ Runs retention and redaction at the config surface — **not** the same key as `
148
203
 
149
204
  Domain schema sync for `oke db push | generate | migrate` (Drizzle). Unrelated to `oke schema generate`.
150
205
 
151
- | Option | Default | Meaning |
152
- | ----------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------- |
153
- | `autoPush` | `true` (local only) | Auto-run `db push` when schema inputs change in `oke dev` (not on emit of `generated`); forced off in docker/prod |
154
- | `config` | `"drizzle.config.ts"` | Path to the drizzle-kit config |
155
- | `declare` | `"src/schema.decl.ts"` | Abstract schema module (`store.schema.table` exports) |
156
- | `generated` | `"src/schema.generated.ts"` | Where `oke db` emits dialect Drizzle |
157
- | `entry` | `src/app.ts` | App entry for collecting plugin table contributions |
206
+ | Option | Default | Meaning |
207
+ | ----------- | ---------------------------- | ------------------------------------------------------------------------- |
208
+ | `autoPush` | `true` | Auto-run `db push` on schema change under `oke dev`; forced off in `prod` |
209
+ | `config` | `"drizzle.config.ts"` | Path to the drizzle-kit config |
210
+ | `declare` | `"src/db/schema.decl.ts"` | Abstract schema module (`store.schema.table` exports) |
211
+ | `generated` | `"src/db/schema.drizzle.ts"` | Where `oke db` emits dialect Drizzle |
212
+ | `entry` | `src/app.ts` | App entry for collecting plugin table contributions |
158
213
 
159
214
  ## topology
160
215
 
@@ -173,15 +228,35 @@ Domain schema sync for `oke db push | generate | migrate` (Drizzle). Unrelated t
173
228
 
174
229
  ## console
175
230
 
176
- Production Console exposure.
177
-
178
231
  | Option | Type | Default | Meaning |
179
232
  | -------------- | ------------------------------------ | ------- | ------------------------- |
180
233
  | `prod.enabled` | boolean | — | Serve the Console in prod |
181
234
  | `prod.auth` | `"required" \| "optional" \| "none"` | — | Access requirement |
182
235
 
236
+ ## Troubleshooting
237
+
238
+ <Accordions>
239
+
240
+ <Accordion title='oke.config: … uses removed driver "sqlite"'>
241
+ The `sqlite` driver is gone. Pin `postgres` for `dev`/`prod` and `pglite` for `test`. Edit the
242
+ file by hand — see [Migrating environments](/docs/reference/migrating-environments).
243
+ </Accordion>
244
+
245
+ <Accordion title='drivers.store.sql.test must be "pglite"'>
246
+ Tests use PGLite so SQL semantics match Postgres. Set `test: "pglite"` (or omit the key and keep
247
+ the default). Do not use `memory` or `postgres` for `store.sql.test`.
248
+ </Accordion>
249
+
250
+ <Accordion title='CLI error: "local" / "sqlite" is no longer valid'>
251
+ There is no soft-compat. Rename env keys to `dev` / `test` / `prod` and replace `sqlite` with
252
+ `postgres` / `pglite`. `oke mode` was removed — `oke dev` always starts Docker Compose.
253
+ </Accordion>
254
+
255
+ </Accordions>
256
+
183
257
  ## Learn more
184
258
 
185
- - [CLI Reference](/docs/reference/cli) — `oke dev` · `oke db` · `oke docker`
259
+ - [Migrating environments](/docs/reference/migrating-environments) — four-key maps `dev`/`test`/`prod`
260
+ - [CLI Reference](/docs/reference/cli) — `oke dev` · `oke test` · `oke db`
186
261
  - [Environment Variables](/docs/reference/environment-variables) — URL and secret resolution
187
262
  - [Store](/docs/elements/store) — what the store drivers back
@@ -4,7 +4,7 @@ description: "Every environment variable OKE reads — connection URLs, driver o
4
4
  icon: "Terminal"
5
5
  ---
6
6
 
7
- OKE reads environment variables at boot for connection detail and secrets — never for behavior you could declare in `oke.config.ts`. In docker mode these are written for you into `docker/.env.docker`; this page is the full map.
7
+ OKE reads environment variables at boot for connection detail and secrets — never for behavior you could declare in `oke.config.ts`. Under `oke dev`, Compose writes these into `docker/.env.docker`; this page is the full map.
8
8
 
9
9
  <Callout title="Precedence">
10
10
  For anything with both an `OKE_*` variable and a conventional one (like `DATABASE_URL`), the
@@ -13,15 +13,15 @@ OKE reads environment variables at boot for connection detail and secrets — ne
13
13
 
14
14
  ## SQL store
15
15
 
16
- | Variable | Used for | Default when unset |
17
- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- |
18
- | `DATABASE_URL` | Postgres connection (`postgres` store / clock / journal drivers, drizzle-kit). When PgDog is in the stack, this points at the pooler (`:6432`). | `postgres://localhost:5432/oke` |
19
- | `OKE_STORE_SQL_URL` | Direct SQL URL (Postgres host, even when PgDog fronts the app) | — |
20
- | `OKE_PGDOG_URL` | PgDog pooler URL (same value as `DATABASE_URL` when both are present) | — |
21
- | `OKE_SQLITE_URL` | SQLite file path (`sqlite` driver) | `.oke/app.sqlite` |
22
- | `OKE_LIBSQL_URL` | libSQL URL or file path (`libsql` driver) | `.oke/app.libsql` |
23
- | `OKE_PGLITE_URL` | PGlite data dir or `memory://` (`pglite` driver) | `.oke/pgdata` |
24
- | `OKE_SQL_DRIVER` | Force the sql driver id at boot | config map |
16
+ | Variable | Used for | Default when unset |
17
+ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
18
+ | `DATABASE_URL` | Postgres connection (`postgres` store / clock / journal / Console operator plane, drizzle-kit). App tables stay in `public`; Console operators/sessions use schema `oke_console` on the same database. When PgDog is pinned, this points at the pooler (`:6432`). | `postgres://localhost:5432/oke` |
19
+ | `OKE_STORE_SQL_URL` | Direct SQL URL (Postgres host, even when PgDog fronts the app). Also used by Console when `DATABASE_URL` is unset. | — |
20
+ | `OKE_PGDOG_URL` | PgDog pooler URL (same value as `DATABASE_URL` when both are present) | — |
21
+ | `OKE_PGLITE_URL` | PGlite data dir or `memory://` (`pglite` driver; required for `store.sql.test`) | `memory://` in `test`; else `.oke/pgdata` |
22
+ | `OKE_SQL_DRIVER` | Force the sql driver id at boot | config map |
23
+
24
+ `oke test` sets `OKE_PGLITE_URL=memory://` when unset. The `sqlite` driver and `OKE_SQLITE_URL` are removed.
25
25
 
26
26
  ## Index store
27
27
 
@@ -52,15 +52,19 @@ OKE reads environment variables at boot for connection detail and secrets — ne
52
52
  | `OKE_STORE_FILES_DB` | Explicit files location override | — |
53
53
  | `OKE_FILES_DRIVER` | Force the files driver id | config map |
54
54
 
55
- ## Vault (OpenBao)
55
+ ## Vault
56
56
 
57
- Written by the first-boot bootstrap; you normally only set these when pointing at an external vault.
57
+ Built-in store uses `OKE_VAULT_MASTER_KEY` (or `--key` / stdin on CLI). Managed AWS Secrets Manager
58
+ uses the provider + region vars below.
58
59
 
59
- | Variable | Used for | Default when unset |
60
- | ----------------- | --------------------------- | ------------------ |
61
- | `OKE_VAULT_URL` | OpenBao base URL | — |
62
- | `OKE_VAULT_TOKEN` | App token (least-privilege) | — |
63
- | `OKE_VAULT_MOUNT` | KV v2 mount path | `"secret"` |
60
+ | Variable | Used for | Default when unset |
61
+ | ---------------------- | -------------------------------------------- | --------------------- |
62
+ | `OKE_VAULT_PROVIDER` | Managed backend (`aws-secrets-manager`) | — (platform-injected) |
63
+ | `OKE_VAULT_REGION` | Cloud region for AWS Secrets Manager | — |
64
+ | `OKE_VAULT_MOUNT` | Secret-name prefix for AWS SM (`oke/prod/`) | — |
65
+ | `OKE_VAULT_MASTER_KEY` | Built-in vault master key (base64) | — |
66
+ | `OKE_VAULT_URL` | Optional remote URL for community adapters | — |
67
+ | `OKE_VAULT_TOKEN` | Optional remote token for community adapters | — |
64
68
 
65
69
  ## Channel (email) — boot binder
66
70
 
@@ -115,24 +119,28 @@ provider's real credentials — credentials alone never send.
115
119
  | `ANTHROPIC_MODEL` | Model override for the anthropic driver | — |
116
120
  | `OPENAI_API_KEY` | `openai-compatible` driver credential | — |
117
121
  | `OPENAI_BASE_URL` | `openai-compatible` base URL | OpenAI cloud |
118
- | `OKE_AI_DRIVER` | Force the AI driver id (honoured in docker mode) | config map |
122
+ | `OKE_AI_DRIVER` | Force the AI driver id (honoured under Compose / `oke dev`) | config map |
119
123
  | `OKE_AI_URL` | Local / openai-compatible base URL | `http://127.0.0.1:8080/v1` (llama.cpp) · `http://127.0.0.1:11434` (ollama) |
120
- | `OKE_AI_MODEL` | Default model id — Docker Hub `ai/` for llama.cpp; Ollama library tag for ollama; HF id for vLLM/SGLang | `smollm2` (llama.cpp) / `qwen3.5:9b` (ollama) |
124
+ | `OKE_AI_MODEL` | Default model id — Docker Hub `ai/` for llama.cpp; Ollama library tag for ollama; HF id for vLLM/SGLang | `granite3.3:2b` (llama.cpp) / `qwen3.5:9b` (ollama) |
121
125
  | `OKE_AI_VISION_MODEL` | Vision model id written by `oke ai setup` (logical `ai.model("vision")`) | — |
122
126
  | `OKE_AI_EMBED_MODEL` | Embedding model id written by `oke ai setup` | — |
123
127
  | `OLLAMA_HOST` | Alternate Ollama host (`host:port` or URL) when `OKE_AI_URL` is unset | — |
124
128
 
125
129
  ## Framework behavior
126
130
 
127
- | Variable | Used for |
128
- | --------------------- | ------------------------------------------------------------- |
129
- | `OKE_DOCKER` | `"1"` marks docker mode (set by the CLI, not by you) |
130
- | `OKE_DB_AUTO_PUSH` | Overrides `db.autoPush` at boot |
131
- | `OKE_DRIZZLE_DIALECT` | `"sqlite"` \| `"postgresql"` for generated drizzle config |
132
- | `OKE_DEV_REQUEST_LOG` | `"1"` logs requests during `oke dev` (set by the CLI) |
133
- | `OKE_CONSOLE_SECRET` | Console session secret — set explicitly in production |
134
- | `PORT` | App port in production containers (default `6530`) |
135
- | `NODE_ENV` | `"production"` switches the Console to its production posture |
131
+ | Variable | Used for |
132
+ | --------------------- | ------------------------------------------------------------------------------------------ |
133
+ | `OKE_DOCKER` | `"1"` marks Compose / `oke dev` posture (set by the CLI) |
134
+ | `OKE_DB_AUTO_PUSH` | Overrides `db.autoPush` at boot |
135
+ | `OKE_DRIZZLE_DIALECT` | `"postgresql"` for drizzle-kit overlays (templates hardcode it) |
136
+ | `OKE_DEV_REQUEST_LOG` | `"1"` logs requests during `oke dev` (set by the CLI) |
137
+ | `OKE_CONSOLE_SECRET` | Console session signing secret — set explicitly in production (else `.oke/console.secret`) |
138
+ | `PORT` | App port in production containers (default `6530`) |
139
+ | `NODE_ENV` | `"production"` switches the Console to its production posture |
140
+
141
+ Console operator rows are **not** stored in `.oke/console.sqlite`. With `DATABASE_URL` (or
142
+ `OKE_STORE_SQL_URL`) they live in Postgres schema `oke_console`. Without a Postgres URL,
143
+ Console uses PGlite under `.oke/console-pg` for local reopen durability.
136
144
 
137
145
  ## Learn more
138
146