Skip to main content
meow.config.json is the one human-edited config for a meow project. It replaces the usual scatter of .eslintrc, .prettierrc, tsconfig.json, and test configs. Everything in it is runtime/toolchain behavior — dependencies, scripts, and workspaces live in your package.json.
meow.config.json
{ "mode": "strict-web" }
The config is a closed schema: unknown keys are a parse error, not a silent ignore. A typo’d key is caught immediately rather than quietly doing nothing. Keys use camelCase. Every key has a default, so the minimal config is {}.
Only meow.config.json is read today. A meow.config.ts is recognized but not yet evaluated (it requires the runtime) — meow returns a clear meow.config.ts evaluation is not yet supported error rather than guessing. Use JSON for now.

Full schema

meow.config.json
{
  // Runtime mode. The main behavioral switch. Default: "strict-web".
  "mode": "strict-web", // "strict-web" | "node-compat" | "legacy"

  // Monorepo package globs.
  "workspace": {
    "packages": ["apps/*", "packages/*"]
  },

  // Runtime behavior.
  "runtime": {
    "typescript": "strip"  // only "strip" — meow strips types in place
  },

  // Install projection.
  "install": {
    "mode": "pnp"  // "pnp" | "vfs" | "materialized" | "vendor"
  },

  // Lint rule severities, keyed by rule id.
  "lint": {
    "rules": {
      "no-debugger": "error"  // "off" | "warn" | "error"
    }
  },

  // Formatter style.
  "format": {
    "style": "meow"  // the single built-in style
  },

  // Type-checking.
  "types": {
    "strict": true  // maps to tsconfig "strict"
  },

  // Test runner defaults.
  "test": {
    "isolate": true,            // run each suite in its own isolate
    "clock": "deterministic",   // "deterministic" | "system"
    "network": "fake"           // "fake" | "real"
  },

  // Per-package capability grants (forward-looking).
  "permissions": {
    "default": [],
    "packages": {}
  }
}

Key reference

mode
"strict-web" | "node-compat" | "legacy"
default:"\"strict-web\""
The runtime mode. strict-web is a deterministic, web-standard sandbox; node-compat (and the legacy alias) expose the full Node surface with host access. This is the key behavioral switch and is read on every run.
types.strict
boolean
default:"true"
Sets strict in the generated .meow/tsconfig.json. Run meow sync after changing it. Drives meow check and your editor’s types.
lint.rules
object (rule id → severity)
default:"{}"
Per-rule severities for meow lint, keyed by rule id. Each value is "off", "warn", or "error".
format.style
"meow"
default:"\"meow\""
The formatter style. meow ships one opinionated style — there are no formatting knobs.
runtime.typescript
"strip"
default:"\"strip\""
How TypeScript is handled for execution. meow strips types in place; this is the only meaningful value.
workspace.packages
string[]
default:"[]"
Glob roots for a monorepo, e.g. ["apps/*", "packages/*"].
install.mode
"pnp" | "vfs" | "materialized" | "vendor"
default:"\"pnp\""
The intended install projection.
test.isolate / test.clock / test.network
boolean / enum / enum
Test-runner defaults. Today meow test always runs each suite in a deterministic isolate; these keys are accepted and forward-looking.
permissions.default / permissions.packages
string array / object
default:"[] / {}"
Per-package capability grants (default is a string array; packages maps a package name to a string array). Accepted and reserved; not yet enforced — see the permissions scope note.

What’s active today

Some keys change behavior right now; others are part of the closed schema but forward-looking. The config validates either way.
KeyStatus
mode✅ Active — read on every run
types.strict✅ Active — drives the shadow tsconfig + meow check
lint.rules✅ Active — rule severities for meow lint
format.style✅ Active — single supported value
runtime.typescript✅ Active — single supported value (strip)
workspace.packages🔜 Accepted — monorepo support evolving
install.mode🔜 Accepted — install layout set by CLI flags today
test.*🔜 Accepted — runner is deterministic-isolate today
permissions.*🔜 Accepted — not yet enforced
After editing the config, regenerate the editor/TypeScript shims:
meow sync

package.json reference

Dependencies, scripts, overrides, and workspaces.