project.json to name a project and declare its runnable targets. Workspace-wide defaults live in isox.json.
Project definitions
Each project has aproject.json. Its location determines the project root.
The entries under targets are the commands you can run with Isox:
apps/web/project.json and requires @isox-sh/js.
Install @isox-sh/core directly to use the shown editor schema path, or omit
$schema. Isox validates project definitions against its bundled schema either way.
project.json reference
All top-level project fields are optional. The directory containingproject.json
is the project root; a custom root property does not override it.
Core exports
ProjectDefinition and ExecutorConfiguration TypeScript types.
Projects using the former executors field should rename it to targets.
Plugin executors.json registries and nx.executors settings keep their names.
Project and command objects allow additional properties for use by custom
executors and other tools. Isox preserves them in the workspace cache and executor
context: read them through context.project and context.command. The exported
TypeScript interfaces expose additional fields as unknown, so consumers can
narrow them to their own types. Defined Isox fields are still validated.
See named configurations for option overrides and
Nx project conversion for existing Nx files.
Target reference
A target lives atproject.json.targets.<name>. The same optional fields can be
supplied by isox.json.targetDefaults.<target-or-executor>. Defaults only apply
to targets already declared by projects; every project target needs its own
executor. The defaults below apply after workspace and project settings merge.
configurations.<name> contains executor options directly. It is not another
target definition: placing cache, dependsOn, or inputs there passes those
keys to the executor instead of changing task scheduling or caching. Nested option
objects and arrays are replaced when overrides merge. See target defaults
for the full precedence order.
For example, this target uses a prerequisite, caching, and two shell-command
configurations:
production input set from the
workspace configuration example. The build
script must write to the declared output directory and every file it reads must
be included in the inputs. Add script files outside project roots to a shared set.
Executor option references: shell commands,
TypeScript, ESLint, Vitest,
and release automation.
Input reference
namedInputs belongs at the top level of isox.json or project.json. Each value
is an array using the same entries as target inputs. Set names start with a
letter or underscore, followed by letters, digits, underscores, or hyphens.
An empty array defines an empty set.
Sets can reference other sets. Cycles and missing dependency set names fail.
A local set replaces the workspace set with the same name; other workspace sets
remain available.
default falls back to ["{projectRoot}/**/*"] when undefined.
sharedGlobals has no special behavior: include it from another set to use it.
Dependency references prefixed with ^ replace automatic dependency source
selection for that task. They do not remove dependency configuration, manifests,
or declared build artifacts from the cache key. Inputs select cache content and affected tasks;
dependsOn schedules tasks. See
named inputs for examples and
cache keys for automatic inputs and path restrictions.
The same input resolution controls affected and each target in plan, including
shared paths outside the project root. Targets without explicit inputs or a
customized default set retain conservative owner/dependent selection. Automatic
project metadata and dependency artifacts still participate; Git selection cannot
detect environment or runtime changes. affected.ignoreFiles applies first,
then global-file rules, then target inputs and prerequisite inputs. See
target selection.
Back to workspace configuration.