Shared base rendering engine for Obsidian kind-manager skills. Provides the BaseRenderer class, formula parser, and view composition utilities used by all skill render_*_base.py scripts. Supports: brokerage_activity, exercise, people, portfolio, zettel, key_dates, cv_entry, planetary_tasks.
A shared library that provides the canonical base rendering engine for all
Obsidian kind-manager skills. This skill is a dependency for skills that
render .base YAML files for Obsidian's custom view system.
BaseRenderer class — the core rendering engine| Base name | Skill | Kind field |
|---|---|---|
brokerage_activity | obsidian-brokerage-activity-manager | brokerage_activity_kind |
exercise | obsidian-exercise-kind-manager | exercise_kind |
people | obsidian-people-kind-manager |
person_kind |
portfolio_holdings | obsidian-portfolio-holdings-manager | portfolio_holding_kind |
zettel | obsidian-zettel-kind-manager | zettel_kind |
key_dates | obsidian-key-dates-base-manager | key_date_kind |
cv_entry | obsidian-cv-entry-manager | cv_entry_kind |
planetary_tasks | obsidian-planetary-tasks-manager | planetary_task_kind |
from base_renderer import BaseRenderer
renderer = BaseRenderer(
base_name="people",
kind_field="person_kind",
folder_glob="People/**/*.md",
formulas={...},
properties={...},
views=[...],
)
# Render to a .base file
renderer.render(output_path="/vault/People.base")
# Validate a rendered base
issues = renderer.validate()
The formula parser handles Dataview-style expressions used in Base files:
from formula_parser import FormulaParser
parser = FormulaParser()
result = parser.parse('if(primary_muscle, primary_muscle.toString().replace("[[", "").replace("]]", ""), "")')
Build views from multiple note collections:
from base_renderer import compose_views
views = compose_views(
[
("exercise", exercise_views),
("brokerage", brokerage_views),
],
shared_properties=["file.name", "file.path", "modified"],
)
Kind-manager skills that use this engine document it in their SKILL.md:
## Base Rendering
This skill uses `obsidian-base-engine` for rendering.
Base files are generated by:
uvx --from python --with pydantic --with pyyaml python \
.skills/obsidian-base-engine/scripts/base_renderer.py \
--base people --output People.base
BASE_REGISTRY in base_renderer.pybase_renderer.py --base <name> --output <path>tests/test_base_engine.pypydantic >= 2.0pyyamlreferences/base-engine-api.md — detailed API documentationreferences/base-types.md — all supported base types and their schemas