Plugin Obsidian Hello World

VérifiéSûr

Créez un plugin Obsidian minimal avec commandes, paramètres et icônes de ruban. Idéal pour apprendre les schémas de base.

Spar Skills Guide Bot
DeveloppementDébutant
25/07/2026
Claude Code
#obsidian#plugin-development#typescript#tutorial#scaffolding

Recommandé pour

Synthèse automatique

Génère un plugin Obsidian minimal fonctionnel illustrant les commandes, les paramètres et les icônes de ruban.

Points forts

  • Fournit un code TypeScript complet et copiable pour la classe principale du plugin, l'onglet de paramètres et une fenêtre modale
  • Couvre les motifs essentiels : commandes avec callback, editorCallback, chargement/sauvegarde des données et addRibbonIcon
  • Inclut les étapes de compilation et de test dans Obsidian pour valider rapidement le résultat

Limites

  • Suppose que l'installation et l'authentification ainsi que le pipeline de build sont déjà en place
  • Ne traite ni de la publication, ni du versionnage, ni des tests automatisés d'un plugin
Quand l'utiliser

Utilisez-le lorsque vous créez votre premier plugin Obsidian ou souhaitez vérifier rapidement que votre environnement de développement fonctionne.

Quand l'éviter

À éviter si vous cherchez des motifs avancés de plugin (vues personnalisées, intégrations complexes, publication) ou si votre vault de développement n'est pas configuré.

Analyse de sécurité

Sûr
Score qualité90/100

The skill only provides TypeScript code and documentation for creating an Obsidian plugin. It does not instruct destructive actions, credential exfiltration, obfuscated execution, or safety-disabling behavior, and the declared allowed-tools are limited to Read, Write, and Edit.

Aucun point d'attention détecté

Comment cette analyse est faite

Exemples

First plugin scaffold
Create a minimal Obsidian plugin called My Plugin with a ribbon icon, a 'Show Greeting' command, and a settings tab for the greeting text.
Add a modal command
Extend my Obsidian hello world plugin with a command that opens a modal displaying the configured greeting.

name: obsidian-hello-world description: | Create a minimal working Obsidian plugin with commands and settings. Use when building your first plugin feature, testing your setup, or learning basic Obsidian plugin patterns. Trigger with phrases like "obsidian hello world", "first obsidian plugin", "obsidian quick start", "simple obsidian plugin". allowed-tools: Read, Write, Edit version: 1.0.0 license: MIT author: Jeremy Longshore jeremy@intentsolutions.io

Obsidian Hello World

Overview

Build a minimal working Obsidian plugin demonstrating core features: commands, settings, and ribbon icons.

Prerequisites

  • Completed obsidian-install-auth setup
  • Development vault configured
  • Build pipeline working

Instructions

Step 1: Create Main Plugin Class

// src/main.ts
import { App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Setting } from 'obsidian';

interface MyPluginSettings {
  greeting: string;
}

const DEFAULT_SETTINGS: MyPluginSettings = {
  greeting: 'Hello, Obsidian!'
}

export default class MyPlugin extends Plugin {
  settings: MyPluginSettings;

  async onload() {
    await this.loadSettings();

    // Add ribbon icon
    this.addRibbonIcon('dice', 'Greet Me', (evt: MouseEvent) => {
      new Notice(this.settings.greeting);
    });

    // Add command to command palette
    this.addCommand({
      id: 'show-greeting',
      name: 'Show Greeting',
      callback: () => {
        new Notice(this.settings.greeting);
      }
    });

    // Add command with editor context
    this.addCommand({
      id: 'insert-greeting',
      name: 'Insert Greeting at Cursor',
      editorCallback: (editor: Editor, view: MarkdownView) => {
        editor.replaceSelection(this.settings.greeting);
      }
    });

    // Add settings tab
    this.addSettingTab(new MySettingTab(this.app, this));
  }

  onunload() {
    console.log('Goodbye from My Plugin!');
  }

  async loadSettings() {
    this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
  }

  async saveSettings() {
    await this.saveData(this.settings);
  }
}

Step 2: Create Settings Tab

// Add to src/main.ts
class MySettingTab extends PluginSettingTab {
  plugin: MyPlugin;

  constructor(app: App, plugin: MyPlugin) {
    super(app, plugin);
    this.plugin = plugin;
  }

  display(): void {
    const { containerEl } = this;
    containerEl.empty();

    containerEl.createEl('h2', { text: 'My Plugin Settings' });

    new Setting(containerEl)
      .setName('Greeting')
      .setDesc('The message to display when greeting')
      .addText(text => text
        .setPlaceholder('Enter your greeting')
        .setValue(this.plugin.settings.greeting)
        .onChange(async (value) => {
          this.plugin.settings.greeting = value;
          await this.plugin.saveSettings();
        }));
  }
}

Step 3: Create a Modal

// Add to src/main.ts
class GreetingModal extends Modal {
  greeting: string;

  constructor(app: App, greeting: string) {
    super(app);
    this.greeting = greeting;
  }

  onOpen() {
    const { contentEl } = this;
    contentEl.createEl('h1', { text: this.greeting });
    contentEl.createEl('p', { text: 'Click outside or press Escape to close.' });
  }

  onClose() {
    const { contentEl } = this;
    contentEl.empty();
  }
}

// Add to onload():
this.addCommand({
  id: 'show-greeting-modal',
  name: 'Show Greeting Modal',
  callback: () => {
    new GreetingModal(this.app, this.settings.greeting).open();
  }
});

Step 4: Build and Test

# Build the plugin
npm run build

# In Obsidian:
# 1. Open Settings > Community plugins
# 2. Enable "My Plugin"
# 3. Click the dice icon in ribbon
# 4. Open command palette (Ctrl/Cmd+P) and search "Show Greeting"

Output

  • Working plugin with:
    • Ribbon icon that shows a notice
    • Commands in command palette
    • Editor command to insert text
    • Settings tab to configure greeting
    • Modal for displaying content

Error Handling

| Error | Cause | Solution | |-------|-------|----------| | Plugin not loading | Build errors | Check console for TypeScript errors | | Settings not saving | Missing loadData/saveData | Verify async/await usage | | Command not showing | Plugin not enabled | Enable in Community Plugins | | Ribbon icon missing | Wrong icon name | Use valid Lucide icon name |

Examples

Available Icon Names

Obsidian uses Lucide icons. Common examples:

  • file-text, folder, search, settings
  • star, heart, bookmark, tag
  • edit, trash, copy, clipboard
  • link, external-link, globe
  • dice, bot, sparkles, wand

Status Bar Item

// Add to onload():
const statusBarItem = this.addStatusBarItem();
statusBarItem.setText('Plugin Active');

Register Event Listeners

// Listen to file open
this.registerEvent(
  this.app.workspace.on('file-open', (file) => {
    if (file) {
      console.log('Opened:', file.path);
    }
  })
);

Resources

Next Steps

Proceed to obsidian-local-dev-loop for hot-reload development workflow.

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/obsidian-hello-world-plugin-mrzxuqjq/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/obsidian-hello-world-plugin-mrzxuqjq/download' --output '.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq/SKILL.md.part' && mv '.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq/SKILL.md.part' '.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Outils déclarés par l’auteur (à vérifier dans votre agent) : Read, Write, Edit

Extrait original : Prerequisites
  • Completed obsidian-install-auth setup
  • Development vault configured
  • Build pipeline working

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq/SKILL.md' && test -s '.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/obsidian-hello-world' && cp -R '.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq' '.claude/skills/obsidian-hello-world'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/obsidian-hello-world-plugin-mrzxuqjq'

openskills read 'obsidian-hello-world-plugin-mrzxuqjq'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/obsidian-hello-world-plugin-mrzxuqjq/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires