Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

kucherenko/jscpd

Copy/paste detector for programming source code.

kucherenko/jscpd.json
{
"createdAt": "2013-05-29T06:19:20Z",
"defaultBranch": "master",
"description": "Copy/paste detector for programming source code.",
"fullName": "kucherenko/jscpd",
"homepage": "",
"language": "TypeScript",
"name": "jscpd",
"pushedAt": "2025-11-22T17:31:27Z",
"stargazersCount": 5093,
"topics": [
"clones-detection",
"code-quality",
"copy-paste",
"cpd",
"detect-duplications",
"detector",
"duplicates",
"duplications",
"quality"
],
"updatedAt": "2025-11-26T00:06:58Z",
"url": "https://github.com/kucherenko/jscpd"
}

stand with Ukraine

npm jscpd license npm

jscpd CI codecov FOSSA Status [Backers on Open Collective]!(#backers) [Sponsors on Open Collective]!(#sponsors)

NPM

Copy/paste detector for programming source code, supports 150+ formats.

Copy/paste is a common technical debt on a lot of projects. The jscpd gives the ability to find duplicated blocks implemented on more than 150 programming languages and digital formats of documents. The jscpd tool implements Rabin-Karp algorithm for searching duplications.

nameversiondescription
[jscpd]!(apps/jscpd)npmmain package for jscpd (cli and API for detections included)
[@jscpd/core]!(packages/core)npmcore detection algorithm, can be used for detect duplication in different environments, one dependency to eventemitter3
[@jscpd/finder]!(packages/finder)npmdetector of duplication in files
[@jscpd/tokenizer]!(packages/tokenizer)npmtool for tokenize programming source code
[@jscpd/leveldb-store]!(packages/leveldb-store)npmLevelDB store, used for big repositories, slower than default store
[@jscpd/html-reporter]!(packages/html-reporter)npmHtml reporter for jscpd
[@jscpd/badge-reporter]!(packages/badge-reporter)npmBadge reporter for jscpd
Terminal window
$ npm install -g jscpd
Terminal window
$ npx jscpd /path/to/source

or

Terminal window
$ jscpd /path/to/code

or

Terminal window
$ jscpd --pattern "src/**/*.js"

More information about cli [here]!(apps/jscpd).

For integration copy/paste detection to your application you can use programming API:

jscpd Promise API

import {IClone} from '@jscpd/core';
import {jscpd} from 'jscpd';
const clones: Promise<IClone[]> = jscpd(process.argv);

jscpd async/await API

import {IClone} from '@jscpd/core';
import {jscpd} from 'jscpd';
(async () => {
const clones: IClone[] = await jscpd(['', '', __dirname + '/../fixtures', '-m', 'weak', '--silent']);
console.log(clones);
})();

detectClones API

import {detectClones} from "jscpd";
(async () => {
const clones = await detectClones({
path: [
__dirname + '/../fixtures'
],
silent: true
});
console.log(clones);
})()

detectClones with persist store

import {detectClones} from "jscpd";
import {IMapFrame, MemoryStore} from "@jscpd/core";
(async () => {
const store = new MemoryStore<IMapFrame>();
await detectClones({
path: [
__dirname + '/../fixtures'
],
}, store);
await detectClones({
path: [
__dirname + '/../fixtures'
],
silent: true
}, store);
})()

In case of deep customisation of detection process you can build your own tool with @jscpd/core, @jscpd/finder and @jscpd/tokenizer.

  • Fork the repo kucherenko/jscpd
  • Clone forked version (git clone https://github.com/{your-id}/jscpd)
  • Install dependencies (pnpm install)
  • Run the project in dev mode: pnpm dev (watch changes and rebuild the packages)
  • Add your changes
  • Add tests and check it with pnpm test
  • Build your project pnpm build
  • Create PR
  • GitHub Super Linter is combination of multiple linters to install as a GitHub Action
  • Code-Inspector is a code analysis and technical debt management service.
  • Mega-Linter is a 100% open-source linters aggregator for CI (GitHub Action & other CI tools) or to run locally
  • Codacy automatically analyzes your source code and identifies issues as you go, helping you develop software more efficiently with fewer issues down the line.
  • Natural is a general natural language facility for nodejs. It offers a broad range of functionalities for natural language processing.

Thank you to all our backers! 🙏 [Become a backer]

Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [Become a sponsor]

ga tracker

[MIT]!(LICENSE) © Andrey Kucherenko