{"id":51438307,"url":"https://github.com/andrewmcodes/obsidian-objects","last_synced_at":"2026-07-05T09:01:22.228Z","repository":{"id":365591345,"uuid":"1272794477","full_name":"andrewmcodes/obsidian-objects","owner":"andrewmcodes","description":"Schema-driven, object-based note-taking for Obsidian using native Markdown, Properties, and Bases.","archived":false,"fork":false,"pushed_at":"2026-06-27T03:25:07.000Z","size":1905,"stargazers_count":3,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-27T04:19:29.344Z","etag":null,"topics":["markdown","note-taking","obsidian","obsidian-md","obsidian-plugin","pkm","typescript"],"latest_commit_sha":null,"homepage":"https://andrewmcodes.github.io/obsidian-objects/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrewmcodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":["andrewmcodes"]}},"created_at":"2026-06-18T00:10:05.000Z","updated_at":"2026-06-27T03:11:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/andrewmcodes/obsidian-objects","commit_stats":null,"previous_names":["andrewmcodes/obsidian-objects"],"tags_count":0,"template":false,"template_full_name":"obsidianmd/obsidian-sample-plugin","purl":"pkg:github/andrewmcodes/obsidian-objects","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmcodes%2Fobsidian-objects","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmcodes%2Fobsidian-objects/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmcodes%2Fobsidian-objects/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmcodes%2Fobsidian-objects/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewmcodes","download_url":"https://codeload.github.com/andrewmcodes/obsidian-objects/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewmcodes%2Fobsidian-objects/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35148606,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["markdown","note-taking","obsidian","obsidian-md","obsidian-plugin","pkm","typescript"],"created_at":"2026-07-05T09:01:20.802Z","updated_at":"2026-07-05T09:01:22.221Z","avatar_url":"https://github.com/andrewmcodes.png","language":"TypeScript","funding_links":["https://github.com/sponsors/andrewmcodes"],"categories":[],"sub_categories":[],"readme":"# Obsidian Objects\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/social-image.png\" alt=\"Obsidian Objects\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/andrewmcodes/obsidian-objects/actions/workflows/lint.yml\"\u003e\u003cimg src=\"https://github.com/andrewmcodes/obsidian-objects/actions/workflows/lint.yml/badge.svg\" alt=\"CI\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/andrewmcodes/obsidian-objects/releases/latest\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/andrewmcodes/obsidian-objects?sort=semver\u0026display_name=tag\" alt=\"Latest release\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/minAppVersion-1.13.0-7c3aed\" alt=\"Minimum Obsidian version 1.13.0\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License: MIT\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nSchema-driven, object-based note-taking for [Obsidian](https://obsidian.md), built on native Markdown, Properties, and Bases.\n\nDefine 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.\n\n📖 **[Documentation site →](https://andrewmcodes.github.io/obsidian-objects/)**\n\n## Installation\n\nThis plugin requires Obsidian v1.13.0 or later to work. Untested on other versions.\n\n### Install via BRAT\n\n1. Install the [BRAT plugin](obsidian://show-plugin?id=obsidian42-brat) under Community Plugins\n2. Open BRAT settings and click \"Add beta plugin\"\n3. Enter the URL of this repository: `https://github.com/andrewmcodes/obsidian-objects`\n4. Under \"Select a version\", choose the Latest version\n5. Click \"Add plugin\"\n\n### Install locally\n\nClone the repo to `.obsidian/plugins` in your Obsidian vault.\n\n## Features\n\n- **Schema-driven objects:** each type defines its folder, filename template, properties, body templates, and validation rules.\n- **Creation modal:** pick a type, fill in the fields (with autocomplete and validation), choose a template, and get a note with valid Properties.\n- **Dynamic commands:** every schema gets its own `Create \u003cSchema\u003e` command, plus a generic **Create object** picker.\n- **Promote selection:** turn highlighted text into an object and replace it with a `[[wikilink]]`.\n- **Native Bases:** the **Generate Bases** command writes `.base` files with table and card views that filter on the `type` property. Obsidian renders them, so there's no custom view code.\n- **Template files:** opt in to generate reusable `.tmpl.md` template 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.\n- **Dashboard:** a sidebar view lists every object grouped by type for quick browsing.\n- **Local-first:** no external services and no proprietary storage. The required `type` and `created_on` properties are filled in for you.\n\n## Property types\n\n`text`, `textarea`, `number`, `date`, `datetime`, `checkbox`, `select`, `multiselect`, `link`, `multilink` (wikilink relationships), `email`, `url`.\n\n## Beyond the basics\n\n- **Relationships:** `link` and `multilink` properties store `[[wikilinks]]`, and the note autocomplete can be scoped to one object type (so a meeting's attendees only suggest people).\n- **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 `\u003c% … %\u003e` commands in new notes.\n- **Multiple templates:** a schema can define several named body templates to pick from when you create an object.\n- **Variants:** a schema can define named presets that override property defaults (and optionally the body), chosen from a dropdown when you create an object.\n- **Default values:** any property can carry a default that pre-fills the creation modal (and can be overridden there).\n- **Validation rules:** properties support regex patterns, number min/max, and email/URL format checks, enforced as you create.\n- **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.\n- **Schema sharing:** export your schemas to JSON and import them into another vault.\n\n## Getting started\n\n1. Install and enable the plugin in **Settings → Community plugins**.\n2. On first run, default schemas (Person, Project, Meeting, Book, Article, Idea) are created. Manage them in the **Objects** settings tab.\n3. Run **Create object** (or a `Create \u003cSchema\u003e` command) from the command palette.\n\n## Commands\n\n- **Create object:** open the object type picker, then the creation modal.\n- **Create _\u0026lt;Schema\u0026gt;_:** create an object of a specific type directly.\n- **Promote selection to object:** convert selected text into a new object.\n- **Generate Bases:** write a `.base` file per schema (table + card views).\n- **Generate template:** pick an object type and write its template file(s) (requires **Create templates** enabled).\n- **Open dashboard:** open the objects dashboard in the sidebar.\n- **Export schemas to clipboard** / **Import schemas:** share schemas as JSON.\n- **Open settings:** open the Objects settings tab.\n\n## Settings\n\nThe **Objects** settings tab lets you:\n\n- Configure the default folder, Bases folder, and whether notes open on create.\n- Enable **Create templates** to generate template files for object types, then set the templates folder and a naming convention (e.g. `{{id}}.tmpl`).\n- Edit the automatic properties added to every new note (seeded with `created_on: {{date}}`) — change them, add your own, or remove them.\n- Add, edit, delete, and reorder schemas.\n- Edit each schema's id, label, folder, filename template, body template, and properties (including options for `select`/`multiselect`).\n\n## Data model\n\nEvery 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:\n\n```markdown\n---\ntype: project\ncreated_on: 2026-06-17\nstatus: active\n---\n\n# Vite Migration\n\n## Notes\n```\n\nThe `type` property is the single source of truth for classification. The plugin never infers type from folders, tags, or file location.\n\n## Development\n\nThis project uses [`mise`](https://mise.jdx.dev/) for tasks and **pnpm via Corepack** for dependencies.\n\n```bash\nmise run install   # install dependencies (corepack pnpm install)\nmise run dev       # esbuild watch build\nmise run build     # type-check + production bundle\nmise run check     # lint + format-check + build + test\nmise run hooks     # install the commit-msg git hook\n```\n\nRequires **Obsidian 1.13+**. To install into a local vault, copy `main.js`, `manifest.json`, and `styles.css` into `\u003cVault\u003e/.obsidian/plugins/obsidian-objects/`. The convenience task below builds and copies them for you (quote the path; a leading `~` is expanded):\n\n```bash\nOBSIDIAN_VAULT_PATH=\"/Users/andrew.mason/git/andrewmcodes/digital-brain\" mise run install-plugin\n```\n\nThen, 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.\n\n### Testing locally\n\n- **Unit tests** (pure logic) run with [Vitest](https://vitest.dev/):\n\n  ```bash\n  mise run test          # one-off\n  pnpm test:watch        # watch mode\n  ```\n\n- **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](https://github.com/pjeby/hot-reload) plugin and point the build at your vault so it rebuilds and reloads on every save:\n\n  ```bash\n  OBSIDIAN_VAULT_PATH=\"/path/to/your/vault\" mise run dev\n  ```\n\n  Otherwise run `mise run install-plugin` and reload Obsidian after each build.\n\nFor an overview, see the [documentation site](https://andrewmcodes.github.io/obsidian-objects/). For the full contributor guide and conventions, see [`AGENTS.md`](AGENTS.md) and [`docs/conventions/CONVENTIONS.md`](docs/conventions/CONVENTIONS.md).\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewmcodes%2Fobsidian-objects","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewmcodes%2Fobsidian-objects","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewmcodes%2Fobsidian-objects/lists"}