# 

> 

<u-page-hero :links="[{"label":"Hunt Duplicates","color":"primary","size":"xl","to":"/getting-started/installation","trailing-icon":"i-lucide-arrow-right","class":"btn-glow"},{"label":"Sponsor the project","color":"neutral","size":"xl","to":"https://opencollective.com/jscpd","target":"_blank","variant":"ghost","icon":"i-lucide-heart"}]" orientation="horizontal">
<template v-slot:title="">

Copy/Paste Detector for Source Code

</template>

<template v-slot:description="">

**jscpd v5** is a Rust-powered rewrite that hunts down duplicated blocks across **223+ languages** up to **37x faster** than v4 — because life's too short to maintain the same bug in five different places. Need the Node.js API? v4 is still available. AI-ready with the `--reporters ai` flag.

</template>

<install-command>



</install-command>
</u-page-hero>

<u-page-section>
<template v-slot:title="">

Why Developers Love <span className="hero-gradient">

jscpd

</span>
</template>

<template v-slot:description="">

Because clean code is happy code

</template>

<template v-slot:features="">
<u-page-feature icon="i-lucide-award">
<template v-slot:title="">

Since 2013

</template>

<template v-slot:description="">

A decade of refining the art of duplicate detection. Now rewritten in Rust for native performance — no Node.js runtime required.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-globe">
<template v-slot:title="">

Speaks 223+ Languages

</template>

<template v-slot:description="">

JavaScript, Python, Java, Go, Rust, C++, TypeScript, Ruby... If you can write it, we can scan it. Vue, Svelte, Astro, and Markdown cross-format detection too.

[
  View supported formats
  <span className="link-arrow">

→

</span>

](/getting-started/supported-formats)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-download">
<template v-slot:title="">

20M+ Downloads

</template>

<template v-slot:description="">

One of the most trusted tools in the ecosystem. Join developers who rely on jscpd every day.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-rocket">
<template v-slot:title="">

Blazingly Fast™

</template>

<template v-slot:description="">

Rewritten in Rust. 24-37x faster than the TypeScript engine. 159 MB codebase? 3.4 seconds. No Node.js runtime — just a single native binary.

[
  See benchmarks
  <span className="link-arrow">

→

</span>

](/benchmarks)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-terminal-square">
<template v-slot:title="">

CLI-First Design

</template>

<template v-slot:description="">

One command to rule them all. Works everywhere — your laptop, CI/CD, that ancient Jenkins server nobody wants to touch.

[
  Get started
  <span className="link-arrow">

→

</span>

](/getting-started/installation)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-file-bar-chart">
<template v-slot:title="">

Beautiful Reports

</template>

<template v-slot:description="">

HTML, JSON, XML, badges for your README. Make technical debt visible (and slightly embarrassing).

[
  Explore reporters
  <span className="link-arrow">

→

</span>

](/reporters)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-code-2">
<template v-slot:title="">

Programmable

</template>

<template v-slot:description="">

v5: Rust crate API. v4: Node.js API. Same CLI in both. Use whichever fits your stack.

[
  View API documentation
  <span className="link-arrow">

→

</span>

](/api)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-shield-check">
<template v-slot:title="">

CI/CD Ready

</template>

<template v-slot:description="">

Set a threshold, fail the build, save the day. Your future self will thank you.

[
  Configure thresholds
  <span className="link-arrow">

→

</span>

](/getting-started/configuration)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-bot">
<template v-slot:title="">

MCP Server <span className="duplicate-badge">

New

</span>
</template>

<template v-slot:description="">

Let AI assistants like Claude check your code for duplications directly using the Model Context Protocol.

[
  Learn about MCP Server
  <span className="link-arrow">

→

</span>

](/api/mcp-server)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-sparkles">
<template v-slot:title="">

Cross-Format Detection <span className="duplicate-badge">

New

</span>
</template>

<template v-slot:description="">

Vue SFC, Svelte, Astro, and Markdown files are tokenized per-block — a `<script>` in .vue can match a .ts file. And `--cross-formats "js-ts"` compares related formats in one pool, catching clones between .js and .ts files.

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-sparkles">
<template v-slot:title="">

AI Reporter <span className="duplicate-badge">

New

</span>
</template>

<template v-slot:description="">

Compact output that saves ~79% of tokens compared to the default reporter — ideal for piping into LLMs.

[
  AI Reporter docs
  <span className="link-arrow">

→

</span>

](/reporters)

</template>
</u-page-feature>

<u-page-feature icon="i-lucide-cpu">
<template v-slot:title="">

Agent Skill <span className="duplicate-badge">

New

</span>
</template>

<template v-slot:description="">

Install a skill for your AI coding assistant to automatically detect and refactor duplications — one command to get started.

```bash
npx skills add kucherenko/jscpd
```

[
  Learn more
  <span className="link-arrow">

→

</span>

](/getting-started/agent-skill)

</template>
</u-page-feature>
</template>
</u-page-section>

<u-page-section orientation="horizontal">
<template v-slot:title="">

See It In Action

</template>

<template v-slot:description="">

From chaos to clarity in seconds

</template>

```bash
# Scan your source code
$ jscpd ./src

Clone found (typescript):
 - src/utils.ts [10:1 - 25:3] (15 lines, 129 tokens)
    src/helpers.ts [5:1 - 20:3]

Clone found (typescript):
 - src/utils.ts [45:5 - 62:2] (17 lines, 178 tokens)
    src/components/Button.tsx [12:1 - 29:2]

Clone found (javascript):
 - src/hooks/useAuth.ts [1:1 - 34:2] (33 lines, 245 tokens)
    src/hooks/useSession.ts [1:1 - 34:2]

# ... more clones

Found 90 clones.
Detection time: 13ms
```

</u-page-section>

<u-page-section orientation="horizontal">
<template v-slot:title="">

v5 vs v4: Performance

</template>

<template v-slot:description="">

The Rust engine makes jscpd 24–37x faster across every codebase size.

</template>

<table>
<thead>
  <tr>
    <th>
      Target
    </th>
    
    <th>
      Files
    </th>
    
    <th>
      Size
    </th>
    
    <th>
      v4 (TypeScript)
    </th>
    
    <th>
      v5 (Rust)
    </th>
    
    <th>
      Speedup
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      fixtures
    </td>
    
    <td>
      548
    </td>
    
    <td>
      1.5 MB
    </td>
    
    <td>
      1.03s
    </td>
    
    <td>
      0.03s
    </td>
    
    <td>
      <strong>
        34.3x
      </strong>
    </td>
  </tr>
  
  <tr>
    <td>
      Svelte
    </td>
    
    <td>
      8,963
    </td>
    
    <td>
      38 MB
    </td>
    
    <td>
      15.80s
    </td>
    
    <td>
      0.43s
    </td>
    
    <td>
      <strong>
        36.9x
      </strong>
    </td>
  </tr>
  
  <tr>
    <td>
      CopilotKit
    </td>
    
    <td>
      17,092
    </td>
    
    <td>
      159 MB
    </td>
    
    <td>
      82.89s
    </td>
    
    <td>
      3.44s
    </td>
    
    <td>
      <strong>
        24.1x
      </strong>
    </td>
  </tr>
</tbody>
</table>

Git blame is **27.5x faster** with v5's in-process gitoxide (0.13s vs 3.57s on fixtures).

*Benchmarked on macOS (Apple Silicon). See the Migration Guide for full details.*

</u-page-section>

<u-page-section orientation="horizontal">
<template v-slot:title="">

Built by a Human Who Gets It

</template>

<template v-slot:description="">

Created with ❤️ by Andrey Kucherenko

</template>

<u-card>
<div className="flex,flex-col,sm:flex-row,items-center,gap-6">

![Andrey Kucherenko](https://avatars.githubusercontent.com/kucherenko?v=4&size=128)
  <div className="text-center,sm:text-left">

Andrey Kucherenko believes that every copy-pasted code block is a bug waiting to happen twice.
      He built jscpd so you don't have to fix the same issue in five files.
    


    <div className="flex,flex-wrap,justify-center,sm:justify-start,gap-3">

[
        <span className="i-simple-icons:github,w-4,h-4">



</span>

 GitHub
      ](https://github.com/kucherenko)
      [
        <span className="i-simple-icons:x,w-4,h-4">



</span>

 X
      ](https://x.com/a_kucherenko)

</div>
</div>
</div>
</u-card>
</u-page-section>

<u-page-section orientation="horizontal" :reverse="true">
<template v-slot:title="">

💙 Huge Thank You to Our Contributors!

</template>

<template v-slot:description="">

This project wouldn't exist without you

</template>

<u-card>

**To everyone who has contributed to jscpd — thank you!** 🌟

Whether you've submitted code, reported bugs, suggested features, improved documentation, or simply spread the word — your contributions make jscpd better for everyone. We're grateful for every issue closed, every PR merged, and every kind word shared.

**With a grateful heart,** 🤗

*The jscpd Team*

[<icon className="inline" name="simple-icons-github">



</icon>

 View Contributors](https://github.com/kucherenko/jscpd/graphs/contributors)

</u-card>
</u-page-section>
