okengine 0.10.3 → 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.
- package/package.json +76 -10
- package/site/content/docs/deployment/docker-swarm.mdx +48 -111
- package/site/content/docs/deployment/docker.mdx +43 -36
- package/site/content/docs/deployment/index.mdx +9 -9
- package/site/content/docs/deployment/kubernetes.mdx +4 -4
- package/site/content/docs/elements/ai.mdx +7 -7
- package/site/content/docs/elements/channel.mdx +9 -7
- package/site/content/docs/elements/clock.mdx +8 -8
- package/site/content/docs/elements/flow.mdx +46 -47
- package/site/content/docs/elements/gate.mdx +6 -5
- package/site/content/docs/elements/signal.mdx +2 -2
- package/site/content/docs/elements/store.mdx +71 -78
- package/site/content/docs/elements/vault.mdx +89 -70
- package/site/content/docs/get-started/basic-usage.mdx +8 -8
- package/site/content/docs/get-started/installation.mdx +36 -36
- package/site/content/docs/get-started/introduction.mdx +11 -0
- package/site/content/docs/get-started/why.mdx +2 -2
- package/site/content/docs/plugins/anonymous.mdx +1 -1
- package/site/content/docs/plugins/magic-link.mdx +11 -11
- package/site/content/docs/plugins/otp.mdx +2 -2
- package/site/content/docs/plugins/passkey.mdx +1 -1
- package/site/content/docs/plugins/two-factor.mdx +1 -1
- package/site/content/docs/plugins/username.mdx +1 -1
- package/site/content/docs/recipes/caddy.mdx +1 -1
- package/site/content/docs/recipes/cockroachdb.mdx +2 -2
- package/site/content/docs/recipes/dragonfly.mdx +1 -1
- package/site/content/docs/recipes/index.mdx +1 -2
- package/site/content/docs/recipes/llama-cpp.mdx +21 -23
- package/site/content/docs/recipes/mailpit.mdx +11 -11
- package/site/content/docs/recipes/meilisearch.mdx +10 -10
- package/site/content/docs/recipes/meta.json +0 -1
- package/site/content/docs/recipes/ollama.mdx +1 -1
- package/site/content/docs/recipes/pgdog.mdx +12 -9
- package/site/content/docs/recipes/postgres.mdx +3 -3
- package/site/content/docs/recipes/redis.mdx +2 -2
- package/site/content/docs/recipes/rustfs.mdx +10 -7
- package/site/content/docs/recipes/sglang.mdx +1 -1
- package/site/content/docs/recipes/supabase-docker.mdx +1 -1
- package/site/content/docs/recipes/timescale.mdx +2 -2
- package/site/content/docs/recipes/valkey.mdx +1 -1
- package/site/content/docs/recipes/vllm.mdx +1 -1
- package/site/content/docs/recipes/yugabytedb.mdx +2 -2
- package/site/content/docs/reference/cli.md +61 -38
- package/site/content/docs/reference/configuration.mdx +145 -70
- package/site/content/docs/reference/environment-variables.mdx +36 -28
- package/site/content/docs/reference/errors.mdx +28 -29
- package/site/content/docs/reference/fx.mdx +11 -4
- package/site/content/docs/reference/i18n.mdx +17 -6
- package/site/content/docs/reference/index.mdx +5 -0
- package/site/content/docs/reference/meta.json +1 -0
- package/site/content/docs/reference/migrating-environments.mdx +158 -0
- package/site/content/docs/reference/plugins.mdx +2 -2
- package/src/auth/gate-auth.test.ts +12 -10
- package/src/cli/ai-setup/ai-setup.test.ts +27 -15
- package/src/cli/ai-setup/apply.ts +111 -15
- package/src/cli/ai-setup/catalog.ts +3 -3
- package/src/cli/ai-setup/index.ts +1 -1
- package/src/cli/ai-setup/prompts.ts +1 -1
- package/src/cli/ai-setup/recommend.test.ts +1 -1
- package/src/cli/ask-seed.test.ts +3 -3
- package/src/cli/build.ts +1 -1
- package/src/cli/db-auto-push.test.ts +6 -3
- package/src/cli/db-auto-push.ts +7 -5
- package/src/cli/db-seed.ts +7 -8
- package/src/cli/db.test.ts +70 -71
- package/src/cli/db.ts +86 -12
- package/src/cli/dev-controller.test.ts +35 -0
- package/src/cli/dev-controller.ts +298 -0
- package/src/cli/dev-controls.ts +11 -65
- package/src/cli/dev-db-push.test.ts +47 -15
- package/src/cli/dev-schema-sync.test.ts +11 -11
- package/src/cli/dev-schema-sync.ts +10 -10
- package/src/cli/dev-session-lock.test.ts +106 -0
- package/src/cli/dev-session-lock.ts +209 -0
- package/src/cli/dev.test.ts +166 -121
- package/src/cli/dev.ts +138 -192
- package/src/cli/doc-staleness.test.ts +3 -6
- package/src/cli/docker-clean.test.ts +33 -1
- package/src/cli/docker-clean.ts +28 -33
- package/src/cli/docker-cli.test.ts +12 -11
- package/src/cli/docker.ts +95 -20
- package/src/cli/doctor.test.ts +40 -0
- package/src/cli/doctor.ts +55 -15
- package/src/cli/drizzle-env.test.ts +11 -13
- package/src/cli/drizzle-env.ts +18 -11
- package/src/cli/ensure-drizzle-config.ts +11 -14
- package/src/cli/hero-meta.test.ts +15 -15
- package/src/cli/hero-meta.ts +10 -9
- package/src/cli/index.ts +36 -6
- package/src/cli/load-config.images.test.ts +16 -12
- package/src/cli/load-config.source.test.ts +50 -0
- package/src/cli/load-config.ts +34 -28
- package/src/cli/meilisearch-local.ts +1 -2
- package/src/cli/mode.ts +7 -58
- package/src/cli/registry.ts +175 -19
- package/src/cli/resolve-dev-sql-env.test.ts +8 -16
- package/src/cli/resolve-dev-sql-env.ts +13 -15
- package/src/cli/safe-defaults.test.ts +28 -10
- package/src/cli/schema.ts +65 -16
- package/src/cli/test.ts +58 -0
- package/src/cli/tui/App.tsx +252 -0
- package/src/cli/tui/DevLive.tsx +116 -0
- package/src/cli/tui/components/ConfirmDialog.tsx +48 -0
- package/src/cli/tui/components/HeaderBar.tsx +67 -0
- package/src/cli/tui/components/LogStream.tsx +47 -0
- package/src/cli/tui/components/PanelCard.tsx +39 -0
- package/src/cli/tui/components/SelectRow.tsx +37 -0
- package/src/cli/tui/components/SlashPalette.tsx +172 -0
- package/src/cli/tui/components/Spinner.tsx +32 -0
- package/src/cli/tui/components/StatusBar.tsx +51 -0
- package/src/cli/tui/components/StatusDot.tsx +37 -0
- package/src/cli/tui/components/TabBar.tsx +49 -0
- package/src/cli/tui/components/Wordmark.tsx +43 -0
- package/src/cli/tui/format.ts +38 -0
- package/src/cli/tui/keys.test.ts +18 -0
- package/src/cli/tui/keys.ts +26 -0
- package/src/cli/tui/launch.test.ts +18 -0
- package/src/cli/tui/launch.ts +57 -0
- package/src/cli/tui/panels/Dashboard.tsx +201 -0
- package/src/cli/tui/panels/Database.tsx +198 -0
- package/src/cli/tui/panels/Dev.tsx +257 -0
- package/src/cli/tui/panels/Docker.tsx +357 -0
- package/src/cli/tui/panels/Navigator.test.ts +22 -0
- package/src/cli/tui/panels/Navigator.tsx +213 -0
- package/src/cli/tui/slash-catalog.test.ts +31 -0
- package/src/cli/tui/slash-catalog.ts +184 -0
- package/src/cli/tui/slash-run.ts +54 -0
- package/src/cli/tui/state/ports.ts +95 -0
- package/src/cli/tui/theme.ts +24 -0
- package/src/cli/vault-cmd.test.ts +402 -0
- package/src/cli/vault-cmd.ts +727 -69
- package/src/cli/vault-secure-input.test.ts +56 -0
- package/src/cli/vault-secure-input.ts +124 -0
- package/src/compiler/effects-infer.ts +7 -0
- package/src/compiler/fixtures/skyport/oke.config.ts +3 -3
- package/src/compiler/fixtures/skyport/src/flows/payments/index.ts +1 -1
- package/src/compiler/fixtures/skyport.expected.json +1 -1
- package/src/compiler-entry.ts +7 -0
- package/src/config/define-config.test.ts +111 -47
- package/src/config/driver-defaults.test.ts +16 -23
- package/src/config/driver-defaults.ts +33 -63
- package/src/config/index.ts +169 -144
- package/src/config/resolve-driver.test.ts +14 -19
- package/src/console/server/app.ts +4 -2
- package/src/console/server/console.test.ts +58 -1
- package/src/console/server/flows.ts +22 -2
- package/src/console/server/index.ts +3 -0
- package/src/console/server/operator-db.test.ts +55 -13
- package/src/console/server/operator-db.ts +305 -263
- package/src/console/server/serve.ts +16 -7
- package/src/console/server/state.ts +31 -9
- package/src/console/server/vault.test.ts +120 -5
- package/src/console/server/vault.ts +208 -12
- package/src/console/ui/dist/assets/{index-D-9KFce5.js → index--Y0Uaz-m.js} +2 -2
- package/src/console/ui/dist/assets/panel-vault-BkZdJPX8.js +1 -0
- package/src/console/ui/dist/assets/style-C3L349iZ.css +3 -0
- package/src/console/ui/dist/index.html +2 -2
- package/src/console/ui/shell/client.ts +16 -0
- package/src/console/ui/shell/panels/vault/VaultPanel.tsx +54 -1
- package/src/console/ui/vault/VaultA11yView.tsx +33 -1
- package/src/console/ui/vault/backend.test.ts +75 -0
- package/src/console/ui/vault/backend.ts +117 -0
- package/src/console/ui/vault/fixture.ts +21 -2
- package/src/console/ui/vault/index.ts +11 -1
- package/src/console/ui/vault/types.ts +26 -0
- package/src/docker/compose.ts +164 -61
- package/src/docker/derive.ts +106 -12
- package/src/docker/docker.test.ts +156 -110
- package/src/docker/helpers.ts +98 -0
- package/src/docker/images-config.test.ts +3 -8
- package/src/docker/index.ts +30 -5
- package/src/docker/recipes/index.ts +0 -3
- package/src/docker/recipes/llama-cpp.ts +4 -4
- package/src/docker/recipes/pgdog.ts +9 -2
- package/src/docker/resources.test.ts +71 -0
- package/src/docker/resources.ts +176 -0
- package/src/docker/stack-id.test.ts +11 -4
- package/src/docker/stack-id.ts +42 -32
- package/src/docker/stack.integration.test.ts +4 -15
- package/src/docker/types.ts +35 -3
- package/src/drivers/ai-ollama.integration.test.ts +2 -2
- package/src/drivers/conformance.test.ts +11 -12
- package/src/drivers/drizzle-dialect.test.ts +0 -4
- package/src/drivers/drizzle-dialect.ts +7 -13
- package/src/drivers/index.ts +24 -7
- package/src/drivers/journal-postgres.test.ts +3 -1
- package/src/drivers/journal-postgres.ts +4 -2
- package/src/drivers/meilisearch.ts +1 -1
- package/src/drivers/pglite.ts +28 -5
- package/src/drivers/types.ts +9 -11
- package/src/drivers/vault-aws-secrets-manager.test.ts +159 -0
- package/src/drivers/vault-aws-secrets-manager.ts +333 -0
- package/src/drivers/vault-builtin.test.ts +110 -0
- package/src/drivers/vault-builtin.ts +184 -0
- package/src/drivers/vault-driver-removal.test.ts +13 -0
- package/src/drivers/vault-managed.test.ts +95 -0
- package/src/drivers/vault-managed.ts +101 -25
- package/src/drivers/vault-types.ts +25 -5
- package/src/elements/ai/runtime.ts +1 -1
- package/src/elements/clock/chaos.test.ts +4 -1
- package/src/elements/clock/durable.ts +57 -4
- package/src/elements/clock.test.ts +13 -14
- package/src/elements/gate/constants.ts +18 -0
- package/src/elements/gate.test.ts +1 -1
- package/src/elements/gate.ts +2 -2
- package/src/elements/store/domain-ddl.test.ts +5 -12
- package/src/elements/store/emit-drizzle.ts +44 -19
- package/src/elements/store/index-boot.test.ts +15 -116
- package/src/elements/store/load-plugin-tables.ts +1 -1
- package/src/elements/store/resource-list-docs.fixture.ts +12 -6
- package/src/elements/store/resource-list-docs.test.ts +64 -44
- package/src/elements/store/resource.test.ts +17 -10
- package/src/elements/store/runtime.ts +9 -12
- package/src/elements/store/schema-decl.test.ts +16 -32
- package/src/elements/store/seed.test.ts +1 -2
- package/src/elements/store/seed.ts +7 -8
- package/src/elements/store/sql-condition.test.ts +2 -2
- package/src/elements/store/sql-session.test.ts +8 -10
- package/src/elements/store/sql-session.ts +10 -2
- package/src/elements/store.test.ts +13 -13
- package/src/elements/vault/audit.ts +233 -0
- package/src/elements/vault/boot-chain.test.ts +78 -0
- package/src/elements/vault/boot-chain.ts +43 -39
- package/src/elements/vault/builtin-adapter.test.ts +479 -0
- package/src/elements/vault/builtin-adapter.ts +1184 -0
- package/src/elements/vault/crypto.test.ts +237 -0
- package/src/elements/vault/crypto.ts +431 -0
- package/src/elements/vault/declare.ts +164 -3
- package/src/elements/vault/errors.ts +56 -0
- package/src/elements/vault/kms-unseal.test.ts +76 -0
- package/src/elements/vault/kms-unseal.ts +181 -0
- package/src/elements/vault/path.ts +90 -0
- package/src/elements/vault/resilience.test.ts +102 -0
- package/src/elements/vault/resilience.ts +107 -0
- package/src/elements/vault/runtime.ts +36 -4
- package/src/elements/vault/security-checklist.test.ts +130 -0
- package/src/elements/vault/storage.ts +448 -0
- package/src/elements/vault/types.ts +288 -0
- package/src/elements/vault/unseal.ts +150 -0
- package/src/elements/vault.test.ts +72 -4
- package/src/elements/vault.ts +91 -2
- package/src/full.ts +248 -0
- package/src/http.ts +41 -0
- package/src/i18n/interpolate-simple.ts +37 -0
- package/src/i18n/messages.ts +51 -4
- package/src/i18n-entry.ts +7 -0
- package/src/index.ts +35 -145
- package/src/journal-entry.ts +20 -0
- package/src/kernel/adopt-barrel-fresh.test.ts +25 -10
- package/src/kernel/app.ts +40 -42
- package/src/kernel/auto-registry.test.ts +2 -2
- package/src/kernel/boot-bind/ai.test.ts +5 -5
- package/src/kernel/boot-bind/ai.ts +2 -1
- package/src/kernel/boot-bind/channel.test.ts +6 -6
- package/src/kernel/boot-bind/channel.ts +3 -10
- package/src/kernel/boot-bind/clock.ts +2 -2
- package/src/kernel/boot-bind/gate.ts +5 -9
- package/src/kernel/boot-bind/honor-config.test.ts +42 -42
- package/src/kernel/boot-bind/journal.ts +2 -2
- package/src/kernel/boot-bind/store.test.ts +43 -44
- package/src/kernel/boot-bind/store.ts +16 -41
- package/src/kernel/boot-bind/vault.ts +16 -1
- package/src/kernel/boot.test.ts +12 -4
- package/src/kernel/boot.ts +31 -19
- package/src/kernel/budget-entry.ts +1 -1
- package/src/kernel/compensate.test.ts +288 -1
- package/src/kernel/compensate.ts +126 -0
- package/src/kernel/concurrency.test.ts +10 -9
- package/src/kernel/effects-stamping.test.ts +27 -2
- package/src/kernel/element-registries.ts +5 -3
- package/src/kernel/flow.ts +4 -2
- package/src/kernel/fx.test.ts +119 -3
- package/src/kernel/fx.ts +215 -40
- package/src/kernel/index.ts +14 -0
- package/src/kernel/journal.ts +130 -7
- package/src/kernel/pipeline.test.ts +20 -6
- package/src/kernel/redacted.test.ts +35 -0
- package/src/kernel/redacted.ts +24 -2
- package/src/kernel/router/create-default.ts +16 -0
- package/src/kernel/router/create-edge.ts +18 -0
- package/src/kernel/router/create.ts +23 -0
- package/src/kernel/router/index.ts +23 -0
- package/src/kernel/router/linear.ts +88 -0
- package/src/kernel/router/regexp.ts +188 -0
- package/src/kernel/router/smart.ts +120 -0
- package/src/kernel/router/trie.ts +108 -0
- package/src/kernel/router/types.ts +56 -0
- package/src/kernel/router.ts +18 -532
- package/src/kernel-entry.ts +43 -0
- package/src/manifest/fixtures/skyport.excerpt.json +1 -1
- package/src/manifest/fixtures/skyport.manifest.json +1 -1
- package/src/plugins/config-source.test.ts +7 -7
- package/src/release/build-lib.ts +58 -0
- package/src/release/exports.test.ts +4 -2
- package/src/release/exports.ts +30 -4
- package/src/release/measure.ts +101 -22
- package/src/runs/duckdb.ts +7 -2
- package/src/shared/optional-peer.ts +41 -0
- package/src/term.test.ts +3 -44
- package/src/test/create-test-app.ts +12 -0
- package/src/test/provisions.integration.test.ts +1 -1
- package/src/test/reset-element-registries.ts +2 -0
- package/src/upgrade/codemods.test.ts +7 -20
- package/src/upgrade/codemods.ts +93 -60
- package/site/content/docs/recipes/openbao.mdx +0 -141
- package/src/cli/ask-dev-mode.ts +0 -40
- package/src/cli/dev-mode.test.ts +0 -45
- package/src/cli/dev-mode.ts +0 -78
- package/src/cli/openbao-bootstrap.test.ts +0 -150
- package/src/cli/openbao-bootstrap.ts +0 -321
- package/src/cli/openbao-restart.integration.test.ts +0 -145
- package/src/console/ui/dist/assets/panel-vault-Za1GyJfM.js +0 -1
- package/src/console/ui/dist/assets/style-C8MxEWPd.css +0 -3
- package/src/docker/recipes/openbao.ts +0 -47
- package/src/drivers/libsql.ts +0 -179
- package/src/drivers/sqlite.ts +0 -44
- package/src/drivers/vault-openbao.test.ts +0 -97
- 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.
|
|
3
|
+
"version": "0.11.0",
|
|
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
|
-
".":
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
|
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
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
23
|
+
### Derive the Swarm stack file
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
oke docker --
|
|
26
|
+
oke docker --stack
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
Emits `Dockerfile
|
|
30
|
-
`/_/ready`, `deploy.*`, `stop_grace_period: 30s
|
|
31
|
-
|
|
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
|
|
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
|
|
47
|
+
docker stack deploy -c docker-stack.yml myapp
|
|
46
48
|
```
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
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
|
|
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 (
|
|
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
|
-
##
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
`
|
|
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
|
-
|
|
123
|
-
|
|
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
|
-
|
|
138
|
-
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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="
|
|
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
|
-
|
|
194
|
-
|
|
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="
|
|
138
|
+
<Accordion title="New task gets traffic before orphan scan finishes">
|
|
199
139
|
|
|
200
|
-
`
|
|
201
|
-
|
|
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="
|
|
144
|
+
<Accordion title="Overlay networking / multi-node volumes">
|
|
205
145
|
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
- [
|
|
215
|
-
- [
|
|
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 --
|
|
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
|
|
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
|
|
26
|
+
oke docker
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
Writes `Dockerfile
|
|
30
|
-
|
|
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
|
|
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
|
|
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 -
|
|
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
|
-
|
|
61
|
-
|
|
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 (
|
|
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.
|
|
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).
|
|
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
|
|
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
|
-
|
|
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
|
|
172
|
-
|
|
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
|
-
|
|
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
|
|
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`
|
|
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`,
|
|
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
|
|
34
|
-
| --------------------------------- |
|
|
35
|
-
| **PgDog pooling** |
|
|
36
|
-
| **Graceful SIGTERM** | `installGracefulShutdown` releases Clock + Journal leases, then drains
|
|
37
|
-
| **Readiness vs liveness** | `GET /_/ready` (kernel) vs app `GET /health`
|
|
38
|
-
| **Horizontal proof** | Two-process integration test against live Postgres + Redis
|
|
39
|
-
| **Reverse proxy (compose/Swarm)** | Opt-in Caddy or Traefik (`images.proxy`)
|
|
40
|
-
| **Ingress (Kubernetes)** | Cluster-native Ingress / Gateway API
|
|
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
|
|
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
|