Library / SDK
wileyyugioh/zotmoov avatar
wileyyugioh/zotmoov

ZotMoov for Zotero 7: Moving Attachments and Managing Linked Files

Zotero plugin to automatically move attachments and link them

1,562 stars34 forksJavaScriptGPL-3.0

At a glance

What is it?
ZotMoov is a JavaScript plugin for Zotero 7 users who want imported attachments moved or copied into a controlled directory. It supports automatic file management, manual actions, deletion handling, and migration from ZotFile, but linked attachments remain unavailable in Zotero group libraries.
Who is it for?
Adopt ZotMoov if you use Zotero 7, maintain a personal library, and deliberately want file storage outside Zotero's internal attachment directory. Do not choose it for linked files in group libraries, and verify your backup, destination folder, sync mode, and linked attachment base directory before moving the library.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What ZotMoov Changes in Zotero 7

ZotMoov addresses a specific file-storage decision in Zotero 7: whether imported attachments should remain in Zotero's managed storage or be placed in a directory controlled by the user. The plugin can automatically move or copy imported attachments into a custom directory. It also adds right-click actions for moving and copying attachments to or from that directory.

The distinction matters because Zotero stored attachments and linked attachments do not behave identically. According to the README, moving converts an internally stored attachment into a linked attachment. Linked files can then be converted between linked and stored form. Copying has a different purpose. A copied file is placed in an external folder as a backup, but Zotero does not track that copy and does not provide an easy way to reimport it.

The plugin also offers two workflow controls that are not merely file-transfer conveniences. It can automatically delete a linked attachment from the computer when that item is deleted in Zotero. It can attach the most recently modified file in a folder to a Zotero item. These features target users who want Zotero metadata and file storage to remain connected while retaining control over the physical directory.

ZotMoov is aimed at personal-library users rather than users who need linked files in Zotero group libraries. The README states that Zotero does not support linked files for group libraries, so ZotMoov can move files only in a personal library. The copy operation is unaffected by that restriction. That boundary should be checked before selecting the plugin for a workflow that depends on group-library attachments.

Installation Through the Latest Zotero 7 Release

The documented installation route is a release download rather than a package-manager command. The README directs users to the latest release page and then says to configure the ZotMoov directory as the folder where files should be moved or copied. Firefox users must right-click the `.xpi` file and choose to save the link.

Use the following documented release location:

text
https://github.com/wileyyugioh/zotmoov/releases/latest

The README does not provide a shell command, build recipe, or operating-system-specific installer procedure for the plugin. It also does not document a first-run sequence beyond setting the ZotMoov directory. As a result, the safest first real use is to install the release and configure the destination before changing a large library.

The README strongly recommends taking a local backup before moving a Zotero library. It also advises giving ZotMoov a folder that other applications will not alter. Those instructions are especially relevant because the plugin may move files out of their previous location and convert stored attachments into linked attachments. A backup provides a recovery point if the destination, base directory, or file paths are wrong.

If Zotero cloud file storage is not part of the intended setup, the README recommends unchecking `Sync attachment files in My Library` in the Sync settings. For multi-device attachment syncing, it instead directs users to set `Linked Attachment Base Directory` to the synced folder on each computer. These are separate storage decisions: disabling Zotero attachment-file sync does not describe how external files are synchronized between computers.

Move, Copy, and Automatic Attachment Management

The core choice is between two operations with different consequences. `move` is described as the operation for converting Zotero's internal stored attachments into linked attachments. The moved file remains connected to the Zotero item through the linked-attachment mechanism, and the README says that moved files can be freely converted between linked and stored attachments.

`copy` has no such ongoing relationship. It is intended for placing a file in a folder outside Zotero as a backup. Once the file has been copied, Zotero does not track that external copy, and it is not easily reimported. This distinction makes copy appropriate for archival duplication, but not for managing the live attachment used by a Zotero item.

For routine file organization, ZotMoov can apply the configured operation automatically when an attachment is imported. The plugin also exposes manual move and copy actions through a right-click menu. That gives users a way to handle new imports automatically and then deal with older or exceptional items individually.

Deletion behavior is another mechanism with operational consequences. The README says linked attachments can be automatically deleted from the computer when deleted in Zotero. That means deleting a Zotero item can have a filesystem effect outside Zotero. The destination folder should therefore be dedicated to ZotMoov and protected from unrelated file changes. The plugin's controls concern file location and tracking, but they do not turn an external copy into a Zotero-managed backup.

The final feature, attaching the last modified file in a folder, is useful for workflows in which a document is updated externally before it is attached to a Zotero item. The README describes the behavior as selecting the last modified file. It does not document file-type filtering, previewing, conflict handling, or recovery behavior for this action, so those details should not be assumed.

ZotFile Migration and Linked Attachment Base Directory

ZotMoov includes migration guidance for users arriving from ZotFile. The README says the plugin should not break existing linked files created by ZotFile. Even so, it asks users to back up both the Zotero library and the ZotFile folder before updating to Zotero 7.

The data directory can be either the former ZotFile directory or a new directory. Reusing the old directory mixes new ZotMoov files with existing ZotFile files. A separate directory keeps the two generations of files isolated, which may simplify inspection and migration at the cost of managing two locations.

The main migration issue is `Linked Attachment Base Directory`. If the previous setup used this Zotero preference, it may need to point to a folder containing both the old ZotFile files and the new ZotMoov files. The README gives two concrete arrangements: reuse `ZotFile/`, or place the ZotMoov data folder inside it as `ZotFile/ZotMoov/`. The first keeps one shared root. The second preserves a visible boundary between older and newer files while allowing a common containing path.

The README also points users to Zotero 7's automatic file renaming functionality and notes that it supports custom patterns. That is relevant when linked filenames need to remain understandable as items change. It is not a ZotMoov renaming feature, and the repository excerpt does not document how ZotMoov interacts with a custom renaming pattern during moves.

If ZotFile tablet files need recovery, the README directs users to the official ZotFile Recovery plugin. ZotMoov's migration instructions therefore do not claim to reconstruct every missing tablet file. They focus on preserving paths and configuring the destination correctly.

Limits of Group Libraries and External File Tracking

The most significant limitation is the group-library boundary. The README states that Zotero does not support linked files for group libraries. ZotMoov can move files only in the personal library, and any linked files that somehow point to group libraries will be broken. This makes ZotMoov unsuitable for a workflow whose primary requirement is linked attachment storage inside group libraries.

The `copy` operation does not have that same limitation, according to the README. It can copy files from a group library because the resulting file is not intended to remain tracked as a linked Zotero attachment. That is a backup or export pattern, not a solution for maintaining synchronized linked files in a group.

There is also a boundary between attachment tracking and backup copies. Zotero tracks moved linked attachments, but it does not track files produced by `copy`. The plugin's automatic deletion behavior applies to linked attachments, not to arbitrary external copies. A user who relies on `copy` must retain and validate those files separately, because Zotero will not provide the same item-level relationship.

The documentation does not describe conflict resolution when a destination already contains a file, behavior for duplicate filenames, transactional recovery after an interrupted move, or cross-device locking. It also does not state how ZotMoov handles files removed or renamed outside Zotero. Those cases should be tested with a small set of attachments before a library-wide migration.

License, Releases, and Maintenance Boundaries

ZotMoov is distributed under the `GPL-3.0` license. The repository includes a `LICENSE` file, and the stated license identifier gives users the project's licensing terms. This review does not interpret the license or provide legal advice. Users who distribute a modified plugin or incorporate its code into another work should check the applicable license obligations for their situation.

The repository is not archived. Its last push was on 2026-10-08, so the project has recent repository activity rather than an abandoned status. The release list also shows `1.2.33` on 2026-10-08, following `1.2.32` and `1.2.31` on 2026-08-01. These dates indicate ongoing release work, but they do not by themselves guarantee compatibility with every future Zotero release.

The repository is primarily JavaScript and includes `manifest.json`, `bootstrap.js`, `chrome/`, `src/`, `preferences/`, and `updates.json`. That layout is consistent with a Zotero extension rather than a standalone command-line program. The README focuses on installing a prebuilt release, so source layout alone does not establish a reproducible build procedure for users.

Upgrade planning has a direct operational component. Because ZotMoov changes where attachments live and may convert them between stored and linked forms, each upgrade should be treated as a file-management change rather than a routine interface update. The documented controls are the Zotero backup procedure, a dedicated ZotMoov folder, `Sync attachment files in My Library`, and `Linked Attachment Base Directory`.

Editorial conclusion

Adopt ZotMoov if you use Zotero 7, maintain a personal library, and deliberately want file storage outside Zotero's internal attachment directory. Do not choose it for linked files in group libraries, and verify your backup, destination folder, sync mode, and linked attachment base directory before moving the library. The project received its last push on 2026-10-08 and is not archived, but the repository documentation should still be checked against the version you install.

Frequently asked questions

How do I install ZotMoov for Zotero 7?

Download the `.xpi` from the project's latest release page, then set the ZotMoov directory in the plugin to the folder where attachments should be moved or copied. Firefox users should right-click the `.xpi` and save the link.

What is the difference between moving and copying attachments in ZotMoov?

Moving converts an internally stored Zotero attachment into a linked attachment, while copying places a backup outside Zotero. Zotero does not track a copied file, and the README says it is not easily reimported.

Can ZotMoov move files in a Zotero group library?

No. The README says Zotero does not support linked files for group libraries, so ZotMoov can move files only in the personal library. The copy operation is unaffected by this limitation.

How does ZotMoov help when migrating from ZotFile?

The README says ZotMoov should not break existing ZotFile linked files, but it recommends backing up both the library and the ZotFile folder first. It also explains how to reuse or separate the old and new data directories and how to adjust `Linked Attachment Base Directory`.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. wileyyugioh/zotmoov on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/wileyyugioh-zotmoov.svg)](https://hysenlabs.com/projects/wileyyugioh-zotmoov)

Was this useful?