Skill 详情
obsidian
Dedicated Obsidian plugin-development guidance.
使用前先检查
自动化审核只检查相关性,不代表安全审查或推荐。使用前请阅读来源中的说明。
SKILL.md
这段内容是审核时保存的快照。外部来源才是完整且最新的版本。
--- name: obsidian description: Comprehensive guidelines for Obsidian.md plugin development including ESLint rules from eslint-plugin-obsidianmd v0.4.1, TypeScript best practices, memory management, API usage (requestUrl vs fetch), UI/UX standards, popout window compatibility, community.obsidian.md submission process, and Scorecard optimization. Use when working with Obsidian plugins, main.ts files, manifest.json, Plugin class, MarkdownView, TFile, vault operations, or any Obsidian API development. license: MIT metadata: version: 1.10.1 --- # Obsidian Plugin Development Guidelines Follow these comprehensive guidelines derived from the official Obsidian ESLint plugin rules, submission requirements, and best practices. ## Getting Started ### Quick Start Tool For new plugin projects, an interactive boilerplate generator is available: - **Script**: `tools/create-plugin.js` in the skill repository - **Command**: Invoke `create-plugin` using your agent's method (`/create-plugin`, `$create-plugin`, or `@create-plugin`) - Generates minimal, best-practice boilerplate with no sample code - Detects existing projects and only adds missing files Recommend the boilerplate generator when users ask how to create a new plugin, want to start a new project, or need help setting up the basic structure. --- ## Rules Reference (eslint-plugin-obsidianmd v0.4.1) ### Submission & Naming | # | Rule | ✅ Do | ❌ Don't | |---|------|--------|----------| | 1 | Plugin ID | Omit "obsidian"; don't end with "plugin" | Include "obsidian" or end with "plugin" | | 2 | Plugin name | Omit "Obsidian"; don't end with "Plugin" | Include "Obsidian" or end with "Plugin" | | 3 | Plugin name | Don't start with "Obsi" or end with "dian" | Start with "Obsi" or end with "dian" | | 4 | Description | Omit "Obsidian", "This plugin", etc. | Use "Obsidian" or "This plugin" | | 5 | Description | End with `.?!)` punctuation | Leave description without terminal punctuation | ### Memory & Lifecycle | # | Rule | ✅ Do | ❌ Don't | |---|------|--------|----------| | 6 | Event cleanup | Use `registerEvent()` for automatic cleanup | Register events without cleanup | | 6a | DOM events | Use `registerDomEvent()` on the plugin or owning component | Pair `addEventListener` with manual `removeEventListener` cleanup | | 7 | View references | Return views/components directly | Store view references in plugin properties or pass plugin as component to `MarkdownRenderer` | | 8 | Leaf detachment | Let Obsidian handle leaf cleanup | Call `detachLeavesOfType()` in `onunload` | ### Type Safety | # | Rule | ✅ Do | ❌ Don't | |---|------|--------|----------| | 9 | TFile/TFolder | Use `instanceof` for type checking | Cast to TFile/TFolder; use `any`; use `var` | | 10 | DOM instanceof | Use `.instanceOf(T)` for DOM Nodes/UIEvents | Use `instanceof` for cross-window DOM checks | ### UI/UX | # | Rule | ✅ Do | ❌ Don't | |---|------|--------|----------| | 11 | UI text | Sentence case — "Advanced settings" | Title Case — "Advanced Settings" | | 12 | JSON locale | Sentence case in JSON locale files (`recommendedWithLocalesEn`) | Title case in locale JSON | | 13 | TS/JS locale | Sentence case in TS/JS locale modules | Title case in locale modules | > **Note (v0.4.0):** `ui/sentence-case` is now enabled (`warn`) and enforced on inline UI strings — it was disabled in v0.3.0. Use the `recommendedWithLocalesEn` config to also check English locale files (rules 12–13). | 14 | Command names | Omit "command" in command names/IDs | Include "command" in names/IDs | | 15 | Command IDs | Omit plugin ID/name from command IDs/names | Duplicate plugin ID in command IDs | | 16 | Hotkeys | No default hotkeys | Set default hotkeys | | 17 | Settings headings | Use `.setHeading()` | Create manual HTML headings; use "General", "settings", or plugin name in headings | ### Declarative Settings (1.13.0+) All four `settings-tab` rules ship as `warn` in `recommended`. Rules 17a/17c/17d read `minAppVersion` from `manifest.js在 GitHub 阅读完整来源 (打开外部页面)