Spaces:
Sleeping
Sleeping
Plugins let you extend Obsidian with your own features to create a custom note-taking experience. | |
In this tutorial, you'll compile a sample plugin from source code and load it into Obsidian. | |
## What you'll learn | |
After you've completed this tutorial, you'll be able to: | |
- Configure an environment for developing Obsidian plugins. | |
- Compile a plugin from source code. | |
- Reload a plugin after making changes to it. | |
## Prerequisites | |
To complete this tutorial, you'll need: | |
- [Git](https://git-scm.com/) installed on your local machine. | |
- A local development environment for [Node.js](https://Node.js.org/en/about/). | |
- A code editor, such as [Visual Studio Code](https://code.visualstudio.com/). | |
## Before you start | |
When developing plugins, one mistake can lead to unintended changes to your vault. To prevent data loss, you should never develop plugins in your main vault. Always use a separate vault dedicated to plugin development. | |
[Create an empty vault](https://help.obsidian.md/Getting+started/Create+a+vault#Create+empty+vault). | |
## Step 1: Download the sample plugin | |
In this step, you'll download a sample plugin to the `plugins` directory in your vault's [`.obsidian` directory](https://help.obsidian.md/Advanced+topics/How+Obsidian+stores+data#Per+vault+data) so that Obsidian can find it. | |
The sample plugin you'll use in this tutorial is available in a [GitHub repository](https://github.com/obsidianmd/obsidian-sample-plugin). | |
1. Open a terminal window and change the project directory to the `plugins` directory. | |
```bash | |
cd path/to/vault | |
mkdir .obsidian/plugins | |
cd .obsidian/plugins | |
``` | |
2. Clone the sample plugin using Git. | |
```bash | |
git clone https://github.com/obsidianmd/obsidian-sample-plugin.git | |
``` | |
> [!tip] GitHub template repository | |
> The repository for the sample plugin is a GitHub template repository, which means you can create your own repository from the sample plugin. To learn how, refer to [Creating a repository from a template](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template#creating-a-repository-from-a-template). | |
> | |
> Remember to use the URL of your own repository when cloning the sample plugin. | |
## Step 2: Build the plugin | |
In this step, you'll compile the sample plugin so that Obsidian can load it. | |
1. Navigate to the plugin directory. | |
```bash | |
cd obsidian-sample-plugin | |
``` | |
2. Install dependencies. | |
```bash | |
npm install | |
``` | |
3. Compile the source code. The following command keeps running in the terminal and rebuilds the plugin when you modify the source code. | |
```bash | |
npm run dev | |
``` | |
Notice that the plugin directory now has a `main.js` file that contains a compiled version of the plugin. | |
## Step 3: Enable the plugin | |
To load a plugin in Obsidian, you first need to enable it. | |
1. In Obsidian, open **Settings**. | |
2. In the side menu, select **Community plugins**. | |
3. Select **Turn on community plugins**. | |
4. Under **Installed plugins**, enable the **Sample Plugin** by selecting the toggle button next to it. | |
You're now ready to use the plugin in Obsidian. Next, we'll make some changes to the plugin. | |
## Step 4: Update the plugin manifest | |
In this step, you'll rename the plugin by updating the plugin manifest, `manifest.json`. The manifest contains information about your plugin, such as its name and description. | |
1. Open `manifest.json` in your code editor. | |
2. Change `id` to a unique identifier, such as `"hello-world"`. | |
3. Change `name` to a human-friendly name, such as `"Hello world"`. | |
4. Restart Obsidian to load the new changes to the plugin manifest. | |
Go back to **Installed plugins** and notice that the name of the plugin has been updated to reflect the changes you made. | |
Remember to restart Obsidian whenever you make changes to `manifest.json`. | |
## Step 5: Update the source code | |
To let the user interact with your plugin, add a _ribbon icon_ that greets the user when they select it. | |
1. Open `main.ts` in your code editor. | |
2. Rename the plugin class from `MyPlugin` to `HelloWorldPlugin`. | |
3. Import `Notice` from the `obsidian` package. | |
```ts | |
import { Notice, Plugin } from "obsidian"; | |
``` | |
4. In the `onload()` method, add the following code: | |
```ts | |
this.addRibbonIcon('dice', 'Greet', () => { | |
new Notice('Hello, world!'); | |
}); | |
``` | |
5. In the **Command palette**, select **Reload app without saving** to reload the plugin. | |
You can now see a dice icon in the ribbon on the left side of the Obsidian window. Select it to display a message in the upper-right corner. | |
Remember, you need to **reload your plugin after changing the source code**, either by disabling it then enabling it again in the community plugins panel, or using the command palette as detailed in part 5 of this step. | |
> [!tip] Hot reloading | |
> Install the [Hot-Reload](https://github.com/pjeby/hot-reload) plugin to automatically reload your plugin while developing. | |
## Conclusion | |
In this tutorial, you've built your first Obsidian plugin using the TypeScript API. You've modified the plugin and reloaded it to reflect the changes inside Obsidian. | |