Repository navigation
feat(settings): move the settings tab to Obsidian's declarative settings API - #229
Merged
Merged
Conversation
…ngs API PluginSettingTab.display() is deprecated since Obsidian 1.13. The tab now returns getSettingDefinitions(): three groups (Editing, Menu, Automation) of native toggles and a dropdown, plus sub-pages for each feature's configuration. The sub-pages only show while their feature is on, and the settings search now finds every MetaEdit setting. - Hidden properties, list properties, tracked task counts, and Kanban boards are native settings lists with add and delete, replacing three HTML-table Svelte editors. - Auto properties keeps its Svelte editor on its own sub-page. - Toggles persist through the serialized settings writer. - Delete the unused ProgressPropertiesModal and IgnoredPropertiesModal. - Raise minAppVersion to 1.13.4, the first public 1.13 release.
… writes Obsidian renders the declarative tab from the snapshot taken when the tab was registered, before the metadata cache is ready, and does not call getSettingDefinitions() again on open. Rebuild after any settings flush that changes a list, read Kanban lanes at render time, and refresh the doc screenshots for the new tab.
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
metaedit-docs | e3db597 | Oct 24 2026, 03:10 PM |
Two quick deletes could both be queued before the first save re-rendered the list, so the second index pointed one row too far and removed the wrong entry. Rows are now removed by the entry they rendered, and progress and Kanban rows edit their own entry rather than the first one with the same name. A failed save now undoes the in-memory change and re-renders the tab, so memory, disk, and runtime side effects stay in step. MENU-04 drives the Right-click menu toggle, and the Kanban test checks that the property field persists.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
PluginSettingTab.display()is deprecated since Obsidian 1.13. MetaEdit's settings tab now returnsgetSettingDefinitions(), and the tab was redesigned around it. Operator review requested before merge: this changes every settings label and raisesminAppVersion.For users:
Dropped on purpose: list entries can't be renamed in place anymore (delete and re-add). Legacy rows with an empty name, which the old tables wrote on Add, show as nameless rows that can be deleted.
Stored data is unchanged. Same
data.jsonkeys and stored enum strings ("All Single", "Total Tasks", ...), so no migration.minAppVersion 1.12.7 to 1.13.4
The declarative API exists from 1.13.0, and
displayValuefrom 1.13.1. I raised the floor instead of keepingdisplay()as a fallback, which would mean two settings UIs to maintain. QuickAdd, PodNotes, and NoteTweet already moved to 1.13.0 the same way. I chose 1.13.4 over 1.13.0 because it's the first public 1.13 release (1.13.0-1.13.3 shipped only to insiders), and it's the oldest build I could download and test. Users on Obsidian 1.12.x keep getting MetaEdit 1.10.x throughversions.json. The release pipeline writes the newversions.jsonentry. Existing entries are untouched.Implementation notes for reviewers
src/Settings/metaEditSettingsTab.ts. A typedcontrolstable maps each control key to get, set, and an optional runtime side effect (toggleAutomators, link-menu register or unregister). Every write goes through the serializedupdateSettingswriter.addSettingTab(), which is before the metadata cache is ready. It does not rebuild them when the tab opens, only onupdate(). So the settings writer callssettingsTab.syncWithSettings()after each flush, which runsupdate()only when a list's structure changed. That covers writes from the tab, the API (setAutoProperties), and prompts, and typing in a field never triggers a rebuild that would steal focus. Kanban lanes are read insiderender.ProgressPropertiesModal,IgnoredPropertiesModal), and the CSS only they used.website/are rewritten for the new tab (the settings reference fully). Six screenshots were recaptured withobsidian-e2e captureat 2x, dark theme, to match the existing ones.Screenshots
Before (master, Obsidian 1.14.4, gear panels expanded):

After (Obsidian 1.14.4, dark):

Sub-pages:


Add prompt, settings search, and Obsidian 1.13.4:


Verification
data.json: add and delete in each list, the progress type dropdown, and typing in the Kanban property field (focus kept). An APIsetAutoPropertiescall while the tab is open updates the "Preset values" count. Lanes show right after a plugin reload. No console errors.pnpm run lint,pnpm run build,pnpm run test(365 passed).Release impact
feat:triggers a minor release, and the next release requires Obsidian 1.13.4. Release PR #220 will be refreshed by the bot after merge. Not merged by me.Note
Medium Risk
Settings UI and save/sync behavior changed broadly and minimum Obsidian version increased; runtime automator/link-menu side effects still run on toggle via the controls map, but users on Obsidian <1.13.4 cannot install this build.
Overview
Migrates MetaEdit's settings tab from hand-built
display()panels to Obsidian's declarative settings API (getSettingDefinitions(), grouped toggles/dropdowns, and native list sub-pages). The tab is reorganized into Editing, Menu, and Automation, with clearer labels (e.g. "Right-click menu", "Hide properties") and feature-specific pages instead of gear-expanded inline Svelte tables.Removed the old table editors and related modals/CSS (
IgnoredPropertiesModal, progress/Kanban/hidden-property Svelte UIs,SingleValueTableEditorContent). List edits (hidden properties, edit-mode list keys, progress rules, Kanban boards) now use Obsidian's "+" / delete flows with prompts or a board suggester; deletes resolve by entry identity to avoid index races on rapid double-delete.Persistence: all tab writes go through the serialized
updateSettingspath with rollback + notices on failure; after each disk flush,settingsTab.syncWithSettings()rebuilds definitions only when list structure changes so typing doesn't steal focus. RaisesminAppVersionto 1.13.4 (nodata.jsonmigration). Docs and e2e tests are updated for the new navigation and copy.Reviewed by Cursor Bugbot for commit 6a7de48. Bugbot is set up for automated code reviews on this repo. Configure here.
Note
Rebuild settings tab on Obsidian's declarative settings API
MetaEditSettingsTabwith declarative setting definitions grouped into Editing, Menu, and Automation, with conditional sub-pages for List properties, Hidden properties, Preset values, Tracked task counts, and Boards (metaEditSettingsTab.ts)updateSettingswriter; save failures show a Notice instead of silently mutating in memoryIgnoredPropertiesModalclass, old manual setting builders, and unused CSS selectorsMacroscope summarized 6a7de48.