# monoripple
monoripple finds JavaScript and TypeScript applications affected by a change at symbol precision. It uses Oxc for parsing, semantic binding analysis, and module resolution instead of treating every declared package dependency as a runtime dependency.
## Status
monoripple currently supports:
- JavaScript, JSX, TypeScript, and TSX
- npm-compatible workspace package manifests
- relative and package imports
- named, default, namespace, and re-exported bindings
- runtime versus type-only dependency edges
- deployable target discovery from package scripts and Wrangler entrypoints
- Git working-tree comparisons
- dependency-path explanations
The current implementation builds the working-tree graph. Deleted modules conservatively affect their owning package; a base/current graph union is planned to make deletion and export-removal paths symbol-precise.
## Usage
```sh
cargo install monoripple
monoripple --root /path/to/monorepo affected --base origin/main
monoripple --root /path/to/monorepo affected --base origin/main --format json
monoripple --root /path/to/monorepo why @repo/engine --base origin/main
```
By default monoripple reports packages with a `deploy` script. Use `--target <script>` to select another package script, or `--target all` to include every package with an inferred entrypoint.
## How it works
monoripple creates declaration nodes for each module using `oxc_semantic`. References inside a declaration become edges to the exact local or imported symbols they consume. `oxc_resolver` links imports and package exports across files. Changed declaration fingerprints are then propagated backwards to application entrypoints.
```text
changed declaration
-> local consumer
-> imported binding
-> application target
```
Type-only imports and exports do not participate in runtime affected-target queries.