npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@front-ops/domino

v1.0.1

Published

True Affected - Semantic change detection for monorepos

Readme

Overview

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.

Features

  • 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
  • Lockfile Change Detection: Detects dependency version changes in npm, yarn, pnpm, and bun lockfiles and traces affected projects
  • 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

Quick Start

# Run directly with npx (no installation required)
npx @front-ops/domino@latest affected

# Show all projects in the workspace
npx @front-ops/domino@latest affected --all

Installation

Using npx (Recommended)

No installation required! Just run:

npx @front-ops/domino@latest affected

Binary Installation

If you prefer to use the standalone binary:

# Clone and build from source
git clone [email protected]:frontops-dev/domino.git
cd domino
cargo build --release

# The binary will be available at ./target/release/domino
# You can then run it from anywhere:
/path/to/domino/target/release/domino affected

Usage

Using npx

# Show all projects in the workspace
npx @front-ops/domino affected --all

# Find affected projects (compared to origin/main)
npx @front-ops/domino affected

# Use a different base branch
npx @front-ops/domino affected --base origin/develop

# Output as JSON
npx @front-ops/domino affected --json

# Enable debug logging
npx @front-ops/domino affected --debug

# Generate a detailed report
npx @front-ops/domino affected --report report.html

Using the Binary

If you've built the binary from source:

# Show all projects in the workspace
domino affected --all

# Find affected projects (compared to origin/main)
domino affected

# Use a different base branch
domino affected --base origin/develop

# Output as JSON
domino affected --json

# Enable debug logging
domino affected --debug

# Generate a detailed report
domino affected --report report.html

Options

  • --base <BRANCH>: Base branch to compare against (default: origin/main)
  • --all: Show all projects regardless of changes
  • --json: Output results as JSON
  • --report <PATH>: Generate a detailed analysis report
  • --debug: Enable debug logging
  • --cwd <PATH>: Set the current working directory
  • --lockfile-strategy <STRATEGY>: Lockfile change detection strategy (default: direct)

Lockfile Change Detection

domino automatically detects when your lockfile changes and identifies which projects are affected by dependency version updates. This works with all major package managers:

| Package Manager | Lockfile | | --------------- | ------------------- | | npm | package-lock.json | | yarn | yarn.lock | | pnpm | pnpm-lock.yaml | | bun | bun.lock |

Three strategies are available via --lockfile-strategy:

  • none — Ignore lockfile changes entirely
  • direct (default) — Mark projects that directly import an affected dependency
  • full — Like direct, but also traces the full reference chain (e.g. if lib-a changed and ProjectA imports it, full follows all re-exports of lib-a symbols to find additional affected projects)

The detection is transitive: if a deeply nested dependency changes, domino walks the reverse dependency graph to find which direct dependency was affected, then finds all projects importing that dependency.

# Default: detect lockfile changes with "direct" strategy
domino affected

# Disable lockfile detection
domino affected --lockfile-strategy none

# Full reference chain tracing
domino affected --lockfile-strategy full

How 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. Lockfile Analysis: Detects dependency version changes and traces affected imports
  6. 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

Core Components

  • 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
  • Lockfile Analyzer (src/lockfile.rs): Parses lockfiles, builds reverse dependency graphs, and detects affected packages
  • Core Algorithm (src/core.rs): Orchestrates the affected detection logic

Key Technologies

  • 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

Quick Reference

# Build (debug)
cargo build

# Build (release)
cargo build --release

# Run tests
cargo test

# Run integration tests (must be serial)
cargo test --test integration_test -- --test-threads=1

# Run from source
cargo run -- affected --all

# Format code
cargo fmt

# Lint code
cargo clippy

# Enable debug logging
RUST_LOG=domino=debug cargo run -- affected

License

Same as the original traf project.

Credits

This is a Rust port of the original traf TypeScript implementation.

Built with:

  • Oxc - The JavaScript Oxidation Compiler
  • oxc_resolver - Fast module resolution