jscpd
Officialjscpd
Детектор копипасты для исходного кода программ. Поддерживает более 224 форматов. Готов для AI: MCP-сервер и экономный по токенам репортер. Теперь на движке Rust — в 24-37 раз быстрее.
jscpd реализует алгоритм Рабина—Карпа для поиска дублирующихся блоков кода в файлах.
Быстрый старт
# Install (all platforms — installs the jscpd command)
curl -fsSL https://jscpd.dev/install.sh | bash
# TypeScript engine (Node.js, v4.x)
npm install -g jscpd@4
jscpd /path/to/code
# or use without installing
npx jscpd@4 /path/to/code
# Rust engine (v5.x, 24-37x faster) — installs the jscpd command
npm install -g jscpd@5
jscpd /path/to/code
# Rust engine — cpd command only
npm install -g cpd
cpd /path/to/code
# Rust-native install (exposes both jscpd and cpd)
cargo install jscpd
# Nix (installs both jscpd and cpd)
nix run github:kucherenko/jscpd -- /path/to/code
# or install permanently
nix profile install github:kucherenko/jscpd
# Homebrew (macOS/Linux)
brew install jscpdRelated MCP server: tree-sitter-analyzer
Документация
Документ | Описание |
Движок Node.js — CLI, репортеры, конфигурация, режимы детекции | |
Движок Rust — установка, CLI, репортеры, blame, Rust API | |
AI-репортер, навыки агентов, MCP-сервер | |
Программные API на TypeScript и Rust | |
GitHub Action, pre-commit хуки | |
Обзор пакетов и крейтов монорепозитория |
Два движка
TypeScript (v4) | Rust (v5) | |
npm-пакет | ||
Команда CLI |
|
|
Скорость | Базовый уровень | в 24-37 раз быстрее |
Форматы | 224 | 223 |
Требуется Node.js | Да | Нет (автономный бинарный файл) |
Программный API | TypeScript ( | Rust (крейт |
Хранилище LevelDB | Да | Нет |
Репортеры | 13 | 13 |
jscpd@5 устанавливает команду jscpd. npm-пакет cpd устанавливает команду cpd. Оба содержат один и тот же Rust-бинарный файл. Чтобы получить оба имени команды из одной установки, используйте crates.io: cargo install jscpd.
Что нового
v5.0.x — движок Rust
jscpd v5 — это полная переписка на Rust с нуля, которая поставляется как jscpd@5 (устанавливает команду jscpd) или cpd (устанавливает команду cpd). Автономный бинарь — Node.js рантайм не требуется.
Тот же интерфейс, в 24-37 раз быстрее:
Все CLI-опции из v4 сохранеы — полная замена:
jscpd→jscpd@5Тот же конфигурационный файл
.jscpd.json, тот же алгоритм детекции, те же репортеры223 языковых формата с межформатной детекцией (Vue SFC, Svelte, Astro, Markdown)
Новое в v5:
В 24-37 раз быстрее детекция на реальных проектах (см. бенчмарк)
Небольшие кодовые базы (548 файлов): в 34 раза быстрее
Средние кодовые базы (9K файлов): в 37 раз быстрее
Крупные кодовые базы (17K файлов, 900 MB): в 24 раза быстрее
Git blame с параллельным сравнением авторов (
--blame --reporter console-full)--workers— управляет параллелизмом токенизации файлов и детекции (по умолчанию: авто, использует все ядра CPU; недоступно в v4)13 репортеров:
console,console-full,json,xml,csv,html,markdown,badge,sarif,ai,xcode,threshold,silentAI-репортер — экономный по токенам вывод для LLM-пайплайнов (~79% меньше токенов, чем у console)
--mcp— встроенный MCP-сервер через stdio: укажите вашему AI-ассистенту на бинарный файл, и он сможет проверять фрагменты на дубликаты относительно вашей кодовой базы (см. документацию)--summary— сводка по кодовой базе: топ файлов и папок по токенам, строкам, размеру и оценке сложности — горячие точки для рефакторинга прямо из результатов сканирования (см. документацию)Автономный бинарь — готовые сборки для 7 платформ (macOS arm64/x64, Linux arm64/x64, Windows arm64/x64)
Пока нет в v5 (для этого используйте v4):
Хранилища LevelDB/Redis (
--store leveldb))Программный API Node.js (
jscpd(),detectClones()))
Полный справочник по CLI и отличия от v4 см. в документации по Rust.
v4.2.x — TypeScript-движок
Собственный бекенд токенизатора — заменен
prismjsна собственный бекенд на основе reprism. Токенизация реальных проектов выполняется ~11,5% быстрееМежформатная детекция — Vue SFC, Svelte, Astro и Markdown токенизируются поблочно, что позвояет обнаруживать дубликаты между типами файлов
Новые форматы: Apex, CFML/ColdFusion, GDScrip и еще более 70 форматов (всего 224, раньше было 152)
Определение shebang — авоматическое определе语言 для скриптов без расширения
--store-path— задает каталог кэша LevelDB для параллельных запусков--skipComments— сокращение для--mode weak--formats-names— сопоставляет имена файлов (например,Makefile,Dockerfile) с форматами--noTips— подавляет вывод подсказок в CIИсправления багов: дубликаты целых файлов молча отбрасывались (#728), ReDoS на файлах Lisp/Elisp (#737), падение процесса из-за поврежденного
package.json(#739), межфайловая детекция Vue SFC (#737), номера колонок Vue SFC (#737), 50 уязвимостей безопасности в зависимостях
Полный справочник по CLI см. в документации по TypeScript.
Пакеты
Пакет | Описание |
CLI и Node.js API (v4.x) | |
REST API + MCP-сервер | |
Базовый алгоритм обнаружения | |
Обнаружение в файлах, репортеры | |
Токенизация исходного кода | |
HTML-отчет | |
SVG-бейдж | |
SARIF (GitHub Code Scanning) | |
Постоянное хранилище LevelDB | |
Распределенное хранилище Redis | |
cpd (движок Rust) | Движок на Rust (v5.x) — также доступен как |
Кто использует jscpd
npm-пакет jscpd скачивают более 10 млн раз в месяц, и ~5000 репозиториев указыают его на графе зависимостей GitHub.
Входит в состав аналитических платформ:
GitHub Super Linter — официальный агрегатор линтеров GitHub, включает jscpd в качестве детектора копипасты
MegaLinter — опенсорсный агрегатор линтеров для CI, поставляет jscpd во всех вариантах, включая
ci_lightCodacy — платформа авоматического анализа кода, jscpd обеспечивает работу движка обнаружения дубликатов
Используется в известных проектах:
OpenClaw — персональный AI-ассистент, запускает jscpd как проверку на дубликаты в своих скриптах проверки
DeepSeek Harness — плагинный харнесс DeepSeek, конфигурация jscpd в CI
degit — генератор каркаса проектов Рича Харриса
MEGA webclient — веб-клиент MEGA.nz
Alibaba AppWorks — встраивает jscpd в качестве библотеки
OVHcloud manager — клиентская панель управления OVHcloud
KiroCrew — самосовершенствующееся постоянное рабочее пространство разработки
Производительность
Замеры проводились на macOS (Apple Silicon), по 10 прогонов на цель (3 для CopilotKit). v4 запускалась с --no-gitignore -i "node_modules", чтобы обес печить сопоставимое сканирование файлов.
Цель | Файлы | Размер | jscpd v4 | jscpd v5 | Ускорение |
fixtures | 548 | 1.5 MB | 1.03s | 0.03s | 34.3x |
svelte | 9K | 38 MB | 15.80s | 0.43s | 36.9x |
CopilotKit | 17K | 159 MB | 82.89s | 3.44s | 24.1x |
Полную методологию и исодные данные см. в performance-comparison.md).
Возможности AI-Ready
jscpd интегрируется в рабочие процессы на основе AI с помощью трех механизмов:
AI-репортер
Экономный по токенам вывод для LLM-пайплайнов (~79% меньше токенов, чем у стандартного репортера console):
jscpd --reporters ai /path/to/source # v4
cpd --reporters ai /path/to/source # v5
cpd --reporters ai --summary /path/to/source # v5: + compact codebase summaryНавыки агентов
Два устанавлваемых навыка, которые учат AI-ассистентов программированию использовать jscpd и рефакторить обнаруженные дубликаты:
Навык | Назначение | Установка |
| Справочник по инструменту — опции CLI, формат AI-репортера, синтаксис конфигурации |
|
| Направляемый процесс рефакторинга — прочитать клоны, выбрать стратегию, применить, проверить |
|
После установки попросите вашего агента «найти и исправить дублирование кода» — он вызовет jscpd с нужными опциями и обработает результаты.
Подробности см. в документации AI-Ready.
Участие в разработке
См. CONTRIBUTING.md: здесь описаны настройка среды разработки (Rust и TypeScript), политика тестирования и требования к приемлемым pull request. Проблемы безопасности передавайте через политику безопасности, а не в публичные issues.
Сделайте форк репозитория kucherenko/jscpd
Клонируйте форк (
git clone https://github.com/{your-id}/jscpd)Установите зависимости (
pnpm install)Запустите в режиме разработки:
pnpm devВнесите свои изменения
Добавьте тесты и проверьте:
pnpm testСоберите проект:
pnpm buildСоздайте PR
Бэкеры
Спасибо всем нашим бэкерам! 🙏 [Стать бэкером]
Спонсоры
Поддержите этот проект, став спонсором. Ваш логотип появится здесь со ссылкой на ваш сайт. [Стать спонсором]
Лицензия
MIT © Andrey Kucherenko
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceFramework-aware code intelligence MCP server that builds a cross-language dependency graph from source code. 53 integrations (Laravel, Django, Rails, Spring, NestJS, Next.js, and more) across 68 languages. 100+ tools for navigation, impact analysis, refactoring, security scanning, session memory, and CI/PR reports — up to 97% token reduction.285,033102MIT
- AlicenseAqualityAmaintenanceAn MCP code-intelligence server for AI agents with pre-indexed AST cache, 62 MCP tools, and TOON-compressed output, enabling token-efficient code analysis and project health grading entirely locally.947MIT
- AlicenseNot gradedqualityBmaintenanceA local MCP server that indexes TypeScript/JavaScript projects and returns budget-aware, dependency-optimized context packs for AI coding assistants.1MIT
- AlicenseNot gradedqualityCmaintenanceToken-efficient MCP server for multi-language project analysis (Java, TypeScript, JavaScript, Markdown, Python) with plugins, semantic search, and static analysis.MIT
Related MCP Connectors
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kucherenko/jscpd'
If you have feedback or need assistance with the MCP directory API, please join our Discord server