Config files

Ende is configured with an ende.json file. It is optional: scripts run without one, and you add it when you want to declare dependencies or configure Ende's tooling, such as the formatter, linter, TypeScript compiler, or tasks.

ende.json

ende.json is where you configure Ende itself: tasks, dependencies, and tools like the TypeScript compiler, linter, and formatter. It is optional; a minimal file looks like this:

ende.json
{
  "tasks": {
    "dev": "ende run --watch main.ts"
  },
  "imports": {
    "@ende/assert": "jsr:@ende/assert@^2026.10.15"
  },
  "fmt": {
    "lineWidth": 100
  }
}

It supports .json and .jsonc extensions, so with ende.jsonc you can add comments and trailing commas.

Ende automatically detects a ende.json or ende.jsonc file in your current working directory or any parent directory, which is what makes a project's settings apply to every file under it. Use the --config flag to point at a different file. In a monorepo, a root ende.json can define a workspace whose members each carry their own ende.json.

Ende still reads deno.json, deno.jsonc and deno.lock, and DENO_* environment variables, as fallbacks for projects coming from Deno. They print a deprecation warning, and the ende.* names take precedence when both exist.

What you can configure

A ende.json file configures Ende's tooling and your project. Every field is documented in the Configuration file (ende.json) reference, including:

See the reference for a full example ende.json file and the JSON schema for editor autocompletion.