Skip to main content
Define commands in each project’s project.json, then run them from anywhere inside your workspace. Keep your package manager and the tools you already use. Install @isox-sh/cli to use the isox command:

Run your first command

Install Isox, define a project, and run a command in a few steps.

Understand the workspace

Learn how projects, executors, configurations, and dependencies fit together.

A small configuration surface

An isox.json file marks the workspace root. Each project.json describes the commands available for that project. A command can wrap an existing script or use an executor that integrates directly with a tool.
apps/web/project.json
The example runs the existing build script in apps/web. Use named configurations for different environments.

From local development to CI

Isox discovers project dependencies from source imports, TypeScript aliases, local package references, and explicit declarations. Use that graph to select changed projects and their dependents, then distribute work across weighted GitHub Actions jobs. Project definitions are cached separately from dependency-analysis results. Affected selection, cacheable targets, and executors that need dependencies validate the analysis cache. Native targets can also reuse successful task results with opt-in local caching.

Configure your workspace

Define projects, metadata, dependencies, and CI weights.

Run affected projects

Select changes with Git and build exact, weighted CI matrices.

Build with TypeScript

Scaffold projects, compile packages, copy assets, and watch for changes.

Migrate from Nx

Move commands to Isox with temporary adapter support for Nx 23.
Isox orders selected projects by dependency when a multi-project stage includes cached outputs. Declare dependsOn to add required tasks, including tasks outside the selected project list. Separate CI jobs expand their own prerequisites; see execution ordering. Local task caching is available; remote caching remains on the roadmap.

Build your own plugin

Create your first plugin

Write an executor, install it locally, and run it. Open the Plugins tab for generators, migrations, packaging, and testing.

Extend your tooling

Use the built-in shell executor, or install native executors for TypeScript, ESLint, and Vitest. Use the release plugin for versioning, changelogs, and publishing hooks. Write custom plugins when your workflow needs its own integration, and verify them with the plugin testing helper.