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. |
||
|---|---|---|
| docs | ||
| screenshots | ||
| scripts | ||
| src | ||
| tests | ||
| .env.local.example | ||
| .gitignore | ||
| banner.png | ||
| CHANGELOG.md | ||
| esbuild.config.mjs | ||
| eslint.config.mjs | ||
| LICENSE | ||
| manifest.json | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| screenshot.png | ||
| styles.css | ||
| tsconfig.json | ||
| versions.json | ||
| vitest.config.ts | ||
Skeletal
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:
- Template browser with category filters and search
- Customization controls with Raw / Rendered preview
- A note containing a managed progress bar and checklist
Installation
Manual install (from a release)
- Download
main.js,manifest.json, andstyles.cssfrom the latest GitHub Release. - Create this folder in your vault:
Vault/.obsidian/plugins/skeletal/ - Copy the three files into that folder.
- 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
- Run the command Insert Markdown Template (or use the ribbon icon).
- Filter by category, Favorites, or Recent; type to search.
- Select a template and adjust controls (counts, heading level, links, placeholder style, Markdown flavor, and more).
- Switch between Raw Markdown and Rendered preview.
- 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, optionallabel/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%and0/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 Obsidian’s 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 Obsidian’s 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)
- Copy
.env.local.exampleto.env.local. - Set
OBSIDIAN_VAULT_PATHto your vault root folder (not the.obsidianfolder), for example:OBSIDIAN_VAULT_PATH=C:\Users\YourName\Documents\MyVault - 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
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.