No description
Find a file
Ashly 51d2acf034 Add ESLint setup and code quality improvements
Configure ESLint with obsidianmd plugin for linting TypeScript code. Replace deprecated builtin-modules with Node's built-in module:module. Refactor ProgressAutoUpdater to use dependency injection for settings. Update lint command and add lint:fix. Fix various code quality issues including regex escapes, type assertions, and deprecated API calls. Add project screenshots.
2026-07-17 03:01:27 -07:00
docs Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
screenshots Add ESLint setup and code quality improvements 2026-07-17 03:01:27 -07:00
scripts Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
src Add ESLint setup and code quality improvements 2026-07-17 03:01:27 -07:00
tests Initial commit: Skeletal Markdown template plugin 2026-07-17 00:59:36 -07:00
.env.local.example Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
.gitignore Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
banner.png Initial commit: Skeletal Markdown template plugin 2026-07-17 00:59:36 -07:00
CHANGELOG.md Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
esbuild.config.mjs Add ESLint setup and code quality improvements 2026-07-17 03:01:27 -07:00
eslint.config.mjs Add ESLint setup and code quality improvements 2026-07-17 03:01:27 -07:00
LICENSE Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
manifest.json Add ESLint setup and code quality improvements 2026-07-17 03:01:27 -07:00
package-lock.json Add ESLint setup and code quality improvements 2026-07-17 03:01:27 -07:00
package.json Add ESLint setup and code quality improvements 2026-07-17 03:01:27 -07:00
README.md Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
screenshot.png Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
styles.css Add local deploy script, docs, and UI tweaks 2026-07-17 02:18:18 -07:00
tsconfig.json Initial commit: Skeletal Markdown template plugin 2026-07-17 00:59:36 -07:00
versions.json Initial commit: Skeletal Markdown template plugin 2026-07-17 00:59:36 -07:00
vitest.config.ts Initial commit: Skeletal Markdown template plugin 2026-07-17 00:59:36 -07:00

Skeletal

Skeletal banner

Markdown structures for every kind of content.

Skeletal is an Obsidian community plugin that acts as a searchable Markdown pattern library. Browse template categories, customize structure with form controls, preview the generated Markdown, and insert it into your notes. It also includes managed progress bars that recalculate from task checkboxes without rewriting the rest of the note.

Features

  • 47 configurable templates across 12 categories
  • Searchable template browser with category filters, Favorites, and Recent
  • Data-driven templates — add new ones without building a new UI
  • Raw Markdown and Rendered previews
  • Insert at Cursor (replaces the current selection when present), Copy Markdown, and Create New Note
  • Managed task progress bars with manual and optional automatic updates
  • Settings for Markdown flavor, placeholders, progress defaults, and remembered template values

Screenshots

Add screenshots of the template browser, preview pane, and progress bars here when publishing the GitHub repository or community-plugin listing. Suggested captures:

  1. Template browser with category filters and search
  2. Customization controls with Raw / Rendered preview
  3. A note containing a managed progress bar and checklist

Installation

Manual install (from a release)

  1. Download main.js, manifest.json, and styles.css from the latest GitHub Release.
  2. Create this folder in your vault: Vault/.obsidian/plugins/skeletal/
  3. Copy the three files into that folder.
  4. Enable Skeletal in Obsidian Settings → Community plugins.

From source

npm install
npm run build

Then copy main.js, manifest.json, and styles.css into Vault/.obsidian/plugins/skeletal/, or use local deploy (below).

Usage

  1. Run the command Insert Markdown Template (or use the ribbon icon).
  2. Filter by category, Favorites, or Recent; type to search.
  3. Select a template and adjust controls (counts, heading level, links, placeholder style, Markdown flavor, and more).
  4. Switch between Raw Markdown and Rendered preview.
  5. Choose Insert at Cursor, Copy Markdown, or Create New Note.

Keyboard: search focuses when the modal opens; Enter selects the first search result; Escape closes the modal.

Template categories

Category Examples
Lists Bulleted, numbered, nested, ranked, pros/cons, definition lists
Tables Basic, comparison, feature matrix, directory, status tracker
Documents README, FAQ, changelog, installation guide, tutorial outline
Navigation Table of contents, note index, link directory
Links Reference lists, bookmark collections
Tasks Checklists, plans, status boards, progress groups and dashboards
Media Image with caption, linked image, gallery
Code Code + explanation, command reference, file tree
GitHub Badges, repository links, contributors
Obsidian Callouts, embeds, internal-link index
Creative Timeline, character sheet, reading list
Data Glossary, inventory, key/value sheet

Managed progress bars

Progress bars are functional, not static examples. Generated blocks look like:

<!-- markdown-template-progress:start {"scope":"heading","width":10,"filledChar":"█","emptyChar":"░","showPercentage":true,"showCount":true,"countNested":true,"cancelledMode":"ignore","label":"Progress"} -->
**Progress:** `██████░░░░` 60% — 3/5 tasks
<!-- markdown-template-progress:end -->

- [x] Define requirements
- [x] Create wireframes
- [x] Choose technology
- [ ] Build interface
- [ ] Test plugin

Marker format

  • Start: <!-- markdown-template-progress:start {json} -->
  • End: <!-- markdown-template-progress:end -->
  • Metadata stores enough configuration to reproduce formatting on update (scope, width, characters, percentage/count flags, nested counting, cancelled-task mode, optional label / kind / phaseId / headingLevel).
  • Invalid JSON or a missing end marker is skipped safely; that block is not modified.

Calculation rules

  • Counts - [ ], - [x], - [X] (also * / + bullets).
  • Ignores task-looking lines inside fenced code blocks.
  • scope: "heading" counts tasks after the block until the next heading of the same or higher level.
  • scope: "note" counts tasks after the block through the rest of the note.
  • Nested tasks follow countNested.
  • Zero tasks → 0% and 0/0 (no division by zero).
  • Only the managed marker region is rewritten; other content is preserved.
  • Multiple independent blocks in one note are supported.

Automatic updates

Setting: Automatically update managed progress bars when tasks change (default off).

When enabled, the plugin listens for vault/editor changes, debounces updates, and only processes Markdown files that contain the managed start marker. Writes are guarded to avoid recursive update loops.

Commands

Command Action
Insert Markdown Template Open the template browser
Insert Task Group with Progress Open the progress task-group template
Insert Project Progress Dashboard Open the project progress dashboard template
Update Progress Bars in Current Note Recalculate all managed progress blocks in the active note
Update Progress Bar Under Current Heading Recalculate the managed block for the current heading section

Settings

Open Settings → Skeletal to configure:

  • Default Markdown mode (Obsidian vs Standard / GitHub)
  • Default heading level
  • Placeholder style (blank, generic, or descriptive)
  • Default progress-bar width, filled/empty characters
  • Show percentage / completed-total by default
  • Count nested tasks by default
  • Automatic progress updates and debounce delay
  • Remember values used for each template

Favorites, recent templates, and remembered control values are stored with plugin data via Obsidians loadData / saveData.

Known limitations

  • Progress auto-update is per-file when markers are present; there is no vault-wide bulk update in v1.
  • Unmanaged progress bars (plain text without markers) are never modified.
  • Heading scope relies on ATX # headings.
  • Cancelled tasks (- [-]) support is configurable; default is to ignore them.
  • Rendered preview depends on Obsidians Markdown renderer and may differ slightly from Reading view plugins/themes.
  • Screenshots for the community listing should be added to this README or the release notes when available.

Development

npm install
npm run dev           # watch build → main.js
npm run build         # typecheck + production bundle
npm test              # unit tests
npm run deploy:local  # build + copy into your vault's plugins/skeletal folder

Local deploy (Windows-friendly)

  1. Copy .env.local.example to .env.local.
  2. Set OBSIDIAN_VAULT_PATH to your vault root folder (not the .obsidian folder), for example: OBSIDIAN_VAULT_PATH=C:\Users\YourName\Documents\MyVault
  3. Run npm run deploy:local.

The script runs a production build, then copies main.js, manifest.json, and styles.css into:

{OBSIDIAN_VAULT_PATH}\.obsidian\plugins\skeletal\

It creates that directory if needed and overwrites existing plugin files. If the build fails, deploy stops and does not copy anything.

.env.local is gitignored so your vault path stays private. Use .env.local.example as the shared template.

After deploying, reload the plugin in Obsidian (Community plugins → turn Skeletal off/on, or restart Obsidian).

Adding a template

See docs/adding-templates.md.

Privacy

Skeletal reads and writes only within your local vault through Obsidian APIs. Template generation, progress parsing, and previews run on-device. No analytics or network calls are made by the plugin itself (external badge/image URLs in GitHub templates are Markdown links only).

License

MIT — see LICENSE.