Better Plugins Manager

by zero
5
4
3
2
1
Score: 64/100

Description

Category: Productivity Tools

The Better Plugins Manager plugin enhances plugin management in Obsidian, providing users with advanced tools for organizing, customizing, and optimizing their plugin workflow. Key features include delayed startup for improved performance, one-click access to plugin directories, and quick toggle functionality for enabling or disabling plugins. Users can rename plugins, edit descriptions, and add personalized tags for better organization. Additionally, group management and advanced search capabilities allow for logical grouping and quick access to plugins. The intuitive interface ensures a seamless user experience, making plugin management efficient and tailored to individual needs.

Reviews

No reviews yet.

Stats

85
stars
22,178
downloads
17
forks
675
days
3
days
3
days
6
total PRs
0
open PRs
1
closed PRs
5
merged PRs
91
total issues
10
open issues
81
closed issues
240
commits

Latest Version

4 days ago

Changelog

同步配置像同步系统一样直接采用最新版本

Better Manager 1.2.33 重做了同步冲突的判定:另一台设备保存的 data.json 同步过来后,只要本机没有未保存的用户修改,就直接采用最新配置,不再把一次普通的同步变成冲突;真正的冲突也会在发现时立即打开解决窗口,而不是等用户去点闪烁的保存键。

跟随最新配置

  • 启动、打开管理器、打开设置以及收到同步文件事件时,都会检查共享配置。
  • 本机没有用户编辑时,直接采用共享文件中的最新版本并刷新界面;不写入、不覆盖 data.json,也不需要点保存。
  • “手机同步了电脑的配置却仍显示旧设置,保存键一直闪,点保存才弹冲突”的链路不会再出现。
  • 后台自动保存(视图状态、启动迁移、设备心跳)不再把本机标记成“有用户编辑”,不会让保存键无端闪烁。
  • 旧版本遗留下来的、本机一侧其实只是基线的冲突,在启动时自动跟随最新远端并清除。
  • 本机有真实未保存编辑时,才会保留冲突并交给用户选择。

冲突直接显示

  • 启动时发现真实冲突,直接打开冲突解决窗口。
  • 运行中收到更新且本机有编辑时,检测到冲突就打开窗口,不再依赖保存键提示。
  • 已打开并被用户关闭的同一冲突不会反复弹窗,仍可从提示条重新打开。
  • 差异按实际有差异的设置项逐项成行,每项单独选择本机/远端;没有差异的项不会渲染,也不存在固定占位的类别。
  • 只有紧密相关的键才合并:分组+标签为「分组与标签」,边栏相关键为「边栏设置」,延迟相关键为「延迟启动」;其余设置各占一行,方便逐项选择。
  • 每行带一句说明,讲清这一项包含什么;设备预设差异仍按每个预设单独成行。
  • 顶层差异由行标题直接表达,不再重复显示「设置项」文本;只有嵌套路径保留「显示差异」明细。
  • 差异明细里的设置路径改用设置页名称,不再显示 RECENT_INSTALL_DAYS 这类原始配置键;数组项优先显示条目名或插件名。
  • “全部保留远端”等原有选择方式不变。

冲突范围

  • 只把用户定制的内容放进冲突:设置项、插件记录、分组/标签、布局、边栏、设备预设、设备名称/类型、来源订阅、外观方案等。
  • BPM 生成、可重新下载/同步且重复无碍的数据不再让用户处理:设备记录文件、插件图标/配色文件、安装记录、仓库映射、安装历史、已解除来源、筛选状态、批量操作快照、排查进度等。
  • 设备记录的增删与心跳不进入冲突;共同设备的名称/类型修改仍会保留。设备预设差异继续按预设分行显示。
  • 图标文件跟随整体设置来源;设备记录保留本机合并结果。

条目差异标记

  • 管理器条目新增未保存标记:本机改动与上次保存不同时,卡片上显示圆形铅笔图标。
  • 冲突状态下,条目改为圆形来源图标(本机/远端);冲突标记优先于未保存标记。
  • 标记只显示图标,边框为圆形;未保存、本机、远端等文字放在悬浮气泡里。
  • 保存完成或冲突解决后,标记自动消失;列表重绘后也会重新挂上。

边界

  • 没有增加“绝对三设备分立”开关。
  • 单机模式的行为保持不变。
  • 旧格式、丢失版本标记的共享内容仍交给冲突界面确认,不静默覆盖本机配置。

验证

  • npm run check 通过:类型检查、Lint 和 655 项自动化测试。
  • 使用真实文件系统与真实修订逻辑复现完整链路:旧设备私有缓存 + 新 data.json 启动后直接显示最新配置且不写共享文件;本机编辑后收到更新会直接产生冲突并打开窗口;选择远端后正确落盘。
  • npm run build 通过。

English

Follow the newest synced configuration

Better Manager 1.2.33 reworks how sync conflicts are decided. When another device publishes data.json, a device with no unsaved user edits adopts the newest configuration immediately instead of turning an ordinary sync into a conflict. Genuine conflicts open the resolver as soon as they are detected, without waiting for a flashing Save button.

Following the latest version

  • The shared configuration is checked at startup, when the manager or settings open, and when shared files change.
  • With no local user edits, the newest shared revision is adopted and the interface refreshes; data.json is neither rewritten nor overwritten, and Save is not required.
  • The old chain — the phone syncs the computer's file but keeps showing old settings, the Save button keeps flashing, and clicking it finally raises a conflict — no longer occurs.
  • Background automatic saves (view state, startup migrations, device heartbeats) no longer mark the device as user-edited, so the Save control no longer flashes without a real edit.
  • Conflicts left by older builds where the local side was merely the base are cleared by following the newest remote at startup.
  • A real unsaved local edit still produces a conflict for the user to resolve.

Conflicts are shown directly

  • A genuine conflict found at startup opens the resolver immediately.
  • When a newer version arrives while local edits exist, the resolver opens as soon as the conflict is detected.
  • The same conflict is not repeatedly reopened after the user dismisses it; it remains available from the notice.
  • Each setting that actually differs gets its own row with an independent local/remote choice. Rows without differences are never rendered; there are no placeholder categories.
  • Only tightly related keys are combined: groups + tags as Groups & tags, Ribbon keys as Ribbon settings, and delay keys as Delayed startup. Every other setting is its own row for item-by-item resolution.
  • Each row carries a one-line description; device presets still appear as one row per preset.
  • Top-level differences are stated by the row title, without repeating a "Setting" text block; the Show differences details remain only for nested paths.
  • Detail paths use the setting names shown in the settings page instead of raw keys such as RECENT_INSTALL_DAYS; array items show their item or plugin name when available.
  • Existing choices such as Remote version · All settings are unchanged.

Conflict scope

  • Only user-customized content enters conflicts: settings, plugin records, groups/tags, layout, Ribbon, device presets, device names/types, source subscriptions and appearance profiles.
  • BPM-generated data that can be re-downloaded or synced harmlessly is no longer user-resolved: device record files, icon/color files, install receipts, repository mappings, install history, unbound sources, saved filters, batch snapshots and troubleshooting progress.
  • Added or removed device records and heartbeats do not conflict; name/type edits on devices present on both sides remain selectable. Preset differences still appear as per-preset rows.
  • The icon file follows the overall settings source; device record files keep the local merged result.

Item marks

  • Manager items now show a round pencil icon when they differ from the last save.
  • During a conflict, the item shows a round source icon (local or remote) instead; the conflict mark takes priority over the unsaved mark.
  • Marks are icon-only with a circular border; the label (Unsaved, Local, Remote) appears in the floating tooltip.
  • Marks disappear after saving or resolving, and are reattached after a list re-render.

Boundaries

  • No "absolute three-device separation" switch was added.
  • Single-machine mode is unchanged.
  • Legacy shared content without a verifiable revision still goes through the conflict UI instead of silently replacing local settings.

Verification

  • npm run check passes: type checking, lint and 655 automated tests.
  • The full path was reproduced with the real filesystem and revision logic: a stale private cache plus a newer data.json shows the latest settings at startup without writing the shared file; a local edit plus an incoming update raises and opens a conflict; choosing the remote side is written correctly.
  • npm run build passes.

README file from

Github

Better Manager

A more capable plugin manager for Obsidian.

Organize your plugin workflow with delayed startup, batch controls, groups, tags, device presets and a clear management interface.

1.2.20 release notes

简体中文 · 日本語 · 한국어 · Español · Français · Русский · Releases · Support

Latest Release GitHub Downloads Last Commit Issues Stars License Obsidian Plugin Minimum Obsidian Version TypeScript Platform i18n GitHub Source Tracking Sponsor on Afdian

Screenshot

The screenshots below show the 1.2.12 interface; current controls and layouts may differ.


🎯 What is BPM?

Better Manager (BPM) is a control center for Obsidian community plugins, designed for vaults that rely on many plugins and need more than simple enable/disable toggles.

It helps you keep startup responsive, organize plugins by workflow, install plugins from GitHub releases, and isolate conflicts when something breaks.

🚀 Startup 📦 Management 🏷️ Organization 📥 Installation 🔍 Diagnosis
Delayed plugin startup and startup self-checks Batch enable/disable, quick search, and status filters Groups, tags, notes, descriptions, and custom names Install from GitHub repositories and release versions Guided conflict troubleshooting with report generation

✨ Core Features

BPM separates plugin management, appearance, devices, installation, transfer and diagnosis into focused tabs. Ribbon Order appears when Ribbon management is enabled; feature and tool visibility can be configured in settings.

Tab Workflow
🧩 Plugin View Manage installed plugins, metadata, filters, startup behavior, and per-plugin actions
🎨 Appearance overview Manage themes, CSS snippets and appearance presets
📱 Devices Choose device types, defaults and named presets
📥 Install Hub Install from GitHub, manage tracked sources, and optionally browse the Plugin store (Preview)
📦 Transfer Pack Export, import, and restore plugin/theme packs across vaults
🎛️ Ribbon Order Control Obsidian ribbon icon order and visibility
🔍 Conflict Diagnosis Locate plugin problems and generate troubleshooting reports

🧩 Plugin View

The main tab for day-to-day plugin management.

Plugin overview

Area What it does
Plugin list Browse installed community plugins in a compact, searchable management view
Batch actions Enable, disable, hide or unhide selected plugins, including grouped workflows
Filters Filter by recent installation, enabled state, group, tag, delay setting, and keyword
Organization Add custom names, descriptions, notes, groups and tags; quickly assign a group or add tags from the context menu
Startup control Assign delayed startup presets and keep startup behavior visible from the list
Plugin actions Check updates, download updates, restart a plugin, temporarily start a plugin, open settings, open folders, copy IDs, open repositories, clear config, hide, or delete
BPM tags Automatically marks BPM-installed plugins with bpm-install and supports ignored plugins with bpm-ignore

Update controls: Open Update rules from the overview toolbar, a plugin’s context menu, the version picker, or basic settings. Exclude a plugin, skip a specific release from its source, or mute automatic reminders for 1, 7 or 30 days. Rules can be reviewed and cleared, including rules for uninstalled plugins. Muting keeps available updates visible.

Update all eligible plugins previews each current version, target release and source, with reasons for skipped plugins. Confirm the reviewed plan to update sequentially; changed targets are skipped, failed items do not stop the remaining updates, and enabled/disabled states are retained. Results show successes, failures and skips. Commands are available for checking updates, reviewing batch updates and managing rules.

Network errors show the HTTP status and, when available, the server's explanation and retry time. Access denied is distinguished from confirmed rate limiting.

The Recently installed badge and status filter use the recent-install window in Basic settings, initially seven days. Setting the window to zero hides the badge.

Version rollback and restore points (Preview)

Open Version rollback and restore points (Preview) from a plugin's restore button, its store details, or Basic settings. Keep previous plugin builds is off by default and carries a Preview label. Enable it to keep the build and data.json before subsequent BPM installations or updates, or create a named restore point yourself. Creating a point briefly reloads a running plugin to capture its latest settings. Automatic retention defaults to ten points per plugin; manually created or named points are kept until deleted.

A restore preview shows the target version and original source binding. Restoring keeps the current data.json by default and does not restore other plugin data files. Optional Merge current settings into the older structure retains matching current values, removes fields absent from the older sample, and fills missing or incompatible fields from the point. Review the removed/replaced fields and resulting configuration; selected object paths can keep their entire current contents. Historical samples are not formal schemas: arbitrary migrations, renamed or moved fields, dynamic dictionaries and ambiguous array structures cannot be reversed reliably. If the reviewed files change, preview again before restoring.

Local points work offline. Restores recover the recorded source binding; a legacy point with unknown provenance clears the binding and pauses update checks until you explicitly install from a known source. Snapshots may contain sensitive settings; see Security and Disclosure. Better Manager itself must be updated through Obsidian's native controls.

🎨 Appearance overview

Manage themes, CSS snippets and appearance presets together. Choose a device preset and apply appearance changes for the current session or save them permanently. On phones, the appearance category selector is a full-width dropdown.

📱 Device management

Named device presets

Open Devices in the manager (on mobile: choose Devices from the current-view menu). Enable Manage by device type, then check this device's type. Device types are fixed to Computer, Tablet and Phone; each type can hold several named presets and starts with one that inherits your current settings. Enabling this feature is optional.

Each preset stores plugin enabled states, assigned delay groups, appearance, and Ribbon visibility/order. The Devices page manages this device's type, preset creation/duplication/renaming/deletion, and which preset this device uses; any preset can reuse another preset's settings. When a type has not been configured yet and exactly one configured preset exists in another type, it is adopted automatically; with several candidates nothing is chosen for you — use Reuse another preset's settings on the Devices page. The device list is informational. The manager itself and BPM-ignored plugins are excluded from device-specific plugin switching. Group/tag metadata and delay definitions stay global. Desktop-only plugins are never started by the device manager on mobile.

The three scoped tabs — Plugins, Appearance and Ribbon — carry the same Configure for device selector, listing named presets grouped by device type. Editing the preset this device uses applies to the current session. In Save permanently mode, use Save in the top bar to persist preset changes by default; edits to other presets remain local drafts until saved. In This session only mode, plugin and appearance changes affect the current session without changing the saved preset or activating Save. Switching back to permanent mode does not save earlier session changes. Plugin enable/delay, appearance (theme and CSS snippet states), and Ribbon visibility/order are stored per preset; install sources, import/export, troubleshoot, groups, tags and delay definitions stay global.

Device records are kept in one small file per device in the plugin's data/devices/ directory, so every device sees the others after syncing; the preset this device uses stays local. Names default to the desktop hostname or the mobile model and can be edited. The local identity stays in Obsidian's device-local storage. The device type is detected from Obsidian's platform information and can be corrected manually or with Detect again from platform. When the platform identifier refreshes (sync system or software update), the old device record is migrated to the new identifier and the locally stored preset choice is kept; if that preset was deleted elsewhere, the device falls back to the default preset of its type and says so. There is no per-device configuration: mobile has no stable long-lived device identifier, so per-device forks cannot be reconciled after syncing. To tell two devices of the same type apart, create multiple named presets and pick one on each device. Reinstalling or clearing local data can create a new device record; just pick a preset again.

Open BPM views retain their editing snapshot and local draft. See Saving settings and resolving conflicts for persistent changes and source selection across devices. Filesystem conflicts remain the responsibility of your sync provider.

Why a mobile device can appear more than once

Mobile platforms do not give web or plugin code a stable hardware identifier:

  • Obsidian may not expose Capacitor's Device bridge at all. When it does, getId() is an app/vendor-scoped value, not a physical-device serial; it can change after clearing app data, reinstalling the app, moving to a new WebView data directory, or an OS/vendor migration.
  • The fallback is a UUID kept in Obsidian's device-local storage. It survives normal restarts, reloads and software updates, but not clearing app storage or reinstalling the app.
  • Device-local storage belongs to one installation, not to the physical device, and is never synced.
  • BPM stores only a hash of the platform identifier, uses it for the device list and to remember this installation's preset choice, and never keys configuration by device id. A duplicate or removed record therefore does not change presets, their contents, or which preset another installation uses.
  • To treat two installations as the same device, rename or remove the stale record manually and pick the same named preset on each installation. Per-device configuration is intentionally absent because it cannot be reconciled reliably after syncing.

Native Obsidian plugins can start before the manager applies a preset. Use the existing delayed-start mode and startup takeover if you need the manager to control startup ordering. Missing plugins and unavailable Ribbon icons retain their saved choices. Reorder Ribbon items using the up/down buttons on touch devices.

📥 Install Hub

The Install Hub handles GitHub-based installation and the sources BPM can track after installation.

GitHub installation sources

Area What it does
Install type Switch between plugin and theme installation
Repository input Accepts user/repo or full GitHub repository URLs
Release selection Fetch available GitHub releases and install latest or a selected version
Release notes Shows release information before installation when available
Recent installs Keeps recently used repositories for faster repeated installs
Source tracking Optionally tracks installed repositories for later checks, updates, and reinstalls
Source management Review tracked plugin/theme sources, update targets, reinstall items, and keep source metadata current
Plugin store (Preview)

Enable Plugin store (Preview) under Basic → Personalize BPM to show its compass action in Plugin View. The store is opt-in; enabling its entry does not start a background catalog download. Opening it loads saved sources and, when none exist, fetches the official community directory. Sources can then be refreshed explicitly.

Browse discovery suggestions or search the catalog, with source, installed-state, open/closed-source, download-count and maintenance filters. Details show the source, compatibility declarations, starter material and release history. Repository metadata and README content are fetched on request; screenshots and documentation can contact their remote image hosts. The try list stores plans and experience notes only; it does not provide an isolated trial environment or automatically restore a tried plugin.

Add independent sources using a URL, pasted JSON or a selected file. Validate the preview before importing; the reviewed snapshot is imported without fetching a different copy. See the source format example. Same-ID entries retain separate source identities. Independent sources are not reviewed merely because they appear in this store; choose sources you trust.

Use the version picker to install a historical GitHub release or an independent-source release that provides manifest.json and main.js. Replacing an installed plugin's source requires confirmation. Installation checks identity, Obsidian compatibility, mobile restrictions and update-exclusion rules, and rechecks the reviewed source binding, selected URLs and manifest version before replacement. It retains enabled/disabled state and current configuration. Historical releases may disappear, and older code may not understand newer settings. Use a local restore point when you need a retained build; installing an older release alone does not restore its settings. HTTP failures remain visible, including release-specific metadata failures.

📦 Transfer Pack

The Transfer Pack tab exports plugin setups and imports them into another vault.

Transfer Pack

Area What it does
Export list Select local plugins and themes to include in a JSON transfer pack
Plugin configs Export selected plugin configuration files when needed
Taxonomy Export BPM groups, tags, and delay presets
Layout data Export manager order, hidden items, and ribbon layout
Sources Export GitHub repository maps, source subscriptions, and install history
Workspace preferences Export style, delay mode, tag display, and startup-check preferences
Import preview Load a pack, review bundled plugins, themes, sources, configs, and layout data before applying
Restore options Install missing plugins/themes, merge plugin config, restore enabled state, apply layout, merge sources, and import themes

🎛️ Ribbon Order

The Ribbon Order tab keeps Obsidian's left ribbon predictable, especially when delayed plugins register icons after startup.

Ribbon Sort Function Panel

Area What it does
Icon ordering Drag ribbon items into a stable order
Visibility control Show or hide individual ribbon icons
Status and group filters Combine Show, Hide and Plugin disabled; selecting all three returns to All. Disabled-plugin icons belong only to the disabled state
Native sync mode Manages ribbon layout in BPM data without relying on Obsidian workspace config
Reset action Show all ribbon items and sort them by name
Reload guidance Prompts for reload when hidden startup icons need Obsidian to refresh

On phones, status and group selectors share a row, and search uses the full row below. The status selector supports multiple choices with icons and counts. Consecutive search edits keep the same input focused; touch scrolling does not select an item. Ribbon groups scroll with the list rather than remaining pinned above it.

🔍 Conflict Diagnosis

The Conflict Diagnosis tab guides plugin conflict testing step by step, keeping the tested state and result in one place.

Conflict Troubleshooter

Area What it does
Pre-check Confirms whether the issue still appears when other plugins are disabled
Binary narrowing Uses guided split testing to reduce the suspect plugin set
Conflict pair search Helps locate two-plugin conflicts, including cross-group cases
Manual feedback loop Asks you to test each step and mark whether the problem still exists
State controls Undo the previous step, restart Obsidian, exit troubleshooting, restore the original state, or keep the current state
Result report Generates a Markdown conflict report with the detected plugins and suggested next actions

📦 Installation

Community Plugins

Recommended for most users.

  1. Open Obsidian Settings → Community Plugins.
  2. Search for Better Manager.
  3. Install and enable the plugin.

Manual Install

Use this when you want to install a GitHub release directly.

  1. Download the latest release.
  2. Copy main.js, manifest.json, and styles.css into .obsidian/plugins/better-plugins-manager/.
  3. Restart Obsidian.
  4. Enable Better Manager from Settings → Community Plugins.

🚦 Quick Start

Open BPM

After enabling the plugin, open BPM in either way:

  • Click the BPM icon in the left ribbon.
  • Run Open the plugin manager from the command palette.

First Steps

  1. Start in Plugin View to review installed plugins, filters, groups, tags, and delay settings.
  2. Use Install Hub when installing plugins or themes from GitHub.
  3. Use Transfer Pack when moving a plugin setup between vaults.
  4. Use Conflict Diagnosis when a plugin issue needs guided isolation.

Interaction Tips

  • Left-click primary controls to toggle, edit, install, import, or run an action.
  • Right-click a plugin item to open its context menu.
  • Hover toolbar buttons to see tooltips; on touch devices, use long press where supported.
  • Better Manager settings is in the top-right More menu. Close remains a separate button. On phones, full-width dropdowns replace wide overview, source and appearance toolbars; the current-view menu switches manager pages.
  • Save persistent changes with Save changes, immediately to the left of More, in the default manual mode. If manual saving is disabled, the immediate save action stays in More. See the save workflow below.
  • Toolbar labels show the current page by default; hover reveals the other labels. Change this behavior in Settings → Style.

Saving settings and resolving conflicts

Save settings manually is enabled by default. Persistent edits stay in a recoverable local draft until Save changes checks the latest shared configuration and publishes them; the save control highlights pending changes. Closing the editor retains the draft. Turn this setting off to save when the last BPM editing window closes, through the same conflict checks. Reopening an editor cancels a close save that has not committed. With configuration sync protection enabled, a newer shared revision delivered by the sync tool is taken over automatically when this device has no unsaved user edits; opening the manager or settings also checks for it, so the newest configuration appears without pressing Save. The save control only highlights changes made on this device.

Apply changes → This session only affects the current session without modifying the saved preset or creating pending changes. Switching back to permanent mode does not save earlier session-only adjustments. These save controls apply to BPM configuration; explicit plugin installations, restores and imports remain their own file-changing actions.

When configurations differ and this device has unsaved user edits, the conflict dialog opens as soon as the conflict is detected, including at startup, instead of waiting for a Save click. The notification area carries the conflict warning icon; feature menus identify affected pages with text. Source chips beside affected items let you preview and choose local or remote values without changing the running plugin state. The dialog retains section choices and offers three outlined, fully rounded footer actions in one row:

  • Local version · All settings applies and saves the local version for every configuration section and related file.
  • Remote version · All settings applies and saves the remote version for every configuration section and related file.
  • Save changes confirms and saves your individual choices.

If a newer conflict arrives before confirmation, review the preserved versions again. Warn about frequent external changes is a separate optional reminder; it does not refresh the editor, pause saving or establish that a sync loop exists.


Security and Disclosure

BPM is a local Obsidian plugin manager, but some features intentionally use external services or browser APIs:

  • External network requests: BPM contacts GitHub for user-visible plugin management features such as fetching community plugin metadata, resolving repositories, checking releases, and installing or updating plugins/themes. These requests may use github.com, api.github.com, and raw.githubusercontent.com. When a plugin exposes no local icon, BPM also queries the Obsidian community directory search index at community.obsidian.md for the Lucide icon name it assigns to that plugin. Repository, homepage and release links open only when clicked. The project tutorial on www.bilibili.com also opens only when clicked.
  • Store and independent sources: The Plugin store (Preview) is opt-in. Opening an empty store fetches the official directory; source refreshes, repository documentation and release downloads contact their respective services. Independent catalogs and their release/image URLs may use additional HTTPS domains supplied by the source. Configured GitHub proxies receive the requests routed through them. GitHub credentials are not forwarded to independent catalog/file hosts or third-party proxies. Imported source files and repository documentation are data; installing a plugin runs that publisher's code in Obsidian.
  • Accounts and data collection: BPM requires no account or paid subscription and adds no telemetry. A GitHub token is optional for authenticated GitHub access; private repositories need appropriate access. Catalog browsing and downloads do not upload configuration snapshots or vault notes.
  • Selected local files: A catalog JSON file chosen with the system file picker may be outside the vault. BPM reads that selected file to validate and import its catalog; it does not upload the file. Transfer packs can include plugin settings, so review their contents before sharing them.
  • Clipboard access: BPM writes to the system clipboard only when the user clicks Copy ID for a plugin.
  • Vault file access: BPM reads plugin/theme metadata, selected plugin configuration files, transfer packages, and legacy export folders for management, migration, backup, import/export, and troubleshooting features. It does not upload vault notes to a remote service.
  • Device records: When device management is used, BPM writes one small JSON file per device into the plugin's data directory (.obsidian/plugins/better-plugins-manager/data/devices/<id>.json) so devices can list each other after syncing. These files contain only a device id, display name, device type, and last-seen timestamp — no notes, plugin settings, or credentials. They are written with Obsidian's vault adapter, never outside the vault, and removed when the device is removed from the list.
  • Icon fallback: Plugin icons first use Obsidian's registered icons. If a named Lucide icon is unavailable locally, BPM downloads its SVG from the official lucide-icons/lucide GitHub repository. Before falling back to the default plug icon, BPM asks the Obsidian community directory which Lucide icon it assigns to the plugin and resolves that name the same way. SVGs and colour rules are stored in data/icons.css for reuse offline. Requests contain only the icon name, without vault content or credentials. Rebuildable repository and catalogue caches live in cache/. The native data.json settings file stays in place. Existing device and cache files are migrated automatically.
  • Plugin restore points: Optional previous-build retention stores manifest.json, main.js, styles.css, data.json and source information as local JSON under the BPM plugin's data/history/ directory. These files are not encrypted by BPM and can contain credentials or other sensitive plugin settings. They may be copied by your sync or backup provider; decide whether to include this directory. Restore points and the separate .bpm/ recovery copies are not a full vault backup. Structural settings merges cannot guarantee reversal of a plugin author's migrations.
  • Single-machine mode and configuration sync protection: By default BPM only reads and writes data.json, keeps device records there, and does not create .bpm; this suits vaults used on one device without sync. Before saving, single-machine mode merges local edits onto the latest settings from other devices and adopts external changes while idle, so it does not blindly overwrite them; a failed or temporarily missing read never falls back to defaults. When a sync service is detected, background automatic writes stay pending and only an explicit Save merges and writes; a first installation creates data.json only on an explicit Save, and an established file that is temporarily missing or empty is never recreated by a background write or restart. When Obsidian Sync, iCloud, Syncthing or a similar tool syncs this vault in real time across devices, enable Enable configuration sync protection in Basic settings. The switch is device-local: it is not written to data.json, does not affect other devices, and applies after restarting Obsidian. It then keeps local drafts, conflict copies and interrupted-save recovery, and preserves content-addressed copies of BPM settings, device records, icon rules and related Obsidian configuration files in the plugin's .bpm/<local-id>/ folder (unchanged copies are reused). Choosing cache deletion when turning protection off removes only this device's own cache directory after the next single-machine start. A legacy switch stored in data.json is migrated once; new-format files without the field are treated as protected only when they carry a revision marker or a local .bpm exists, and fresh installs start with protection off. Persistent configuration edits remain recoverable local drafts. Session-only plugin and appearance adjustments stay in the current session without entering the saved preset or activating Save. With protection on, a newer revision written by another device is followed automatically when this device has no user edits; only genuine concurrent edits open the conflict dialog. By default, the top-bar Save action checks the latest shared configuration for conflicts and publishes the selected changes; unchanged shared files are not rewritten, and only changed content advances the configuration revision. Closing a window retains its draft in manual mode. With Save settings manually turned off, closing the last BPM editing window checks and saves pending persistent changes through the same conflict checks. When protection is on, exclude .bpm/ from sync tools; if BPM detects external changes there, it reminds you to add the directory to your exclusions. The manager's More menu and the settings page provide a manual refresh that re-reads external settings and the plugin list without restarting. Snapshots can contain credentials; BPM does not upload them. Obsidian's shared configuration files are backed up for manual recovery, not automatically rolled back.
  • Realtime sync compatibility: Basic settings includes Save settings manually and Warn about frequent external changes, both enabled by default and labelled Realtime sync / Compatibility. Warnings track each BPM data.json, data/icons.css and data/devices/*.json file separately: at least three effective external content changes to one file within a rolling three-second window, with at most one warning per minute across all files. Local writes, unchanged content, JSON formatting and key order, revision markers, and device heartbeats are excluded. File replacement events are coalesced for 250 milliseconds. A warning does not refresh the interface, pause saving or repair configuration; it is a signal to inspect the sync tool, not proof of a sync loop. The separate reminder to exclude .bpm/ from syncing remains active.
  • Base64 encoding/decoding: BPM uses runtime btoa/atob to pack and restore local Transfer Pack files and decode repository documentation returned by GitHub's content API. Decoded content is treated as data, not executable code.

Recovery directory sync exclusions


🔍 Conflict Diagnosis Tutorial

Use Conflict Diagnosis when a problem appears after enabling community plugins and you need a structured way to narrow down the cause.

Workflow

  1. Open the Conflict Diagnosis tab, or run Troubleshoot plugin conflicts from the command palette.
  2. Start a diagnosis session. BPM records the current plugin state before changing anything.
  3. Test your vault after each step, then choose Problem Still Exists or Problem Gone.
  4. Continue through the guided split tests until BPM narrows the result to a plugin or plugin pair.
  5. Review the result, restore the original plugin state or keep the current state, then generate a Markdown report if needed.

Notes

  • Diagnosis depends on your feedback at each step; use the same test action every time.
  • Intermittent bugs, load-order issues, configuration-specific bugs, or conflicts involving three or more plugins may still need manual verification.
  • You can undo the previous step, restart Obsidian during testing, exit the session, restore the original state, or keep the current state.

🛡️ Startup Takeover

When Delayed Startup is enabled, BPM checks .obsidian/community-plugins.json to make sure Obsidian and BPM are not trying to control the same plugins at startup.

Case BPM behavior
No unmanaged plugins Starts normally
Unmanaged plugins detected Shows a takeover prompt
Auto Takeover enabled Moves detected plugins under BPM management automatically
Plugin marked bpm-ignore Leaves it in Obsidian's native startup list

Taking over keeps delayed startup, enabled state, and BPM's plugin records consistent. After a successful takeover, restart Obsidian so the startup list is applied cleanly.


📦 Transfer & Legacy Export

For current versions, use the Transfer Pack tab to move setups between vaults. It exports and imports plugin lists, themes, selected plugin configs, groups, tags, delay presets, layout data, ribbon order, source subscriptions, install history, and workspace preferences.

The older Markdown/frontmatter export for Obsidian Base is kept only for legacy data compatibility. New setups should use Transfer Pack instead of configuring a Base export folder.


⚙️ Settings

Open More → Better Manager settings. Settings pages have icons and descriptions; inside a page, the Switch settings dropdown changes categories without duplicating the navigation. The search action searches setting names and descriptions. Obsidian versions supporting native settings pages also expose this structure in their settings navigation and search.

Page What you can configure
Basic Feature/tool visibility, manual saving, external-change reminders, store Preview opt-in, previous-build retention Preview, language, persistent filters, recent-install window, delayed startup, startup/update behavior, BPM tags, Ribbon management, commands, debug mode and GitHub token
Main Page Actions Choose which plugin actions appear directly on plugin cards and which stay in the right-click menu
Style Plugin list layout, item display style, group/tag styles, and disabled-plugin fading
Groups Create, rename, recolor, and delete plugin groups
Tags Create, rename, recolor, and delete plugin tags
Delay Create and maintain delayed-start profiles; shown only when delayed startup is enabled

⌨️ Commands

Command Availability Description
Open the plugin manager Always available Opens the BPM main interface
Control a plugin Always available Search a plugin, then enable, disable, single-start, restart, open settings, open folder, open repository, or copy ID
Save current plugin state as profile Always available Saves the current enabled/disabled state as a reusable command profile
Restore previous plugin state Available after a BPM command changes plugin state Restores the snapshot captured before the last command-driven state change
Troubleshoot plugin conflicts Always available Starts the conflict diagnosis workflow
Check plugin updates Plugin management and update controls enabled Checks eligible plugin sources and reports available updates
Preview and update all eligible plugins Plugin management and update controls enabled Opens the batch-update preview before execution
Update rules Available from the command palette Reviews exclusions, skipped releases and reminder settings
Enable/Disable selected plugin Optional setting Registers one command per plugin for direct toggling
One-click Enable/Disable selected group Optional setting Registers group-level commands for batch toggling
One-click Enable/Disable selected tag Optional setting Registers tag-level commands for batch toggling
Apply selected profile Optional setting Registers one command per saved plugin profile

📱 Compatibility

Platform Supported
Windows / macOS / Linux ✅
Android ✅
iOS / iPadOS ✅

The plugin automatically switches between desktop/mobile layouts based on the platform.


🤝 Contributing

Issues and PRs are welcome!

  • Bug Reports: Please include logs and reproduction steps
  • Feature Requests: Consider opening a discussion or issue first

🙏 Acknowledgments


📄 License

MIT

Similar Plugins

info
• Similar plugins are suggested based on the common tags between the plugins.
Alias Picker
3 years ago by rostunic
Archiver
5 years ago by ivan-lednev
Archive completed tasks in your Obsidian vault (plus other org-mode-like features)
Asana
2 years ago by Ryan Bantz
Obsidan plugin that creates tasks in Asana for highlighted text or the current line
Auto Hide
4 years ago by skelato1
This Obsidian plugin enables you to collapse (and expand) the sidebar easier.
BlazeJump
2 years ago by henryco
Plugin for Obsidian that makes text navigation blazingly fast.
Bottom to Top
2 years ago by Henry Gustafson
Canvas Blocks
3 years ago by Kay606
China BRAT
3 months ago by 快速安装插件
Obsidian 插件:粘一个目录地址就能装插件(不走 zip、无解压代码,产物 3KB)
Close Window When Empty
2 years ago by Taylor Jadin
Command Alias
5 years ago by @Yajamon
Obsidianのコマンドに対してエイリアスを設定するプラグイン
Community Install Manager
3 months ago by Konstantin Volobuev
Allows you to use `community-plugins.js` to search for and automatically install plugins when you launch `obsidian`.
Context Command Hider
2 years ago by Mara-Li
This plugin allows you to hide every command from the Obsidian's right-click context menu.
Copilot
4 years ago by Logan Yang
Run agents in Obsidian - OpenCode, Codex, Claude Code etc.
Cursor Position History
2 years ago by Florian Gubler
A Plugin to remember (and make accessible) the cursor history in Obsidian. Both within a file and across files.
Custom save
3 years ago by Hananoshika Yomaru
add custom save action to your save command
Custom State for Task List
4 years ago by Okami Wong
A plugin for Obsidian to define your own states for task items.
Custom window title
6 years ago by Joost Plattel
Small Obsidian plugin that updates the window title with the current open note
Editor Autofocus
3 years ago by Mgussekloo
Extended Task Lists
3 years ago by joeriddles
Extended Markdown support for task lists in Obsidian.
File chucker
4 years ago by Ken Lim
GTD No Next Step
3 years ago by Tobias Davis
Obsidian plugin for GTD workflow, badge projects with no next step.
Hide Commands in Menu
2 years ago by bomian98
Obsidian Plugin, hide different commands in different menus.
Homepage
5 years ago by mirnovov
An Obsidian plugin that opens a specified note, canvas, or workspace on startup, instead of the most recent one.
Hotkeys for specific files
6 years ago by Vinzent
Jira Issue Manager
2 years ago by Alamion
Obisdian plugin to sync tasks between Obsidian and Jira
Kanban
6 years ago by mgmeyers
Create markdown-backed Kanban boards in Obsidian.
LinkMagic
3 years ago by AndyReifman
New Note Fixer
2 years ago by mnaoumov
Obsidian Plugin that unifies the way non-existing notes are created when clicking on their links
Next Link
3 years ago by Juan Luque
NodeFlow
2 years ago by LincZero
Render node streams like `ComfyUi`, `UE`, `Houdini`, `Blender`, etc., to make it easy to write relevant notes. json describes the chart, compared to screenshots, making it easier to modify later. The plugin is also compatible with blogs.",
Note Chain
3 years ago by ZigHolding
Package my frequently used tools, highly personal plugins.
Notice logger
3 years ago by @gapmiss
An Obsidian.md plugin for logging all notices to the developer console, with optional prefix & timestamp.
Open File by Magic Date
4 years ago by simplgy
Open with
5 years ago by phibr0
open-as-md
3 years ago by kursad-k
open and edit preferred formats as markdown in Obsidian
Outline to task list
3 years ago by alexandrerbb
A simple Obsidian plugin to convert a note's outline to a task list
Overdue
5 years ago by Peter Parente
Obsidian plugin that marks items as [[Overdue]] if they are not checked off by their due date
Peekaboo
2 years ago by Wang Guoshi
An Obsidian plugin protects your privacy by setting a password to hide notes.
Personal Assistant
5 months ago by edonyzpc
A plugin that harnesses AI agents and streamlining techniques to help you automatically manage Obsidian.
Personal OS
3 years ago by A.Buot
Plugin Groups
4 years ago by Mocca101
A plugin that allows you to easily group and manage your other plugins in Obsidian.
Plugin Manager
3 years ago by ohm-en
Allows better management of Obsidian.md plugins.
Plugin Reloader
3 years ago by Benature
manual reload plugins
Plugin Update Locker
2 years ago by Lemon695
It can prevent specified plugins in Obsidian from updating, ensuring that these plugins run stably on a specific version and avoiding compatibility issues or feature changes caused by updates.
Plugin Update Tracker
4 years ago by Steven Swartz
Know when installed obsidian plugins have updates and evaluate the risk of upgrading
Previous Daily Note
2 years ago by Marcos Talau
Plugin for Obsidian that opens the previous daily note
Quick Open
2 years ago by James Alexandre
Quickly select items in any modal using keyboard shortcuts. Supercharge your workflow with fast, efficient item selection in Obsidian modals.
Rapid Notes
4 years ago by valteriomon
Runsh
2 years ago by Ddone
A simple plugin that allows to run shell commands from obsidian.
Sequence Hotkeys
4 years ago by Ruan Moolman
Obsidian plugin to support a sequenced of keyboard shortcuts to run commands.
Settings Navigator
2 months ago by Lawrence Lee
An Obsidian plugin that adds browser-style history navigation, quick plugin management, and quality-of-life improvements to the Settings modal.
Slash Commander
3 years ago by alephpiece
Customizable slash command list for Obsidian.md
Spacekeys
2 years ago by Jared Lumpe
Obsidian plugin to define hotkeys based on sequences of keypresses.
Swiss army knife
3 years ago by mwoz123
Tag Buddy
3 years ago by David Fasullo
Unlock powerful tag editing features in Reading Mode. Add, remove and edit tags across your vault. Use tag inboxes to level up any workflow with a powerful idea assembly line.
Tag Project
3 years ago by Odaimoko
Task Board
2 years ago by Atmanand Gauns
An Obsidian plugin to view and manage your tasks from whole vault using much efficient boards using various methodologies.
Task Genius
4 years ago by Boninall
Comprehensive task management plugin for Obsidian
Task Marker
4 years ago by wenlzhang
An Obsidian plugin to change task status and append text with hotkeys and right-click context menu.
Task Mover
2 years ago by Mariia Nebesnaia
A plugin for obsidian to move unfinished tasks to the daily note automatically
Templated daily notes
3 years ago by digitorum
Allow to create templayted daily note in specific folder
ToggleList
4 years ago by Lite C
This is a simple plugin for Obsidian to overwrite the default behavior of toggle checkbox status. Also, it offers a simple way to toggle through frequently used attributes: task states, task tags, highlighted list, etc.
URI Converter
2 years ago by wenlzhang
An Obsidian plugin to convert Obsidian URIs to Obsidian internal links.
Vim Toggle
4 years ago by Conner Ohnesorge
This is a plugin that adds the ability to toggle on and off vim into obsidian with a nice notice to let you know when you switched.
Weekly Review
4 years ago by Brandon Boswell