alphysico5 downloadsManage profile-based taxonomies, context-dependent property options, display labels, defaults, and orphaned properties.
TaxoFlow Properties manages configurable, profile-based taxonomies, context-dependent property suggestions, and automated folder routing in Obsidian. Selectors can use fixed options or cascading rules that depend on other properties, with full support for Text and List properties, display labels, safe defaults, folder organization, and Orphan Management.
taxo..selector. vaults to taxo. safely with dry-run previews and automated backups.Instead of scrolling through a giant, flat list of unrelated tags or options, TaxoFlow lets you chain properties together so options depend dynamically on prior selections.
Example: Literature & Research Tracker
taxo.book_type (Parent): Fiction, Non-fiction, Academictaxo.book_genre (Child):Fiction is selected → offers Science Fiction, Historical Fiction, Mystery.Academic is selected → offers Physics, Computer Science, Philosophy.taxo.book_subfield (Grandchild):Academic + Physics is selected → offers Quantum Mechanics, Thermodynamics, Astrophysics.---
taxo.book_type: Academic
taxo.book_genre: Physics
taxo.book_subfield: Quantum Mechanics
---
Result: Selecting "Academic" immediately adapts the genre dropdown, and picking "Physics" narrows the subfield options, ensuring consistent metadata entry.
Organize your vault effortlessly without manually dragging notes into folders or maintaining separate folder-mover plugins.
Example: Project & Knowledge Base Routing
taxo.book_) → Default folder: Library/Bookstaxo.proj_) → Default folder: Work/Projectstaxo.log_) → Default folder: Journal/LogsWhen you add any property starting with taxo.book_ (or instantiate a book note from a template), TaxoFlow automatically moves the note to Library/Books/.
Keep your frontmatter keys standardized and namespaced for Dataview queries, templates, or scripts, while presenting a clean, friendly interface in Obsidian's visual property editor.
Example: Task & Milestone Tracking
taxo.proj_milestone_statusMilestone Statustaxo.proj_assigned_toAssigneeResult: You can write robust Dataview queries like WHERE taxo.proj_milestone_status = "In Progress", while the note property editor displays clean, human-readable labels.
Populate new notes with sensible defaults without corrupting existing records.
Example: Status & Triage Defaults
taxo.task_status with a default value of Backlog.taxo.task_status: "" or adding the property for the first time, TaxoFlow automatically fills Backlog.In Progress or Done) are strictly preserved and never overwritten without an explicit confirmation prompt.Maintain a pristine vault by identifying and cleaning up rogue metadata.
Example: Refactoring & Fixing Typos
taxo. root that are either unassigned to a profile or missing a selector definition (e.g. accidental typos like taxo.book_genree)..obsidian/plugins/taxoflow/ in the vault.main.js, manifest.json, and styles.css from the matching GitHub release..obsidian/plugins/taxoflow/.The publishable release includes no data.json. Obsidian will create and manage the plugin's settings file. The data.json in this repository is a clean, uninitialized fixture for tests and fresh-install inspection, not a user configuration to copy over an existing vault.
A fresh install intentionally starts with no profiles. Create a profile name and a namespace that starts with taxo. and ends with an underscore, such as taxo.book_ or taxo.country_. Namespaces must be unambiguous; overlapping namespaces are rejected.
A property key such as taxo.book_genre is matched to its configured profile namespace. The plugin does not contain Books-specific or other domain-specific runtime rules.
A selector can have fixed options or dependency rules. Rules explicitly use AND or OR logic. In an AND rule, each declared condition must match, and every declared dependency must have a value. In an OR rule, at least one declared condition must match. Multiple values within a condition are alternatives.
When several rules match, TaxoFlow chooses the most-specific rule. Equally specific overlapping rules with different option sets are treated as ambiguous. The validator also checks cycles, missing parents, and provably impossible dependency contexts.
Incomplete dependency contexts suppress suggestions and do not register context-specific custom values. When a parent changes, dependent values that are no longer valid are reconciled while unrelated free-entered values are preserved.
The plugin respects the property type assigned through Obsidian's Properties type controls. Text stores a single scalar string; List stores an array of values. List additions preserve existing entries and avoid duplicates. Text selections replace the previous scalar value. The type is rechecked when queued writes execute to reduce stale-type and concurrent-write issues.
The visible property editor depends on Obsidian's internal rendering and metadata behavior. The project includes mocked regression tests, but maintainers should test type changes in live Obsidian after relevant updates.
A selector's label changes its displayed name only; the internal key and stored value are not changed. Additional labels can be configured for properties without selector definitions. TaxoFlow stores profile-level labels in propertyLabels.
A default is selected from the configured options. Applying a default only populates an existing, empty Text or List property when the default is available in that note's dependency context. Non-empty values are preserved. The plugin does not create properties in notes where the property key is absent.
Each profile can optionally configure a Default folder. When a default folder is defined:
Orphans are selector-rooted properties present in note frontmatter that do not belong to exactly one configured selector/profile pairing. The settings distinguish keys with no matching profile from keys in a configured profile namespace that no active selector definition owns.
Orphan management supports viewing the note paths and values where keys occur, registering eligible keys, bulk-renaming a key, removing an individual occurrence, and removing all occurrences after a confirmation preview. Destination collisions are not overwritten. Removing a selector's configuration preserves note data unless the separate destructive action is explicitly confirmed.
TaxoFlow has a new plugin ID and a new namespace, so Obsidian will store its settings separately from the original plugin. Existing selector. keys do not automatically become taxo. keys.
An optional utility is provided at tools/convert_legacy_vault.py. It is a separate, opt-in tool and is not run by the plugin. It supports a dry-run-first conversion of frontmatter keys and profile configuration, including alias to label and propertyAliases to propertyLabels.
Requirements: Python 3.10 or later and PyYAML, installed with:
python -m pip install -r requirements.txt
First run a dry run, pointing --config at the original plugin's data.json:
python tools/convert_legacy_vault.py --vault "/path/to/your/vault" --config "/path/to/your/vault/.obsidian/plugins/custom-selectors/data.json"
Review the complete report. The default output configuration path is .obsidian/plugins/taxoflow/data.json in the selected vault. The utility identifies notes where the destination key already exists or the YAML cannot be parsed safely and leaves those notes unchanged.
To apply a plan after reviewing it, use:
python tools/convert_legacy_vault.py --vault "/path/to/your/vault" --config "/path/to/your/vault/.obsidian/plugins/custom-selectors/data.json" --apply
The tool requests the exact confirmation phrase CONVERT. --yes skips that prompt and should only be used after manually reviewing a dry run. The utility creates timestamped backups before writing. The output configuration must be inside the vault. The converter does not rewrite Bases files and does not maintain pending migrations in TaxoFlow's runtime.
Run the conversion on a copy of the vault first. Do not enable TaxoFlow against a converted vault until the report has been checked and any conflicts manually resolved. A skipped conflicting selector. property will not be recognized as a taxo. selector until you resolve it.
Requirements:
requirements.txt.Run the validation and test suite:
npm install
npm run check:syntax
npm run check:release
npm test
The plugin's production entry point is main.js. The source is currently shipped as a single JavaScript bundle; the test suite loads it with mocked Obsidian APIs and tests important configuration and operation helpers. These tests do not replace live Obsidian testing.
TaxoFlow Properties is designed to work locally with your vault. It does not include analytics or hidden telemetry. The standalone conversion utility reads Markdown notes and configuration only under the vault paths that you specify, writes only planned key changes and the output configuration, and creates backups before applying a conversion.
TaxoFlow Properties is maintained by AlPhysico. If the plugin is useful to you, you can support maintenance and future development through GitHub Sponsors. Sponsorship is voluntary and does not unlock plugin functionality.
TaxoFlow Properties is a modified and rebranded derivative of the MIT-licensed Custom Selectors Obsidian plugin originally published by @hodie. The original MIT notice is retained in LICENSE, alongside a notice for TaxoFlow Properties modifications. Refer to LICENSE for the full terms.
Please use GitHub Issues to report reproducible bugs or propose changes. Include your Obsidian version, operating system, minimal reproduction steps, and any relevant console error. Do not attach private vault data or notes containing personal information. Pull requests should include regression tests for behavior changes and preserve the zero-comment requirement in shipped main.js and styles.css.