Usher is an Obsidian plugin for managing customisation files across multiple configuration directories.
It is designed as a companion tool for Self-hosted LiveSync users who use Hidden File Sync to replicate Obsidian configuration folders. Instead of blindly applying every synced .obsidian change to the current device, Usher lets you inspect plugin, theme, snippet, and JSON setting candidates from other configuration directories and selectively apply the version you want.
Usher is not a synchronisation engine. It does not replicate files between devices by itself. Use Self-hosted LiveSync Hidden File Sync, Git, file sync, or another transport to make the configuration folders available in the vault. Usher only helps you compare, choose, and apply already available candidates.
Usher scans hidden configuration folders in the vault, such as .obsidian, .obsidian-mobile, or .obsidian-work, then groups supported files by their customisation role:
| Folder or file | Role |
|---|---|
plugins/<plugin>/manifest.json |
Plugin main file |
plugins/<plugin>/main.js |
Plugin main file |
plugins/<plugin>/styles.css |
Plugin main file |
plugins/<plugin>/data.json |
Plugin data |
Other files under plugins/<plugin>/ |
Plugin extra file |
themes/<theme>/... |
Theme |
snippets/<snippet>.css |
Snippet |
Root-level *.json in the config folder |
Setting |
This scope follows the same customisation categories used by Self-hosted LiveSync's Customisation Sync: config JSON, themes, snippets, plugin main files, plugin data, and optional plugin extra files.
Usher assumes each configuration directory can represent a different device or profile. The current Obsidian config directory is the destination. Other hidden configuration directories are treated as candidates.
Applying a candidate may copy files into the current config directory. JSON files can be merged unless they match the non-mergeable file patterns. Review the selected candidates before applying them, and keep a backup of your vault and configuration folders before using Usher on important setups.
When you click Apply, Usher applies the selected candidate from another configuration directory to the current Obsidian config directory.
The current config directory is never treated as a candidate source for itself. Usher is intentionally manual: it shows candidates, lets you select them, and applies only the selected entries.
Show Usher in the command palette
| Name | Behaviour |
|---|---|
| Update List | Update the list |
| Hide empty | Hide entries with no candidates |
| Only Selected | Show only the selected entry (Used with Automatic Selection Buttons) |
| Only New | Limit automatic selection only to newer entries than the current device's one |
| Apply | Apply the selected entry to the current device |
These buttons are automatically selected to apply to the current device. They are also displayed by category. They only affect the selected category.
| Name | Behaviour |
|---|---|
| ❌ | Clear the selection |
| 📅 | Select the most recently modified |
| 🏷️ | Select latest version (Theme and Plugins only) |
| ⚙ | Select different content (JSON only, after merged) [^1] |
| ⚡ | Select modified and latest file (Mostly for snippets) |
| 🔒 | Exclude from Automatic Selection |
[^1]: JSON files will be merged with the current one.
Only New checkbox.Only Selected checkbox.Apply button.We can configure the files to be ignored by the Usher in regular expression.
The default value is /node_modules$ and /.git$.
We can configure the files to be non-mergeable by the Usher in regular expression.
The default value is /bookmarks.json$.
Install dependencies:
npm install
Run the unit tests:
npm run test
Run tests with coverage:
npm run test:coverage
Build the plugin:
npm run build