From ec41308d98e8c8d5cdd50176c6e24585cc306ede Mon Sep 17 00:00:00 2001 From: Edouard Durand Date: Sun, 11 Oct 2026 08:32:03 +0000 Subject: [PATCH 1/6] build: support Node 24 and run CI on it engines was ^22.12.0, which npm reads as Node 22 only, so Node 24 got an engine warning. It now allows ^22.12.0 || ^24.0.0, and a node-24 job runs the unit, frontend, integration and build steps next to the Node 22 ones. It is a separate job because the rules of main ask for checks named test and drivers. --- .github/workflows/test.yml | 22 ++++++++++++++++++++++ CHANGELOG.md | 4 ++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- package-lock.json | 2 +- package.json | 2 +- skills/embed-cms-create-site/SKILL.md | 2 +- 7 files changed, 32 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 901c14f2..6c98aefe 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,6 +66,28 @@ jobs: - name: Dependency audit run: npm audit --omit=dev --audit-level=high + # The same tests on the newest LTS line of Node. A separate job, not a matrix of `test`, because the rules of `main` ask for the checks + # named `test` and `drivers`. Lint and the audit do not depend on the version of Node, so they run once, in `test`. + node-24: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: 24 + cache: npm + - run: npm ci + - name: Backend unit and security tests + run: npm run test:unit + - name: Frontend tests + run: npm run test:frontend + - name: Legacy integration suite + run: npm test + env: + TEST_PORT: 9985 + - name: Production build + run: npm run build + # The driver contract suite (test/unit/drivers.contract.test.js) runs the same tests against the json file store, # PostgreSQL and MongoDB. Here both servers are service containers, and a server that does not answer fails the job # (REQUIRE_DATABASES) instead of skipping its part of the suite. diff --git a/CHANGELOG.md b/CHANGELOG.md index 29604be2..06640c8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ What changed in each version of Embed CMS, from 3.0.0 on, newest first. The vers ## [Unreleased] +### Changed + +- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. + ## [3.1.0] - 2026-10-11 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7a39b577..2dd17a1a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Thanks for helping. This page gets you from a clone to a change that passes CI: ## Setting up -You need Node.js 22.12 or later (CI runs Node 22) and git. +You need Node.js 22.12 or later on the 22 line, or Node.js 24 (CI runs both), and git. ```sh git clone https://github.com/xiaodoudou/embed-cms.git embed-cms diff --git a/README.md b/README.md index f1ff7f29..2555a467 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ > A headless CMS for Node.js: describe your content in JavaScript files, get an admin app, a REST API and a JavaScript API -[![License](https://img.shields.io/badge/License-GPL--3.0--only-blue?style=flat-square)](LICENSE) [![Node](https://img.shields.io/badge/Node-%3E%3D22.12-339933?style=flat-square)](#try-it-in-five-minutes) [![Storage](https://img.shields.io/badge/Storage-JSON%20%7C%20MongoDB%20%7C%20PostgreSQL-orange?style=flat-square)](docs/reference/CONFIG.md) [![Express](https://img.shields.io/badge/Express-mountable-lightgrey?style=flat-square)](docs/start/GETTING_STARTED.md) [![Locales](https://img.shields.io/badge/Content-translatable-blueviolet?style=flat-square)](docs/start/CONCEPTS.md) [![Tests](https://img.shields.io/badge/Tests-unit%20%7C%20security%20%7C%20frontend-brightgreen?style=flat-square)](docs/contributing/TESTING.md) +[![License](https://img.shields.io/badge/License-GPL--3.0--only-blue?style=flat-square)](LICENSE) [![Node](https://img.shields.io/badge/Node-22.12%2B%20%7C%2024-339933?style=flat-square)](#try-it-in-five-minutes) [![Storage](https://img.shields.io/badge/Storage-JSON%20%7C%20MongoDB%20%7C%20PostgreSQL-orange?style=flat-square)](docs/reference/CONFIG.md) [![Express](https://img.shields.io/badge/Express-mountable-lightgrey?style=flat-square)](docs/start/GETTING_STARTED.md) [![Locales](https://img.shields.io/badge/Content-translatable-blueviolet?style=flat-square)](docs/start/CONCEPTS.md) [![Tests](https://img.shields.io/badge/Tests-unit%20%7C%20security%20%7C%20frontend-brightgreen?style=flat-square)](docs/contributing/TESTING.md) You describe your content in plain JavaScript files, one per resource, and Embed CMS gives you three things from them: an admin app where editors write and translate that content, a REST API that serves it to your sites and apps, and a JavaScript API for your own server code. @@ -18,7 +18,7 @@ It keeps your content in a LevelDB database on disk by default, so there is no d ## Try it in five minutes -You need [Node.js](https://nodejs.org/) 22.12 or later and git. +You need [Node.js](https://nodejs.org/) 22.12 or later on the 22 line, or Node.js 24, and git. ```sh git clone https://github.com/xiaodoudou/embed-cms.git embed-cms diff --git a/package-lock.json b/package-lock.json index 713bfcec..9a09bdb1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -116,7 +116,7 @@ "vue-eslint-parser": "^10.4.1" }, "engines": { - "node": "^22.12.0" + "node": "^22.12.0 || ^24.0.0" } }, "node_modules/@asamuzakjp/css-color": { diff --git a/package.json b/package.json index 93a7a0fc..c1669cfe 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "migrate-store": "node scripts/migrateStore.js" }, "engines": { - "node": "^22.12.0" + "node": "^22.12.0 || ^24.0.0" }, "repository": { "type": "git", diff --git a/skills/embed-cms-create-site/SKILL.md b/skills/embed-cms-create-site/SKILL.md index cdc2e85d..d71b641e 100644 --- a/skills/embed-cms-create-site/SKILL.md +++ b/skills/embed-cms-create-site/SKILL.md @@ -11,7 +11,7 @@ The docs are in the `docs/` folder of https://github.com/xiaodoudou/embed-cms, n ## Steps -1. **Ask only what you need**: what the site is for, the content types, one language or several (`enUS`, `zhCN`). Node must be `^22.12.0`. +1. **Ask only what you need**: what the site is for, the content types, one language or several (`enUS`, `zhCN`). Node must be 22.12 or later on the 22 line, or 24. 2. **Scaffold** in the project folder: ```sh npm init -y && npm install embed-cms express From 9b45030f5dfb66e041a4c0280a0eebc0943df0cc Mon Sep 17 00:00:00 2001 From: Edouard Durand Date: Sun, 11 Oct 2026 08:36:23 +0000 Subject: [PATCH 2/6] build: move the Docker example and the release jobs to Node 24 The Docker example builds and runs on node:24-bookworm-slim. The commit check, the drivers job and the npm publish run on Node 24. The test job stays on Node 22, the oldest supported line, beside the node-24 job. --- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 4 ++-- CHANGELOG.md | 2 +- docs/examples/docker/Dockerfile | 4 ++-- docs/examples/docker/README.md | 2 +- docs/examples/docker/package-lock.json | 2 +- docs/examples/docker/package.json | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 654359a6..a9d676c7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,7 +54,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-node@v7 with: - node-version: 22 + node-version: 24 registry-url: https://registry.npmjs.org # trusted publishing needs npm 11.5.1 or later; not npm 12, which refuses by default the dependencies fetched from a URL (vue3-shortkey is one) - run: npm install -g 'npm@^11.5.1' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6c98aefe..2314a113 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: fetch-depth: 0 - uses: actions/setup-node@v7 with: - node-version: 22 + node-version: 24 - name: Commits of the pull request if: github.event_name == 'pull_request' run: node scripts/commitlint.js --range "$BASE..$HEAD" @@ -118,7 +118,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-node@v7 with: - node-version: 22 + node-version: 24 cache: npm - run: npm ci - name: Driver contract suite diff --git a/CHANGELOG.md b/CHANGELOG.md index 06640c8c..2b611018 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ What changed in each version of Embed CMS, from 3.0.0 on, newest first. The vers ### Changed -- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. +- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. The Docker example now runs on Node 24 (`node:24-bookworm-slim`), and so do the commit check, the database drivers job and the npm publish. ## [3.1.0] - 2026-10-11 diff --git a/docs/examples/docker/Dockerfile b/docs/examples/docker/Dockerfile index fce35a99..0d92410f 100644 --- a/docs/examples/docker/Dockerfile +++ b/docs/examples/docker/Dockerfile @@ -4,14 +4,14 @@ # Built by scripts/build.sh. # --- the modules: the only stage that needs the network and a compiler's worth of tools ----------------------------------- -FROM node:22-bookworm-slim AS modules +FROM node:24-bookworm-slim AS modules WORKDIR /app # the lock file first: this layer is only made again when the dependencies change COPY package.json package-lock.json ./ RUN npm ci --omit=dev --no-audit --no-fund # --- the image that runs ------------------------------------------------------------------------------------------------- -FROM node:22-bookworm-slim +FROM node:24-bookworm-slim ENV NODE_ENV=production \ PORT=3000 \ DATA_DIR=/data diff --git a/docs/examples/docker/README.md b/docs/examples/docker/README.md index 5980ad6e..09076c50 100644 --- a/docs/examples/docker/README.md +++ b/docs/examples/docker/README.md @@ -201,7 +201,7 @@ Put a proxy (nginx, Caddy or Traefik) on the machine and give it the https certi |---|---| | Change a secret (a leak, someone leaves) | Edit `.env`, or empty the line and run `./scripts/env.sh`. Then run `./scripts/start.sh`, and compose replaces the container with one that has the new value. Changing `AUTH_SECRET` or `SESSION_SECRET` signs everybody out and does nothing else. | | Upgrade embed-cms | Raise `embed-cms` in `package.json` and run `npm install --package-lock-only`. Then run `./scripts/build.sh` and `./scripts/start.sh`. The data in the volume stays. | -| Back up | Stop the container first, because the databases are files that are written while it runs. Run `docker compose stop`, then `docker run --rm -v embed-cms-docker_data:/data -v "$PWD":/backup node:22-bookworm-slim tar czf /backup/data.tgz -C /data .`, then `./scripts/start.sh`. | +| Back up | Stop the container first, because the databases are files that are written while it runs. Run `docker compose stop`, then `docker run --rm -v embed-cms-docker_data:/data -v "$PWD":/backup node:24-bookworm-slim tar czf /backup/data.tgz -C /data .`, then `./scripts/start.sh`. | | Use your own project | Copy this folder. Replace `resources/` and `content.json` (and add your site's routes to `server.js`). Keep the rest. Add every variable your code reads to `.env.example`. | | Use another store | PostgreSQL and MongoDB read their credentials from the environment ([storage engines](../../reference/CONFIG.md#storage-engines)). Put `POSTGRES_USER` and `POSTGRES_PASSWORD` in `.env` like the other secrets, and add the database as one more service in `compose.yaml`. | diff --git a/docs/examples/docker/package-lock.json b/docs/examples/docker/package-lock.json index 8903db3c..59447e60 100644 --- a/docs/examples/docker/package-lock.json +++ b/docs/examples/docker/package-lock.json @@ -12,7 +12,7 @@ "express": "^4.18.2" }, "engines": { - "node": "^22.12.0" + "node": "^24.0.0" } }, "node_modules/@aws-sdk/core": { diff --git a/docs/examples/docker/package.json b/docs/examples/docker/package.json index 16d81d7d..2a04caf6 100644 --- a/docs/examples/docker/package.json +++ b/docs/examples/docker/package.json @@ -12,6 +12,6 @@ "express": "^4.18.2" }, "engines": { - "node": "^22.12.0" + "node": "^24.0.0" } } From 89eae6f1516f3ab665d1c72120d3e8f9598002c6 Mon Sep 17 00:00:00 2001 From: Edouard Durand Date: Sun, 11 Oct 2026 11:30:25 +0000 Subject: [PATCH 3/6] fix(import): do not ask again once the input has ended After a wrong answer, confirm asked the question again with rl.prompt(). When the input ended in the same chunk (printf 'what\n' | cms-import), the interface was already closed, and Node 24 throws ERR_USE_AFTER_CLOSE there where Node 22 let it pass. The question is now asked again only while the input is open, so a closed input still counts as no. --- lib/util/confirm.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/util/confirm.js b/lib/util/confirm.js index 37fd483f..3c9dbd1f 100644 --- a/lib/util/confirm.js +++ b/lib/util/confirm.js @@ -9,6 +9,10 @@ const readline = require('readline') */ async function confirm (question, { input = process.stdin, output = process.stdout } = {}) { const rl = readline.createInterface({ input, output }) + // an input that ended in the same chunk as a wrong answer has closed the interface by the time the question is asked again, and Node 24 + // throws when a closed interface is prompted + let closed = false + rl.on('close', () => { closed = true }) rl.setPrompt(`${question} `) rl.prompt() try { @@ -19,7 +23,9 @@ async function confirm (question, { input = process.stdin, output = process.stdo return text === 'yes' } output.write('yes / no\n') - rl.prompt() + if (!closed) { + rl.prompt() + } } return false } finally { From 07002c942eb0f5e62f0f3e449dffe803cec5faf5 Mon Sep 17 00:00:00 2001 From: Edouard Durand Date: Sun, 11 Oct 2026 11:35:31 +0000 Subject: [PATCH 4/6] docs: note the confirm fix that Node 24 found in the changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b611018..218ae406 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,8 @@ What changed in each version of Embed CMS, from 3.0.0 on, newest first. The vers ### Changed -- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. The Docker example now runs on Node 24 (`node:24-bookworm-slim`), and so do the commit check, the database drivers job and the npm publish. +- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. The Docker example now runs on Node 24 (`node:24-bookworm-slim`), and so do the commit check, the database drivers job and the npm publish. Running the tests on Node 24 found one bug, now fixed: `cms-import` and `cms-import-remote` crashed on Node 24, instead of answering no, when their input ended right after a wrong answer (`printf 'what +' | cms-import`). ## [3.1.0] - 2026-10-11 From 1088c297c0c1ba6efc8ed082746f47fe4d7a9d9d Mon Sep 17 00:00:00 2001 From: Edouard Durand Date: Sun, 11 Oct 2026 11:35:50 +0000 Subject: [PATCH 5/6] docs: fix a line break in the changelog entry --- CHANGELOG.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 218ae406..6a1658b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,8 +6,7 @@ What changed in each version of Embed CMS, from 3.0.0 on, newest first. The vers ### Changed -- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. The Docker example now runs on Node 24 (`node:24-bookworm-slim`), and so do the commit check, the database drivers job and the npm publish. Running the tests on Node 24 found one bug, now fixed: `cms-import` and `cms-import-remote` crashed on Node 24, instead of answering no, when their input ended right after a wrong answer (`printf 'what -' | cms-import`). +- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. The Docker example now runs on Node 24 (`node:24-bookworm-slim`), and so do the commit check, the database drivers job and the npm publish. Running the tests on Node 24 found one bug, now fixed: `cms-import` and `cms-import-remote` crashed on Node 24, instead of answering no, when their input ended right after a wrong answer (a pipe that closes right after the answer). ## [3.1.0] - 2026-10-11 From 4cc29debeadff5af5d5f1b8ef4aa7e3ada693ab1 Mon Sep 17 00:00:00 2001 From: Edouard Durand Date: Sun, 11 Oct 2026 14:09:27 +0000 Subject: [PATCH 6/6] build: require Node 24 and drop Node 22 engines is now ^24.0.0, every CI job runs on Node 24, and the separate node-24 job is gone because test is the Node 24 job now. The README, CONTRIBUTING, the create-site skill and the changelog say Node 24. --- .github/workflows/test.yml | 24 +----------------------- CHANGELOG.md | 2 +- CONTRIBUTING.md | 2 +- README.md | 4 ++-- docs/reference/CONFIG.md | 2 +- package-lock.json | 2 +- package.json | 2 +- skills/embed-cms-create-site/SKILL.md | 2 +- 8 files changed, 9 insertions(+), 31 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2314a113..9fad4fd7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -48,7 +48,7 @@ jobs: - uses: actions/checkout@v7 - uses: actions/setup-node@v7 with: - node-version: 22 + node-version: 24 cache: npm - run: npm ci - name: Lint @@ -66,28 +66,6 @@ jobs: - name: Dependency audit run: npm audit --omit=dev --audit-level=high - # The same tests on the newest LTS line of Node. A separate job, not a matrix of `test`, because the rules of `main` ask for the checks - # named `test` and `drivers`. Lint and the audit do not depend on the version of Node, so they run once, in `test`. - node-24: - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v7 - - uses: actions/setup-node@v7 - with: - node-version: 24 - cache: npm - - run: npm ci - - name: Backend unit and security tests - run: npm run test:unit - - name: Frontend tests - run: npm run test:frontend - - name: Legacy integration suite - run: npm test - env: - TEST_PORT: 9985 - - name: Production build - run: npm run build - # The driver contract suite (test/unit/drivers.contract.test.js) runs the same tests against the json file store, # PostgreSQL and MongoDB. Here both servers are service containers, and a server that does not answer fails the job # (REQUIRE_DATABASES) instead of skipping its part of the suite. diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a1658b0..b9d84336 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ What changed in each version of Embed CMS, from 3.0.0 on, newest first. The vers ### Changed -- **Node 24, the newest LTS, is supported.** `engines` was `^22.12.0`, which npm reads as Node 22 only, so installing on Node 24 printed an engine warning. It is now `^22.12.0 || ^24.0.0`, and CI runs the unit, frontend, integration and build steps on Node 24 beside Node 22. The Docker example now runs on Node 24 (`node:24-bookworm-slim`), and so do the commit check, the database drivers job and the npm publish. Running the tests on Node 24 found one bug, now fixed: `cms-import` and `cms-import-remote` crashed on Node 24, instead of answering no, when their input ended right after a wrong answer (a pipe that closes right after the answer). +- **Node 24 is the version Embed CMS requires, and Node 22 no longer is.** `engines` was `^22.12.0`. It is now `^24.0.0`, so installing on Node 22 prints an engine warning. CI runs every job on Node 24, and the Docker example runs on `node:24-bookworm-slim`. Running the tests on Node 24 found one bug, now fixed: `cms-import` and `cms-import-remote` crashed on Node 24, instead of answering no, when their input ended right after a wrong answer (a pipe that closes right after the answer). ## [3.1.0] - 2026-10-11 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2dd17a1a..b69b0a7c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -6,7 +6,7 @@ Thanks for helping. This page gets you from a clone to a change that passes CI: ## Setting up -You need Node.js 22.12 or later on the 22 line, or Node.js 24 (CI runs both), and git. +You need Node.js 24 (the version CI runs) and git. ```sh git clone https://github.com/xiaodoudou/embed-cms.git embed-cms diff --git a/README.md b/README.md index 2555a467..e5209b92 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ > A headless CMS for Node.js: describe your content in JavaScript files, get an admin app, a REST API and a JavaScript API -[![License](https://img.shields.io/badge/License-GPL--3.0--only-blue?style=flat-square)](LICENSE) [![Node](https://img.shields.io/badge/Node-22.12%2B%20%7C%2024-339933?style=flat-square)](#try-it-in-five-minutes) [![Storage](https://img.shields.io/badge/Storage-JSON%20%7C%20MongoDB%20%7C%20PostgreSQL-orange?style=flat-square)](docs/reference/CONFIG.md) [![Express](https://img.shields.io/badge/Express-mountable-lightgrey?style=flat-square)](docs/start/GETTING_STARTED.md) [![Locales](https://img.shields.io/badge/Content-translatable-blueviolet?style=flat-square)](docs/start/CONCEPTS.md) [![Tests](https://img.shields.io/badge/Tests-unit%20%7C%20security%20%7C%20frontend-brightgreen?style=flat-square)](docs/contributing/TESTING.md) +[![License](https://img.shields.io/badge/License-GPL--3.0--only-blue?style=flat-square)](LICENSE) [![Node](https://img.shields.io/badge/Node-24-339933?style=flat-square)](#try-it-in-five-minutes) [![Storage](https://img.shields.io/badge/Storage-JSON%20%7C%20MongoDB%20%7C%20PostgreSQL-orange?style=flat-square)](docs/reference/CONFIG.md) [![Express](https://img.shields.io/badge/Express-mountable-lightgrey?style=flat-square)](docs/start/GETTING_STARTED.md) [![Locales](https://img.shields.io/badge/Content-translatable-blueviolet?style=flat-square)](docs/start/CONCEPTS.md) [![Tests](https://img.shields.io/badge/Tests-unit%20%7C%20security%20%7C%20frontend-brightgreen?style=flat-square)](docs/contributing/TESTING.md) You describe your content in plain JavaScript files, one per resource, and Embed CMS gives you three things from them: an admin app where editors write and translate that content, a REST API that serves it to your sites and apps, and a JavaScript API for your own server code. @@ -18,7 +18,7 @@ It keeps your content in a LevelDB database on disk by default, so there is no d ## Try it in five minutes -You need [Node.js](https://nodejs.org/) 22.12 or later on the 22 line, or Node.js 24, and git. +You need [Node.js](https://nodejs.org/) 24 and git. ```sh git clone https://github.com/xiaodoudou/embed-cms.git embed-cms diff --git a/docs/reference/CONFIG.md b/docs/reference/CONFIG.md index 14f720ff..58622a5d 100644 --- a/docs/reference/CONFIG.md +++ b/docs/reference/CONFIG.md @@ -178,7 +178,7 @@ Every resource keeps its records in a store, and you choose which kind with `dbE | `dbEngine.type` | What it is | Needs | |---|---|---| | `leveldb` (the default) | a LevelDB folder per resource, read from disk | nothing (the `classic-level` package comes with embed-cms) | -| `sqlite` | one SQLite file per resource, read from disk | nothing (it is part of Node 22; Node marks it experimental) | +| `sqlite` | one SQLite file per resource, read from disk | nothing (it is part of Node; Node marks it experimental) | | `jsondown` | all records in memory, saved to one JSON file per resource | nothing | | `mongodb` | one collection per resource | a MongoDB server | | `postgres` | one table per resource | a PostgreSQL server | diff --git a/package-lock.json b/package-lock.json index 9a09bdb1..4b4bf618 100644 --- a/package-lock.json +++ b/package-lock.json @@ -116,7 +116,7 @@ "vue-eslint-parser": "^10.4.1" }, "engines": { - "node": "^22.12.0 || ^24.0.0" + "node": "^24.0.0" } }, "node_modules/@asamuzakjp/css-color": { diff --git a/package.json b/package.json index c1669cfe..ea908f57 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "migrate-store": "node scripts/migrateStore.js" }, "engines": { - "node": "^22.12.0 || ^24.0.0" + "node": "^24.0.0" }, "repository": { "type": "git", diff --git a/skills/embed-cms-create-site/SKILL.md b/skills/embed-cms-create-site/SKILL.md index d71b641e..c37a00d4 100644 --- a/skills/embed-cms-create-site/SKILL.md +++ b/skills/embed-cms-create-site/SKILL.md @@ -11,7 +11,7 @@ The docs are in the `docs/` folder of https://github.com/xiaodoudou/embed-cms, n ## Steps -1. **Ask only what you need**: what the site is for, the content types, one language or several (`enUS`, `zhCN`). Node must be 22.12 or later on the 22 line, or 24. +1. **Ask only what you need**: what the site is for, the content types, one language or several (`enUS`, `zhCN`). Node must be 24. 2. **Scaffold** in the project folder: ```sh npm init -y && npm install embed-cms express