jscpd
[](https://github.com/kucherenko/jscpd/actions/workflows/rust.yml) [](https://socket.dev/npm/package/jscpd) [](https://scorecard.dev/viewer/?uri=github.com/kucherenko/jscpd) [](https://www.bestpractices.dev/projects/14188)
Duplicate code detector for 220+ languages — plus dead code, complexity hotspots, duplication trends over git history, and one health score for the whole codebase. Rust engine, self-contained binary, AI-ready with an MCP server and a token-efficient reporter.
Documentation: https://jscpd.dev
jscpd tokenizes each of its 224 supported formats the way that language defines it — its own comment and string rules, not generic text — then finds duplicated token sequences across files with a rolling Rabin-Karp hash. Opt-in passes catch copies that differ only in names or values (Type-2) or that have a few edited lines (Type-3). See How detection works for the full mechanism, and Supported formats for the full list.
Beyond duplicates, jscpd also finds dead code (--dead-code), ranks files by complexity (--complexity), tracks duplication over git history (--history), and rolls it all into one health score (--health) — see Features below.
Quick Start
# macOS / Linux
curl -fsSL https://jscpd.dev/install.sh | bash
# Windows (PowerShell)
irm https://jscpd.dev/install.ps1 | iex
# No install — run once with npx (Node.js)
npx jscpd .Then scan a project:
jscpd /path/to/codeOther install methods
| Method | Command | Notes | |--------|---------|-------| | npm | npm install -g jscpd | Installs the jscpd command; prebuilt binary, no Node.js at runtime | | npm (cpd command) | npm install -g cpd | Same binary, exposed as cpd | | PyPI | pip install jscpd | Platform wheels with both commands; also pipx install jscpd, uv tool install jscpd, or uvx jscpd . to run without installing | | Cargo | cargo install jscpd | Builds from crates.io; installs both jscpd and cpd | | Homebrew | brew install jscpd | macOS / Linux | | Nix | nix run github:kucherenko/jscpd -- /path/to/code | Or nix profile install github:kucherenko/jscpd | | Docker | docker run --rm -v "$PWD:/src" ghcr.io/kucherenko/jscpd . | Multi-arch image built from the release binaries |
GitHub Action
- uses: kucherenko/jscpd@v5
with:
threshold: 5Uploads SARIF results to GitHub Code Scanning by default. See CI & Pre-Commit Hooks for all inputs and outputs.
Documentation
| Document | Description | |----------|-------------| | Rust engine | Installation, CLI reference, reporters, baseline, summary, complexity, dashboard, blame, config file | | AI-Ready | AI reporter, agent skills, MCP server | | Programming API | Rust API (cpd-finder crate) | | CI & Pre-Commit Hooks | GitHub Action, Docker image, pre-commit hooks | | Packages | npm packages and crates that make up a release | | Supported formats | All 224 formats with their file extensions | | Runnable demos | One fixtures/<feature-demo/ directory per feature, each README lists the commands with their expected output |