MCPcopy Index your code
hub / github.com/ChenglongMa/zoplicate

github.com/ChenglongMa/zoplicate @v5.0.8

Chat with this repo
repository ↗ · DeepWiki ↗ · release v5.0.8 ↗ · + Follow
544 symbols 1,509 edges 113 files 17 documented · 3%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<img src="https://github.com/ChenglongMa/zoplicate/raw/v5.0.8/docs/banner.png" alt="zoplicate banner">

👉 zotero target version Version for Zotero 9 Downloads for Zotero 9👈

GitHub License Using Zotero Plugin Template GitHub Repo stars DOI


English | <a href="https://github.com/ChenglongMa/zoplicate/raw/v5.0.8/README_CN.md">简体中文</a> | <a href="https://citationstyler.com/wissen/zotero-plugin-zoplicate-einfach-duplikate-erkennen/" target="_blank">Deutsch</a>* | <a href="https://docs.zotero-fr.org/kbfr/kbfr_zoplicate/" target="_blank">French</a>**

Many thanks to Patrick O'Brien* for the German tutorial.

** Many thanks to Frédérique Flamerie for the French tutorial.

A plugin that does one thing only: Detect and Manage duplicate items in zotero.

Main Features

  • Duplicates Detection
  • Detects if newly imported items are duplicates of existing ones in the Zotero library.
  • You can choose which version of duplicate items to use as the master item and merge them.
  • The actions you can take:
    1. Keep New: Set the new item as the master item and merge the duplicates.
    2. Keep Old: Set the existing item as the master item and merge the duplicates.
    3. Keep All: Keep both the new item and the existing item.
    4. Merge Manually: Go to the Duplicate Items Panel and merge the duplicate item manually.
  • Auto-Bulk Merge
  • Merges all duplicate items in the library automatically.
  • Introduced in Version 2.0.0.
  • Non-duplicates Management
  • Allows marking items as "Non-duplicates" if mistakenly identified as duplicates by Zotero.
  • Supports exporting and importing non-duplicate decisions for cross-device transfer.
  • Introduced in Version 3.0.0.
  • Show Duplicate Statistics
  • Append the duplicate count on the label of Duplicate Items pane.
  • Introduced in Version 2.3.0.

If you find this project helpful, please consider giving it a star ⭐. It would be a great encouragement for me!

[!IMPORTANT]

Zoplicate does NOT delete the duplicate items arbitrarily.

Instead, it extracts the useful information from the duplicate items and merges them into the retained item.

It makes some improvements based on the official detection and merging methods of Zotero.

Changelog

v5.0.1

Click here to show more.

This hotfix resolves the Zotero sync error reported as Invalid setting 'zoplicate-nonDuplicatePairs':

  1. 🐛 FIX!: Disabled the v5.0.0 non-duplicate-pair sync path that wrote an unsupported custom key to Zotero.SyncedSettings.
  2. 🧹 CLEANUP!: Zoplicate now removes the legacy zoplicate-nonDuplicatePairs local synced setting on startup so Zotero stops retrying the invalid upload.
  3. 🗄️ NOTE!: Non-duplicate pairs continue to be stored locally; cross-device syncing for these pairs is disabled until a supported storage path is available.

v5.0.0

Click here to show more.

This version focuses on the Zotero 9 migration and data integrity work:

  1. NEW!: Zoplicate now targets Zotero 9 (9.0 to 9.*) and the release manifest is generated for Zotero 9.
  2. NEW!: Non-duplicate pairs can now be synced through Zotero.SyncedSettings with key-based storage for cross-device portability.
  3. 🧬 CHANGE!: The duplicate detection, dialog rendering, menu registration, window handling, and plugin lifecycle code were reorganized for the Zotero 9 runtime.
  4. 🐛 FIX!: Added local DB schema versioning, safer cleanup for merged/deleted items, startup hydration, and conflict-safe union merge for synced non-duplicate pairs.
  5. TEST!: Expanded the automated test suite for duplicate detection, non-duplicate sync, hydration, cleanup, lifecycle, menus, and bulk merge flows.

v4.0.0

Click here to show more.

Many thanks to all the contributors and users who liked, reported issues, and provided valuable feedback! ❤️

We are now supporting Zotero 8!

v3.0.8

Click here to show more.

In this version, we have made the following changes:

  1. 🐛 FIX!: We have fixed the bug that caused the dialog not to open again when importing duplicate items.
    • Thanks to pascaloettli for reporting this bug in issue #147.
    • Thanks to "如梦江南" for reporting this bug on RedNote.
  2. 🐛 FIX!: We have fixed the dialog styling issue in dark mode.

v3.0.6

Click here to show more.

In this version, we have updated the dependencies and adapted to the latest version of Zotero.

Thanks to pascaloettli for the feedback in issue #131.

v3.0.5

Click here to show more.

In this version, we have made the following changes:

  1. 🐛 FIX!: We have fixed the bug that caused the sync error.
  2. 🐛 FIX!: We have optimized the UI of context menu.
  3. 🐛 FIX!: We have optimized the UI styling of bulk merge buttons.

v3.0.4

Click here to show more.

In this version, we have made the following changes:

  1. 🐛 FIX!: We have fixed the bug that caused the UI blocked when selecting too many items and opening the context menu.
  2. 🐛 FIX!: We have optimized the plugin lifecycle which may cause the plugin to load multiple preference settings on macOS.
  3. 🐛 FIX!: We have optimized database operations to reduce the risk of data loss.

v3.0.3

Click here to show more.

In this version, we have made the following changes:

  1. 🐛 FIX!: We have fixed the bug that caused the attachment to be lost when merging duplicate items.
  2. 🐛 FIX!: Zoplicate will now ignore the Feed items when detecting duplicates.
  3. 🐛 FIX!: We have fixed the bug that caused the detection dialog blocking the main thread.
  4. 🐛 FIX!: We have fixed the bug that caused the deleted items to be showing in NonDuplicates panel.
  5. 🐛 FIX!: Now, the NonDuplicates panel won't show up when clicking attachment items.
  6. NEW!: We added a prompt to remind the duplicates when Zotero is in background.

Click here to show more.

v3.0.2

Click here to show more.

In this version, we have made the following changes:

  1. 🐛 FIX!: We have fixed the progress window icon bug in Zotero 7.0.0-beta.77.
  2. 🧬 CHANGE!: We have updated the style of duplicate detection dialog.
  3. 🧬 CHANGE!: We have updated the icon style in preference pane.
  4. 🧬 CHANGE!: Items with different itemType will not be considered as duplicates.

v3.0.1

Click here to show more.

In this version, we have made the following changes:

  1. 🧬 CHANGE!: We have updated the UI of buttons in the duplicate pane.
  2. 🐛 FIX!: We have optimized the performance of duplicate search and detection.

v3.0.0

Click here to show more.

In this version, we have made the following changes:

  1. 🐛 FIX!: We have fixed a memory leak bug that caused the app to freeze when editing PDF annotations.
  2. Thanks vancleve and pencilheart for reporting this bug in issue #30 and issue #31 respectively.
  3. NEW!: We have added the Non-duplicates functionality.
  4. You can mark items as Non-duplicates when they are mistakenly identified as "duplicates" by Zotero.
  5. Selecting two "false duplicates", you can find the They are NOT duplicates menu items in the context menu.
    • menu_not_duplicates
  6. You can also find the They are NOT duplicates button in the Duplicate Items panel.
    • button_not_duplicates
  7. For more details, please see Non-duplicates section below.
  8. Thanks dschaehi for the discussion in issue #25.

v2.3.0

Click here to show more.

In this version, we have made the following changes:

  1. NEW!: We have added an option to show the duplicate count on the left collection pane.
  2. You can find the option in the Zoplicate tab in the settings.
  3. When your mouse hovers over the Duplicate Items entry, a tooltip will show the duplicate statistics.

    Show duplicate count * The duplicate count will be updated automatically. You can also find the Refresh Duplicate Count menu to update the count manually.

    Refresh duplicate count * Thanks Apollo7777777's idea mentioned in discussion #18 2. 🐛 FIX!: We have fixed a bug that caused the dialog to be too narrow when the title is short. 3. 🐛 FIX!: We have fixed a bug that caused the Bulk Merge icons to not maintain aspect ratios.

v2.2.0

Click here to show more.

In this version, we have made the following changes:

  1. NEW!: We have added "Smart" Merge functionality (Only available in Zotero 7 now).
  2. When merging duplicate items, the function will fill in the missing information of the retained item with the duplicates.
  3. Thanks endfreude's idea mentioned in issue #15.

v2.1.0

Click here to show more.

In this version, we have made the following changes:

  1. NEW!: We have added the Suspend and Restore functionality (Only available in Zotero 7 now).
  2. Please see Bulk Merge section below for more details.
  3. 🧬 CHANGE!: We have changed the behavior of Keep Others action.
  4. Previously, the Keep Others action will delete the last imported item and save ALL the rest existing items.
  5. Now, the action will Merge the existing items based on the Master Item preferences in Settings.
  6. 🐛 FIX!: We have fixed a bug that caused the tags could not be loaded correctly in v2.0.0.
  7. Thanks ChinJCheung for reporting this bug in issue #10.

v2.0.0

<details markdow

Extension points exported contracts — how you extend this code

DeferredPromise (Interface)
(no doc)
src/features/nonDuplicates/nonDuplicateSection.ts
LocaleState (Interface)
(no doc)
src/app/state.ts
MenuCacheEntry (Interface)
(no doc)
src/integrations/zotero/menuCache.ts
NonDuplicateRow (Interface)
(no doc)
src/db/nonDuplicates.ts
RelatedMockItemOverrides (Interface)
(no doc)
tests/duplicatesRelatedItems.regression169.test.ts
MockItemOverrides (Interface)
(no doc)
tests/__setup__/globals.ts
Items (Interface)
(no doc)
typings/global.d.ts
Prefs (Interface)
(no doc)
typings/prefs.d.ts

Core symbols most depended-on inside this repo

get
called by 133
src/integrations/zotero/menuCache.ts
getString
called by 54
src/shared/locale.ts
add
called by 52
src/app/lifecycle.ts
createMockItem
called by 48
tests/__setup__/globals.ts
resolve
called by 28
src/features/nonDuplicates/nonDuplicateSection.ts
itemMenuConfig
called by 21
src/features/nonDuplicates/nonDuplicateMenu.ts
collectionMenuConfig
called by 21
src/features/duplicateStats/duplicateStatsMenu.ts
registerMenus
called by 21
src/integrations/zotero/menuManager.ts

Shape

Function 340
Method 126
Class 40
Interface 36
Enum 2

Languages

TypeScript80%
Python20%

Modules by API surface

src/features/duplicates/duplicates.ts42 symbols
src/app/state.ts32 symbols
scripts/ci/check_zotero_upstream.py32 symbols
src/db/nonDuplicates.ts25 symbols
src/features/bulkMerge/bulkMergeService.ts21 symbols
scripts/agent/workflow_state.py17 symbols
src/features/duplicates/duplicatesDialog.tsx16 symbols
scripts/agent/update_zotero_reference.py16 symbols
src/features/duplicates/notifyHandlers.ts15 symbols
src/integrations/zotero/windows.ts13 symbols
scripts/ci/check_stop.py13 symbols
src/db/duplicateFinder.ts12 symbols

For agents

$ claude mcp add zoplicate \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page