OB

obsidian-install-auth

Quickly scaffolds a new Obsidian plugin project with the necessary build tools and configuration.

Install

mkdir -p .claude/skills/obsidian-install-auth && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/1173" && unzip -o skill.zip -d .claude/skills/obsidian-install-auth && rm skill.zip

Installs to .claude/skills/obsidian-install-auth

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Set up Obsidian plugin development environment with Node.js and TypeScript.
75 charsno explicit “when” trigger
Beginner

Key capabilities

  • Clone the official Obsidian sample plugin template
  • Install Node.js and TypeScript dependencies
  • Configure `manifest.json` and `versions.json` for plugin metadata
  • Create a symlinked development vault for local testing
  • Build and verify the plugin using `npm run build` and `npm run dev`

How it works

The skill clones a sample plugin, installs necessary development tools, configures plugin metadata files, and sets up a development vault with a symlink to enable local testing within Obsidian.

Inputs & outputs

You give it
Git repository URL for the sample plugin
You get back
A configured Obsidian plugin development environment with a symlinked dev vault

When to use obsidian-install-auth

  • Starting a new Obsidian plugin from scratch
  • Configuring esbuild for plugin development
  • Setting up a symlinked development vault

About this skill

Obsidian Install & Auth

Overview

Set up a complete Obsidian plugin development environment: clone the official sample plugin, install TypeScript + esbuild, configure a dev vault with symlink, verify the build pipeline, and establish the manifest.json / versions.json contract.

Prerequisites

  • Node.js 18+ (LTS recommended)
  • npm or pnpm package manager
  • Obsidian desktop app installed (download from https://obsidian.md)
  • Git for version control

Instructions

Step 1: Clone the Official Sample Plugin

set -euo pipefail
# Clone the maintained template — includes esbuild, tsconfig, and a working main.ts
git clone https://github.com/obsidianmd/obsidian-sample-plugin.git my-obsidian-plugin
cd my-obsidian-plugin

# Start fresh git history
rm -rf .git
git init
git add -A
git commit -m "initial scaffold from obsidian-sample-plugin"

The sample plugin includes these key files:

  • esbuild.config.mjs — bundler with watch mode and external handling
  • tsconfig.json — TypeScript config targeting ES2018 with strict null checks
  • manifest.json — plugin metadata Obsidian reads at load time
  • src/main.ts — Plugin subclass with commands, settings, modal

Step 2: Install Dependencies

set -euo pipefail
npm install

# What gets installed:
# - obsidian (type definitions only — the runtime is provided by the Obsidian app)
# - typescript
# - esbuild (fast bundler, <50ms builds)
# - @types/node
# - tslib (TypeScript helper library)

Step 3: Configure manifest.json

Every Obsidian plugin requires a manifest.json at the project root:

{
  "id": "my-obsidian-plugin",
  "name": "My Obsidian Plugin",
  "version": "1.0.0",
  "minAppVersion": "1.5.0",
  "description": "What your plugin does in one sentence.",
  "author": "Your Name",
  "authorUrl": "https://github.com/yourname",
  "isDesktopOnly": false
}

Required fields: id, name, version, minAppVersion, description, author.

Rules:

  • id must be lowercase kebab-case, match the folder name under .obsidian/plugins/
  • minAppVersion should be 1.5.0 or higher (supports modern APIs like processFrontMatter)
  • isDesktopOnly: false unless you use Electron-only APIs (child_process, fs, shell)

Step 4: Create versions.json

Maps each plugin version to the minimum Obsidian version it requires:

{
  "1.0.0": "1.5.0"
}

Obsidian uses this to warn users on older versions that they cannot install your plugin. Update it every time you bump version in manifest.json.

Step 5: Create a Development Vault

set -euo pipefail
DEV_VAULT="$HOME/ObsidianDev"
mkdir -p "$DEV_VAULT/.obsidian/plugins"
mkdir -p "$DEV_VAULT/Test Notes"

# Create a sample note for testing
cat > "$DEV_VAULT/Test Notes/Sample.md" << 'EOF'
---
tags: [test, sample]
status: draft
---
# Sample Note

Test note for plugin development. Has [[wikilinks]], #tags, and frontmatter.

## Section A
Some content with **bold** and `inline code`.

## Section B
- [ ] Task one
- [x] Task two
- [ ] Task three
EOF

echo "Dev vault created at $DEV_VAULT"

Open this vault in Obsidian: File > Open vault > select ~/ObsidianDev.

Step 6: Symlink Plugin into Dev Vault

set -euo pipefail
DEV_VAULT="$HOME/ObsidianDev"
PLUGIN_DIR="$(pwd)"
PLUGIN_ID=$(node -e "console.log(require('./manifest.json').id)")

# Symlink project root into vault plugins folder
ln -sfn "$PLUGIN_DIR" "$DEV_VAULT/.obsidian/plugins/$PLUGIN_ID"

# Verify
ls -la "$DEV_VAULT/.obsidian/plugins/$PLUGIN_ID/manifest.json"
echo "Symlinked $PLUGIN_ID into dev vault"

On Windows (admin terminal):

mklink /D "%USERPROFILE%\ObsidianDev\.obsidian\plugins\my-obsidian-plugin" "%cd%"

Step 7: Build and Verify

set -euo pipefail
# Production build
npm run build
ls -la main.js manifest.json
echo "Build output: $(wc -c < main.js) bytes"

# Start dev mode with file watching
npm run dev
# esbuild watches src/ and rebuilds main.js on every save (~30ms)

In Obsidian:

  1. Settings > Community plugins > Enable community plugins
  2. Find your plugin in the list, toggle it on
  3. Open Developer Console (Ctrl+Shift+I) — look for your plugin's load message
  4. Press Ctrl+R to reload after any code change

Step 8: Verify the Obsidian API is Available

// src/main.ts — minimal verification
import { Plugin, Notice } from 'obsidian';

export default class MyPlugin extends Plugin {
  async onload() {
    // Verify core APIs are accessible
    const vaultName = this.app.vault.getName();
    const fileCount = this.app.vault.getMarkdownFiles().length;
    console.log(`[${this.manifest.id}] Loaded in vault "${vaultName}" with ${fileCount} notes`);

    this.addCommand({
      id: 'verify-setup',
      name: 'Verify Plugin Setup',
      callback: () => {
        new Notice(`Plugin working! Vault: ${vaultName}, Files: ${fileCount}`);
      },
    });
  }
}

Output

  • Cloned and configured plugin project with all dependencies
  • manifest.json and versions.json with correct metadata
  • Development vault at ~/ObsidianDev with test notes
  • Plugin symlinked into vault (no manual copying after builds)
  • Working build pipeline: npm run build (production) and npm run dev (watch mode)
  • Verified plugin loads and can access Vault API

Error Handling

ErrorCauseSolution
Cannot find module 'obsidian'Types not installednpm install — obsidian is a devDependency
Plugin not in Obsidian's listSymlink broken or id mismatchVerify symlink target exists, id matches folder name
Build fails with TypeScript errorsStrict null checksAdd null guards: if (file instanceof TFile)
Hot-reload not workingNeed to reload manuallyInstall Hot Reload plugin or press Ctrl+R
Permission denied on symlinkWindows requires adminRun terminal as Administrator
main.js not generatedWrong esbuild entrypointCheck entryPoints: ["src/main.ts"] in esbuild config

Examples

Project Structure After Setup

my-obsidian-plugin/
├── src/
│   └── main.ts           # Plugin entry point (default export)
├── styles.css            # Optional: custom CSS (auto-loaded by Obsidian)
├── manifest.json         # Plugin metadata (required)
├── versions.json         # Version-to-minAppVersion mapping
├── package.json          # Node dependencies
├── tsconfig.json         # TypeScript config
├── esbuild.config.mjs    # Build configuration
└── main.js               # Build output (gitignored)

Vault Plugin Directory Structure

~/ObsidianDev/
├── .obsidian/
│   ├── app.json
│   ├── community-plugins.json   # ["my-obsidian-plugin"]
│   └── plugins/
│       └── my-obsidian-plugin -> /path/to/your/project  # symlink
├── Test Notes/
│   └── Sample.md

Quick Environment Check Script

set -euo pipefail
echo "Node: $(node --version)"
echo "npm: $(npm --version)"
echo "Git: $(git --version)"
echo "Obsidian vault: $(ls ~/ObsidianDev/.obsidian/app.json 2>/dev/null && echo 'found' || echo 'NOT FOUND')"
echo "Plugin symlink: $(ls -la ~/ObsidianDev/.obsidian/plugins/*/manifest.json 2>/dev/null || echo 'none')"

Resources

Next Steps

After successful setup, proceed to obsidian-hello-world for your first plugin feature, or obsidian-local-dev-loop for hot-reload development workflow.

When not to use it

  • When developing a plugin for a different application than Obsidian
  • When not using Node.js or TypeScript for plugin development

Prerequisites

Node.js 18+npm or pnpm package managerObsidian desktop app installedGit for version control

Limitations

  • Windows symlinking requires an administrator terminal
  • Hot-reload requires manual Obsidian reload or a specific plugin

How it compares

This sets up a complete, ready-to-use Obsidian plugin development environment, unlike manually configuring each component.

Compared to similar skills

obsidian-install-auth side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
obsidian-install-auth (this skill)427dReviewBeginner
mcp-builder1363moReviewAdvanced
supabase-developer957moReviewIntermediate
dependency-upgrade265moReviewIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

mcp-builder

anthropics

Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).

136215

supabase-developer

daffy0208

Build full-stack applications with Supabase (PostgreSQL, Auth, Storage, Real-time, Edge Functions). Use when implementing authentication, database design with RLS, file storage, real-time features, or serverless functions.

95185

dependency-upgrade

wshobson

Manage major dependency version upgrades with compatibility analysis, staged rollout, and comprehensive testing. Use when upgrading framework versions, updating major dependencies, or managing breaking changes in libraries.

26240

turborepo

vercel

Turborepo monorepo build system guidance. Triggers on: turbo.json, task pipelines, dependsOn, caching, remote cache, the "turbo" CLI, --filter, --affected, CI optimization, environment variables, internal packages, monorepo structure/best practices, and boundaries. Use when user: configures tasks/workflows/pipelines, creates packages, sets up monorepo, shares code between apps, runs changed/affected packages, debugs cache, or has apps/packages directories.

61191

telegram-mini-app

davila7

Expert in building Telegram Mini Apps (TWA) - web apps that run inside Telegram with native-like experience. Covers the TON ecosystem, Telegram Web App API, payments, user authentication, and building viral mini apps that monetize. Use when: telegram mini app, TWA, telegram web app, TON app, mini app.

62163

stripe-integration

wshobson

Implement Stripe payment processing for robust, PCI-compliant payment flows including checkout, subscriptions, and webhooks. Use when integrating Stripe payments, building subscription systems, or implementing secure checkout flows.

48165

Search skills

Search the agent skills registry