ali1k downloadsBuild a configurable visual index, collections, queues, and template-based notes for any knowledge base.
Give any Obsidian vault a real structure — an index, libraries, collections, and queues — without moving, renaming, or rewriting a single note.

Abstract AI-generated concept artwork, not a product screenshot. A current renderer preview and historical real-app captures appear below; see asset provenance.
Build each Index from notes you explicitly add and, when you want dynamic folder membership, folders you explicitly link. A default new-note folder controls storage only: putting a note there never enrolls it in the Index by itself. From there you arrange, group, nest, pin, and classify records into Libraries and Collections — and all of that organization lives in the plugin's own data, not in your Markdown. Your files stay exactly where you put them, with the frontmatter you wrote. One installation can hold several independent knowledge bases, so research, study, and project work never bleed into each other. The plugin is local-first, with no account or telemetry. Library covers load only from existing images in your vault; online cover URLs are not loaded.
New in 0.26.0: A compact desktop header gives the index more room, with workspace information under Details and advanced search under Filters. Selected-note details list clickable local attachments before collapsible metadata. Resize the divider, expand/hide details, or reset the width; preferences stay on this device. Phones and tablets keep full-width details by default, with optional split view on wide tablets. Notes and synced organization are unchanged; physical-device verification remains unverified.
Added in 0.25.0: Attach file takes up to 20 files of any type at once (PDF, Word, PowerPoint, Excel, images, audio, video, ZIP) and shows images, PDFs, audio and video inside the note. Setup can be reopened with Run setup again…, commands and messages use plain words, and Arrange and Undo sit in the desktop header, including narrow panes. Library Cards still use local-vault images only; online cover loading remains excluded.
Upgrade all syncing devices to 0.24.0 or later. 0.26.0 keeps the 0.24.0 data formats. Organization format 17 preserves Collection search filters; older builds protect this newer organization read-only. Back up the complete vault and plugin data before upgrading. A writable downgrade below 0.24.0 requires matching older plugin assets and the complete compatible pre-upgrade organization snapshot, not just replacing the plugin files.
Quick links: Getting started · User guide · Portability and recovery · Troubleshooting · Apple Shortcuts · Templates · Support
Diagram, not a screenshot. The plugin reads paths and cached frontmatter for direct note memberships and explicit linked-folder rules, then builds structure in its own data. A note's storage folder is otherwise irrelevant to Index membership. Collections can nest up to five levels, records can sit in several places at once, and Generic organization never rewrites your Markdown. Uninstall and every file is exactly where you left it.

Captured from the actual KBCC view renderer and stylesheet on 2026-09-09, during the implementation later versioned as 0.20.0. The browser test host supplies synthetic notes, theme variables, and test icons; this is not an Obsidian app capture or physical-device evidence. Provenance and reproducibility.

Real, sanitized desktop capture from 0.10.0. It shows the optional ENT preset's Medications Library; “No note” rows are portable placeholders, not missing application data.
Real iPhone portrait capture showing one search state with compact result rows above the software keyboard. It is not evidence that the complete physical-device matrix passed; see the 0.10.0 iPhone evidence note.
Knowledge Base Command Center is published in the Obsidian Community Plugins directory. This is the recommended route — it handles updates for you.
Requires Obsidian 1.13.0 or newer, on desktop or mobile. The stable internal ID ent-vault-command-center is intentionally retained so upgrades preserve existing plugin data.
Install BRAT, run BRAT: Add a beta plugin for testing, and enter this repository URL. There is also a direct BRAT install link.
Download matching main.js, manifest.json, and styles.css files from one GitHub release and place all three directly inside:
<your-vault>/.obsidian/plugins/ent-vault-command-center/
Reload Obsidian and enable the plugin. Never mix files from different releases.
Let vault and configuration Sync finish before updating, and avoid editing the same knowledge base on another device while the update runs. Update through Community Plugins or BRAT on the device, or replace all three manual assets together on desktop and wait for the hidden .obsidian folder to sync. Then confirm the plugin is enabled before opening the Command Center.
After an existing installation first opens version 0.12.0 or any later release with curated notes (every release since then has them), a one-time What’s new window summarizes that release. Read complete release notes is an ordinary external link to that exact GitHub release and opens only when you choose it — the plugin does not contact GitHub, check the network, or send telemetry. The window is not shown for a truly fresh install and is remembered only in this device's App-local record. Run Open what’s new from the Command palette to reopen it deliberately.
First-device Sync precautions and the exact per-route update steps are in Getting started.
Export your current organization first. Then run Knowledge Base Command Center: Clear device-local data… and confirm, before disabling and removing the plugin through Community Plugins (or deleting its manual plugin folder).
The plugin folder contains data.json with synced knowledge bases, settings, Libraries, Collections, pins, hierarchy, and named snapshots. Device-only routes, collapsed sections, Undo/Redo history, local Sync/Recovery facts, and the highest plugin version observed for one-time update announcements are stored through Obsidian's App-local storage outside that folder, so deleting only the folder does not reliably remove them. A third, bounded rename-recovery journal may temporarily contain the vault identity and old/new vault-relative paths until an interrupted organization repair is durably completed. A fourth, bounded return-navigation history can contain the vault identity, up to 24 opened-note paths, their originating base and tab, a selected-record path, literal search text entered in KBCC, compact-detail state, and scroll positions so a note can return to the same KBCC page after restart. KBCC does not read or copy note bodies into this history, but user-entered search text can itself be sensitive; the history is not synced. The clear command removes all five plugin-owned App-local values without changing data.json, Markdown notes, attachments, or recovery export files, and local tracking stays suppressed until Obsidian restarts — disable or uninstall in that same session. If you already removed the plugin without clearing them, reinstall and enable the same or a newer release, run the clear command, then remove it again.
The fifth App-local key is a legacy external-image permission value that may remain from a private test build. It remains inert in 0.24.0 and later and cannot enable online covers, including after restart. Clear device-local data includes its cleanup. See Local data.
Then read the Getting started guide.
| Concept | What it is | Membership |
|---|---|---|
| Knowledge base | An independent Command Center index profile with its own direct members, linked-folder rules, labels, Libraries, collections, queues, templates, history, and settings. It is not an Obsidian .base file or a saved Workspace layout. |
The same Markdown note can be organized independently in more than one knowledge base. |
| Library | A top-level category inside one knowledge base, with its own icon, headings, subheadings, order, and unplaced section. The Knowledge Index is the base's default primary section. | A subject has one primary Index/Library section per knowledge base. |
| Collection | A reusable personal list that can span the Index and Libraries, with optional headings and nested subheadings. | A subject can belong to several Collections without being duplicated, moved, or reclassified. |
The Index starts empty in a new Generic base. Add existing note to Index records direct membership that does not depend on where the note is stored. An explicit linked-folder rule can instead supply eligible current and future descendants dynamically. The default new-note folder, Inbox folder, template folder, and per-Library creation folders are storage or workflow settings; none becomes an Index source merely because it is configured.
Generic bases loaded from pre-v15 plugin data retain their former primaryFolder behavior temporarily as one reviewable legacy linked-folder source. This compatibility migration prevents existing entries from disappearing silently, but the Command Center and Settings keep a warning visible until you make an explicit choice. Review… lists the real notes currently available on this device and supplied only by that folder: keep selected notes as durable direct members and unlink the folder in one Undo-protected action, intentionally Keep linked for current and future descendants, or choose Not now. Apply stays blocked if a non-root source folder is unavailable, and every unlink requires you to confirm that Obsidian Sync has finished and the folder contents are complete on this device; a locally empty list alone is never treated as proof that every synced copy is empty. Unlinking removes only membership supplied by the rule; no Markdown file is moved, deleted, or rewritten.
Index rows label why they belong: Direct, Linked folder, Imported placeholder, or Protected source. Open a row's Why this appears action for every applicable authority plus its separately labelled storage location. Manage Index… → Why included gives the same distinction across the whole knowledge base, including linked-folder details, hidden overrides, and location-only creation folders. These read-only explanations do not alter the note or an Obsidian .base query.
Choose Arrange to build a separate visual hierarchy — group, nest, reorder, indent, pin — that changes only plugin-owned organization.
Manage Index… provides Indexed, Available, Hidden, Why included, Index headings, and Diagnostics views for membership review, bulk work, and safe integrity repair. Removing or hiding membership never deletes the Markdown file; it can be restored from the Hidden tab.
Choose Organize in the Command Center, or run Organize notes…, to organize existing Markdown notes without changing their files. In this workflow, knowledge base or Base always means an independent KBCC knowledge base—not an Obsidian .base file.
For one open note, activate its editor KBCC organization indicator or run Organize this note…. The shorter Choose location → Review flow prefills its existing Index or Library placement. Choose the knowledge base, Index heading, and Under heading or note destination; nested choices show full breadcrumbs and may name an unresolved placeholder. Large parent lists offer Find a heading or note. Collections are visible as searchable checkboxes, including current memberships; create a collection or nested subheading inline without leaving the flow. More options exposes additional bases. Choose Review placement, then Save organization; an unchanged review offers Done — no changes needed. Collection-only edits preserve the primary Index/Library placement, and Cancel creates no draft collections.
The full three-step Notes → Destinations → Review flow can:
Existing memberships in knowledge bases you do not target stay unchanged. Within each targeted base, one primary Index or Library placement is maintained, while Collection memberships are additive and can coexist with either primary placement. A folder selection is only a one-time snapshot of Markdown notes present when the Organizer opens; it does not create a linked-folder rule and future files do not join automatically.
For faster entry, Obsidian's public File Explorer and editor context menus expose Organize in command center… for one note and bulk/folder variants for supported selections. The Command Center's Organize button also accepts safe text path payloads from compatible Obsidian drags as a progressive enhancement. Operating-system file drops and untrusted payloads are refused. A vault-qualified obsidian://open URI is also refused even when it names the current vault, because the drop surface cannot authenticate that vault name; use an unqualified vault-relative path, the context menu, or the Organizer's vault browser instead.
Open Markdown notes show an interactive KBCC organization indicator in the editor header. Its icon, text alternative, tooltip, and optional count distinguish organization in the current base, Collections-only organization, organization only in other bases, and ordinary not-organized state. Red is reserved for a broken persisted reference, not for a normal unorganized note, and color is never the only signal. Activate the indicator to organize that note directly; use Where is this note organized? for the separate read-only all-base summary.
A separate Return to KBCC action sits beside that indicator. When the current note path has a matching route captured as KBCC opened it, the action restores that originating knowledge base, tab or Library, selected record, search, compact detail, and saved position—even after Obsidian restarts. Without a matching path-bound route, or when its saved destination is stale, the action opens a clean KBCC Home instead and never borrows a different note's route. The bounded route history keeps only the newest origin for each note path, is device-local and vault-scoped, follows note and folder renames, prunes matching deletions, and is removable through Clear device-local data. Saved browse-row and structural-section limits are each capped at 10,000; an even larger expanded page returns to the bounded available position rather than retaining an unbounded DOM.
Before Apply, the Organizer shows exact before/after primary and Collection results and explicitly reports zero file moves, renames, rewrites, or folder-link changes. Apply revalidates the selected file identities, destination state, and Sync generation; if anything relevant is stale, nothing is partially applied and you prepare the review again. Each changed base keeps durable per-base Undo. During the same plugin session, Undo last organizer change and Redo last organizer change reverse the newest reviewed batch across all affected bases together.
The Organizer changes existing Markdown notes' organization; it does not bulk-create files. Use the explicit Create note flow for each new file. An explicit Index parent change moves only the selected leaf: dependent subtrees must be organized separately, and invalid, cyclic, or stale parents are refused. In the ENT clinical preset, existing eligibility, protected Library source kinds, and source-group constraints remain authoritative; an incompatible placement is rejected during review. These changes use the same exact review and Undo without moving or rewriting Markdown.
Collections are reusable personal lists spanning the Index and Libraries. A record can appear in several Collection headings without being duplicated, moved, or reclassified.
Open My Collections → New collection or Add notes. Every collection and nested subheading menu offers Add notes here and Create note here, including collapsed or populated destinations. The destination picker can create another collection even when others already exist. Inline Organizer creation stays a draft until Review → Save; structure and memberships commit together and one protected Undo restores the previous state. Collection searches include nested members and retain their scope when returning from a note.
New in 0.13.0. Subheadings can now contain further subheadings, in both the Collections and Libraries tabs, up to five levels deep counting the top heading as level 1. Add subheading appears on any node below that cap. Removing a nested node promotes its records and child subheadings to its parent rather than discarding them. Move, rename, drag-and-drop, collapse/expand, and Quick entry all work at any depth, and pickers label each node with its full path such as Heading / Sub / Sub-sub. On touch devices, Move under… and Outdent one level in the subheading menus rearrange the headings themselves; record grips move subjects between them. Portable exports carry the nested layout; older plugin builds that receive it show read-only protection instead of silently flattening it.
Create, name, icon, reorder, archive, and restore custom Libraries. Inside a Library, add headings and nested subheadings, place existing records, and use the explicit Unplaced section when structure changes.
Open Library settings… from the Library toolbar or Manage libraries → Settings…. General offers Rename, icon changes, Archive, Restore, and permanent deletion of an archived custom Library. Built-in Libraries can be renamed, customized, and archived; their source classification prevents permanent deletion. To rename the knowledge base itself, such as ENT, use Manage knowledge bases… → Rename; its Generic/ENT preset remains fixed.
In Display, choose List or Cards, an image property, Small/Medium/Large card size, Portrait/Square/Landscape proportions, and Show whole image or Crop to fill. Up to six comma-separated property names appear beneath each card's title. Defaults use cover, medium portrait cards, whole-image fitting, and author, reading_status; new Libraries start in List. Save display applies the choices to this Library, with Undo. Reset display restores defaults. Renaming or archiving keeps its settings.
For a Books Library, add cover: "[[Covers/My book.jpg]]" to a book note’s properties, then select Cards. The image must already exist in the vault. Missing covers and unresolved No note subjects keep a compact explanatory placeholder. This is a KBCC Library view, not an Obsidian .base file. Local covers work offline; online image URLs are not supported or loaded. See Library display and privacy.
Cover setup improvements in 0.23.1 keep Save display visible while the settings form scrolls, and show whether choices are unsaved or saved. Cover-property lookup accepts a unique capitalization difference (Cover/cover); an exact match takes priority, and ambiguous names need an exact choice. A one-item image-link list and simple local Markdown image link are also supported. A failed cover explains whether the property is missing, empty, invalid, or its image is unavailable—without showing private values.
The … menu for any custom-Library heading or nested subheading includes Create note here…. It opens the normal creation form with the full heading path fixed and visible, applies that Library's creation profile, and expands every ancestor after successful placement. The exact base, Library, and destination are checked again immediately before Markdown creation. If placement still fails after the file is created, KBCC moves only that operation's provably unchanged file to Obsidian's recoverable trash; if it cannot prove the file is unchanged, it preserves the exact path and tells you how to place it manually. Protected built-in sections do not expose this action.
Under Settings → Libraries → Library creation profiles, each Library can inherit the knowledge base's note folder, empty/template mode, and template — or override any of those fields. It is deliberately a two-level model: knowledge-base defaults, then one optional Library override. The Create note form still exposes the resolved values for a one-note exception. Profiles are keyed by the stable Library ID, so renaming keeps the profile; archiving retains it, and permanent deletion removes it.
Smart queues begin with Imported placeholders needing notes, which lists every unresolved portable subject, including one whose previously linked note is temporarily missing. Candidate discovery checks every eligible Markdown note in the vault—including unindexed notes and notes outside the active base's storage or linked-folder rules—for an exact normalized title or configured-ID match. Its count is the number of unresolved subjects with at least one candidate, not the raw number of matching notes. Choose a subject—or run Create or link the next imported topic…—to create or link deliberately. A candidate is never linked automatically, and an existing portable owner is disclosed before identities can be merged. A missing previously linked note keeps its prior path binding, so arrival at that same path can resolve it automatically after Sync.
Depending on profile and current organization, the remaining smart queues surface your Inbox, a manually curated Next list, pinned records, ungrouped records, and recently changed records. Queues are views over records and plugin state — they never create duplicate notes.
A non-empty search defaults to every available, non-archived knowledge base, grouping results by base and Library with the active base first. Search in can restrict results to the current base or the current Library. Availability selects all entries, linked notes, or placeholders, and Linked notes first prioritizes records with notes. Selecting a result from another base switches the active base before opening it. Saved searches retain these choices.
Search is Unicode-aware and folds diacritics, straight and curly apostrophes, Arabic tatweel and presentation forms, common Arabic/Persian ya and kaf variants, and Arabic/Persian digits. Advanced filters include domain:, priority:, kind:, type:, status:, review:, source:, safety:, dose:, and image:; an unknown word: filter fails closed rather than becoming an unexpectedly broad text search. Broad searches report the full count and state Showing the first 300 of N results. Browse views expose Show more instead of building an unbounded mobile DOM.
Quick entry opens from the lightning-bolt desktop ribbon action, Details → Command center actions → Quick entry…, a hotkey you assign, the mobile toolbar, or a fixed Obsidian URL. Its focused commands create a No note subject, a heading, a subheading, or a note; add the current or an existing note; and open Quick append. Library capture always asks for the exact heading or subheading first.
Every active Library also gets its own Open Library: … global command, usable as a hotkey, a mobile toolbar button, or Obsidian's mobile Quick Action.
The plugin installs no default key combinations — choose your own under Settings → Hotkeys. On iPhone or iPad, open Settings → Mobile → Manage toolbar options, scroll to the bottom, choose Add global command, then search for and select Quick entry…, another focused command, or an Open Library: … command.
Ten fixed action-only URLs are available for Apple Shortcuts: obsidian://kbcc-quick-entry, kbcc-create-subject, kbcc-create-heading, kbcc-create-subheading, kbcc-create-note, kbcc-add-current-note, kbcc-add-existing-note, kbcc-quick-append-current, kbcc-quick-append-existing, and kbcc-attach-current. They carry no data and reject every query parameter — see Apple Shortcuts below.
Quick append adds one item to a strict plugin-owned block at the end of a chosen Markdown note. The default categories are Questions, Lectures to watch, Sources, Thoughts, To read, and Other; reusing a category appends beneath its existing heading instead of creating a second one. Categories are configurable per knowledge base — rename, reorder, add, archive, restore, and choose bullet or checkbox style with an optional date.
The operation uses Obsidian's atomic note-processing API, refuses ai_lock: true, preserves every byte outside the managed block, and offers a short exact undo that refuses to run once the note has changed. Note bodies and appended text are never copied into plugin data.
Create an empty note, or copy a local Markdown template using {{title}}, {{date}}, and {{time}}. The destination path is previewed before creation, missing folders are created safely, and an existing file is never overwritten.
Templates used with Library context may also use quoted-scalar tokens — {{yaml:title}}, {{yaml:id}}, {{yaml:category}}, {{yaml:parent}}, {{yaml:library}}, and {{yaml:type}} — each expanding at creation time to a YAML-safe quoted scalar, with "" when a value is unavailable. The yaml: prefix is exact: plain {{id}} and other plugins' template syntax are copied through unchanged.
Five ready-made templates ship in templates/. Tokens resolve only during explicit creation; they never rewrite an existing note or its frontmatter.
Use Attach file to current note… after opening the destination Markdown note. Each knowledge base can follow Obsidian's own attachment setting, use a fixed vault folder, create a folder beside the note, or ask for a vault-relative folder every time. The generated links go at the editor cursor, under a configured marker or heading, or at the end of the note.
Choose up to 20 files of any type at once, such as PDF, Word, PowerPoint, Excel, images, audio, video, or ZIP. By default, images, PDFs, audio, and video are embedded so they display inside the note; other types become ordinary links that open in their own app. You can instead embed every file or link every file. See Attach files.
The command copies only the explicitly selected files, each up to 100 MB, into the vault. It never moves the external original, never relocates existing vault attachments, and never intercepts ordinary paste or drag-and-drop. It refuses immutable source notes, replaced note identities, malformed YAML, and ai_lock: true. If the copy succeeds but link insertion fails, the new vault file is kept and its path is reported so you can link it by hand.
Personal organization supports Undo/Redo and named snapshots. Portable exports carry workspace settings, a path-free Index blueprint, selected Libraries, Collections, study state, and saved views — never note bodies or attachment binaries.
Before a single-base portable import, Predicted outcome shows new subjects, existing identity matches, selected subjects that will still await a note, the whole post-import placeholder queue by placement, and how many unresolved placeholders have at least one exact eligible vault-wide candidate. No candidate is auto-linked. A predicted import of 100 or more unresolved incoming subjects needs an additional acknowledgement. The completion screen can open the placeholder queue or undo the import immediately.
If Workspace settings are selected with Index, Libraries, Collections, or Study state and those settings would change fields used to project records, the combined import is blocked before mutation. Import Workspace settings by themselves first, let Command Center refresh the vault, then reopen the center and import the subject-catalog sections. A combined import remains allowed when the selected Workspace settings do not change those projection fields.
Multi-base portfolio transfer bundles up to 50 independent portable packages behind one bounded manifest. Map each source to a new or existing compatible base, choose Merge or Replace per destination, select components per source, and inspect an exact immutable change plan before applying it. Replace requires a displayed typed phrase and writes a same-vault recovery for every affected destination before the atomic mutation. The preview reports base, heading, subject, Library, conflict, folder/template fallback, and explicit will-not-change categories.
Portable packages created by version 0.13.0 through 0.22.0 use format version 5, which adds nested subheading layouts to version 4’s stable Library identities. The 0.12.1 release used format version 4; earlier formats remain supported. Portable packages created by version 0.23.0 through 0.23.1 use format version 6, with display profiles in Workspace format 3. Portable packages created by version 0.24.0 through 0.26.0 use format version 7, with Collection-scoped saved searches in saved views component 2; Workspace remains format 3. The plugin reads portable versions 1 through 7. Older builds refuse newer packages, so update every syncing device before applying a new export.
Read Portability and recovery before importing, replacing, or restoring.
Run Check sync and backup status from the Command palette, or open Manage index → Diagnostics → Sync & recovery center. It reports this device's last successful save, the last observed external plugin-data reload, semantic revision and shortened head, bounded conflict-rescue counts and ages, confirmed recovery age, and read-only protection reason.
It uses only plugin-owned in-memory state, vault-scoped local storage, Obsidian's public platform facts, and file metadata for direct children of the documented export folder. It never opens recovery or conflict JSON, never reads note bodies, and never makes a network request. It is historical local evidence, not a live Sync monitor — the absence of a warning does not prove that a provider is caught up or that a device handoff is safe.
Underneath, divergent edits to the same base are written to a private in-vault conflict rescue before adoption, and the plugin fails closed rather than picking a winner when that rescue cannot be created. Every save also refreshes a parseable twin of data.json, and startup restores from it when the primary file cannot be parsed.
The Taxonomy Health Center reports duplicate and visually confusable names, case and hyphen variants, parent or cycle problems, empty or unreachable structure, unavailable configured folders and templates, duplicate note bindings, and unresolved placeholders that may match local notes. Ambiguous findings stay report-only. The two deterministic parent-edge repairs require an exact preview and are saved as a single Undo-protected transaction.
Obsidian .base files can select the plugin's Knowledge hierarchy view (stable view type ent-hierarchy) without becoming a Command Center knowledge base. Native Bases options choose the title, ID, fallback group, status, and priority properties, a 25–300-row page size, and whether group counts appear.
A .base file's own filters, limit, sort, and Group by remain authoritative; the fallback group applies only when no native Group by is configured. Large results are prepared in bounded slices, and Previous/Next replace one page at a time so offscreen rows never accumulate. Opening a row opens the Markdown file — it does not change frontmatter or plugin organization.
The index is built once and then maintained incrementally. Editing an indexed note rebuilds that note's record and places it back in the existing order, instead of re-reading every Markdown file in the vault; a regression test asserts the incremental result is identical to a full rebuild after create, modify, delete, cross-base, placeholder, and reclassification events. Renames deliberately keep the full path, because a rename reprojects every stored path.
Manage index builds only the list its active tab displays and reuses it between keystrokes, so searching filters an existing snapshot rather than enumerating the vault per character. Bulk membership changes and Library adoption resolve records and portable subjects through per-base maps rather than scanning every record for every selected note, and startup copies the knowledge-base store once rather than repeatedly.
The manifest is mobile-compatible and the plugin ships mobile layouts throughout. iPhone and iPad use a compact, single-column workspace at every width, including iPad landscape and Split View. On desktop, compact mode still follows the actual Obsidian leaf width below 1050 px, including stacked tabs, side-by-side splits, and pop-out windows. Compact views use a focused record-detail route with Back to main page, scroll-safe header actions, and 44 px touch targets. Creation and Library forms reconcile Obsidian's native keyboard inset with the visual viewport so the action footer stays reachable while the software keyboard is open. Touch devices offer dedicated record grips in Arrange (or Collection Edit) with highlighted destinations, edge auto-scroll and Details → Undo. Swipe outside grips to scroll normally; labelled row menus remain an alternative. This gesture implementation still requires physical-device verification.
On iPhone and iPad, a smaller header keeps the base switcher, Add, and Details together. Open Details for the overview, statistics, Organize, and secondary actions. Section tabs and Search/Filters stay pinned as notes scroll; the overview and result statistics scroll away to preserve the content area. Filters opens in a bounded, scrollable panel below the toolbar. Focusing search hides secondary controls to leave more room for the software keyboard. Desktop layouts are unchanged. These describe the implemented behavior, not a completed physical-iPad test claim.
The bundle is built to a 2018 JavaScript baseline so it can run on older mobile web views, and that baseline is enforced rather than assumed: the compiler is pinned to exactly that language level, so using a newer built-in method fails the build instead of shipping unpolyfilled. Version 0.13.1 fixed four such methods that had been reaching devices — the most serious ran while classifying note paths and needed iOS Safari 15.4 or newer.
Physical-device claims are kept separate from automated coverage: see the 0.26.0 device waiver record, the historical 0.25.0 record and 0.24.0 record, the historical completed-but-partial 0.10.0 iPhone evidence note, and the manual iPhone release checklist rather than assuming any release checklist passed. The historical 0.19.1 record separately identifies its supplemental Mac Obsidian startup-cache recovery coverage and its limits. Physical iPad/iPhone, VoiceOver, and controlled two-device Sync remain unverified for 0.26.0; each authorization is candidate-specific and does not reuse an earlier waiver.
The plugin is built to work with right-to-left content and interface languages:
dir="auto", so Arabic and Latin text each display in their own readable direction.text-align: start across the interface, so those rules mirror under a right-to-left interface language. This is not yet a complete conversion — some physical left/right rules remain.A VoiceOver-with-Arabic pass across Quick entry, Quick append, taxonomy repair, portfolio transfer, and sync recovery is an explicit item on the manual iPhone release checklist. Treat right-to-left support as designed-for and partly verified, not as a completed device-tested claim.
No analytics, telemetry, accounts, advertising, or payments. Library covers resolve only to existing vault images; remote URLs are rejected and cannot be enabled. CI checks source and bundle for programmatic network APIs, audits the single image-source path, checks clipboard access, and exercises denied remote values with a local-image positive control. These checks support the local-only boundary; they do not approve the deferred online-cover proposal. Published releases carry GitHub build provenance attestation for main.js, manifest.json, and styles.css.
| Generic knowledge base | ENT clinical preset | |
|---|---|---|
| Best for | Research, study, projects, courses, and other Markdown knowledge bases | The original protected ENT study workflow |
| Index membership | Direct note memberships plus folders the user explicitly links; creation/storage folders never enroll notes | Canonical clinical source scope is protected |
| Libraries | User-defined | User-defined plus protected Procedures, Medications, and Syndromes |
| File-changing workflows | Explicit note creation only | Note creation plus two separately disclosed, confirmation-gated canonical workflows |
| Clinical approval | Not applicable | The plugin never grants clinical review approval and respects ai_lock: true |
The ENT preset is an organization workflow. It is not medical advice, a medical record, or autonomous clinical decision support.
The templates/ folder contains five ready-to-use Obsidian note templates built around this plugin's creation-time tokens:
| Template | For |
|---|---|
Study topic.md |
A concept, subject, or lecture topic you are learning |
Source note.md |
A paper, book, article, or video you are reading |
Project.md |
Work with an outcome, next actions, and a decision log |
Meeting or case log.md |
A dated meeting, session, or case entry |
Question inbox.md |
An open question to capture now and resolve later |
Copy the ones you want into your vault, set Templates folder in settings, then select a Default template per knowledge base or override it per Library under Library creation profiles. Full install steps and a token reference are in templates/README.md.
The plugin exposes ten fixed Obsidian URL actions. An Apple Shortcut with a single Open URLs action can put any of them on your Home Screen, in the share sheet, or on Back Tap.
| URL | Opens |
|---|---|
obsidian://kbcc-quick-entry |
The Quick entry hub |
obsidian://kbcc-create-subject |
Create a No note subject |
obsidian://kbcc-create-heading |
Create a heading |
obsidian://kbcc-create-subheading |
Create a subheading |
obsidian://kbcc-create-note |
The blank Create note form |
obsidian://kbcc-add-current-note |
Classify the currently active note |
obsidian://kbcc-add-existing-note |
The note picker, to add an existing note |
obsidian://kbcc-quick-append-current |
Quick append for the currently active note |
obsidian://kbcc-quick-append-existing |
Choose a note, then Quick append |
obsidian://kbcc-attach-current |
Attach file to the active note, when eligible |
Every route rejects every query parameter. ?title=, ?path=, ?content=, or any other key — known or unknown — causes the route to fail closed before a hub, picker, or form opens. That is a deliberate privacy boundary: no note title, path, body text, or category can travel through a URL, and nobody can craft a link that silently writes into your vault. Current-note routes resolve the note only from Obsidian's own active workspace, and the URLs cannot select a vault.
Step-by-step Shortcuts instructions, placement options, and troubleshooting are in the Apple Shortcuts guide.
Version 0.26.0 does not load online covers or perform automatic remote metadata requests. Only existing local-vault cover images are supported. There is no external-image opt-in, and any allowed value from a private test build is inert. The Library display and privacy guide separates this release from the deferred, unapproved online-cover proposal.
What it reads
What it writes
data.json. Sync reconciliation, schema migration, and vault renames can update that file automatically.ai_lock: true, and keeps note bodies out of plugin data.ai_lock: true, require explicit action, preview the destination, and attempt rollback if an operation fails.What leaves the vault, and what cannot enter it
text/plain or text/uri-list path strings and rejects operating-system file payloads, absolute paths, and unsafe URLs. Every parsed candidate must resolve to a current eligible Markdown file inside the vault; if one does not, the drop opens nothing. It never reads a dropped note body; the File Explorer context menu and Organizer vault browser remain the dependable alternatives.Automatic protection
data.json.bak is refreshed from known-good previous committed authority. If that prerequisite backup or its Sync fence fails, the primary and any compensating write are not attempted and the operation can be retried after the underlying problem is fixed. After a successful primary commit, the plugin tries to advance the backup to the new authority; a post-commit backup failure leaves the primary committed and may leave data.json.bak one commit behind. Startup can restore a parseable backup when the primary cannot be parsed, keeping the unreadable file beside it for inspection. A failed candidate never becomes backup authority.Exports
See Portability and recovery for the exact export boundary and Security for the trust model.
Same-vault recovery protects plugin-owned organization for one knowledge base; it is not a backup of Markdown notes or attachments. Back up the complete vault, including .obsidian, and export one current private recovery per available base. Archived bases must be restored temporarily before export.
Recovery is a standalone replacement, never a merge with portable sections. Current v13 files introduced in 0.24.0 preserve Collection-scoped saved searches alongside Library display profiles, nested Collection and Library layout, dynamic Library definitions, explicit Index membership, linked-folder provenance, and source vault/base/preset locks. Online-image permission is not included or supported. Older identity-less formats require additional overrides and conservative path checks.
Follow the complete backup and restore procedure before restoring anything.
| Surface | Status |
|---|---|
| Obsidian | 1.13.0 or newer |
| Desktop | Uses Obsidian-compatible APIs; no Electron- or Node-only runtime dependency |
| iPhone and iPad | Dedicated record grips, touch menus and mobile layouts are implemented; the 0.26.0 physical-device record is explicitly waived and unverified, so do not assume the release checklist passed |
| Android | The manifest is mobile-compatible, but this repository does not currently document a complete physical-Android test pass |
| Network | Local-vault covers only; no online-cover support or automatic remote metadata requests. No analytics, telemetry, accounts, advertising, or payments |
obsidian://open drop URI, including one naming the current vault. Use an unqualified vault-relative path or one of the supported menu/tree entry points.data.json and do not force a downgrade.Every other symptom, including import refusals and Sync protection reasons, is covered in Troubleshooting.
Requires Node.js 22 and npm.
npm ci
npm run review
The review task runs strict typechecking, zero-warning lint, unit and rendered-DOM tests, a production build, Community-oriented static checks, and release verification. The production assets are main.js, manifest.json, and styles.css; a local ZIP and SHA-256 checksum can be built with npm run release:bundle.
Read Contributing before opening a pull request.
Built by Dr. Ali Alshahrani.
Released under the MIT License.
Obsidian names, interface elements, and trademarks visible in product captures remain the property of their respective owners. This project is not endorsed by Obsidian.