Run only
what matters.
A standalone CLI that detects affected packages in your monorepo
— then runs tests, lints, or any command on only those packages.
13 ecosystems, zero configuration.
Auto-detected from your manifest files.
Built different.
Zero config. Zero dependencies. Just one binary that understands your entire monorepo.
Zero Configuration
Auto-detects your ecosystem from manifest files. Cargo.toml? Rust workspace. package.json? Node monorepo. No setup required.
Lightning Fast
Single ~5MB Rust binary. No Node.js, no JVM, no runtime dependencies. Starts in milliseconds.
Full Blast Radius
Transitive dependency graph analysis. If core changes and api depends on it, both are affected.
- uses: Rani367/setup-affected@v1
- run: affected test --base $${{ github.event.pull_request.base.sha }}
- run: affected lint --output junit
CI-Native
GitHub Actions, GitLab CI, CircleCI, Azure Pipelines. Dynamic matrices, PR comment bot, JUnit output.
How it
works
From git diff to targeted test execution — six steps, milliseconds. affected builds a dependency graph of your monorepo, diffs against your base branch, and runs commands on only the affected packages.
The --explain flag
See exactly why each package is affected. Full dependency chain visualization from changed file to impacted package.
Watch mode
Re-runs on file change. Built-in debouncing for smooth dev loops. Your tests stay in sync as you code.
How affected
stacks up
The power of a build system. The simplicity of a CLI.
Get running in
60 seconds
Choose your preferred method. All roads lead to affected.
Homebrew
Cargo
uv / pipx
GitHub Actions
Star on GitHub to support the project
Star on GitHub