Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions .changeset/engines-node-22.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
---
"create-objectstack": major
"@objectstack/spec": major
"@objectstack/cli": major
---

feat!: require Node.js 22 — promise the runtime we actually test (#3825)

Every published package declared `engines.node: ">=18.0.0"`. **Node 18 reached
end-of-life on 2025-04-30 and Node 20 on 2026-04-30**, so the compatibility
promise covered two runtimes nobody patches — and, after #3830 moved CI to Node
22, two runtimes nothing in this repo verifies.

That left the promise and the evidence with **no overlap at all**:

| | Node version |
|---|---|
| What CI validates every PR on | **22** |
| What `release.yml` publishes from | **22** |
| What every shipped Docker image runs (`docker/Dockerfile`, `blank` template, self-hosting docs) | **22** |
| What `engines.node` promised users | **>=18** |

`engines.node` is now `>=22.0.0` across all 50 manifests. This is the honest
floor: it is the only runtime the packages are built, tested and shipped on.

## Migration

**If you are on Node 22 or newer, nothing changes.** Node 24 (Active LTS since
2025-10-28) and Node 26 both satisfy the new range.

If you are on Node 18 or 20, upgrade to Node 22+. Both are past end-of-life and
receive no security patches:

```bash
nvm install 22 && nvm use 22
```

npm and pnpm surface an unsatisfied `engines` as an **`EBADENGINE` warning**, not
a hard failure, so an existing install will not break the moment you upgrade —
but the package is no longer tested on that runtime, and the failures are the
kind that do not announce themselves. #3812 is the worked example: a native
dependency whose `engines` required a newer Node loaded anyway on the older one
and then killed the test worker at the process level, with no JS error and a
summary that still said "passed".

If your CI pins Node, pin it to 22 as well — running your gates on a runtime
your dependencies no longer support is exactly the split this change closes.

## Also updated

The "Node 18+" prerequisite was restated in ten user-facing places
(`README.md`, `CONTRIBUTING.md`, the getting-started and deployment docs, the
todo example, and the `objectstack-platform` skill's `compatibility` field).
All now say 22. Changelogs and ADRs are historical records and were left alone.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ We are committed to providing a welcoming and inclusive environment. Please be r

### Prerequisites

- **Node.js** >= 18.0.0
- **Node.js** >= 22.0.0
- **PNPM** >= 8.0.0
- **Git** >= 2.0.0

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -204,7 +204,7 @@ See [Self-Hosted Deployment](https://objectstack.ai/docs/deployment/self-hosting
```bash
git clone https://github.com/objectstack-ai/objectstack.git
cd objectstack
pnpm install # Node 18+, pnpm 8+ (corepack enable)
pnpm install # Node 22+, pnpm 8+ (corepack enable)
pnpm build # build all packages
pnpm dev # run the showcase example (REST + Console on :3000)
```
Expand Down
2 changes: 1 addition & 1 deletion apps/docs/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -40,6 +40,6 @@
"zod": "4.4.3"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion content/docs/deployment/backup-restore.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -81,7 +81,7 @@ storage change. A backup you haven't restored is a hope, not a backup.

### Provision a clean host

Fresh container or VM. Install Node 18+ and `@objectstack/cli`.
Fresh container or VM. Install Node 22+ and `@objectstack/cli`.

### Restore the database

Expand Down
2 changes: 1 addition & 1 deletion content/docs/deployment/self-hosting.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,7 +49,7 @@ The full catalog is in

## Option 1 — Bare Node.js (systemd)

The simplest deployment: Node 18+ and the CLI on a Linux host.
The simplest deployment: Node 22+ and the CLI on a Linux host.

```bash
# On the host — no repo clone, just the CLI and your artifact
Expand Down
2 changes: 1 addition & 1 deletion content/docs/deployment/troubleshooting.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -317,7 +317,7 @@ Available subpaths: `data`, `api`, `ui`, `system`, `kernel`, `ai`, `automation`,

### What Node.js version is required?

Node.js 18.0.0 or later. The `engines` field in `package.json` enforces this.
Node.js 22.0.0 or later. The `engines` field in `package.json` enforces this.

### What TypeScript version is recommended?

Expand Down
2 changes: 1 addition & 1 deletion content/docs/getting-started/build-with-claude-code.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@ hand-edits generated glue, and no metadata mistake reaches the browser unchecked

| You need | Why |
|:---|:---|
| **Node.js 18+** and npm (pnpm / yarn / bun also work) | Runs the scaffolder and the dev server (see [prerequisites](/docs/getting-started#prerequisites)). |
| **Node.js 22+** and npm (pnpm / yarn / bun also work) | Runs the scaffolder and the dev server (see [prerequisites](/docs/getting-started#prerequisites)). |
| **[Claude Code](https://claude.com/claude-code)** (or Cursor / Copilot) | Your agent reads `AGENTS.md` + the ObjectStack skills and authors the metadata. |

## 1. Scaffold the project
Expand Down
2 changes: 1 addition & 1 deletion content/docs/getting-started/index.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -156,7 +156,7 @@ Before you start, make sure you have the following installed:

| Tool | Minimum Version | Check Command |
|:---|:---|:---|
| **Node.js** | 18.0.0+ | `node --version` |
| **Node.js** | 22.0.0+ | `node --version` |

That's everything the standard path needs — `npx create-objectstack my-app`
scaffolds a project with its own TypeScript toolchain and npm scripts.
Expand Down
2 changes: 1 addition & 1 deletion content/docs/getting-started/your-first-project.mdx
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,7 +22,7 @@ without an agent. The two paths produce identical projects.

| Tool | Minimum | Check |
|:---|:---|:---|
| **Node.js** | 18+ | `node --version` |
| **Node.js** | 22+ | `node --version` |
| A package manager | npm 9+ / pnpm 8+ / yarn / bun | `npm --version` |

That's all. A standalone project does **not** need pnpm, TypeScript pre-installed,
Expand Down
2 changes: 1 addition & 1 deletion examples/app-todo/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -97,7 +97,7 @@ examples/app-todo/
## 💡 How to Run

### Prerequisites
- Node.js 18+ and pnpm 8+
- Node.js 22+ and pnpm 8+
- Install from monorepo root: `corepack enable && pnpm install`

### Type Check
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -60,7 +60,7 @@
"typescript": "^6.0.3"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
},
"packageManager": "pnpm@10.31.0+sha512.e3927388bfaa8078ceb79b748ffc1e8274e84d75163e67bc22e06c0d3aed43dd153151cbf11d7f8301ff4acb98c68bdc5cadf6989532801ffafe3b3e4a63c268",
"pnpm": {
Expand Down
2 changes: 1 addition & 1 deletion packages/adapters/hono/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,6 +54,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/apps/account/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,6 +46,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/apps/setup/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,6 +46,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/apps/studio/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -46,6 +46,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -123,6 +123,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/client-react/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,6 +50,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/client/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,6 +54,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/cloud-connection/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,6 +52,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -57,6 +57,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/create-objectstack/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/lint/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,6 +53,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/mcp/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -54,6 +54,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/metadata-core/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -66,6 +66,6 @@
"access": "public"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/metadata-fs/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -52,6 +52,6 @@
"access": "public"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/metadata-protocol/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -56,6 +56,6 @@
"access": "public"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/metadata/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -72,6 +72,6 @@
"access": "public"
},
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/objectql/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -58,6 +58,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/observability/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,6 +50,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/platform-objects/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -100,6 +100,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/driver-memory/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -50,6 +50,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/driver-mongodb/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,6 +53,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/driver-sql/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -74,6 +74,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/driver-sqlite-wasm/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -57,6 +57,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/plugin-audit/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -49,6 +49,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/plugin-auth/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/plugin-dev/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,6 +59,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/plugin-hono-server/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/plugins/plugin-security/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -51,6 +51,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/rest/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -58,6 +58,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/runtime/package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -73,6 +73,6 @@
"README.md"
],
"engines": {
"node": ">=18.0.0"
"node": ">=22.0.0"
}
}
Loading
Loading