Objects
unlistedby Andrew Mason
Schema-driven, object-based note-taking using native Markdown, Properties, and Bases.
Obsidian Objects
Schema-driven, object-based note-taking for Obsidian, built on native Markdown, Properties, and Bases.
Define object types like Person, Project, or Meeting, create structured notes through a modal, and browse them with native Bases. Everything lives in plain Markdown with Properties, so your notes stay fully readable even if you disable or uninstall the plugin.
Installation
This plugin requires Obsidian v1.13.0 or later to work. Untested on other versions.
Install via BRAT
- Install the BRAT plugin under Community Plugins
- Open BRAT settings and click "Add beta plugin"
- Enter the URL of this repository:
https://github.com/andrewmcodes/obsidian-objects - Under "Select a version", choose the Latest version
- Click "Add plugin"
Install locally
Clone the repo to .obsidian/plugins in your Obsidian vault.
Features
- Schema-driven objects: each type defines its folder, filename template, properties, body templates, and validation rules.
- Creation modal: pick a type, fill in the fields (with autocomplete and validation), choose a template, and get a note with valid Properties.
- Dynamic commands: every schema gets its own
Create <Schema>command, plus a generic Create object picker. - Promote selection: turn highlighted text into an object and replace it with a
[[wikilink]]. - Native Bases: the Generate Bases command writes
.basefiles with table and card views that filter on thetypeproperty. Obsidian renders them, so there's no custom view code. - Template files: opt in to generate reusable
.tmpl.mdtemplate files for your object types ā automatically when a new type is created, and on demand via the Generate template command. Each named body template gets its own variant file. - Dashboard: a sidebar view lists every object grouped by type for quick browsing.
- Local-first: no external services and no proprietary storage. The required
typeandcreated_onproperties are filled in for you.
Property types
text, textarea, number, date, datetime, checkbox, select, multiselect, link, multilink (wikilink relationships), email, url.
Beyond the basics
- Relationships:
linkandmultilinkproperties store[[wikilinks]], and the note autocomplete can be scoped to one object type (so a meeting's attendees only suggest people). - Template tokens: filename and body templates support
{{title}},{{type}},{{date}}, moment-formatted{{date:FORMAT}}/{{time:FORMAT}}(e.g.{{date:YYYYMMDD}}, ISO week{{date:YYYY-[W]WW}}), and{{property}}values such as{{author}}. With the Templater plugin installed, an opt-in setting also evaluates<% ⦠%>commands in new notes. - Multiple templates: a schema can define several named body templates to pick from when you create an object.
- Variants: a schema can define named presets that override property defaults (and optionally the body), chosen from a dropdown when you create an object.
- Default values: any property can carry a default that pre-fills the creation modal (and can be overridden there).
- Validation rules: properties support regex patterns, number min/max, and email/URL format checks, enforced as you create.
- Object actions: a schema can attach custom commands to its notes, such as setting a property, appending a template section, or creating a linked object.
- Schema sharing: export your schemas to JSON and import them into another vault.
Getting started
- Install and enable the plugin in Settings ā Community plugins.
- On first run, default schemas (Person, Project, Meeting, Book, Article, Idea) are created. Manage them in the Objects settings tab.
- Run Create object (or a
Create <Schema>command) from the command palette.
Commands
- Create object: open the object type picker, then the creation modal.
- Create <Schema>: create an object of a specific type directly.
- Promote selection to object: convert selected text into a new object.
- Generate Bases: write a
.basefile per schema (table + card views). - Generate template: pick an object type and write its template file(s) (requires Create templates enabled).
- Open dashboard: open the objects dashboard in the sidebar.
- Export schemas to clipboard / Import schemas: share schemas as JSON.
- Open settings: open the Objects settings tab.
Settings
The Objects settings tab lets you:
- Configure the default folder, Bases folder, and whether notes open on create.
- Enable Create templates to generate template files for object types, then set the templates folder and a naming convention (e.g.
{{id}}.tmpl). - Edit the automatic properties added to every new note (seeded with
created_on: {{date}}) ā change them, add your own, or remove them. - Add, edit, delete, and reorder schemas.
- Edit each schema's id, label, folder, filename template, body template, and properties (including options for
select/multiselect). - Toggle individual automatic properties off per schema, so notes of that type are created without them.
Data model
Every object note is a standard Markdown file. The type Property is always present, followed by the automatic properties (created_on by default, configurable in settings) and then the schema's own properties:
---
type: project
created_on: 2026-06-17
status: active
---
# Vite Migration
## Notes
The type property is the single source of truth for classification. The plugin never infers type from folders, tags, or file location.
Development
This project uses mise for tasks and pnpm via Corepack for dependencies.
mise run install # install dependencies (corepack pnpm install)
mise run dev # esbuild watch build
mise run build # type-check + production bundle
mise run check # lint + format-check + build + test
mise run hooks # install the commit-msg git hook
Requires Obsidian 1.13+. To install into a local vault, copy main.js, manifest.json, and styles.css into <Vault>/.obsidian/plugins/obsidian-objects/. The convenience task below builds and copies them for you (quote the path; a leading ~ is expanded):
OBSIDIAN_VAULT_PATH="/Users/andrew.mason/git/andrewmcodes/digital-brain" mise run install-plugin
Then, in Obsidian, enable Settings ā Community plugins (turn off Restricted mode if asked), reload the app, and turn on Objects under Installed plugins. A manually-installed plugin shows up there, not in the Browse catalog, which only lists submitted community plugins.
Testing locally
-
Unit tests (pure logic) run with Vitest:
mise run test # one-off pnpm test:watch # watch mode -
Manual testing in a real vault. The UI (modals, dashboard, commands, generated Bases) gets exercised by hand in Obsidian. For a live loop, install the Hot Reload plugin and point the build at your vault so it rebuilds and reloads on every save:
OBSIDIAN_VAULT_PATH="/path/to/your/vault" mise run devOtherwise run
mise run install-pluginand reload Obsidian after each build.
For an overview, see the documentation site. For the full contributor guide and conventions, see AGENTS.md and docs/conventions/CONVENTIONS.md.
License
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.