okengine 0.10.3 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/package.json +76 -10
  2. package/site/content/docs/deployment/docker-swarm.mdx +48 -111
  3. package/site/content/docs/deployment/docker.mdx +43 -36
  4. package/site/content/docs/deployment/index.mdx +9 -9
  5. package/site/content/docs/deployment/kubernetes.mdx +4 -4
  6. package/site/content/docs/elements/ai.mdx +7 -7
  7. package/site/content/docs/elements/channel.mdx +9 -7
  8. package/site/content/docs/elements/clock.mdx +8 -8
  9. package/site/content/docs/elements/flow.mdx +46 -47
  10. package/site/content/docs/elements/gate.mdx +6 -5
  11. package/site/content/docs/elements/signal.mdx +2 -2
  12. package/site/content/docs/elements/store.mdx +71 -78
  13. package/site/content/docs/elements/vault.mdx +89 -70
  14. package/site/content/docs/get-started/basic-usage.mdx +8 -8
  15. package/site/content/docs/get-started/installation.mdx +36 -36
  16. package/site/content/docs/get-started/introduction.mdx +11 -0
  17. package/site/content/docs/get-started/why.mdx +2 -2
  18. package/site/content/docs/plugins/anonymous.mdx +1 -1
  19. package/site/content/docs/plugins/magic-link.mdx +11 -11
  20. package/site/content/docs/plugins/otp.mdx +2 -2
  21. package/site/content/docs/plugins/passkey.mdx +1 -1
  22. package/site/content/docs/plugins/two-factor.mdx +1 -1
  23. package/site/content/docs/plugins/username.mdx +1 -1
  24. package/site/content/docs/recipes/caddy.mdx +1 -1
  25. package/site/content/docs/recipes/cockroachdb.mdx +2 -2
  26. package/site/content/docs/recipes/dragonfly.mdx +1 -1
  27. package/site/content/docs/recipes/index.mdx +1 -2
  28. package/site/content/docs/recipes/llama-cpp.mdx +21 -23
  29. package/site/content/docs/recipes/mailpit.mdx +11 -11
  30. package/site/content/docs/recipes/meilisearch.mdx +10 -10
  31. package/site/content/docs/recipes/meta.json +0 -1
  32. package/site/content/docs/recipes/ollama.mdx +1 -1
  33. package/site/content/docs/recipes/pgdog.mdx +12 -9
  34. package/site/content/docs/recipes/postgres.mdx +3 -3
  35. package/site/content/docs/recipes/redis.mdx +2 -2
  36. package/site/content/docs/recipes/rustfs.mdx +10 -7
  37. package/site/content/docs/recipes/sglang.mdx +1 -1
  38. package/site/content/docs/recipes/supabase-docker.mdx +1 -1
  39. package/site/content/docs/recipes/timescale.mdx +2 -2
  40. package/site/content/docs/recipes/valkey.mdx +1 -1
  41. package/site/content/docs/recipes/vllm.mdx +1 -1
  42. package/site/content/docs/recipes/yugabytedb.mdx +2 -2
  43. package/site/content/docs/reference/cli.md +61 -38
  44. package/site/content/docs/reference/configuration.mdx +145 -70
  45. package/site/content/docs/reference/environment-variables.mdx +36 -28
  46. package/site/content/docs/reference/errors.mdx +28 -29
  47. package/site/content/docs/reference/fx.mdx +11 -4
  48. package/site/content/docs/reference/i18n.mdx +17 -6
  49. package/site/content/docs/reference/index.mdx +5 -0
  50. package/site/content/docs/reference/meta.json +1 -0
  51. package/site/content/docs/reference/migrating-environments.mdx +158 -0
  52. package/site/content/docs/reference/plugins.mdx +2 -2
  53. package/src/auth/gate-auth.test.ts +12 -10
  54. package/src/cli/ai-setup/ai-setup.test.ts +27 -15
  55. package/src/cli/ai-setup/apply.ts +111 -15
  56. package/src/cli/ai-setup/catalog.ts +3 -3
  57. package/src/cli/ai-setup/index.ts +1 -1
  58. package/src/cli/ai-setup/prompts.ts +1 -1
  59. package/src/cli/ai-setup/recommend.test.ts +1 -1
  60. package/src/cli/ask-seed.test.ts +3 -3
  61. package/src/cli/build.ts +1 -1
  62. package/src/cli/db-auto-push.test.ts +6 -3
  63. package/src/cli/db-auto-push.ts +7 -5
  64. package/src/cli/db-seed.ts +7 -8
  65. package/src/cli/db.test.ts +70 -71
  66. package/src/cli/db.ts +86 -12
  67. package/src/cli/dev-controller.test.ts +35 -0
  68. package/src/cli/dev-controller.ts +298 -0
  69. package/src/cli/dev-controls.ts +11 -65
  70. package/src/cli/dev-db-push.test.ts +47 -15
  71. package/src/cli/dev-schema-sync.test.ts +11 -11
  72. package/src/cli/dev-schema-sync.ts +10 -10
  73. package/src/cli/dev-session-lock.test.ts +106 -0
  74. package/src/cli/dev-session-lock.ts +209 -0
  75. package/src/cli/dev.test.ts +166 -121
  76. package/src/cli/dev.ts +138 -192
  77. package/src/cli/doc-staleness.test.ts +3 -6
  78. package/src/cli/docker-clean.test.ts +33 -1
  79. package/src/cli/docker-clean.ts +28 -33
  80. package/src/cli/docker-cli.test.ts +12 -11
  81. package/src/cli/docker.ts +95 -20
  82. package/src/cli/doctor.test.ts +40 -0
  83. package/src/cli/doctor.ts +55 -15
  84. package/src/cli/drizzle-env.test.ts +11 -13
  85. package/src/cli/drizzle-env.ts +18 -11
  86. package/src/cli/ensure-drizzle-config.ts +11 -14
  87. package/src/cli/hero-meta.test.ts +15 -15
  88. package/src/cli/hero-meta.ts +10 -9
  89. package/src/cli/index.ts +36 -6
  90. package/src/cli/load-config.images.test.ts +16 -12
  91. package/src/cli/load-config.source.test.ts +50 -0
  92. package/src/cli/load-config.ts +34 -28
  93. package/src/cli/meilisearch-local.ts +1 -2
  94. package/src/cli/mode.ts +7 -58
  95. package/src/cli/registry.ts +175 -19
  96. package/src/cli/resolve-dev-sql-env.test.ts +8 -16
  97. package/src/cli/resolve-dev-sql-env.ts +13 -15
  98. package/src/cli/safe-defaults.test.ts +28 -10
  99. package/src/cli/schema.ts +65 -16
  100. package/src/cli/test.ts +58 -0
  101. package/src/cli/tui/App.tsx +252 -0
  102. package/src/cli/tui/DevLive.tsx +116 -0
  103. package/src/cli/tui/components/ConfirmDialog.tsx +48 -0
  104. package/src/cli/tui/components/HeaderBar.tsx +67 -0
  105. package/src/cli/tui/components/LogStream.tsx +47 -0
  106. package/src/cli/tui/components/PanelCard.tsx +39 -0
  107. package/src/cli/tui/components/SelectRow.tsx +37 -0
  108. package/src/cli/tui/components/SlashPalette.tsx +172 -0
  109. package/src/cli/tui/components/Spinner.tsx +32 -0
  110. package/src/cli/tui/components/StatusBar.tsx +51 -0
  111. package/src/cli/tui/components/StatusDot.tsx +37 -0
  112. package/src/cli/tui/components/TabBar.tsx +49 -0
  113. package/src/cli/tui/components/Wordmark.tsx +43 -0
  114. package/src/cli/tui/format.ts +38 -0
  115. package/src/cli/tui/keys.test.ts +18 -0
  116. package/src/cli/tui/keys.ts +26 -0
  117. package/src/cli/tui/launch.test.ts +18 -0
  118. package/src/cli/tui/launch.ts +57 -0
  119. package/src/cli/tui/panels/Dashboard.tsx +201 -0
  120. package/src/cli/tui/panels/Database.tsx +198 -0
  121. package/src/cli/tui/panels/Dev.tsx +257 -0
  122. package/src/cli/tui/panels/Docker.tsx +357 -0
  123. package/src/cli/tui/panels/Navigator.test.ts +22 -0
  124. package/src/cli/tui/panels/Navigator.tsx +213 -0
  125. package/src/cli/tui/slash-catalog.test.ts +31 -0
  126. package/src/cli/tui/slash-catalog.ts +184 -0
  127. package/src/cli/tui/slash-run.ts +54 -0
  128. package/src/cli/tui/state/ports.ts +95 -0
  129. package/src/cli/tui/theme.ts +24 -0
  130. package/src/cli/vault-cmd.test.ts +402 -0
  131. package/src/cli/vault-cmd.ts +727 -69
  132. package/src/cli/vault-secure-input.test.ts +56 -0
  133. package/src/cli/vault-secure-input.ts +124 -0
  134. package/src/compiler/effects-infer.ts +7 -0
  135. package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
  136. package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -1
  137. package/src/compiler/fixtures/skyport.expected.json +1 -1
  138. package/src/compiler-entry.ts +7 -0
  139. package/src/config/define-config.test.ts +111 -47
  140. package/src/config/driver-defaults.test.ts +16 -23
  141. package/src/config/driver-defaults.ts +33 -63
  142. package/src/config/index.ts +169 -144
  143. package/src/config/resolve-driver.test.ts +14 -19
  144. package/src/console/server/app.ts +4 -2
  145. package/src/console/server/console.test.ts +58 -1
  146. package/src/console/server/flows.ts +22 -2
  147. package/src/console/server/index.ts +3 -0
  148. package/src/console/server/operator-db.test.ts +55 -13
  149. package/src/console/server/operator-db.ts +305 -263
  150. package/src/console/server/serve.ts +16 -7
  151. package/src/console/server/state.ts +31 -9
  152. package/src/console/server/vault.test.ts +120 -5
  153. package/src/console/server/vault.ts +208 -12
  154. package/src/console/ui/dist/assets/{index-D-9KFce5.js → index--Y0Uaz-m.js} +2 -2
  155. package/src/console/ui/dist/assets/panel-vault-BkZdJPX8.js +1 -0
  156. package/src/console/ui/dist/assets/style-C3L349iZ.css +3 -0
  157. package/src/console/ui/dist/index.html +2 -2
  158. package/src/console/ui/shell/client.ts +16 -0
  159. package/src/console/ui/shell/panels/vault/VaultPanel.tsx +54 -1
  160. package/src/console/ui/vault/VaultA11yView.tsx +33 -1
  161. package/src/console/ui/vault/backend.test.ts +75 -0
  162. package/src/console/ui/vault/backend.ts +117 -0
  163. package/src/console/ui/vault/fixture.ts +21 -2
  164. package/src/console/ui/vault/index.ts +11 -1
  165. package/src/console/ui/vault/types.ts +26 -0
  166. package/src/docker/compose.ts +164 -61
  167. package/src/docker/derive.ts +106 -12
  168. package/src/docker/docker.test.ts +156 -110
  169. package/src/docker/helpers.ts +98 -0
  170. package/src/docker/images-config.test.ts +3 -8
  171. package/src/docker/index.ts +30 -5
  172. package/src/docker/recipes/index.ts +0 -3
  173. package/src/docker/recipes/llama-cpp.ts +4 -4
  174. package/src/docker/recipes/pgdog.ts +9 -2
  175. package/src/docker/resources.test.ts +71 -0
  176. package/src/docker/resources.ts +176 -0
  177. package/src/docker/stack-id.test.ts +11 -4
  178. package/src/docker/stack-id.ts +42 -32
  179. package/src/docker/stack.integration.test.ts +4 -15
  180. package/src/docker/types.ts +35 -3
  181. package/src/drivers/ai-ollama.integration.test.ts +2 -2
  182. package/src/drivers/conformance.test.ts +11 -12
  183. package/src/drivers/drizzle-dialect.test.ts +0 -4
  184. package/src/drivers/drizzle-dialect.ts +7 -13
  185. package/src/drivers/index.ts +24 -7
  186. package/src/drivers/journal-postgres.test.ts +3 -1
  187. package/src/drivers/journal-postgres.ts +4 -2
  188. package/src/drivers/meilisearch.ts +1 -1
  189. package/src/drivers/pglite.ts +28 -5
  190. package/src/drivers/types.ts +9 -11
  191. package/src/drivers/vault-aws-secrets-manager.test.ts +159 -0
  192. package/src/drivers/vault-aws-secrets-manager.ts +333 -0
  193. package/src/drivers/vault-builtin.test.ts +110 -0
  194. package/src/drivers/vault-builtin.ts +184 -0
  195. package/src/drivers/vault-driver-removal.test.ts +13 -0
  196. package/src/drivers/vault-managed.test.ts +95 -0
  197. package/src/drivers/vault-managed.ts +101 -25
  198. package/src/drivers/vault-types.ts +25 -5
  199. package/src/elements/ai/runtime.ts +1 -1
  200. package/src/elements/clock/chaos.test.ts +4 -1
  201. package/src/elements/clock/durable.ts +57 -4
  202. package/src/elements/clock.test.ts +13 -14
  203. package/src/elements/gate/config.ts +13 -3
  204. package/src/elements/gate/constants.ts +18 -0
  205. package/src/elements/gate/declare.ts +1 -1
  206. package/src/elements/gate/strategies.ts +2 -12
  207. package/src/elements/gate.test.ts +1 -1
  208. package/src/elements/gate.ts +2 -2
  209. package/src/elements/store/domain-ddl.test.ts +5 -12
  210. package/src/elements/store/emit-drizzle.ts +44 -19
  211. package/src/elements/store/index-boot.test.ts +15 -116
  212. package/src/elements/store/load-plugin-tables.ts +1 -1
  213. package/src/elements/store/resource-list-docs.fixture.ts +12 -6
  214. package/src/elements/store/resource-list-docs.test.ts +64 -44
  215. package/src/elements/store/resource.test.ts +17 -10
  216. package/src/elements/store/runtime.ts +9 -12
  217. package/src/elements/store/schema-decl.test.ts +16 -32
  218. package/src/elements/store/seed.test.ts +1 -2
  219. package/src/elements/store/seed.ts +7 -8
  220. package/src/elements/store/sql-condition.test.ts +2 -2
  221. package/src/elements/store/sql-session.test.ts +8 -10
  222. package/src/elements/store/sql-session.ts +10 -2
  223. package/src/elements/store.test.ts +13 -13
  224. package/src/elements/vault/audit.ts +233 -0
  225. package/src/elements/vault/boot-chain.test.ts +78 -0
  226. package/src/elements/vault/boot-chain.ts +43 -39
  227. package/src/elements/vault/builtin-adapter.test.ts +479 -0
  228. package/src/elements/vault/builtin-adapter.ts +1184 -0
  229. package/src/elements/vault/crypto.test.ts +237 -0
  230. package/src/elements/vault/crypto.ts +431 -0
  231. package/src/elements/vault/declare.ts +164 -3
  232. package/src/elements/vault/errors.ts +56 -0
  233. package/src/elements/vault/kms-unseal.test.ts +76 -0
  234. package/src/elements/vault/kms-unseal.ts +181 -0
  235. package/src/elements/vault/path.ts +90 -0
  236. package/src/elements/vault/resilience.test.ts +102 -0
  237. package/src/elements/vault/resilience.ts +107 -0
  238. package/src/elements/vault/runtime.ts +36 -4
  239. package/src/elements/vault/security-checklist.test.ts +130 -0
  240. package/src/elements/vault/storage.ts +448 -0
  241. package/src/elements/vault/types.ts +288 -0
  242. package/src/elements/vault/unseal.ts +150 -0
  243. package/src/elements/vault.test.ts +72 -4
  244. package/src/elements/vault.ts +91 -2
  245. package/src/full.ts +248 -0
  246. package/src/http.ts +41 -0
  247. package/src/i18n/interpolate-simple.ts +37 -0
  248. package/src/i18n/messages.ts +51 -4
  249. package/src/i18n-entry.ts +7 -0
  250. package/src/index.ts +35 -145
  251. package/src/journal-entry.ts +20 -0
  252. package/src/kernel/adopt-barrel-fresh.test.ts +25 -10
  253. package/src/kernel/app-auth.ts +98 -0
  254. package/src/kernel/app.ts +77 -110
  255. package/src/kernel/auto-registry.test.ts +2 -2
  256. package/src/kernel/boot-bind/ai.test.ts +5 -5
  257. package/src/kernel/boot-bind/ai.ts +2 -1
  258. package/src/kernel/boot-bind/channel.test.ts +6 -6
  259. package/src/kernel/boot-bind/channel.ts +3 -10
  260. package/src/kernel/boot-bind/clock.ts +2 -2
  261. package/src/kernel/boot-bind/gate.ts +5 -9
  262. package/src/kernel/boot-bind/honor-config.test.ts +42 -42
  263. package/src/kernel/boot-bind/journal.ts +2 -2
  264. package/src/kernel/boot-bind/store.test.ts +43 -44
  265. package/src/kernel/boot-bind/store.ts +16 -41
  266. package/src/kernel/boot-bind/vault.ts +16 -1
  267. package/src/kernel/boot.test.ts +13 -19
  268. package/src/kernel/boot.ts +31 -19
  269. package/src/kernel/budget-entry.ts +1 -1
  270. package/src/kernel/compensate.test.ts +288 -1
  271. package/src/kernel/compensate.ts +126 -0
  272. package/src/kernel/concurrency.test.ts +10 -9
  273. package/src/kernel/effects-stamping.test.ts +27 -2
  274. package/src/kernel/element-registries.ts +5 -3
  275. package/src/kernel/flow.ts +4 -2
  276. package/src/kernel/fx.test.ts +119 -3
  277. package/src/kernel/fx.ts +215 -40
  278. package/src/kernel/index.ts +14 -0
  279. package/src/kernel/journal.ts +130 -7
  280. package/src/kernel/pipeline.test.ts +20 -6
  281. package/src/kernel/redacted.test.ts +35 -0
  282. package/src/kernel/redacted.ts +24 -2
  283. package/src/kernel/router/create-default.ts +16 -0
  284. package/src/kernel/router/create-edge.ts +18 -0
  285. package/src/kernel/router/create.ts +23 -0
  286. package/src/kernel/router/index.ts +23 -0
  287. package/src/kernel/router/linear.ts +88 -0
  288. package/src/kernel/router/regexp.ts +188 -0
  289. package/src/kernel/router/smart.ts +120 -0
  290. package/src/kernel/router/trie.ts +108 -0
  291. package/src/kernel/router/types.ts +56 -0
  292. package/src/kernel/router.ts +18 -532
  293. package/src/kernel-entry.ts +43 -0
  294. package/src/manifest/fixtures/skyport.excerpt.json +1 -1
  295. package/src/manifest/fixtures/skyport.manifest.json +1 -1
  296. package/src/plugins/config-source.test.ts +7 -7
  297. package/src/release/build-lib.ts +61 -0
  298. package/src/release/exports.test.ts +4 -2
  299. package/src/release/exports.ts +30 -4
  300. package/src/release/measure.ts +101 -22
  301. package/src/runs/duckdb.ts +7 -2
  302. package/src/shared/lazy-src.ts +79 -0
  303. package/src/shared/optional-peer.ts +41 -0
  304. package/src/term.test.ts +3 -44
  305. package/src/test/create-test-app.ts +12 -0
  306. package/src/test/provisions.integration.test.ts +1 -1
  307. package/src/test/reset-element-registries.ts +2 -0
  308. package/src/upgrade/codemods.test.ts +7 -20
  309. package/src/upgrade/codemods.ts +93 -60
  310. package/site/content/docs/recipes/openbao.mdx +0 -141
  311. package/src/cli/ask-dev-mode.ts +0 -40
  312. package/src/cli/dev-mode.test.ts +0 -45
  313. package/src/cli/dev-mode.ts +0 -78
  314. package/src/cli/openbao-bootstrap.test.ts +0 -150
  315. package/src/cli/openbao-bootstrap.ts +0 -321
  316. package/src/cli/openbao-restart.integration.test.ts +0 -145
  317. package/src/console/ui/dist/assets/panel-vault-Za1GyJfM.js +0 -1
  318. package/src/console/ui/dist/assets/style-C8MxEWPd.css +0 -3
  319. package/src/docker/recipes/openbao.ts +0 -47
  320. package/src/drivers/libsql.ts +0 -179
  321. package/src/drivers/sqlite.ts +0 -44
  322. package/src/drivers/vault-openbao.test.ts +0 -97
  323. package/src/drivers/vault-openbao.ts +0 -143
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "okengine",
3
- "version": "0.10.3",
3
+ "version": "0.11.1",
4
4
  "description": "One law. Eight elements. Ten exports. One package. One manifest. Every backend need is derived, never added.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -16,6 +16,7 @@
16
16
  ],
17
17
  "files": [
18
18
  "src",
19
+ "dist",
19
20
  "manifest.v1.schema.json",
20
21
  "AGENTS.md",
21
22
  "README.md",
@@ -24,7 +25,48 @@
24
25
  "type": "module",
25
26
  "sideEffects": false,
26
27
  "exports": {
27
- ".": "./src/index.ts",
28
+ ".": {
29
+ "types": "./src/index.ts",
30
+ "bun": "./src/index.ts",
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
33
+ },
34
+ "./http": {
35
+ "types": "./src/http.ts",
36
+ "bun": "./src/http.ts",
37
+ "import": "./dist/http.js",
38
+ "default": "./dist/http.js"
39
+ },
40
+ "./kernel": {
41
+ "types": "./src/kernel-entry.ts",
42
+ "bun": "./src/kernel-entry.ts",
43
+ "import": "./dist/kernel-entry.js",
44
+ "default": "./dist/kernel-entry.js"
45
+ },
46
+ "./full": {
47
+ "types": "./src/full.ts",
48
+ "bun": "./src/full.ts",
49
+ "import": "./dist/full.js",
50
+ "default": "./dist/full.js"
51
+ },
52
+ "./i18n": {
53
+ "types": "./src/i18n-entry.ts",
54
+ "bun": "./src/i18n-entry.ts",
55
+ "import": "./dist/i18n-entry.js",
56
+ "default": "./dist/i18n-entry.js"
57
+ },
58
+ "./compiler": {
59
+ "types": "./src/compiler-entry.ts",
60
+ "bun": "./src/compiler-entry.ts",
61
+ "import": "./dist/compiler-entry.js",
62
+ "default": "./dist/compiler-entry.js"
63
+ },
64
+ "./journal": {
65
+ "types": "./src/journal-entry.ts",
66
+ "bun": "./src/journal-entry.ts",
67
+ "import": "./dist/journal-entry.js",
68
+ "default": "./dist/journal-entry.js"
69
+ },
28
70
  "./client": "./src/client/index.ts",
29
71
  "./client/auth": "./src/client/auth.ts",
30
72
  "./client-react": "./src/client-react/index.ts",
@@ -56,7 +98,8 @@
56
98
  "test:coverage": "bun test --coverage --pass-with-no-tests",
57
99
  "test:console:smoke": "bunx playwright test tests/console/smoke.spec.ts",
58
100
  "build": "bunx vite build --config src/console/ui/vite.config.ts",
59
- "prepack": "bun run build",
101
+ "build:lib": "bun src/release/build-lib.ts",
102
+ "prepack": "bun run build && bun run build:lib",
60
103
  "bench": "bun test ./src/runtime/cold-start.bench.ts src/client/budget.test.ts src/console/budget.test.ts src/kernel/budget.test.ts src/kernel/routing-budget.test.ts src/runs/bench.test.ts",
61
104
  "budgets": "bun src/release/publish.ts",
62
105
  "gate": "PUBLISH_GATE=1 bun test src/cli/doc-staleness.test.ts src/cli/competitor-mention-removal.test.ts src/drivers/vault-driver-removal.test.ts src/kernel/errors.registry.test.ts src/upgrade/codemods.test.ts scripts/publish.gate.test.ts",
@@ -69,11 +112,7 @@
69
112
  },
70
113
  "dependencies": {
71
114
  "@clack/prompts": "^1.7.0",
72
- "@duckdb/node-api": "^1.5.5-r.2",
73
- "ajv": "^8.20.0",
74
- "ajv-formats": "^3.0.1",
75
115
  "intl-messageformat": "^11.2.13",
76
- "oxc-parser": "^0.142.0",
77
116
  "sently": "1.2.1"
78
117
  },
79
118
  "devDependencies": {
@@ -83,9 +122,9 @@
83
122
  "@codemirror/state": "^6.7.1",
84
123
  "@codemirror/theme-one-dark": "^6.1.3",
85
124
  "@codemirror/view": "^6.43.7",
125
+ "@duckdb/node-api": "^1.5.5-r.2",
86
126
  "@electric-sql/pglite": "^0.5.4",
87
127
  "@electric-sql/pglite-pgvector": "^0.0.5",
88
- "@libsql/client": "^0.17.4",
89
128
  "@oxc-project/types": "^0.142.0",
90
129
  "@playwright/test": "^1.62.1",
91
130
  "@sinclair/typebox": "^0.34.52",
@@ -96,6 +135,8 @@
96
135
  "@types/react": "^19.2.18",
97
136
  "@types/react-dom": "^19.2.4",
98
137
  "@vitejs/plugin-react": "^6.0.5",
138
+ "ajv": "^8.20.0",
139
+ "ajv-formats": "^3.0.1",
99
140
  "arktype": "^2.2.3",
100
141
  "axe-core": "^4.12.1",
101
142
  "clsx": "^2.1.1",
@@ -106,6 +147,7 @@
106
147
  "gflows": "^1.2.1",
107
148
  "happy-dom": "^20.11.1",
108
149
  "mermaid": "^11.16.0",
150
+ "oxc-parser": "^0.142.0",
109
151
  "oxfmt": "^0.61.0",
110
152
  "oxlint": "^1.76.0",
111
153
  "oxlint-tsgolint": "^7.0.2001",
@@ -119,22 +161,39 @@
119
161
  "zod": "^4.4.3"
120
162
  },
121
163
  "peerDependencies": {
164
+ "@aws-sdk/client-kms": ">=3.0.0",
165
+ "@aws-sdk/client-secrets-manager": ">=3.0.0",
166
+ "@duckdb/node-api": ">=1.5.0",
122
167
  "@electric-sql/pglite": ">=0.5.0",
123
168
  "@electric-sql/pglite-pgvector": ">=0.0.5",
124
- "@libsql/client": ">=0.15.0",
169
+ "ajv": ">=8.0.0",
170
+ "ajv-formats": ">=3.0.0",
125
171
  "drizzle-kit": ">=1.0.0-rc.0",
126
172
  "drizzle-orm": ">=1.0.0-rc.0",
127
173
  "drizzle-seed": ">=0.3.0",
174
+ "oxc-parser": ">=0.140.0",
128
175
  "zod": ">=3.23.0"
129
176
  },
130
177
  "peerDependenciesMeta": {
178
+ "@aws-sdk/client-kms": {
179
+ "optional": true
180
+ },
181
+ "@aws-sdk/client-secrets-manager": {
182
+ "optional": true
183
+ },
184
+ "@duckdb/node-api": {
185
+ "optional": true
186
+ },
131
187
  "@electric-sql/pglite": {
132
188
  "optional": true
133
189
  },
134
190
  "@electric-sql/pglite-pgvector": {
135
191
  "optional": true
136
192
  },
137
- "@libsql/client": {
193
+ "ajv": {
194
+ "optional": true
195
+ },
196
+ "ajv-formats": {
138
197
  "optional": true
139
198
  },
140
199
  "drizzle-kit": {
@@ -146,10 +205,17 @@
146
205
  "drizzle-seed": {
147
206
  "optional": true
148
207
  },
208
+ "oxc-parser": {
209
+ "optional": true
210
+ },
149
211
  "zod": {
150
212
  "optional": true
151
213
  }
152
214
  },
215
+ "optionalDependencies": {
216
+ "ink": "^6.0.0",
217
+ "react": "^19.2.8"
218
+ },
153
219
  "engines": {
154
220
  "bun": ">=1.3.14"
155
221
  }
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  title: Docker Swarm
3
- description: Deploy the generated compose stack with docker stack deploy — PgDog, HEALTHCHECK readiness, graceful SIGTERM, known multi-instance limits, and optional Caddy or Traefik.
3
+ description: Deploy with docker stack deploy — docker-stack.yml, PgDog, HEALTHCHECK readiness, graceful SIGTERM, known multi-instance limits, and optional Caddy or Traefik.
4
4
  icon: Ship
5
5
  source: README.md
6
6
  ---
7
7
 
8
- Swarm consumes the same files `oke docker --prod` already writes. It adds
9
- built-in orchestration (scale, rolling updates, routing mesh) with a lower
10
- learning curve than Kubernetes. Scale replaceable replicas; share durable drivers.
8
+ Swarm consumes the stack file `oke docker --stack` writes. It adds built-in
9
+ orchestration (scale, rolling updates, routing mesh) with a lower learning
10
+ curve than Kubernetes. Scale replaceable replicas; share durable drivers.
11
11
 
12
12
  <Callout title="The one rule">
13
13
  Deploy with `docker stack deploy`. Docker’s single `HEALTHCHECK` targets `GET /_/ready`. Treat
@@ -20,34 +20,35 @@ learning curve than Kubernetes. Scale replaceable replicas; share durable driver
20
20
  <Steps>
21
21
 
22
22
  <Step>
23
- ### Derive the prod compose layers
23
+ ### Derive the Swarm stack file
24
24
 
25
25
  ```bash
26
- oke docker --prod
26
+ oke docker --stack
27
27
  ```
28
28
 
29
- Emits `Dockerfile`, per-role layers, `compose.prod.yml` (`HEALTHCHECK` →
30
- `/_/ready`, `deploy.*`, `stop_grace_period: 30s`), and **`compose.all.yml`**
31
- (layers 1–3 merged). `compose.override.yml` is yours (never written by oke).
29
+ Emits `Dockerfile` + **`docker-stack.yml`** (overlay network, `HEALTHCHECK` →
30
+ `/_/ready`, `deploy.*`, `stop_grace_period: 30s`, resource limits from the
31
+ default **4 CPU / 8 GiB** budget override with `--cpus` / `--memory`).
32
+
33
+ Prefer `--stack` over composing many `-c` files. The default `oke docker`
34
+ (single `docker-compose.yml`) stays for plain Compose hosts.
32
35
 
33
36
  </Step>
34
37
 
35
38
  <Step>
36
39
  ### Build the app image, init Swarm, deploy
37
40
 
38
- `docker stack deploy` ignores `build` — tag first (name matches `compose.yml`).
39
- Prefer the single merged file:
41
+ `docker stack deploy` ignores `build` — tag first (name matches the stack file).
40
42
 
41
43
  ```bash
42
44
  docker build -t oke-<app>:latest -f docker/Dockerfile .
43
45
  docker swarm init
44
46
  cd docker
45
- docker stack deploy -c compose.all.yml myapp
47
+ docker stack deploy -c docker-stack.yml myapp
46
48
  ```
47
49
 
48
- Optional: `-c compose.override.yml` after that for local tweaks. Create
49
- `secrets:` names via `docker secret create`, or drop those keys in
50
- `compose.override.yml` while using `.env.docker`.
50
+ Create `secrets:` names via `docker secret create` when you use secret refs,
51
+ or keep credentials in `.env.docker` for single-node labs.
51
52
 
52
53
  </Step>
53
54
 
@@ -59,9 +60,8 @@ docker service scale myapp_app=3
59
60
  docker service update --image oke-<app>:latest myapp_app
60
61
  ```
61
62
 
62
- Prod overlay: `update_config` (`parallelism: 1`, `order: start-first`,
63
+ Prod deploy block: `update_config` (`parallelism: 1`, `order: start-first`,
63
64
  `failure_action: rollback`) and `restart_policy.condition: on-failure`.
64
- Tweak in `compose.override.yml`.
65
65
 
66
66
  </Step>
67
67
 
@@ -69,7 +69,7 @@ Tweak in `compose.override.yml`.
69
69
 
70
70
  ## Share backing services
71
71
 
72
- Pin docker/prod drivers to shared stores:
72
+ Pin `dev`/`prod` drivers to shared stores:
73
73
 
74
74
  | Concern | Driver | Shared backend |
75
75
  | ----------------------------- | ---------------------------- | ------------------------------------------------- |
@@ -83,9 +83,10 @@ Pin docker/prod drivers to shared stores:
83
83
  Bun.SQL defaults to **10** connections per process — fine for one replica.
84
84
  Scale the Swarm service and `N × pool` can exceed Postgres `max_connections`.
85
85
 
86
- When both `store.sql` and `pgdog` are pinned (docker/prod default in templates),
86
+ When both `store.sql` and `pgdog` are pinned (`dev`/`prod` default in templates),
87
87
  `DATABASE_URL` points at PgDog on port `6432` — transaction pooling, wire-protocol
88
- transparent to Bun.SQL / Drizzle. No app code changes.
88
+ transparent to Bun.SQL / Drizzle. No app code changes. Configs:
89
+ `docker/pgdog/pgdog.toml` + `docker/pgdog/users.toml`.
89
90
 
90
91
  **Why PgDog.** Transaction pooling fixes the connection math. Naive poolers can
91
92
  leak session state (`SET`, RLS vars, `LISTEN`/`NOTIFY`) across clients; PgDog
@@ -100,129 +101,65 @@ not configured in the generated stack yet.
100
101
  the same way — driver id stays `redis`, same `REDIS_URL`. Image table + one-line
101
102
  licenses: [Store · KV](/docs/elements/store#kv).
102
103
 
103
- ## HEALTHCHECK (not two probes)
104
-
105
- Swarm has one Docker `HEALTHCHECK` — no separate readiness/liveness.
106
-
107
- | Endpoint | Role in OKE | Swarm |
108
- | -------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------ |
109
- | `GET /_/ready` | Kernel readiness (`booting` → `orphan_scan` → `ready`) | **Use this** — mesh + rolling updates wait; `start_period: 60s` covers orphan resume |
110
- | `GET /health` | App liveness (create-oke) | External monitors only — not a second native probe |
104
+ ## Readiness and liveness
111
105
 
112
- `/_/ready` returns `200 { ready: true }` only after boot and the durable orphan
113
- scan finish. While booting or scanning it returns
114
- `503 { ready: false, reason: "booting" | "orphan_scan" }`.
115
-
116
- **Consequence:** orphan scan delays “healthy” (and traffic) on purpose. After
117
- `start_period`, failing `/_/ready` can mark the task unhealthy and hit
118
- `restart_policy` — Swarm cannot drain traffic without also counting toward restart.
106
+ | Endpoint | Role | On Swarm |
107
+ | -------------- | ------------------------------------------------------ | ----------------------------------------------------- |
108
+ | `GET /_/ready` | Kernel readiness (`booting` `orphan_scan` → `ready`) | Single Docker `HEALTHCHECK` — routing mesh waits here |
109
+ | `GET /health` | App liveness | External monitors only |
119
110
 
120
111
  ## Graceful shutdown
121
112
 
122
- On `SIGTERM` / `SIGINT`, `installGracefulShutdown` (wired by `oke dev`’s app
123
- runner; call it next to `createBunRuntime().serve` in custom entries):
124
-
125
- 1. Stops accepting new connections
126
- 2. Releases **Clock** cron leases and **Journal** run leases held by this instance
127
- 3. Closes element runtimes and exits
128
-
129
- Swarm sends SIGTERM on service update and scale-down the same way.
130
-
131
- Signal message leases have no proactive release today — survivors reclaim after
132
- the visibility TTL (default 30s). `compose.prod.yml` sets `stop_grace_period: 30s`
133
- (peer of K8s `terminationGracePeriodSeconds`) so release can finish.
113
+ `stop_grace_period: 30s` gives `installGracefulShutdown` time to release Clock /
114
+ Journal leases before the task is killed. Signal message leases reclaim after
115
+ visibility TTL on survivors.
134
116
 
135
117
  ## Reverse proxy
136
118
 
137
- Swarm's routing mesh reaches tasks; it does **not** issue TLS certificates.
138
- For HTTPS on the same files, opt in to `images.proxy`:
139
-
140
- | Choice | Best for | How routing works |
141
- | ---------------------------- | ------------------------------------------ | ------------------------------------------------------------------ |
142
- | **Caddy** (`caddy:2-alpine`) | Single instance, simplest automatic HTTPS | Generated `Caddyfile` → `reverse_proxy app:6530` |
143
- | **Traefik** (`traefik:v3.3`) | Horizontally scaled compose / Swarm stacks | Docker labels on `app`; replicas auto-discovered and load-balanced |
144
-
145
- ```typescript title="oke.config.ts"
146
- images: {
147
- // …
148
- proxy: "caddy:2-alpine", // or "traefik:v3.3"
149
- },
150
- ```
151
-
152
- ```bash title="docker/.env.docker"
153
- OKE_PROXY_HOST=app.example.com
154
- OKE_PROXY_ACME_EMAIL=admin@example.com
155
- ```
156
-
157
- Include `compose.proxy.yml` in the `-c` list. Edge publishes `80`/`443`.
158
- Set `allowedHosts` to your public hostname ([Security](/docs/reference/security)).
159
-
160
- Traefik never mounts raw `docker.sock` — only a filtered
161
- `tecnativa/docker-socket-proxy` on the internal network. Full custom-domain,
162
- Let's Encrypt, and socket-proxy rationale → [Reverse proxy](/docs/deployment/reverse-proxy).
119
+ Same opt-in `images.proxy` pins as plain Compose Caddy or Traefik. Re-run
120
+ `oke docker --stack` after pinning. Details:
121
+ [Reverse proxy](/docs/deployment/reverse-proxy).
163
122
 
164
123
  ## Known multi-instance limits
165
124
 
166
- | Surface | Multi-instance today |
167
- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
168
- | Clock (`postgres` / shared `file`) | Shared leader election |
169
- | Journal (`postgres` / shared `file`) | Shared durable runs + orphan resume |
170
- | Gate rates (`drivers.store.kv: redis`) | Shared counters |
171
- | Store SQL / KV redis / files `s3` | Shared |
172
- | Store files `fs` | **Per-instance filesystem** — boot warns; use `s3` when scaled |
173
- | Signal `redis` | Emit relays to Redis; **consume / `live` / `drain` are process-local outbox** until Streams consume ships |
174
- | Channel suppression / consent / receipts | **Default stores are process-local** — opt-out on replica A is invisible to B until a durable driver ships |
125
+ Same table as [Docker](/docs/deployment/docker#known-multi-instance-limits)
126
+ Clock / Journal / Gate redis / Store shared; Signal consume and Channel consent
127
+ stores stay process-local until durable drivers ship.
175
128
 
176
129
  ## Troubleshooting
177
130
 
178
131
  <Accordions>
179
- <Accordion title="Stack deploy ignores my Dockerfile build">
180
-
181
- Build and tag first (`docker build -t oke-<app>:latest …`). Swarm runs the
182
- `image:` tag only — never compose `build:`.
183
-
184
- </Accordion>
185
- <Accordion title="New replica gets traffic before orphan scan finishes">
186
-
187
- Confirm `compose.prod.yml` is in the `-c` list and the task health-checks
188
- `/_/ready`. Without that HEALTHCHECK, Swarm treats “container started” as ready.
189
-
190
- </Accordion>
191
- <Accordion title="Rate limits look twice as high after scaling to 2">
132
+ <Accordion title="stack deploy ignores build">
192
133
 
193
- `drivers.store.kv` must be `redis` with `REDIS_URL` set. A missing URL **fails
194
- boot** (no silent memory fallback). Declaring `memory` for local is fine;
195
- docker/prod should stay on redis.
134
+ Build and tag `oke-<app>:latest` first (`docker build -f docker/Dockerfile .`).
135
+ Swarm never runs Compose `build:`.
196
136
 
197
137
  </Accordion>
198
- <Accordion title="Files uploaded on task A are missing on task B">
138
+ <Accordion title="New task gets traffic before orphan scan finishes">
199
139
 
200
- `drivers.store.files: "fs"` is single-host. Switch docker/prod to `s3`
201
- (create-oke templates already do).
140
+ Confirm `HEALTHCHECK` targets `/_/ready` in `docker-stack.yml`. Without it,
141
+ Swarm treats “container started” as ready.
202
142
 
203
143
  </Accordion>
204
- <Accordion title="Multi-node workers cannot reach store-sql">
144
+ <Accordion title="Overlay networking / multi-node volumes">
205
145
 
206
- Generated `networks.oke.driver` is `bridge` (fine for single-node `swarm init`).
207
- Multi-node: set `driver: overlay` in `compose.override.yml`.
146
+ Multi-node needs shared Postgres / Redis / S3 — do not rely on local named
147
+ volumes for durable state across nodes.
208
148
 
209
149
  </Accordion>
210
150
  </Accordions>
211
151
 
212
152
  ## Learn more
213
153
 
214
- - [Deployment](/docs/deployment) — choose compose, Swarm, or Kubernetes
215
- - [Docker](/docs/deployment/docker) — plain compose without Swarm
216
- - [Reverse proxy](/docs/deployment/reverse-proxy) — Caddy / Traefik in full
154
+ - [Docker](/docs/deployment/docker) — plain compose default
155
+ - [Reverse proxy](/docs/deployment/reverse-proxy) — Caddy / Traefik
217
156
  - [Kubernetes](/docs/deployment/kubernetes) — Deployment, probes, Ingress
218
- - [CLI](/docs/reference/cli) — `oke docker --prod`, `oke start`
219
- - [Store](/docs/elements/store) — PgDog and facets
220
- - [Flow](/docs/elements/flow) — durable journal
157
+ - [CLI](/docs/reference/cli) — `oke docker --stack`
221
158
 
222
159
  ## Next
223
160
 
224
161
  <Cards>
225
- <Card title="Deployment" href="/docs/deployment" />
226
162
  <Card title="Docker" href="/docs/deployment/docker" />
163
+ <Card title="Reverse proxy" href="/docs/deployment/reverse-proxy" />
227
164
  <Card title="Kubernetes" href="/docs/deployment/kubernetes" />
228
165
  </Cards>
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  title: Docker
3
- description: Deploy with plain docker compose — shared drivers, PgDog, readiness, graceful SIGTERM, and opt-in Caddy or Traefik when you need TLS without an orchestrator.
3
+ description: Deploy with plain docker compose — single production-grade docker-compose.yml, shared drivers, PgDog, readiness, graceful SIGTERM, and opt-in Caddy or Traefik when you need TLS without an orchestrator.
4
4
  icon: Package
5
5
  source: README.md
6
6
  ---
7
7
 
8
8
  Plain `docker compose` is the simplest production shape: single or few app
9
9
  instances on one host (or a small set you manage yourself). Derive with
10
- `oke docker --prod`; opt into a proxy only when you need HTTPS at the edge.
10
+ `oke docker`; opt into a proxy only when you need HTTPS at the edge.
11
11
 
12
12
  <Callout title="The one rule">
13
13
  Treat every app container as replaceable. Put durable state in Postgres / Redis / S3, wait on `GET
@@ -23,11 +23,21 @@ instances on one host (or a small set you manage yourself). Derive with
23
23
  ### Derive compose
24
24
 
25
25
  ```bash
26
- oke docker --prod
26
+ oke docker
27
27
  ```
28
28
 
29
- Writes `Dockerfile`, `compose.yml`, per-role layers, and `compose.prod.yml`.
30
- Also emits **`compose.all.yml`** (same layers merged) optional single file.
29
+ Writes `Dockerfile` + production-grade **`docker-compose.yml`** under `docker/`
30
+ (readiness HEALTHCHECK on `/_/ready`, deploy policy, resource limits).
31
+ Default host budget is **4 CPU / 8 GiB** — override with `--cpus` / `--memory`.
32
+
33
+ Other layouts when you ask for them:
34
+
35
+ | Flag | Output |
36
+ | ----------- | --------------------------------------------------------- |
37
+ | _(default)_ | `docker-compose.yml` |
38
+ | `--split` | `compose.yml` + `compose.<role>.yml` + `compose.prod.yml` |
39
+ | `--stack` | `docker-stack.yml` for Swarm (`docker stack deploy -c`) |
40
+
31
41
  Without a proxy, the app still publishes port `6530`.
32
42
 
33
43
  </Step>
@@ -35,33 +45,28 @@ Without a proxy, the app still publishes port `6530`.
35
45
  <Step>
36
46
  ### Share backing services
37
47
 
38
- Pin docker/prod drivers to shared stores (create-oke templates already do):
48
+ Pin `dev`/`prod` drivers to shared stores (create-oke templates already do
49
+ same protocols locally via `oke dev` and in production):
39
50
 
40
- | Concern | Driver | Shared backend |
41
- | ----------------------------- | ---------------------------- | ------------------------------------------------- |
42
- | SQL / durable journal / clock | `postgres` | Postgres (optionally via PgDog) |
43
- | Gate rate counters | `redis` (`drivers.store.kv`) | Redis / Valkey / Dragonfly (`images["store.kv"]`) |
44
- | Files | `s3` | S3-compatible object store |
45
- | Signal | see known limits below | — |
51
+ | Concern | Driver | Shared backend |
52
+ | ----------------------------- | ---------------------------- | ---------------------------------------------- |
53
+ | SQL / durable journal / clock | `postgres` | Postgres (optionally via PgDog) |
54
+ | Gate rate counters | `redis` (`drivers.store.kv`) | Redis / Valkey / Dragonfly (`images.store.kv`) |
55
+ | Files | `s3` | S3-compatible object store |
56
+ | Signal | see known limits below | — |
46
57
 
47
58
  </Step>
48
59
 
49
60
  <Step>
50
61
  ### Bring the stack up
51
62
 
52
- Default — organized per-role files (`oke docker` prints the `-f` order):
53
-
54
63
  ```bash
55
64
  cd docker
56
- docker compose -f compose.yml -f compose.store.sql.yml \
57
- -f compose.pgdog.yml -f compose.prod.yml up -d
65
+ docker compose -f docker-compose.yml up -d
58
66
  ```
59
67
 
60
- Pass every `-f` file listed. For TLS at the edge, see
61
- [Reverse proxy](#reverse-proxy), then include `compose.proxy.yml`.
62
-
63
- Single-file alternative: `docker compose -f compose.all.yml up -d`
64
- (add `-f compose.override.yml` if you use one).
68
+ Add `-f docker-compose.override.yml` if you keep local tweaks (oke never writes
69
+ that file). With `--split`, pass every `-f` file `oke docker` prints.
65
70
 
66
71
  </Step>
67
72
 
@@ -72,9 +77,10 @@ Single-file alternative: `docker compose -f compose.all.yml up -d`
72
77
  Bun.SQL defaults to **10** connections per process — fine for one instance.
73
78
  Scale out and `N × pool` can exceed Postgres `max_connections`.
74
79
 
75
- When both `store.sql` and `pgdog` are pinned (docker/prod default in templates),
80
+ When both `store.sql` and `pgdog` are pinned (dev/prod default in templates),
76
81
  `DATABASE_URL` points at PgDog on port `6432` — transaction pooling, wire-protocol
77
- transparent to Bun.SQL / Drizzle. No app code changes.
82
+ transparent to Bun.SQL / Drizzle. No app code changes. Configs land in
83
+ `docker/pgdog/pgdog.toml` and `docker/pgdog/users.toml`.
78
84
 
79
85
  **Why PgDog.** Transaction pooling fixes the connection math. Naive poolers can
80
86
  leak session state (`SET`, RLS vars, `LISTEN`/`NOTIFY`) across clients; PgDog
@@ -91,10 +97,10 @@ licenses: [Store · KV](/docs/elements/store#kv).
91
97
 
92
98
  ## Readiness and liveness
93
99
 
94
- | Endpoint | Role | On plain compose |
95
- | -------------- | ----------------------------------------------------------- | ---------------------------------------------------------- |
96
- | `GET /_/ready` | Kernel readiness (`booting` → `orphan_scan` → `ready`) | `compose.prod.yml` HEALTHCHECK; load balancers should wait |
97
- | `GET /health` | App liveness (create-oke ships one) — cheap “process alive” | External monitors only — not orphan-scan aware |
100
+ | Endpoint | Role | On plain compose |
101
+ | -------------- | ----------------------------------------------------------- | ---------------------------------------------------- |
102
+ | `GET /_/ready` | Kernel readiness (`booting` → `orphan_scan` → `ready`) | HEALTHCHECK in `docker-compose.yml`; LBs should wait |
103
+ | `GET /health` | App liveness (create-oke ships one) — cheap “process alive” | External monitors only — not orphan-scan aware |
98
104
 
99
105
  `/_/ready` returns `200 { ready: true }` only after boot and the durable orphan
100
106
  scan finish. While booting or scanning it returns
@@ -113,7 +119,7 @@ runner; call it next to `createBunRuntime().serve` in custom entries):
113
119
  3. Closes element runtimes and exits
114
120
 
115
121
  Signal message leases have no proactive release today — survivors reclaim after
116
- the visibility TTL (default 30s). `compose.prod.yml` sets `stop_grace_period: 30s`
122
+ the visibility TTL (default 30s). Generated compose sets `stop_grace_period: 30s`
117
123
  so the release path can finish (≥ typical Clock / Journal / Signal lease TTL).
118
124
 
119
125
  ## Reverse proxy
@@ -138,7 +144,7 @@ OKE_PROXY_HOST=app.example.com
138
144
  OKE_PROXY_ACME_EMAIL=admin@example.com
139
145
  ```
140
146
 
141
- Re-run `oke docker --prod`. Edge publishes `80`/`443`; `app` stays internal.
147
+ Re-run `oke docker`. Edge publishes `80`/`443`; `app` stays internal.
142
148
  Set `allowedHosts` to your public hostname ([Security](/docs/reference/security)).
143
149
 
144
150
  Traefik never mounts raw `docker.sock` — only a filtered
@@ -163,25 +169,26 @@ Let's Encrypt, and socket-proxy rationale → [Reverse proxy](/docs/deployment/r
163
169
  <Accordion title="compose up --scale app=N fails with port already allocated">
164
170
 
165
171
  You still have `6530:6530` on `app`. Confirm `images.proxy` is set and
166
- `compose.proxy.yml` is in the `-f` list so derivation omitted the host bind.
172
+ re-derived so the host bind was omitted.
167
173
 
168
174
  </Accordion>
169
175
  <Accordion title="New replica gets traffic before orphan scan finishes">
170
176
 
171
- Confirm `compose.prod.yml` is in the `-f` list and the healthcheck hits
172
- `/_/ready`. Without it, compose treats “container started” as ready.
177
+ Confirm the healthcheck hits `/_/ready` (default `oke docker` output). Without
178
+ it, compose treats “container started” as ready. Pass `--no-prod` only when you
179
+ intentionally want a bare derive.
173
180
 
174
181
  </Accordion>
175
182
  <Accordion title="Rate limits look twice as high after scaling to 2">
176
183
 
177
184
  `drivers.store.kv` must be `redis` with `REDIS_URL` set. A missing URL **fails
178
185
  boot** (no silent memory fallback). Declaring `memory` for local is fine;
179
- docker/prod should stay on redis.
186
+ `dev`/`prod` should stay on redis.
180
187
 
181
188
  </Accordion>
182
189
  <Accordion title="Files uploaded on instance A are missing on B">
183
190
 
184
- `drivers.store.files: "fs"` is single-host. Switch docker/prod to `s3`
191
+ `drivers.store.files: "fs"` is single-host. Switch `dev`/`prod` to `s3`
185
192
  (create-oke templates already do).
186
193
 
187
194
  </Accordion>
@@ -197,9 +204,9 @@ Serve validates `Host`. Add your public hostname to `allowedHosts`
197
204
 
198
205
  - [Deployment](/docs/deployment) — choose compose, Swarm, or Kubernetes
199
206
  - [Reverse proxy](/docs/deployment/reverse-proxy) — Caddy / Traefik in full
200
- - [Docker Swarm](/docs/deployment/docker-swarm) — `docker stack deploy` on the same files
207
+ - [Docker Swarm](/docs/deployment/docker-swarm) — `docker stack deploy`
201
208
  - [Kubernetes](/docs/deployment/kubernetes) — Deployment, probes, Ingress
202
- - [CLI](/docs/reference/cli) — `oke docker`, `oke docker --prod`
209
+ - [CLI](/docs/reference/cli) — `oke docker`, layouts, budget flags
203
210
  - [Store](/docs/elements/store) — PgDog and facets
204
211
  - [Security](/docs/reference/security) — `allowedHosts`
205
212
 
@@ -30,14 +30,14 @@ on every path — shared Postgres/Redis/S3, not sticky pod identity.
30
30
 
31
31
  These already ship. Each path page explains them in full in that page's words:
32
32
 
33
- | Capability | What it guarantees | Deep dive |
34
- | --------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------ |
35
- | **PgDog pooling** | docker/prod SQL goes through transaction pooler (`DATABASE_URL` → `:6432`) when pinned | Path pages · [Store](/docs/elements/store) |
36
- | **Graceful SIGTERM** | `installGracefulShutdown` releases Clock + Journal leases, then drains | Path pages |
37
- | **Readiness vs liveness** | `GET /_/ready` (kernel) vs app `GET /health` | Path pages |
38
- | **Horizontal proof** | Two-process integration test against live Postgres + Redis | Changelog / CI (`OKE_TEST_POSTGRES_URL` + Redis) |
39
- | **Reverse proxy (compose/Swarm)** | Opt-in Caddy or Traefik (`images.proxy`) | [Reverse proxy](/docs/deployment/reverse-proxy) |
40
- | **Ingress (Kubernetes)** | Cluster-native Ingress / Gateway API | [Kubernetes](/docs/deployment/kubernetes) |
33
+ | Capability | What it guarantees | Deep dive |
34
+ | --------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------ |
35
+ | **PgDog pooling** | `dev`/`prod` SQL goes through transaction pooler (`DATABASE_URL` → `:6432`) when pinned | Path pages · [Store](/docs/elements/store) |
36
+ | **Graceful SIGTERM** | `installGracefulShutdown` releases Clock + Journal leases, then drains | Path pages |
37
+ | **Readiness vs liveness** | `GET /_/ready` (kernel) vs app `GET /health` | Path pages |
38
+ | **Horizontal proof** | Two-process integration test against live Postgres + Redis | Changelog / CI (`OKE_TEST_POSTGRES_URL` + Redis) |
39
+ | **Reverse proxy (compose/Swarm)** | Opt-in Caddy or Traefik (`images.proxy`) | [Reverse proxy](/docs/deployment/reverse-proxy) |
40
+ | **Ingress (Kubernetes)** | Cluster-native Ingress / Gateway API | [Kubernetes](/docs/deployment/kubernetes) |
41
41
 
42
42
  Honesty notes (Signal consume / Channel suppression still process-local) live
43
43
  on each path page — not papered over here.
@@ -69,7 +69,7 @@ on each path page — not papered over here.
69
69
 
70
70
  ## Learn more
71
71
 
72
- - [Installation](/docs/get-started/installation) — scaffold and `oke dev --docker`
72
+ - [Installation](/docs/get-started/installation) — scaffold and `oke dev`
73
73
  - [CLI](/docs/reference/cli) — `oke docker --prod`, `oke start`
74
74
  - [Configuration](/docs/reference/configuration) — `images` and drivers
75
75
  - [Store](/docs/elements/store) — PgDog and facets