True Affected - Semantic change detection for monorepos
npm install @front-ops/dominoA high-performance Rust implementation of True Affected - semantic change detection for monorepos using the Oxc parser.
domino is a drop-in replacement for the TypeScript version of traf, providing the same semantic analysis capabilities with significantly better performance thanks to Rust and the Oxc parser.
- Semantic Change Detection: Analyzes actual code changes at the AST level, not just file changes
- Cross-File Reference Tracking: Follows symbol references across your entire workspace
- Fast Oxc Parser: 3-5x faster than TypeScript's compiler API
- Workspace Support: Works with Nx, Turborepo, and generic npm/yarn/pnpm/bun workspaces
- Module Resolution: Uses oxc_resolver (same as Rolldown and Nova) for accurate module resolution
``bashRun directly with npx (no installation required)
npx @front-ops/domino@latest affected
Installation
$3
No installation required! Just run:
`bash
npx @front-ops/domino@latest affected
`$3
If you prefer to use the standalone binary:
`bash
Clone and build from source
git clone git@github.com:frontops-dev/domino.git
cd domino
cargo build --releaseThe binary will be available at ./target/release/domino
You can then run it from anywhere:
/path/to/domino/target/release/domino affected
`Usage
$3
`bash
Show all projects in the workspace
npx @front-ops/domino affected --allFind affected projects (compared to origin/main)
npx @front-ops/domino affectedUse a different base branch
npx @front-ops/domino affected --base origin/developOutput as JSON
npx @front-ops/domino affected --jsonEnable debug logging
npx @front-ops/domino affected --debugGenerate a detailed report
npx @front-ops/domino affected --report report.html
`$3
If you've built the binary from source:
`bash
Show all projects in the workspace
domino affected --allFind affected projects (compared to origin/main)
domino affectedUse a different base branch
domino affected --base origin/developOutput as JSON
domino affected --jsonEnable debug logging
domino affected --debugGenerate a detailed report
domino affected --report report.html
`$3
-
--base : Base branch to compare against (default: origin/main)
- --all: Show all projects regardless of changes
- --json: Output results as JSON
- --report : Generate a detailed analysis report
- --debug: Enable debug logging
- --cwd : Set the current working directoryHow It Works
1. Git Diff Analysis: Detects which files and specific lines have changed
2. Semantic Parsing: Parses all TypeScript/JavaScript files using Oxc
3. Symbol Resolution: Identifies which symbols (functions, classes, constants) were modified
4. Reference Finding: Recursively finds all cross-file references to those symbols
5. Project Mapping: Maps affected files to their owning projects
Performance
Thanks to Rust and Oxc, domino is significantly faster than the TypeScript version:
- Parsing: 3-5x faster using Oxc
- Memory: Lower memory footprint
- Startup: Near-instant startup time
Comparison with TypeScript Version
| Feature | TypeScript | Rust |
| ------------ | ------------------------------ | ------------------------ |
| Parser | ts-morph (TypeScript compiler) | Oxc parser |
| Speed | Baseline | 3-5x faster |
| Memory | Baseline | ~50% less |
| Binary Size | Requires Node.js + deps | Single standalone binary |
| Startup Time | ~1-2s | <100ms |
Architecture
$3
- Git Integration (
src/git.rs): Parses git diffs to identify changed files and lines
- Workspace Discovery (src/workspace/): Discovers projects in Nx, Turbo, and generic npm/yarn/pnpm/bun workspaces
- Semantic Analyzer (src/semantic/analyzer.rs): Uses Oxc to parse and analyze TypeScript/JavaScript
- Reference Finder (src/semantic/reference_finder.rs): Tracks cross-file symbol references
- Core Algorithm (src/core.rs): Orchestrates the affected detection logic$3
- Oxc: High-performance JavaScript/TypeScript parser and toolchain
- oxc_resolver: Module resolution (used by Rolldown, Nova, knip)
- clap: CLI argument parsing
- git2: Git integration
- serde: JSON/YAML parsing
Development
$3
`bash
Build (debug)
cargo buildBuild (release)
cargo build --releaseRun tests
cargo testRun integration tests (must be serial)
cargo test --test integration_test -- --test-threads=1Run from source
cargo run -- affected --allFormat code
cargo fmtLint code
cargo clippyEnable debug logging
RUST_LOG=domino=debug cargo run -- affected
``Same as the original traf project.
This is a Rust port of the original traf TypeScript implementation.
Built with:
- Oxc - The JavaScript Oxidation Compiler
- oxc_resolver - Fast module resolution