Skip to main content
Jolter projects use jolter.json. Schema version 2 supports one runtime, multiple tools, and optional plugin requirements.

Complete schema example

jolter.json
{
  "$schema": "https://schemas.jolter.dev/project/v2/schema.json",
  "schemaVersion": 2,
  "runtime": {
    "node": "24.x"
  },
  "tools": {
    "npm": "11.x",
    "pnpm": "10.x",
    "yarn": "4.x",
    "eslint": "8.x"
  },
  "plugins": {
    "@eslint/eslint": "1.x"
  }
}
All fields are optional, but sync, repair, and setup-ci require a resolvable runtime from jolter.json, .node-version, or .nvmrc.

Top-level fields

FieldTypeMeaning
$schemastringOptional JSON Schema URL
schemaVersionintegerCurrent schema version, 2
runtimeobjectZero or one of node, bun, or deno
toolsobjectBuilt-in tools and plugin-provided tools
pluginsobjectPlugin provider requirements
Unknown fields fail validation. Unknown schema versions fail closed.

Runtime rules

Valid:
{
  "runtime": {
    "bun": "1.x"
  }
}
Invalid:
{
  "runtime": {
    "node": "24",
    "deno": "2"
  }
}
A project can configure only one runtime.

Tool rules

Built-in tools:
{
  "runtime": {
    "node": "24"
  },
  "tools": {
    "pnpm": "10",
    "yarn": "4"
  }
}
Plugin tools:
{
  "runtime": {
    "node": "24"
  },
  "tools": {
    "eslint": "8"
  },
  "plugins": {
    "@eslint/eslint": "1"
  }
}
Plugin versions and tool versions are separate.

Legacy input compatibility

Schema version 1 and the earlier map-valued packageManager key remain accepted as input compatibility. When Jolter rewrites configuration, it emits the canonical tools key. This is different from the standard string-valued package.json#packageManager field:
package.json
{
  "packageManager": "pnpm@10.12.1"
}

Creating and updating config

Use pin:
jolter pin node@24
jolter pin pnpm@10
jolter pin eslint@8
Then validate:
jolter sync
jolter doctor
Commit jolter.json. Do not commit JOLTER_HOME or installed runtime directories.