Type definitions for the latest Obsidian API.
You can browse our Plugin API documentation at https://docs.obsidian.md/
For an example on how to create Obsidian plugins, use the template at https://github.com/obsidianmd/obsidian-sample-plugin
For issues with the API, or to make requests for new APIs, please go to our forum: https://forum.obsidian.md/c/developers-api/14
manifest.json
-
id
the ID of your plugin. -
name
the display name of your plugin. -
author
the plugin author's name. -
version
the version of your plugin. -
minAppVersion
the minimum required Obsidian version for your plugin. -
description
the long description of your plugin. -
isDesktopOnly
whether your plugin uses NodeJS or Electron APIs. -
authorUrl
(optional) a URL to your own website. -
fundingUrl
(optional) a link for users to donation to show appreciation and support plugin development.
main.js
- This is the main entry point of your plugin.
- Import any Obsidian API using
require('obsidian')
- Import NodeJS or Electron API using
require('fs')
orrequire('electron')
- Must export a default class which extends
Plugin
- Must bundle all external dependencies into this file, using Rollup, Webpack, or another javascript bundler.
-
App
, the global object that owns everything else. You can access this viathis.app
inside your plugin. TheApp
interface provides accessors for the following interfaces. -
Vault
, the interface that lets you interact with files and folders in the vault. -
Workspace
, the interface that lets you interact with panes on the screen. -
MetadataCache
, the interface that contains cached metadata about each markdown file, including headings, links, embeds, tags, and blocks.
- Add a ribbon icon using
this.addRibbonIcon
. - Add a status bar (bottom) element using
this.addStatusBarItem
. - Add a global command, optionally with a default hotkey, using
this.addCommand
. - Add a plugin settings tab using
this.addSettingTab
. - Register a new kind of view using
this.registerView
. - Save and load plugin data using
this.loadData
andthis.saveData
.
For registering events from any event interfaces, such as App
and Workspace
, please use this.registerEvent
, which will automatically detach your event handler when your plugin unloads:
this.registerEvent(app.on('event-name', callback));
If you register DOM events for elements that persist on the page after your plugin unloads, such as window
or document
events, please use this.registerDomEvent
:
this.registerDomEvent(element, 'click', callback);
If you use setInterval
, please use this.registerInterval
:
this.registerInterval(setInterval(callback, 1000));