Skip to content

Feature options

The wizard lets you pick and choose from the categories below. The recommended answers are the defaults.

Every question can also be answered with a flag, --<answer>=<value>. --help lists each answer’s name and the values it accepts, and Command-line options shows how to pass them.

Option Description
All-in-one Framework Recommended. The author’s framework: @mnaoumov/obsidian-lib, a library of ready-made helpers for settings, commands, modals, notices, file and link handling, and more, plus the @mnaoumov toolkits for building, linting, testing and releases.
Demo All features enabled for demonstration
Developer docs showcase The All-in-one Framework project, plus every code block of the Obsidian developer docs as a command you can run. See Developer docs showcase
Standalone Standalone plugin without the @mnaoumov library dependencies
Official sample plugin Exactly obsidianmd/obsidian-sample-plugin, with your plugin’s id, name, author, description and LICENSE copyright holder filled in. See Official sample plugin

"preset": "official-sample" gives you Obsidian’s own sample plugin as it is, rather than a project built from this tool’s templates. No other question is asked: upstream has already chosen its tooling (esbuild, eslint with eslint-plugin-obsidianmd, npm), and a tooling flag beside this preset is refused.

Only the plugin’s identity changes:

  • manifest.json: id, name, description, author, authorUrl (your GitHub profile) and fundingUrl, which is removed if you choose no funding platform
  • package.json and package-lock.json: the package name, obsidian-<id>
  • README.md: the title
  • LICENSE: the copyright line, Copyright (C) <current year> by <author>, so the plugin is yours; upstream’s 0BSD text under it is kept

Every other file is upstream’s, byte for byte, including its AGENTS.md. The generator adds only its own .create-obsidian-plugin.json, which is what lets an update work the way it does for every preset.

The files come from a snapshot this release ships, pinned to an upstream commit in upstreams.json, so generating works offline and gives the same result every time. Pass --latest to copy upstream as it is today instead; if upstream cannot be reached, the shipped snapshot is used with a warning.

Upstream’s npm run lint fails on a fresh copy, and on upstream itself, until you rename the sample classes and remove the sample code: eslint-plugin-obsidianmd checks for exactly that. npm run build passes.

"preset": "docs-showcase" generates the All-in-one Framework project and adds src/docs/: every code block of obsidianmd/obsidian-developer-docs, each one a command. Open the command palette, type Docs:, and run Docs: Vault > Modify files to see that block of the Vault page work against a scratch note.

Each block is kept as the docs show it. The generator adds only what the docs leave to the reader: the imports a block leaves out, and a host that gives the block a plugin to register things on, a note to work with, an editor, or an element to draw into. A block that declares a plugin class is loaded as a child plugin, and running its command again unloads it. A stylesheet is applied and removed the same way.

src/docs/README.md lists every block of the docs. A block that does not compile against the obsidian API, or that is not plugin code (shell commands, JSON samples, diagrams), is listed there with the reason rather than left out silently.

The blocks are type-checked by src/docs/tsconfig.json, which carries the official sample plugin’s compiler options, so the project’s own stricter tsconfig.json, linter, formatter and spell checker leave the folder alone. With the vitest answer, npm run test:integration:desktop runs every Docs: command in a real Obsidian and fails on any that throws.

The blocks come from a snapshot this release ships, pinned to an upstream commit in upstreams.json. Maintainers refresh it with npm run sync:docs-showcase.

Option Description
esbuild Fast and simple (recommended)
Parcel Zero-config bundler
Rollup Flexible with plugin ecosystem
Vite Modern dev server with HMR
Webpack Mature bundler with broad plugin support
Option Description
(none) Plain TypeScript, no UI framework
Lit Web Components with declarative templates
Preact Lightweight React alternative (3kB)
React Component-based UI with JSX
Solid Fine-grained reactivity, no virtual DOM
Svelte Lightweight reactive components
Vue Progressive framework with SFC
Option Description
(none) No linting
Biome Fast linter and formatter
ESLint Industry standard for JavaScript/TypeScript
Option Description
(none) No formatting
Biome Fast formatter (pairs with Biome linter)
dprint Fast, pluggable, written in Rust
Prettier Opinionated, widely adopted
Option Description
(none) No spell checking
cspell Configurable spell checker for code
Option Description
(none) No Markdown linting
markdownlint Lint Markdown files for style and consistency
Option Description
(none) No unit testing
Jest Feature-rich, widely adopted
Vitest Fast, Vite-native, ESM-first
Option Description
(none) No E2E testing
obsidian-test Tests run inside Obsidian with real app APIs
wdio-obsidian WebdriverIO service for Obsidian, multi-version and CI/CD
Option Description
(none) No editor extensions
CodeMirror CodeMirror 6 state fields, view plugins, decorations
Option Description
(none) No custom styles
CSS Plain CSS styles
CSS Modules Scoped CSS with .module.css files
PostCSS CSS with plugins (autoprefixer, nesting)
SCSS Sass/SCSS preprocessor
Tailwind CSS Utility-first CSS framework
Option Description
(none) No WASM
WASM Import and use .wasm modules
Option Description
(none) No commit linting
Conventional Commits commitlint on a husky commit-msg hook
Option Description
(none) No hot reload support
Hot Reload Plugin Creates .hotreload marker for Hot Reload
Obsidian CLI Reloads via obsidian plugin:reload CLI command
Option Description
(none) No internationalization
i18next Popular i18n framework with JSON translations
typesafe-i18n Type-safe i18n with auto-generated types
Option Description
(none) No GitHub Actions workflows
CI + Release CI + automated release on tag push
CI CI workflow only (lint, test, build)
Option Description
(none) No issue templates
Bug & Feature Bug report and feature request templates

See Issue forms and Report a bug for what the forms contain, and the command that comes with them.

Option Description
(none) No coverage badge
Coverage badge A coverage: 100% badge at the end of the README’s badge line

Asked with the project details, not under Customize. The platform and your username on it produce the fundingUrl in manifest.json, the README’s badge and ## Support link, and a .github/FUNDING.yml with that one platform’s line. (none) emits none of them.

Option Description
(none) No funding link, FUNDING.yml or badge
Buy Me a Coffee buymeacoffee.com/<username>
GitHub Sponsors github.com/sponsors/<username>
Ko-fi ko-fi.com/<username>
Liberapay liberapay.com/<username>
Open Collective opencollective.com/<username>
Patreon patreon.com/<username>
Polar polar.sh/<username>
thanks.dev thanks.dev/<username>, e.g. u/gh/<GitHub username>
Custom URL Any other URL, asked for as a URL rather than a username
Option Description
Official API Stable, documented API only
Official + Unofficial Includes internal undocumented APIs (for experienced devs)
Option Description
bun Fast all-in-one JavaScript toolkit
npm Default, comes with Node.js
pnpm Fast, efficient disk space
yarn Classic alternative with workspaces
Option Description
Desktop and mobile Plugin works on desktop and mobile
Desktop only Plugin works only on desktop