Agent skill

Obsidian Plugin Development Guidelines

by gapmiss in gapmiss/obsidian-plugin-skill

Rules and references for building Obsidian plugins: ESLint rules, TypeScript practices, memory cleanup, API choices, UI standards and the community submission process.

MITAuto-check passedDevelopment

Install Obsidian Plugin Development Guidelines

skills CLI
$ npx skills add gapmiss/obsidian-plugin-skill --skill obsidian -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install gapmiss/obsidian-plugin-skill obsidian --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/gapmiss/obsidian-plugin-skill.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/obsidian .claude/skills/obsidian && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
obsidian
GitHub stars
190
Token cost
~4.5k tokens
SKILL.md length
1,808 words
Files
11
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Rules and references for building Obsidian plugins: ESLint rules, TypeScript practices, memory cleanup, API choices, UI standards and the community submission process.

  • Works in 7 steps: Run ESLint — npx eslint . using… → Validate manifest — Confirm id, name,… → Check LICENSE — Copyright holder must… → …
  • Writing or reviewing an Obsidian plugin's main.ts and manifest.json
  • SKILL.md covers Getting Started, Rules Reference…, Detailed Guidelines and Plugin Submission Validation…, plus 2 more sections
  • Calls npx

What it does

The skill collects the rules from eslint-plugin-obsidianmd v0.4.2 into tables of what to do and what to avoid, grouped by submission and naming, memory and lifecycle, type safety and UI. Examples: a plugin ID or name should not contain Obsidian or end in plugin, descriptions end with punctuation, events are registered through `registerEvent()` and `registerDomEvent()` so they clean up automatically, TFile and TFolder are checked with `instanceof` rather than cast, and DOM nodes shared across popout windows use `.instanceOf(T)`.

Ten reference files go deeper on accessibility, code quality, the community scanner, CSS styling, ESLint setup, file operations, memory management, submission, type safety and UI and UX. For new projects the skill recommends an interactive boilerplate generator, `tools/create-plugin.js`, which writes minimal best-practice scaffolding with no sample code and only adds missing files to an existing project. Other topics include requestUrl versus fetch, popout window compatibility, the community.obsidian.md submission process and Scorecard optimization.

When your agent uses it

  • Writing or reviewing an Obsidian plugin's main.ts and manifest.json
  • Fixing eslint-plugin-obsidianmd errors
  • Preparing a plugin for the community submission process
  • Scaffolding a new Obsidian plugin project

Example prompts

  • “Create a new Obsidian plugin project with the boilerplate generator.”
  • “Review my plugin against the Obsidian ESLint rules and fix the event cleanup problems.”
  • “Replace fetch with requestUrl in my plugin and check popout window compatibility.”
  • “Get my plugin ready for submission to the community plugin list.”

Requirements

  • An Obsidian plugin project written in TypeScript

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. Run ESLint — npx eslint . using eslint-plugin-obsidianmd; fix all errors AND warnings (warnings affect your Scorecard)
  2. Validate manifest — Confirm id, name, description, version, and minAppVersion meet naming and formatting rules (rules 1–5)
  3. Check LICENSE — Copyright holder must not be "Dynalist Inc." and the year must be current
  4. Test on mobile — Verify no regex lookbehind, no fetch(), and touch targets ≥ 44×44px (skip only if plugin is declared desktop-only)
  5. Keyboard accessibility audit — Tab through all interactive elements; confirm focus indicators and ARIA labels are present
  6. Create GitHub Release — Tag must match manifest.json version; attach main.js, manifest.json, and styles.css (optional)
  7. Submit via community.obsidian.md — Sign in, link GitHub account, navigate to Plugins → New plugin, enter repository URL, review Developer…

What it can do on your machine

Read from SKILL.md and the folder at commit ff97cb0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Obsidian Plugin Development Guidelines loads about 4.5k tokens when it runs. Until then it costs about 120 tokens; SKILL.md has 1,808 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~120
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from gapmiss/obsidian-plugin-skill at commit ff97cb0, republished under its MIT licence (© gapmiss). 1,808 words, ~4,542 tokens.

Download SKILL.mdSave it as .claude/skills/obsidian/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.
name
obsidian
description
Comprehensive guidelines for Obsidian.md plugin development including ESLint rules from eslint-plugin-obsidianmd v0.4.2, 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.11.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.2)

Submission & Naming
#Rule✅ Do❌ Don't
1Plugin IDOmit "obsidian"; don't end with "plugin"Include "obsidian" or end with "plugin"
2Plugin nameOmit "Obsidian"; don't end with "Plugin"Include "Obsidian" or end with "Plugin"
3Plugin nameDon't start with "Obsi" or end with "dian"Start with "Obsi" or end with "dian"
4DescriptionOmit "Obsidian", "This plugin", etc.Use "Obsidian" or "This plugin"
5DescriptionEnd with .?!) punctuationLeave description without terminal punctuation
Memory & Lifecycle
#Rule✅ Do❌ Don't
6Event cleanupUse registerEvent() for automatic cleanupRegister events without cleanup
6aDOM eventsUse registerDomEvent() on the plugin or owning componentPair addEventListener with manual removeEventListener cleanup
7View referencesReturn views/components directlyStore view references in plugin properties or pass plugin as component to MarkdownRenderer
8Leaf detachmentLet Obsidian handle leaf cleanupCall detachLeavesOfType() in onunload
Type Safety
#Rule✅ Do❌ Don't
9TFile/TFolderUse instanceof for type checkingCast to TFile/TFolder; use any; use var
10DOM instanceofUse .instanceOf(T) for DOM Nodes/UIEventsUse instanceof for cross-window DOM checks
UI/UX
#Rule✅ Do❌ Don't
11UI textSentence case — "Advanced settings"; use acronyms/brands options for proper namesTitle Case — "Advanced Settings"
12JSON localeSentence case in JSON locale files (recommendedWithLocalesEn)Title case in locale JSON
13TS/JS localeSentence case in TS/JS locale modulesTitle 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.json; 17b is not version-gated.

#Rule✅ Do❌ Don't
17asettings-tab/require-displayKeep display() when minAppVersion < 1.13.0Ship declarative-only settings that render nothing on older Obsidian
17bsettings-tab/prefer-setting-definitionsImplement getSettingDefinitions() on every PluginSettingTabRely on display() alone — settings won't appear in 1.13+ global search
17csettings-tab/prefer-update-over-displayCall this.update() to re-render declarative settingsCall this.display() — it's bypassed when definitions are non-empty
17dsettings-tab/no-deprecated-displayDelete display() once minAppVersion >= 1.13.0 and definitions existLeave a dead display() behind (auto-fixable)
—Settings dataKeep all persisted data inside plugin.settingsStore sibling keys via saveData() — auto-persist clobbers them

Detection caveat: these rules match a bare extends PluginSettingTab only. extends obsidian.PluginSettingTab is out of scope and won't be flagged — but the underlying guidance still applies.

API Best Practices
#Rule✅ Do❌ Don't
18Active file editsUse Editor APIUse Vault.modify() for active file edits
19Background file modsUse Vault.process()Use Vault.modify() for background modifications
20File deletionUse FileManager.trashFile()Use Vault.trash() or Vault.delete() directly
21File lookupUse Vault.getAbstractFileByPath()Iterate all files with Vault.getFiles().find()
22User pathsUse normalizePath()Hardcode .obsidian path; use raw user paths
23OS detectionUse Platform APIUse navigator.platform/userAgent
24Network requestsUse requestUrl()Use fetch()
24aResponse typingParse response.text and validate/cast once at the API boundaryPass response.json (typed any) into plugin code
25LoggingMinimize console logging; none in onload/onunload in productionUse console.log in onload/onunload
26Input suggestUse built-in AbstractInputSuggestCopy Liam's TextInputSuggest implementation
27API compatibilityCheck minAppVersion for API availability (e.g., getSettingDefinitions() requires 1.13.0)Use APIs not available in declared minAppVersion
28Language detectionUse Obsidian's getLanguage()Use localStorage.getItem('language') or i18next-browser-languagedetector
Popout Window Compatibility
#Rule✅ Do❌ Don't
29Document/WindowUse activeDocument and activeWindowUse global document and window
29aGetter captureCapture activeDocument in a variable when the same document is needed laterCall activeDocument at setup and again at cleanup — it follows focus and may return different documents
30TimersUse window.setTimeout(), window.setInterval(), window.requestAnimationFrame(), etc. (exception to rule 29)Use bare setTimeout()/setInterval(), or activeWindow.setTimeout() — prefer-window-timers flags both
31Main workspace UIUse this.app.workspace.containerEl.ownerDocument from settingsUse activeDocument to update main workspace from settings window

Note (v0.4.0): prefer-active-doc remains disabled by default — the only Obsidian rule shipped as off. Enable it manually for popout window support.

Note (v1.13.0): Settings now open in a new window. activeDocument from settings callbacks points to the settings window, not the main vault. Use this.app.workspace.containerEl.ownerDocument to target main workspace UI.

Note: activeDocument/activeWindow are dynamic getters that track the focused window. A listener added via activeDocument.addEventListener() at setup cannot reliably be removed via activeDocument.removeEventListener() at cleanup. Prefer registerDomEvent() (rule 6a), which captures the target at registration.

Event Handling
#Rule✅ Do❌ Don't
31Editor drop/pasteCheck evt.defaultPrevented and call evt.preventDefault()Handle editor-drop/paste without checking defaultPrevented
Styling
#Rule✅ Do❌ Don't
32CSS variablesUse Obsidian CSS variables for all stylingHardcode colors, sizes, or spacing
33CSS scopeScope CSS to plugin containersUse broad CSS selectors
34Style elementsUse styles.css file (no-forbidden-elements)Create <link> or <style> elements; assign styles via JavaScript
34a!importantIncrease selector specificity or use CSS variablesUse !important — overrides user themes/snippets
34b:has selectorToggle classes from TypeScript when conditions changeUse :has — causes broad selector invalidation and performance issues
Security & Compatibility
#Rule✅ Do❌ Don't
35DOM creationUse Obsidian DOM helpers (createEl(), createDiv(), createSpan(), createSvg(), createFragment()) via prefer-create-el; linter autofixes activeDocument.createElement() → activeWindow.createEl() (v0.4.1)Use document.createElement(), document.createDocumentFragment(), etc.
36Node.js modulesGuard Node.js imports with Platform.isDesktop check (no-nodejs-modules)Import Node.js modules without platform guard
37iOS compatAvoid regex lookbehind (iOS < 16.4 incompatibility)Use regex lookbehind
Accessibility (MANDATORY)
#Rule✅ Do❌ Don't
38Keyboard accessMake all interactive elements keyboard accessible; Tab through all elementsCreate inaccessible interactive elements
39ARIA labelsProvide ARIA labels for icon buttons; use data-tooltip-position for tooltipsUse icon buttons without ARIA labels
40Focus indicatorsUse :focus-visible with Obsidian CSS variables; touch targets ≥ 44×44pxRemove focus indicators; make touch targets < 44×44px
Show full SKILL.md (738 more words)Show less
Code Quality
Rule✅ Do❌ Don't
Sample codeRemove all sample/template codeKeep class names like MyPlugin, SampleModal
Object.assignObject.assign({}, defaults, overrides) (object-assign)Object.assign(defaultsVar, other) — mutates defaults
LICENSECopyright holder must not be "Dynalist Inc."; year must be current (validate-license)Leave "Dynalist Inc." as holder or use an outdated year
AsyncUse async/awaitUse Promise chains
Deprecated packagesReplace flagged npm packages with Node.js built-ins (e.g., builtin-modules → import { builtinModules } from "node:module")Use packages the scanner flags as replaceable

Detailed Guidelines

For comprehensive information on specific topics, see the reference files:

Memory Management & Lifecycle
  • Using registerEvent(), addCommand(), registerDomEvent(), registerInterval()
  • registerDomEvent() vs manual addEventListener (and the activeDocument drift bug)
  • Avoiding view references in plugin
  • Not using plugin as component
  • Proper leaf cleanup
Type Safety
  • Using instanceof instead of type casting
  • Avoiding any type
  • Using const and let over var
UI/UX Standards
  • Sentence case enforcement (TypeScript, JSON locale, TS/JS locale modules)
  • recommendedWithLocalesEn config for locale file checks
  • Command naming conventions (no "command", no plugin name, no plugin ID)
  • Settings and configuration best practices
  • Declarative settings API (1.13+): migration paths, control types, pitfalls
File & Vault Operations
  • View access patterns
  • Editor vs Vault API
  • Atomic file operations
  • File management
  • Path handling
CSS Styling Best Practices
  • Avoiding inline styles
  • Using Obsidian CSS variables
  • Avoiding !important (use specificity or CSS variables)
  • Avoiding :has selector (toggle classes from TypeScript instead)
  • Scoping plugin styles
  • Theme support
  • Spacing and layout
Accessibility (A11y)
  • Keyboard navigation (MANDATORY)
  • ARIA labels and roles (MANDATORY)
  • Tooltips and accessibility
  • Focus management (MANDATORY)
  • Focus visible styles (MANDATORY)
  • Screen reader support (MANDATORY)
  • Mobile and touch accessibility (MANDATORY)
  • Accessibility checklist
Code Quality & Best Practices
  • Removing sample code
  • Security best practices
  • Platform compatibility
  • API usage best practices
  • Async/await patterns
  • DOM helpers
  • Deprecated/replaceable packages (e.g., builtin-modules → node:module)
Plugin Submission Requirements
  • Repository structure
  • Submission process
  • Semantic versioning
  • Testing checklist
  • Additional resources and important notes
Community Plugin Scanner
  • What the scanner runs (ESLint rule sets + checks beyond ESLint)
  • Scorecard system (Health, Review, Disclosures, improvement tips)
  • Version-stamped — the single file to update as the scanner evolves
ESLint Setup Guide
  • Complete ESLint config for community scanner compliance
  • Why typescript-eslint recommendedTypeChecked is required
  • Common violations and fixes (floating promises, require imports, etc.)
  • Popout window compatibility rules

Plugin Submission Validation Workflow

Before submitting a plugin, follow this sequence:

  1. Run ESLint — npx eslint . using eslint-plugin-obsidianmd; fix all errors AND warnings (warnings affect your Scorecard)
  2. Validate manifest — Confirm id, name, description, version, and minAppVersion meet naming and formatting rules (rules 1–5)
  3. Check LICENSE — Copyright holder must not be "Dynalist Inc." and the year must be current
  4. Test on mobile — Verify no regex lookbehind, no fetch(), and touch targets ≥ 44×44px (skip only if plugin is declared desktop-only)
  5. Keyboard accessibility audit — Tab through all interactive elements; confirm focus indicators and ARIA labels are present
  6. Create GitHub Release — Tag must match manifest.json version; attach main.js, manifest.json, and styles.css (optional)
  7. Submit via community.obsidian.md — Sign in, link GitHub account, navigate to Plugins → New plugin, enter repository URL, review Developer policies, and submit

If ESLint reports new errors after fixing, re-run from step 1.


Scorecard System

Published plugins receive a Scorecard visible on community.obsidian.md. The Scorecard affects user trust and discoverability — a poor score deters users from installing.

Key points:

  • Aim for 90%+ overall score
  • Fix ALL ESLint warnings, not just errors — warnings are publicly visible
  • Use typescript-eslint/recommendedTypeChecked for type-aware checks
  • Add GitHub artifact attestation to releases

See Community Plugin Scanner for full details on scanner checks, Health metrics, Review checks, common warnings, and improvement tips.


When Reviewing/Writing Code

Use this checklist for code review and implementation:

  1. Memory management: Are components and views properly managed?
  2. Type safety: Using instanceof instead of casts?
  3. UI text: Is everything in sentence case?
  4. Command naming: No redundant words?
  5. File operations: Using preferred APIs?
  6. Mobile compatibility: No iOS-incompatible features?
  7. Sample code: Removed all boilerplate?
  8. Manifest: Correct version, valid structure?
  9. Accessibility: Keyboard navigation, ARIA labels, focus indicators?
  10. Testing: Can you use the plugin without a mouse?
  11. Touch targets: Are all interactive elements at least 44×44px?
  12. Focus styles: Using :focus-visible and proper CSS variables?
  13. Settings: Using declarative getSettingDefinitions() on 1.13+? All saved data co-located in plugin.settings?

Common Patterns

Proper Command Registration
typescript
// ✅ CORRECT
this.addCommand({
  id: 'insert-timestamp',
  name: 'Insert timestamp',
  editorCallback: (editor: Editor, view: MarkdownView) => {
    editor.replaceSelection(new Date().toISOString());
  }
});
Safe Type Narrowing
typescript
// ✅ CORRECT
const file = this.app.vault.getAbstractFileByPath(path);
if (file instanceof TFile) {
  // TypeScript now knows it's a TFile
  await this.app.vault.read(file);
}
Keyboard Accessible Button
typescript
// ✅ CORRECT
const button = containerEl.createEl('button', {
  attr: {
    'aria-label': 'Open settings',
    'data-tooltip-position': 'top'
  }
});
button.setText('⚙️');

button.addEventListener('keydown', (e) => {
  if (e.key === 'Enter' || e.key === ' ') {
    e.preventDefault();
    performAction();
  }
});
Declarative Settings (1.13+)
typescript
// ✅ CORRECT — getSettingDefinitions() replaces display() on 1.13+
getSettingDefinitions() {
  return [
    {
      name: 'Mode',
      control: {
        type: 'dropdown',
        key: 'mode',
        defaultValue: 'fast',
        options: { fast: 'Fast', thorough: 'Thorough' },
      },
    },
  ];
}
Themed CSS
css
/* ✅ CORRECT */
.my-plugin-modal {
  background: var(--modal-background);
  color: var(--text-normal);
  padding: var(--size-4-4);
  border-radius: var(--radius-m);
  font-size: var(--font-ui-medium);
}

.my-plugin-button:focus-visible {
  outline: 2px solid var(--interactive-accent);
  outline-offset: 2px;
}

When helping with Obsidian plugin development, proactively apply these rules and suggest improvements based on these guidelines. Refer to the detailed reference files for comprehensive information on specific topics.

© gapmiss, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 10 other files in .agents/skills/obsidian of gapmiss/obsidian-plugin-skill.

  • SKILL.md
  • reference/accessibility.md
  • reference/code-quality.md
  • reference/community-scanner.md
  • reference/css-styling.md
  • reference/eslint-setup.md
  • reference/file-operations.md
  • reference/memory-management.md
  • reference/submission.md
  • reference/type-safety.md
  • reference/ui-ux.md

Open the folder on GitHubat commit ff97cb0

Compare with similar skills

Obsidian Plugin Development Guidelines next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Obsidian Plugin Development Guidelines compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Obsidian Plugin Development Guidelines this skillgapmiss/obsidian-plugin-skill190—~4.5kAutomated safety check: PassMIT
OpenObserve ESLint and TypeScript Fixesopenobserve/openobserve22k—~5.1kAutomated safety check: PassAGPL-3.0
Code Qualityredis/RedisInsight8.9k—~1.2kAutomated safety check: PassCustom licence
Cb Code QualityBlkLeg/CircuitBreaker201—~1.9kAutomated safety check: PassMIT
Fallow Setupfallow-rs/fallow-skills129—~1.1kAutomated safety check: PassMIT
Ban Type AssertionsFactory-AI/factory-plugins110—~1.7kAutomated safety check: PassNone

Similar skills

  • A playbook for fixing ESLint and TypeScript errors in the OpenObserve web frontend, with rule-by-rule guidance and typing conventions.

    22k GitHub stars~5.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Code Quality

    redis/RedisInsight

    Official

    Code-quality standards for RedisInsight: TypeScript strictness, naming conventions (camelCase, PascalCase, UPPERSNAKECASE), linting rules, no any without reason, no !important in styles, and…

    8.9k GitHub stars~1.2k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Cb Code Quality

    BlkLeg/CircuitBreaker

    Circuit Breaker code conventions and the quality gates that actually block a push — ruff, mypy, eslint, the pytest coverage ratchet, and the make verify tiers.

    201 GitHub stars~1.9k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Fallow Setup

    fallow-rs/fallow-skills

    Set up or modernize code-quality tooling for JavaScript and TypeScript projects.

    129 GitHub stars~1.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Ban Type Assertions

    Factory-AI/factory-plugins

    Ban as type assertions in a package via the @typescript-eslint/consistent-type-assertions lint rule, replacing them with compiler-verified type-safe alternatives.

    110 GitHub stars~1.7k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • No Explicit Any

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing TypeScript files for type safety regressions, during code review of functions that handle external data, or when the codebase has ESLint warnings for…

    74k GitHub stars~565 tokensUpdated 2 days ago
    DevelopmentAuto-check passed

Categories

Questions about Obsidian Plugin Development Guidelines

What does Obsidian Plugin Development Guidelines do?

Rules and references for building Obsidian plugins: ESLint rules, TypeScript practices, memory cleanup, API choices, UI standards and the community submission process. 2 into tables of what to do and what to avoid, grouped by submission and naming, memory and lifecycle, type safety and UI.instanceOf(T)`.

When should I use Obsidian Plugin Development Guidelines?

Obsidian Plugin Development Guidelines fits situations like: writing or reviewing an Obsidian plugin's main.ts and manifest.json; fixing eslint-plugin-obsidianmd errors; preparing a plugin for the community submission process; scaffolding a new Obsidian plugin project.

How do I install Obsidian Plugin Development Guidelines in Claude Code?

Run `npx skills add gapmiss/obsidian-plugin-skill --skill obsidian -a claude-code`. Or copy the skill folder (.agents/skills/obsidian in gapmiss/obsidian-plugin-skill) into .claude/skills/obsidian in your project. Claude Code loads it when a task matches its description.

How do I install Obsidian Plugin Development Guidelines in Codex?

Run `npx skills add gapmiss/obsidian-plugin-skill --skill obsidian -a codex`. Or copy the skill folder (.agents/skills/obsidian in gapmiss/obsidian-plugin-skill) into .agents/skills/obsidian in your project. Codex loads it when a task matches its description.

Can I use Obsidian Plugin Development Guidelines in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add gapmiss/obsidian-plugin-skill --skill obsidian -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/obsidian, .gemini/skills/obsidian, .github/skills/obsidian and .opencode/skills/obsidian in your project.

What does Obsidian Plugin Development Guidelines need to run?

Going by SKILL.md and its folder, Obsidian Plugin Development Guidelines needs the command-line tools its instructions call (npx). Our summary lists: An Obsidian plugin project written in TypeScript.

Does Obsidian Plugin Development Guidelines access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Obsidian Plugin Development Guidelines safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Obsidian Plugin Development Guidelines use?

Obsidian Plugin Development Guidelines is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Obsidian Plugin Development Guidelines use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Obsidian Plugin Development Guidelines?

Skills that share tags, products or a category with Obsidian Plugin Development Guidelines: OpenObserve ESLint and TypeScript Fixes (openobserve/openobserve, 22k stars), Code Quality (redis/RedisInsight, 8.9k stars), Cb Code Quality (BlkLeg/CircuitBreaker, 201 stars) and Fallow Setup (fallow-rs/fallow-skills, 129 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Obsidian Plugin Development Guidelines?

gapmiss (a GitHub user) maintains it in gapmiss/obsidian-plugin-skill, which has 190 GitHub stars. The repository was last updated on September 24, 2026.

Source: gapmiss/obsidian-plugin-skill on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.