Device Selective Sync

by LK
5
4
3
2
1
Score: 50/100

Description

Per-device community plugin sync choices for Obsidian Sync, with installation-origin defaults and recoverable local cleanup.

Reviews

No reviews yet.

Stats

0
stars
11
downloads
0
forks
2
days
0
days
0
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
0
total issues
0
open issues
0
closed issues
8
commits

Latest Version

19 hours ago

Changelog

Phones and iPads now clearly show that moving installed plugin files is not supported. Applying sync choices no longer opens an unusable cleanup prompt. Existing local backups remain viewable, without move or restore controls on mobile.

On computers, the manual file operation lives under Advanced: local plugin files and is labelled Move out of the plugin folder and keep a backup. This moves files into a recoverable local backup; it does not permanently delete them or free storage.

The settings page also lists recognizable plugins that are excluded in this device's actual Sync settings but are still installed. Unapplied matrix choices are not counted. English and Chinese documentation explain these boundaries.

Validation: 198 local tests passed with no skips, including the reviewed desktop/mobile native fixtures; 75 UI cases passed again after the final wording update. GitHub CI passed 147 cases with 51 expected native-fixture skips. Desktop 1.13.7 installation and settings loading were checked. Existing Sync compatibility profiles and desktop file-operation checks are unchanged. Real phone/iPad transfers, restart persistence, and cross-device deletion remain unverified.

Install the three runtime files (main.js, manifest.json, styles.css) or use the ZIP. A paid Obsidian Sync subscription is required. Obsidian 1.13.7 and on-device compatibility checks remain required; mobile Sync writes still require the existing experimental opt-in on each device.

README file from

Github

Device Selective Sync

English · 简体中文

Choose which Obsidian plugins can sync on your computers, phone, and iPad. Manage all devices from one computer, or choose plugins for your phone or iPad on that device.

This plugin is free under the MIT license. It requires an Obsidian account and a paid Obsidian Sync subscription; it uses the official Sync service already configured for your vault. It is an independent community project, not an official Obsidian product. Version 0.3.5 is experimental: it supports Obsidian 1.13.7 only when the device passes compatibility checks. Real phone and iPad sync has not yet been validated. Start with a test vault.

Repository · Releases

The public name is Device Selective Sync, previously Device Plugin Sync. The ID remains device-plugin-sync. Existing Device Plugin Sync/Policy.md, Device Plugin Sync/Installations/, and local settings keep their original paths and keys; no migration or reset is needed.

What the checkboxes mean

  • Checked: allow this plugin to sync on this device. Other Sync settings still apply.
  • Unchecked: block uploads and downloads of this plugin's files on this device after you apply the choice. This does not remove installed files or stop a plugin from running.

When creating the list, computers start with every plugin selected; phones and iPads start with none selected. Each device has “Select all” and “Select none” buttons. Updating this plugin does not reset saved choices. Version 0.3.0 can also add new plugins and set their sync scope based on which device installed them, as described below.

Getting started

On your managing computer

  1. Install and enable this plugin, then open Settings → Device Selective Sync.
  2. Click Create sync list. This computer manages the device names and plugin list.
  3. Click Choose plugins for devices, make your selections, then click Save list.
  4. Select the entry that represents this computer.
  5. Click Review and apply, check this device's changes, then click Apply changes. Manual changes to existing plugins still need to be applied on each device.
  6. After a successful application on a computer, you can optionally move excluded plugins out of the plugin folder while keeping local backups. Each plugin requires a separate selection and confirmation.

On your phone or iPad

  1. Wait for this plugin, the list, and installation records in Device Plugin Sync/ to finish syncing, then enable this plugin on the mobile device.
  2. Open its settings and refresh. Select the entry for this phone or iPad. Different devices should use different entries.
  3. Check compatibility. If the checks pass, turn on Allow sync changes on this phone or tablet (experimental) yourself on this device. Installing the update does not turn it on for you.
  4. Click Choose this device’s plugins and select the plugins you want. It includes all plugins registered in the shared list, even if they have not downloaded to the phone.
  5. Save and apply, review the preview, then confirm.
  6. Wait for Sync to finish before editing on another device.

Phones and iPads do not show a file-removal prompt after applying choices. Moving local plugins: not yet supported explains the current limit; View local backups is available for viewing only, with no move or restore actions. Automatic installation detection still has a separate compatibility check. For a plugin you installed on this phone or iPad, use Register local installs if detection is unavailable.

If the old interface is still visible after an update, disable and re-enable Device Selective Sync only. A newer version of the shared table does not mean its choices have been applied on this device; check the local result.

For initial setup, you can pause official Sync, apply the choices on the current device, then resume it. Pausing does not undo a transfer that has already started or prevent other plugins from downloading before this plugin is installed.

Set sync choices automatically for new installations

Set sync defaults for new plugins automatically is on by default. The switch applies only to this device. It recognizes new installations made through Obsidian’s official community-plugin interface while Device Selective Sync is running. It adds each new plugin to the shared list, and devices that receive it adjust sync settings for that new plugin only.

Where the new plugin was installed All computers The phone or iPad that installed it Other phones and iPads
Computer Allow sync Not applicable Block sync
Phone or iPad Allow sync Allow sync Block sync

Once its installation source is registered, a new plugin installed on your phone is allowed on computers too, while other phones and iPads exclude it by default. Mobile installation detection may still be unavailable; in that case, confirm the source with Register local installs. You can change that later in the selection table. These defaults do not reset existing plugins, your manual choices, or choices when a plugin is updated.

Upgrade computers, phones, and iPads to this plugin version 0.3.0 or later; older versions do not handle new plugins automatically. Set up each device first:

  1. Choose the entry representing this device and keep Device Selective Sync enabled.
  2. Enable Set sync defaults for new plugins automatically.
  3. Enable community-plugin file and plugin-settings synchronization in official Sync. Let both Device Plugin Sync/Policy.md and Device Plugin Sync/Installations/ sync normally.
  4. Pass compatibility checks. Each phone and iPad also needs Allow sync changes on this phone or tablet (experimental) enabled locally.

The plugin checks when files change and periodically. When the requirements are met, it automatically applies only plugin IDs not previously registered on this device. It does not also apply manual changes to existing plugins, open cleanup prompts, remove files, or modify the enabled-plugin list. Allowing a new plugin to sync does not enable it.

After upgrading, or when this device first receives the shared list, the existing IDs are recorded as a starting point. Old choices are not applied for you. Use Review and apply for any choices that have not yet been applied. Turning automatic handling off leaves manual selection, saving, and applying available.

Installations through BRAT or manual copying cannot reliably reveal their source. The same applies when Device Selective Sync was not running, automatic handling was off, or no shared list or device assignment existed yet. Set up the list and device first. Turn automatic defaults back on, click Register local installs, select unregistered plugins, then click Confirm these were installed here. Do not register a plugin just received through Sync as a local installation. Registration does not overwrite a plugin already in the shared list.

If the device is unassigned, compatibility checks fail, the mobile experimental option is off, or files cannot be read or written, the interface explains what it is waiting for. Address the cause, then click Check new plugins to retry. The plugin does not bypass these checks to force a write.

Automatic handling still runs after information arrives. Plugin files, installation records, and the shared list can arrive in different orders. This cannot guarantee that an unwanted plugin is never downloaded, or recall an in-flight transfer. Files already downloaded stay in place. On a computer, you can separately choose to move them into local backups; this operation is not supported on phones or iPads.

Installation-source records are stored at:

Device Plugin Sync/Installations/<source installation ID>/<plugin ID>.md

Separate paths reduce different installations overwriting each other’s records. Devices read the records and add only plugin IDs not yet present in Policy.md. This is not a cross-device lock. Existing choices for an ID take priority, and simultaneous offline edits can still conflict. Continue to avoid manually editing the list on multiple devices at once.

No new plugin was installed on a real device to validate this automatic workflow during this update. Project tests and interface checks do not replace phone, iPad, and network sync tests.

See what remains installed

Excluded from sync, still installed locally lists plugins whose folders are currently excluded in this device's Sync settings and whose installation files are still present. The count and list are a snapshot taken when you refresh and include only plugins with recognizable installation files. Unreadable or invalid manifests are not included. They check the actual local restrictions and installation files, not just unchecked boxes or a saved list that has not been applied. “Installed locally” does not mean a plugin is currently running. This status does not verify network transfers or rule out a transfer already in progress.

Stopping sync leaves existing files, settings, and enabled states in place. If your goal is to stop a plugin from running, manage its enabled state separately in Obsidian's Community plugins settings.

Move out of the plugin folder and keep a backup (computers only)

On a computer, expand Advanced: local plugin files, then use Move out of the plugin folder and keep a backup → Choose plugins to move. A computer can also offer this optional step after you manually apply sync choices. Click Keep local plugins to skip. To continue, select individual plugins, confirm that their local settings will also move, then click Move selected plugins (keep backup). No plugins are selected by default.

Only plugins installed here and currently excluded from syncing on this device can be moved. The operation moves the whole plugin folder, including program files and settings such as data.json. Device Selective Sync never includes itself in the list.

This keeps a backup instead of permanently deleting files and does not free the disk space occupied by those files. Folders move into this vault's hidden directory:

.device-plugin-sync-trash/<cleanup batch ID>/<plugin ID>/

Before moving files, pause official Sync and wait for current transfers to finish. If the prompt blocks access to settings, click Keep local plugins, pause Sync in its settings, then return to Advanced: local plugin files → Choose plugins to move. This reduces the risk of an in-flight sync interpreting the local move as a deletion. This plugin does not pause or resume Sync for you. Check the result before resuming. Selected running plugins are stopped locally; other plugins are left alone, and the shared enabled-plugin list is not rewritten.

Phones and iPads do not support moving or restoring plugin folders in this version. They show Moving local plugins: not yet supported and retain read-only View local backups under Local plugin backups. Each backup shows its path within the vault. Applying sync choices does not open a removal prompt on mobile. Opening the backup list does not move, restore, or delete files.

The Local plugin backups section remains visible without expanding advanced options. On a computer, use View local backups, find the plugin, then click Restore this plugin. Pause Sync and wait for transfers to finish again. The plugin must still be excluded from syncing here. If you have allowed it to sync again, first uncheck it and apply the change. Retrieval moves the backup to its original location only when that folder is absent. It never overwrites existing files, removes the Sync exclusion, or enables the plugin automatically. However, because the original enabled-plugin list remains unchanged, a previously enabled plugin may load again after restarting Obsidian. Check Community plugins and verify the restored files and settings before deciding whether to enable it or allow it to sync.

Before moving or restoring files on a computer, this plugin checks that the original folder is excluded, the backup location cannot sync, and the required interfaces are compatible. It stops if any check fails. These checks are separate from applying sync choices. Do not rename the backup directory, sync it with another tool, or manually include it in synchronization.

If an error interrupts the operation, some plugins may already have moved, or files may have moved before Obsidian refreshed its list. Review completed and unconfirmed items, then check View local backups. An error does not necessarily mean nothing changed. Restart Obsidian if needed to refresh the plugin list, then check the result before resuming Sync.

Stopping sync and moving files are separate actions. Applying your choices alone does not delete files or stop plugins. Moving files does not change other devices' choices in the shared table.

This is a local operation. A success message is not proof that remote files or other devices have been checked. The plugin cannot undo previous sync changes or recall transfers that have already started.

Allowing sync again, retrieving backups, and troubleshooting

Action When to use it What it does
Allow these plugins to sync again You want to undo the restrictions this plugin set on this device, or stop using it Previews and removes only the restrictions this plugin added. Your existing restrictions stay. It does not retrieve removed files or restore old settings.
View local backups You want to see backups stored on this device Read-only on phones and iPads; viewing does not move or restore files.
View local backups → Restore this plugin (computers only) You want a plugin and its settings back after moving it While Sync is paused and the plugin is still excluded, moves its local backup into the empty original location. Does not overwrite files, explicitly enable the plugin, or resume sync. A previously enabled plugin may load again after a restart.
Check last operation An application failed, the app crashed, or an unfinished operation is reported Compares current Sync settings with the recorded operation and repairs this plugin's record when possible. It does not apply choices again or change Sync settings. Preview again afterward.
Reset this plugin’s records Records cannot be recovered and you accept handling remaining restrictions manually Clears records only; existing Sync restrictions stay. This plugin will no longer know which ones it added. Most users should never need this.

Allowing sync again may download remote files, update a local plugin, or process remote deletions. It does not mean “return to how things were before cleanup.” File retrieval is a separate action.

Disabling or uninstalling Device Selective Sync does not automatically remove the Sync restrictions it has already set. If you want to remove them, use Allow these plugins to sync again and check the result before disabling this plugin.

Troubleshooting (usually not needed) stays collapsed during normal use.

If the current settings match neither the recorded “before” nor “after” state, the plugin asks you to inspect official Sync settings. It does not guess or overwrite them. Clearing Obsidian's local data, reinstalling the device, or reconfiguring the vault may also remove this plugin's tracking records.

Chinese and English

The interface supports Simplified Chinese and English. Select Follow Obsidian / 简体中文 / English in this plugin's settings. The choice applies only to this device.

Follow Obsidian uses Obsidian's interface language: Chinese uses Simplified Chinese, and other languages use English. New installations follow Obsidian. Upgrading users keep Chinese and can change it at any time.

This is the English guide; the Chinese guide is README.zh-CN.md. Plugin names, plugin IDs, your device names, and paths are not translated.

Limits to understand

This plugin manages plugin-file synchronization

It adds or removes Sync restrictions for individual plugin folders. The default path is .obsidian/plugins/<plugin ID>. If a device uses a custom configuration folder, its actual folder is used.

  • Applying sync choices leaves existing plugin files, settings, and enabled states alone. Moving files into backups is a separate, confirmed action available only on computers.
  • This plugin does not install or update plugins.
  • It does not manage synchronization of the enabled community-plugin list. Whether a plugin's files sync and whether the plugin is enabled are separate settings.
  • Checking a plugin does not force a download or override other restrictions. If you already exclude the entire plugins folder, checking one plugin does not remove that restriction.
  • Manual changes to existing plugins still require refresh, preview, and confirmation. When automatic handling is enabled, only newly registered plugin IDs are applied automatically; old choices are not applied retroactively.

To transfer allowed plugins and their settings, enable community-plugin file and plugin-settings synchronization in official Sync. Configure enabled-plugin list synchronization separately; automatic handling does not rewrite that list.

The phone reads the shared list, not the computer’s disk

Shared choices live in the ordinary note Device Plugin Sync/Policy.md. New installation-source records live under Device Plugin Sync/Installations/. Let both sync normally; do not exclude them or their parent folder.

The list contains device names and identifiers, plugin names and IDs, and each device’s choices. Installation records also identify the source. Neither contains cleanup backups. The current device selection, operation records, compatibility confirmation, and language preference stay local.

The managing computer can manually maintain every device and the plugin catalog. Phones and iPads manually edit only their assigned entry. Recognized new installations are registered automatically. Unrecognized ones require confirmation of their source, or reopening and saving the selection table on the managing computer. The phone displays the shared list it has received; it does not read the computer’s disk live.

Avoid editing on two devices at once

Wait for Sync to finish before editing. After saving, wait again before switching devices.

Saving detects changes that have already arrived on this device and asks you to reopen the editor. It cannot lock another offline device or guarantee that simultaneous edits will not conflict. After a conflict, review the merged shared choices, then preview and apply them on each device.

Saving choices on mobile and changing local Sync settings are separate steps. If saving succeeds but applying fails, the plugin reports that the choices were saved but were not applied locally. Follow the unfinished-operation instructions, then preview again. Other devices do not automatically apply changed choices for existing plugins. Only newly registered plugins use the automatic workflow described above.

Why an Obsidian update may block applying changes

Obsidian has no public Sync API for the operation this plugin needs, so this version uses internal interfaces. Those may change after an upgrade, or differ between platforms even with the same displayed version number.

Since version 0.3.4, the plugin uses separate desktop and mobile compatibility profiles, selected for the platform running Obsidian. It requires the exact version, all 12 method fingerprints from that profile, and the isolated file-filter checks to match. It never combines matching methods from different profiles. A mismatch blocks changes to Sync settings. You can still view choices and previews. Official Sync itself is not paused by this protection. Saved restrictions continue to be handled by Sync; new choices have not taken effect.

The mobile profile was reviewed against the official Android 1.13.7 build; its 12 Sync/filter fingerprints also match those shown in an iPhone 1.13.7 diagnostic screenshot. This is not verification of the entire iOS source or an iPhone/iPad sync test. The source, hashes, reviewed differences, and remaining limits are recorded in compatibility review.

Recognizing installations from the official community-plugin interface and moving local plugin folders have separate checks. Version 0.3.5 does not change their compatibility profiles. If installation detection is unavailable, use Register local installs. Moving and restoring plugin folders is unavailable on phones and iPads; on computers it remains subject to the existing checks. Automatic handling and manual application both respect the Sync checks and the mobile experimental switch.

Supporting another version requires checking its actual implementation and behavior. Changing a version number or bypassing a check is not sufficient. Mobile devices showing 1.13.7 must still pass their own checks and have the experimental option enabled locally.

Current testing does not replace real phone/iPad tests, network synchronization tests, restart persistence checks, or checks of in-flight transfers. See the validation record and device validation guide for evidence and remaining checks. These technical documents are currently in Chinese.

Data handling and internal interfaces

The plugin makes no direct external network requests and has no telemetry, analytics, or its own upload service. Obsidian Sync transfers your plugin files, settings, shared choices, and installation records using your existing account and vault configuration. No files outside the current vault are accessed by the runtime plugin.

Plugin folders can include data.json or other settings files containing API keys or credentials saved by other plugins. If you allow such a folder to sync, its settings may be transferred by Obsidian Sync as part of that existing feature. This plugin does not redact credentials or separate program files from settings. Cleanup backups also retain the entire settings folder locally.

For reviewers: the runtime uses private Sync methods to read and save exclusions, a private plugin-manager method to stop a plugin during confirmed cleanup, and a temporary wrapper around the private community-plugin installation method to observe new installations. The wrapper is removed on unload only if it is still this plugin’s wrapper. There is no claim that these interfaces are supported by Obsidian or stable across updates. Exact-version and method-fingerprint checks block affected features when they do not match; they are compatibility checks, not a security boundary against other plugins.

Native-source tests read a developer’s local desktop build or the specified official Android source into memory and use isolated test objects. The repository and release assets include fingerprints and test tools, not Obsidian’s native source, application bundle, or extracted native fixtures. Those native tests require a compatible local build. They do not validate real IndexedDB storage, cold starts, mobile devices, or network transfers.

Manual installation

Version 0.3.5 completed the community directory’s automated review on 2026-10-04 (UTC). The public listing showed current version 0.3.5, Review: Satisfactory, and an active installation link. This confirms directory availability, not real-device Sync validation. Open the community listing and choose Add to Obsidian. For manual installation, download the runtime files or installation ZIP from GitHub Releases, or build the ZIP in dist:

  1. Disable an existing Device Selective Sync installation first.

  2. Put the three runtime files from the ZIP in the vault's actual configuration folder:

    .obsidian/plugins/device-plugin-sync/
    ├── main.js
    ├── manifest.json
    └── styles.css
    
  3. Replace .obsidian with your actual configuration folder name if customized.

  4. Enable Device Selective Sync under Settings → Community plugins in Obsidian.

Do not nest an extra dist folder in this directory. Manual mobile installation requires access to the vault's actual configuration folder. Placing a ZIP among your notes does not install it, and the iOS Files app may not expose the hidden configuration folder.

If devices use the same configuration folder, official Sync can transfer this plugin from the computer; enable it separately on the mobile device. That process may also transfer other plugins, so it cannot guarantee they will be blocked before their first download. With different configuration folders, do not assume the plugin will appear automatically on another device.

Building and future publication

Requires Node.js 22 or newer, npm, and the zip command. From the source directory:

npm ci
npm run package
npm run test:native

package checks types, runs tests, builds, and creates an installation archive. test:native performs a read-only check of the installed desktop Obsidian build. Its default macOS path is /Applications/Obsidian.app/Contents/Resources/obsidian.asar. To check another location:

npm run test:native -- --asar /absolute/path/to/obsidian.asar

For the reviewed mobile source, point the environment variable at your local copy of assets/public/app.js from the official Android 1.13.7 APK:

OBSIDIAN_MOBILE_APP_JS=/absolute/path/to/app.js node scripts/check-mobile-native.cjs
OBSIDIAN_MOBILE_APP_JS=/absolute/path/to/app.js node --import tsx --test tests/mobile-adapter.test.ts

These checks first verify the complete app.js SHA-256 before inspecting methods. The compatibility review records the official source and expected hashes. The project includes fingerprints and inspection tools, not Obsidian application files or native source.

The public release is prepared for Lywooye/obsidian-device-plugin-sync with the MIT license, English and Chinese guides, and downloadable runtime assets. A GitHub release is separate from community-directory approval.

Current submission instructions use the Obsidian Community website, where an Obsidian account is linked to the repository owner’s GitHub account. An old pull-request template in obsidian-releases is not the current submission route. The directory reviews the repository and releases; this project does not claim approval before the directory confirms it.

Real phone/iPad, network transfer, automatic-installation, cleanup/retrieval, and restart tests remain listed in device validation. Test counts and their scope are recorded in test results. English and Chinese support improves accessibility; it is not presented as a separate official submission requirement. The plain-language review describes the wording changes.

Official references

These documents explain built-in features. They do not promise long-term availability of the internal interfaces used here.