Skip to content

Commit c72a694

Browse files
committed
Support devEngines field in package.json
It's a [standardization effort by the OpenJS Foundation](https://github.com/openjs-foundation/package-metadata-interoperability-collab-space/blob/43e31689ae1fff8c46b617548655a3f60e0c9387/devengines-field-proposal.md) and has been implemented in [NPM 10.9.0](npm/cli#7766) and [Corepack 0.32.0](nodejs/corepack#643).
1 parent b5ef550 commit c72a694

File tree

2 files changed

+119
-0
lines changed

2 files changed

+119
-0
lines changed

src/schemas/json/package.json

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,26 @@
304304
"required": [
305305
"url"
306306
]
307+
},
308+
"devEngineDependency": {
309+
"description": "Specifies requirements for development environment components such as operating systems, runtimes, or package managers. Used to ensure consistent development environments across the team.",
310+
"type": "object",
311+
"required": ["name"],
312+
"properties": {
313+
"name": {
314+
"type": "string",
315+
"description": "The name of the dependency, with allowed values depending on the parent field"
316+
},
317+
"version": {
318+
"type": "string",
319+
"description": "The version range for the dependency"
320+
},
321+
"onFail": {
322+
"type": "string",
323+
"enum": ["ignore", "warn", "error", "download"],
324+
"description": "What action to take if validation fails"
325+
}
326+
}
307327
}
308328
},
309329
"type": "object",
@@ -810,6 +830,62 @@
810830
"type": "string"
811831
}
812832
},
833+
"devEngines": {
834+
"description": "Define the runtime and package manager for developing the current project.",
835+
"type": "object",
836+
"properties": {
837+
"os": {
838+
"oneOf": [
839+
{ "$ref": "#/definitions/devEngineDependency" },
840+
{
841+
"type": "array",
842+
"items": { "$ref": "#/definitions/devEngineDependency" }
843+
}
844+
],
845+
"description": "Specifies which operating systems are supported for development"
846+
},
847+
"cpu": {
848+
"oneOf": [
849+
{ "$ref": "#/definitions/devEngineDependency" },
850+
{
851+
"type": "array",
852+
"items": { "$ref": "#/definitions/devEngineDependency" }
853+
}
854+
],
855+
"description": "Specifies which CPU architectures are supported for development"
856+
},
857+
"libc": {
858+
"oneOf": [
859+
{ "$ref": "#/definitions/devEngineDependency" },
860+
{
861+
"type": "array",
862+
"items": { "$ref": "#/definitions/devEngineDependency" }
863+
}
864+
],
865+
"description": "Specifies which C standard libraries are supported for development"
866+
},
867+
"runtime": {
868+
"oneOf": [
869+
{ "$ref": "#/definitions/devEngineDependency" },
870+
{
871+
"type": "array",
872+
"items": { "$ref": "#/definitions/devEngineDependency" }
873+
}
874+
],
875+
"description": "Specifies which JavaScript runtimes (like Node.js, Deno, Bun) are supported for development. Values should use WinterCG Runtime Keys (see https://runtime-keys.proposal.wintercg.org/)"
876+
},
877+
"packageManager": {
878+
"oneOf": [
879+
{ "$ref": "#/definitions/devEngineDependency" },
880+
{
881+
"type": "array",
882+
"items": { "$ref": "#/definitions/devEngineDependency" }
883+
}
884+
],
885+
"description": "Specifies which package managers are supported for development"
886+
}
887+
}
888+
},
813889
"preferGlobal": {
814890
"type": "boolean",
815891
"description": "DEPRECATED: This option used to trigger an npm warning, but it will no longer warn. It is purely there for informational purposes. It is now recommended that you install any binaries as local devDependencies wherever possible."

src/test/package/devEngines.json

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"devEngines": {
3+
"cpu": [
4+
{
5+
"name": "arm"
6+
},
7+
{
8+
"name": "x86"
9+
}
10+
],
11+
"libc": {
12+
"name": "glibc"
13+
},
14+
"os": {
15+
"name": "darwin",
16+
"version": ">= 23.0.0"
17+
},
18+
"packageManager": [
19+
{
20+
"name": "bun",
21+
"onFail": "ignore",
22+
"version": ">= 1.0.0"
23+
},
24+
{
25+
"name": "yarn",
26+
"onFail": "download",
27+
"version": "3.2.3"
28+
}
29+
],
30+
"runtime": [
31+
{
32+
"name": "bun",
33+
"onFail": "ignore",
34+
"version": ">= 1.0.0"
35+
},
36+
{
37+
"name": "node",
38+
"onFail": "error",
39+
"version": ">= 20.0.0"
40+
}
41+
]
42+
}
43+
}

0 commit comments

Comments
 (0)