Execute Code

by twibiral
5
4
3
2
1
Score: 72/100

Description

Category: Coding & Technical Tools

The Execute Code plugin allows users to run code snippets directly within Obsidian notes across multiple programming languages, including Python, JavaScript, C++, and more. It provides a 'run' button for supported code blocks, executing them locally and displaying the results in the note. The plugin supports embedded plots for some languages and offers features like persistent output storage, global code injections, and notebook mode, which maintains a shared execution environment within a note.

Reviews

No reviews yet.

Stats

1499
stars
151,174
downloads
98
forks
1,482
days
280
days
434
days
149
total PRs
8
open PRs
18
closed PRs
123
merged PRs
293
total issues
161
open issues
132
closed issues
72
commits

Latest Version

a year ago

Changelog

What's Changed

Update to version 2.1.2

Full Changelog: https://github.com/twibiral/obsidian-execute-code/compare/v2.1.1...v2.1.2

README file from

Github

Obsidian Execute Code Plugin

Obsidian Downloads GitHub package.json version GitHub Release Date

This plugin allows you to execute code snippets in code blocks in your notes. The plugin adds a 'run' button for code blocks in supported languages. Clicking them results in the code of the block being executed locally. After the execution the result of the execution is shown. An interactive input element is created when your code snippets reads expects user input.

The result is shown only after the execution is finished. It is not possible to enter text on the command line into the executed program now.

Video that shows how the plugin works.

The following languages are supported: C, C++, CSharp, Dart, F#, Golang, Groovy, Haskell, Java, JavaScript, Kotlin, Lean, Lua, Maxima, OCaml, Octave, Prolog, Python, R, Racket, Ruby, Rust, Scala, Shell (including Batch & Powershell), SQL, TypeScript, Wolfram Mathematica, Zig.

If you are new to MarkDown or Obsidian.md, you can go to the Quickstart Guide or take a look in to some blogs and videos that feature this plugin

Python, R, and Octave support embedded plots. All languages support "magic" commands that help you to access paths in obsidian or show images in your notes.

You can create code blocks that are executed before or after each code block of the same language and define global code injections.

New: You can enable persistent output to store the output of a code block in the note and export it to PDF.

Take a look at the changelog to see what has changed in recent versions.

Here you can find some other tools and plugins that are compatible with this plugin and might be useful for you.

If you like this plugin and use it a lot, please consider supporting me in continuing the development of this plugin. You can also sponsor a new feature or language integration directly, if you want to speed up the development for a specific feature you need.

GitHub Sponsors Buy me a coffee

Video by I Versus AI Video by Michel's Science Speedrun Video by GlareDB Video by 노마드 코더 Nomad Coders
"Escape ChatGPT. Make your own Code Interpreter EASY" by I Versus AI "Obsidian & quarto integration" by Michel's Science Speedrun "Write SQL Queries in...Obsidian?" by GlareDB "인생 노트앱...드디어 찾았습니다..!" by 노마드 코더 Nomad Coders

In blogs:

Are you featuring this plugin in your content? Let me know and I will add it here.

Supported programming languages 💻

  • Requirements: Node.js is installed and the correct path is set in the settings.
function hello(name) {
	console.log(`Hello ${name}!`);
}

hello("Bob")
  • By default, Javascript runs in Notebook Mode. You can turn this off in the settings.
  • Requirements: Node.js installed then run in command line npm install typescript -g and npm install ts-node -g. (-g means global installation)
  • Problems: If you use your global node.js installation, and it doesn't work try to set your ts-node path in the settings to npx ts-node instead of ts-node.
let message: string = 'Hello, World!';
console.log(message);  
  • Requirements: Python is installed and the correct path is set in the settings.
def hello(name):
	print("Hello", name)

if __name__ == "__main__":
	hello("Eve")
  • By default, Python runs in Notebook Mode. You can turn this off in the settings.
  • Plots with matplotlib/seaborn are embedded in the note by default. You can turn this off in the settings. Note that plots are only embedded when plt.show() is called.
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_style("darkgrid")
iris = sns.load_dataset('iris')
sns.FacetGrid(iris, hue ="species", height = 5)
		.map(plt.scatter, 'sepal_length', 'petal_length')
		.add_legend()

plt.show()

Example of an embedded plot.

  • Requirements: R is installed and the correct path is set in the settings.
  • For cool additional features for R try out the Ridian plugin
hello <- function(name){
	print(paste("Hello", name, sep = " "))
}

hello("Bob")
  • Plots can be embedded in the note by default. You can turn this off in the settings.
y = c(12, 15, 28, 17, 18)
x = 1:length(y)
plot(x, y, type="l")
  • Requirements: Cling is installed and correct path is set in the settings.
  • Code will be executed line-by-line without needing a main function.
#include <iostream>
#include <string>

using namespace std;

void hello(string name) {
	cout << "Hello " << name << "!\n";
}

hello("Alice);
  • Main functions can be used as an entrypoint by toggling the option in settings.
#include <iostream>

void main() {
	std::cout << "Hello, World!" << std::endl;
}
  • Requirements: Cling is installed and correct path is set in the settings.
  • Code will be executed line-by-line without needing a main function.
#include <stdio.h>

printf("Hello, World!");
  • Main functions can be used as an entrypoint by toggling the option in settings.
#include <stdio.h>

int main() {
	printf("Hello, World!");
	return 0;
}
  • Requirements: Java 11 or higher is installed and the correct path is set in the settings.
public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

LaTeX

Requirements: LaTeX distribution like MiKTeX or TeX Live is installed and the correct paths are set in the settings.

Minimal example

Injects default document class. Consider setting Crop to content.

\begin{document}
Hello World!
\end{document}

Name output file

Set filename with \title{…}. Adds prefix figure to avoid file name collisions, group all generated files, and for appearance CSS selectors. Click run again will overwrite the file, and refresh its embeddings in the active view.

![[figure time of day.svg]]
\documentclass[border=2pt]{standalone} \title{time of day}
\usepackage{datetime2}
\begin{document}
The time is \DTMcurrenttime.
\end{document}

Include attachments

Include files relative to the vault's attachment folder. Consider listings for source code listings, markdown for inputting markdown files as LaTeX code, and \input{…} to paste plaintext or LaTeX source files. Layout with graphbox for vertical alignment, or tabularray for more complex alignment.

\documentclass{standalone} \title{include_attachments}
\usepackage{graphicx}
\begin{document}
\includegraphics{figure time of day.pdf} \quad
\includegraphics{figure time of day.pdf}
\end{document}

Automatically reruns to get cross-references right.

For instance reference a label that appears later in the document. The plugin detects LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. during compilation and reruns until resolved.

\documentclass{article} \title{sum of two poisson distribution}
\usepackage{mathtools,amsfonts}
\begin{document}
As seen in \eqref{eq:poisson}, we use convolutions of probability distributions for two independent poisson distributed random variables.
\begin{align*} \MoveEqLeft
\mathbb{P}(X + Y = k) = \sum_{m = 0}^\infty \mathbb{P}(X = m)\, \mathbb{P}(X = m - k) \tag{1}\label{eq:poisson} \\&
= \sum_{m = 0}^k \frac{\lambda^m\, e^{-\lambda}}{m!} \cdot \frac{\mu^{k - m}\, e^{-\mu}}{(k - m)!} = \ldots 
\end{align*} 
\end{document}

Not all rerun requirements are easy to detect. Consider adding the package lastpage to force a rerun, by creating an unresolved reference.

\documentclass{article} \title{rerun sidenotes table}
\usepackage{sidenotes,tabularray,lipsum,lastpage}
\begin{document} \SetTblrInner{hlines}
\sidenotetext{This is a marginal note.} \lipsum[1][1-3] 
\begin{table*}
\begin{tblr}[tall, caption={Expand table into page margins}]{X}
    \lipsum[3][1-4]
\end{tblr}
\end{table*}
\end{document}

Explore more LaTeX examples, consult package documentations, or learn about LuaLaTeX.

  • Requirements: install dotnet core sdk and run in command line dotnet tool install -g dotnet-script, then config dotnet-script fullpath.
Console.WriteLine("Hello, World!");  
  • Requirements: dart sdk is installed and the correct path is set in the settings.
void main() {
  print("Hello World");
}
  • Requirements: install lua and config lua path.
print('Hello, World!')
  • Requirements: install lean and config lean path.
def main : IO Unit :=
  IO.println s!"Hello, World!"

#eval main
  • Requirements: Set the path to your preferred shell in the settings. Default is Bash. (Only on Linux and macOS)
echo "Hello World!"
ls -la
  • Requirements: Used to execute shell commands on Windows. Default is Powershell but can be set to your preferred shell in the settings.
  • On macOS: You probably need to change the command to use from powershell to pwsh in the plugin settings. Make sure you set the right path.
echo "Hello World!"
  • If you prefer batch: change the path settings in the menu for powershell Example how to use the magic commands.
  • Requirements: Used to execute batch commands on Windows (also known as BAT or CMD). Default is command prompt, but can be set to your preferred shell in the settings.
  • Important: The percent sign is used in batch files to represent command line parameters: e.g. %1, %2, ... Two percent signs in a batch file are treated like a single percent sign in a command: e.g. %%f When using variables in execute code, use 2 percent signs. More info here
ECHO Hello World!
  • Requirements: NO requirements, works with Tau-Prolog.
  • Important: Add your queries after a line "% query" in the code block like in the following
likes(john, pizza).
likes(john, cheese).
likes(jane, beer).

% query
likes(john, X).
  • Requirements: Groovy is installed and the correct path is set in the settings.
def hello(name){  
	println "Hello ${name}!" 
}  

def helloClosure = {  
	println "Hello ${it}!" 
}  
  
hello("Bob")
  
helloClosure "Bob"
  • Requirements: Golang is installed and correct path is set in the settings(go binary is available).
  • Every code block must contain package declaration and a main function.
package main

import "fmt"

func main() {
	fmt.Println("Hello World")
}
  • Requirements: Cargo is installed and correct path is set in the settings(cargo binary is available).
  • cargo-eval is installed. Install using cargo install cargo-eval.
  • Import statements and external crates is supported by cargo-eval. Read their documentation.
  • Every code block must have a main function.
fn main() {
	println!("Hello World");
}
  • Requirements: Kotlin is installed and correct path is set in the settings.
hello(name: String) {
	println("Hello $name!")
}

hello("Bob")
  • Requirements: Mathematica is installed and correct path is set in the settings.
  • You can add -cloud as argument in the settings to use the Wolfram Cloud instead of the local installation.
  • You can either use runghc (compiler) or ghci (interpreter) to run your code.
    • runghc requirements:
      • runghc and ghc are installed and correct paths are set in the settings.
      • Every code block must contain a main function.
    • ghci requirements:
      • ghci is installed and correct path is set in the settings.
      • If you have a main function you have to manually call it.
mySum:: Num a => a -> a -> a
mySum a b = a+b
  • Requirements: Scala is installed and the correct path is set in the settings.
println("Hello, World!")
  • Requirements: Racket is installed and the correct path is set in the settings.
"Hello, world!"
  • Requirements: Ruby is installed and the correct path is set in the settings.
puts "Hello, World!"
  • Requirements: PHP is installed and the correct path is set in the settings.
<?php
echo "Hello, World!";
?>
  • Requirements: Octave is installed and the correct path is set in the settings.
exp(i*pi)

x = -10:0.1:10;
plot (x, sin(x));

(Thanks to Michael M. Tung for the code example.)

  • Figures are set to invisible by default. They are store in a file and directly embedded in the note.
  • Requirements: Maxima is installed and the correct path is set in the settings.
integrate(x,x);
plot2d(sin(x), [x,0,%pi]);

(Thanks to Michael M. Tung for the code example.)

  • By default, plots are saved in a file and directly embedded in the note.
  • Requirements: OCaml is installed and the correct path is set in the settings.
print_endline "Hello, OCaml!"
  • Requirements: Swift is installed and the correct path is set in the settings.
print("Hello, world!")

Squiggle: For Squiggle support take a look at the Obsidian Squiggle plugin by @jqhoogland.

Magic Commands 🪄

Magic commands are some meta commands that can be used in the code block. They are processed by the plugin before the source code is executed.

The following magic commands are supported:

  • @vault_path: Inserts the vault path as string (e.g. "/User/path/to/vault")
  • @vault_url: Inserts the vault url as string. (e.g. "app://local/path/to/vault")
  • @note_path: Inserts the note path as string (e.g. "/User/path/to/vault/Note.md")
  • @note_url: Inserts the note url as string. (e.g. "app://local/path/to/vault/Note.md")
  • @title: Inserts the note title as string.
  • @show(ImagePath): Displays an image at the given path in the note.
  • @show(ImagePath, Width, Height): Displays an image at the given path in the note.
  • @show(ImagePath, Width, Height, Alignment[center|left|right]): Displays an image at the given path in the note.
  • @html(HtmlSource): Displays HTML in the note
  • @content: Inserts the html content of the note in the code block. (Here you find a nice example for the usage of this command.)

(@show(...) and @html(...) are only supported for JavaScript and Python yet.) (The old commands @note and @vault are still supported, but may be removed in the future.)

Examples for the magic commands with Python:

print("Vault path:", @vault_path)
print("Vault url:", @vault_url)

print("Note path:", @note_path)
print("Note url:", @note_url)

print("Note title:", @title)
@show("image.png")
@show("image.png", 100, 100)
@show("https://upload.wikimedia.org/wikipedia/commons/d/de/TestScreen_square.svg", 10%, 10%, "center")
@html("<h1>HTML Caption</h1>")
@html('''
<svg width="100%" height="100%" viewBox="0 0 600 600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <circle cx="300" cy="300" r="250" style="fill:peru;" />
  <circle cx="200" cy="250" r="50" style="fill:black;" />
  <circle cx="400" cy="250" r="50" style="fill:black;" />
  <circle cx="190" cy="230" r="20" style="fill:white;" />
  <circle cx="390" cy="230" r="20" style="fill:white;" />
  <circle cx="250" cy="400" r="85" style="fill:saddlebrown;" />
  <circle cx="350" cy="400" r="85" style="fill:saddlebrown;" />
  <ellipse cx="300" cy="380" rx="50" ry="35" style="fill:black;" />
  <ellipse cx="130" cy="100" rx="110" ry="70" style="fill:saddlebrown;"/>
<ellipse cx="470" cy="100" rx="110" ry="70" style="fill:saddlebrown;" />
</svg> 
''')

Try it out yourself!

Example how to use the magic commands.

Running in Preview ⏩

Adding run- before the language name in the code blocks (as in the example below) renders the code block in the preview already. This allows you to execute the code in the preview.

```run-python
def hello(name):
print("Hello", name)

    if __name__ == "__main__":
        hello("Eve")

Code Block Arguments 🏷

Code blocks support specifying additional arguments in the form {key='value', otherkey=['val1', 'val2']}. Add them to code blocks like so:

```python {label='my label'}
print('my labelled code block')
```

Global Code Injection and Reusing Code Blocks 📘

Sometimes it is helpful to have code that is executed before or after each other block of the same language. This plugin supports this in a few ways:

Global Injection in the Settings

All languages have a 'global inject' option in the settings that allows defining code to be added to the top of every single code block on a per-language basis. Code reuse fully works with all languages, and all existing magic commands, including showing images, and inline plot outputs. This can be used to define e.g. often used functions or import your favourite packages or libraries.

Note-wide Pre- and Post-Code Blocks

You can specify the pre argument to create a block that is executed before each following code block:

```python {pre}
import pandas as pd
```

This code block is added before each python block you define below in the note and import the pandas package.

post blocks work the same way, but the code in post blocks is executed after your other code blocks.

Pre-/post-blocks will only apply to code blocks defined below them, and will only apply to code blocks from the same language.

You can also have a pre- and post-block at the same time by specifying {pre, post}

Note, the pre/post arguments are special in that you don't need to explicitly state a key/value pair, however you can do so if you wish:

{pre} is equivalent to {export='pre'}, {pre, post} is equivalent to {export=['pre', 'post']}.

Labelled Code Blocks

You can label specific code blocks with the label='string' argument, then import them explicitly in other blocks with the import='string' or import=['string1', 'string2', ...] argument so they aren't automatically imported as with pre-/post-blocks:

```python {label='block 1'}
print('running block 1')
```

```python {label='block 2'}
print('running block 2')
```

```python {import=['block 1', 'block 2']}
print('should run block 1 and 2')
```

Labelled code blocks will be executed before the code block being run, however after global injects and pre blocks.

Ignoring Code Exports

In case you want to manually ignore specific exports in a code block like pre / post / global exports, you can do so with the ignore argument that accepts either pre, post, global, an array of any of these 3, or all to ignore all exports:

```python {ignore='all'}
print('should not run any global injects or pre / post blocks')
```

```python {ignore=['global', 'pre']}
print('should not run any pre blocks or global injects')
```

Notebook Mode

A few languages (currently JS and Python) support Notebook Mode. If a language is using Notebook Mode (configurable in Settings), then all code blocks in a given file will execute in the same environment.

Variables functions, etc. defined in one code block will be available in other code blocks. Code blocks are executed on demand; the order of code blocks in the file does not affect the order in which they are executed:

```js
console.log(f)
```
```js
var f = 3;
```

Running the first code block, then the second, then the first again will give:

Uncaught ReferenceError: f is not defined
undefined
3

To manage the open runtimes for Notebook Mode, you can use the Open Code Runtime Management command in the command palette. From this sidebar window, you can stop kernels. Note: force-stopping requires taskkill on Windows and pkill on Unix. 99% of systems should have these preinstalled: if yours doesn't, please file an issue

Persistent Output [Experimental]

Since version 2.0.0, the plugin supports persistent output. This means that the output of a code block is stored in the note and will be displayed when you open the note again. This is useful for long-running code blocks or code blocks that produce a lot of output. The output is stored in the note as a comment and will be displayed in the preview mode.

To enable this feature, you have to enable the setting Persistent Output in the plugin settings. We recommend reopening open notes that contain code blocks after enabling this feature.

⚠ This feature is still experimental and may not work as expected in all cases! We recommend that you disable this feature if you encounter any problems.

Misc 📦

Style Settings 🎨

This plugin supports customising styles using the Style Settings plugin or the Obsidian Code Styler plugin.

Other Tools

Take a look at the Obsidian Tools python package to find some useful tools for interacting with your vault.

Quickstart Guide

Start by checking if the plugin is installed and activated. Continue by creating a code block in your preferred language. Check above to see if the language is supported.

Now you can switch from the preview mode to the rendered mode (where you can't edit the text anymore). Now, when you hover over the code block, you should see a button labeled "run". Click it!

If it didn't work and a warning appears (that is not related to a bug in your code), you probably need to set the correct execution part for the language (e.g., "C://User/YourName/anaconda/python.exe" or something like that). You can find instructions about how to find the right path below.

Now it works, great! Feel free to read or skim through the text above to learn more features you might like, for example persistent output or embedding of plots.

Installation 💾

In your vault go to Settings > Community plugins > Browse and search for "Execute Code". Select the plugin, install it and activate it.

or

Follow this link and click "Open in Obsidian".

Locating Path Settings ( ex. JavaScript | Node )

To avoid or resolve errors from an incorrect path.

('where' for Mac and Windows) --- (for Linux Users, replace 'where' with 'which')

  1. In your terminal, type 'where node' Type 'where node' in terminal
  2. Copy path from terminal ( ex. /opt/homebrew/bin/node )
  3. Paste in path under settings ( ex. Node path ) Update path under settings with path from step 2

Warning ⚠

Do not execute code from sources you don't know or code you don't understand. Executing code can cause irreparable damage.

Known Problems 🛠

  • On Linux, Snap/Flatpak/AppImage installations of Obsidian run in an isolated environment. As such, they will not have access to any of your installed programs. If you are on Linux, make sure to install the .deb version of Obsidian. If your distro isn't compatible with .deb files, you may see issues.
  • Missing when run button after switching the theme: Try to close and reopen your notes and wait for a few minutes. It seems like obsidian doesn't call the postprocessors after the theme switch.
  • Pre-/Post-blocks may not be executed if the file contains duplicate code blocks.
  • In Python, Embed Plots may not be off while Notebook Mode is on

Contribution 🤝

All contributions are welcome. Just create a merge request or email me: contact(at)tim-wibiral.de

The open issues are a good starting point to find something to work on. Some are marked as "good first issue" and are easier to solve.

Contributors ♥

Made with contrib.rocks.

Similar Plugins

info
• Similar plugins are suggested based on the common tags between the plugins.
Note Toolbar
2 years ago by Chris Gurney
Flexible, context-aware toolbars for your notes in Obsidian.
Smart Composer
2 years ago by Heesu Suh
AI chat assistant for Obsidian with contextual awareness, smart writing assistance, and one-click edits. Features vault-aware conversations, semantic search, and local model support.
MCP Tools
a year ago by Jack Steam
Add Obsidian integrations like semantic search and custom Templater prompts to Claude or any MCP client.
Zoottelkeeper
5 years ago by Akos Balasko
Obsidian plugin of Zoottelkeeper: An automated folder-level index file generator and maintainer.
Shell commands
5 years ago by Jarkko Linnanvirta
Execute system commands via hotkeys or command palette in Obsidian (https://obsidian.md). Some automated events are also supported, and execution via URI links.
Local Backup
3 years ago by GC Chen
Automatically creates a local backup of the vault.
Code Emitter
3 years ago by YISH
An obsidian plugin that allows code blocks executed interactively in sandbox like jupyter notebooks. Supported language rust、kotlin、python、Javascript、TypeScript etc.
Khoj
3 years ago by Debanjum Singh Solanky
Your AI second brain. Self-hostable. Get answers from the web or your docs. Build custom agents, schedule automations, do deep research. Turn any online or local LLM into your personal, autonomous AI (gpt, claude, gemini, llama, qwen, mistral). Get started - free.
CustomJS
5 years ago by Sam Lewis
An Obsidian plugin to allow users to reuse code blocks across all devices and OSes
Modal forms
3 years ago by Danielo Rodriguez
Define forms for filling data that you will be able to open from anywhere you can run JS
Enveloppe
4 years ago by Mara-Li
Enveloppe helps you to publish your notes on a GitHub repository from your Obsidian Vault, for free!
VSCode Editor
3 years ago by Sun Xvming
Edit Code Files like VSCode in Obsidian.
Note Linker
4 years ago by Alexander Weichart
🔗 Automatically link your Obsidian notes.
AI Providers
a year ago by Pavel Frankov
This plugin is a hub for setting AI providers (OpenAI-like, Ollama and more) in one place.
Syncthing Integration
3 years ago by LBF38
Obsidian plugin for Syncthing integration
Note Companion AI
8 months ago by Benjamin Ashgan Shafii
Note Companion: AI assistant for Obsidian that goes beyond just a chat. (prev File Organizer 2000)
Auto Template Trigger
3 years ago by Numeroflip
An obsidian.md plugin, to automatically trigger a template on new file creation
Shiki Highlighter
2 years ago by Moritz Jung
An Obsidian plugin that offers better code highlighting via shiki and Expressive Code.
Pieces for Developers
3 years ago by Pieces For Developers
Pieces' powerful extension for Obsidian-MD that allows users to access their code snippets directly within the Obsidian workspace
Regex Pipeline
5 years ago by No3371
An Obsidian plugin that allows users to setup custom regex rules to automatically format notes.
Prompt ChatGPT
2 years ago by Coduhuey
Code Files
3 years ago by Lukas Bach
Plugin for ObsidianMD to show and edit code files along other notes.
Personal Assistant
3 years ago by edony
A plugin that harnesses AI agents and streamlining techniques to help you automatically manage Obsidian.
Shortcut Launcher
4 years ago by MacStories
Trigger shortcuts in Apple's Shortcuts app from Obsidian with custom commands.
Text Expander JS
4 years ago by Jonathan Heard
Obsidian plugin: Type text shortcuts that expand into javascript generated text.
Code Block
4 years ago by Patrik Lindefors
AI Tagger
2 years ago by Luca Grippa
Simplify tagging in Obsidian. Instantly analyze and tag your document with one click for efficient note organization.
Apply Patterns
5 years ago by Jacob Levernier
An Obsidian plugin for applying patterns of find and replace in succession.
Code block from selection
5 years ago by Dmitry Savosh
Obsidian plugin. Adds code block for the selected text.
Format code blocks of various languages
4 years ago by iVariable
Attachment Manager
3 years ago by chenfeicqq
Attachment folder name binding note name, automatically rename, automatically delete, show/hide.
YouVersion Linker
3 years ago by Jaanonim
Obsidian plugin that automatically link bible verses to YouVersion bible.
Enhanced Canvas
a year ago by RobertttBS
When editing on Canvas, properties and Markdown links to notes are automatically updated, enabling backlinks in Canvas.
AI Tagger Universe
a year ago by Hu Nie
An intelligent Obsidian plugin that leverages AI to automatically analyze note content and suggest relevant tags, supporting both local and cloud-based LLM services.
Differential ZIP Backup
2 years ago by vorotamoroz
Dataview (to) Properties
10 months ago by Mara-Li
Sync inline Dataview to properties (YAML frontmatter)
Webhooks
5 years ago by Stephen Solka
Connect obsidian to the internet of things via webhooks
Day and Night
4 years ago by Kevin Patel
An Obsidian plugin to automatically switch between day and night themes based on a set schedule
Embed Code File
4 years ago by Abdullah Almariah
Linkify
4 years ago by Matthew Chan
Arcana
3 years ago by A-F-V
Supercharge your Obsidian note-taking through AI-powered insights and suggestions
RunJS
3 years ago by eoureo
Let's run JavaScript easily and simply in Obsidian.
Automatic Linker
a year ago by Kodai Nakamura
Weekly Review
3 years ago by Brandon Boswell
Auto Filename
3 years ago by rcsaquino
Auto Filename is an Obsidian.md plugin that automatically renames files in Obsidian based on the first x characters of the file, saving you time and effort.
Substitutions
2 years ago by BambusControl
Automatic text replacer for Obsidian.md
InlineAI
a year ago by FBarrca
Snippets
5 years ago by Pelao
JavaScript Init
5 years ago by ryanpcmcquen
Run custom JavaScript in Obsidian.
Packrat
4 years ago by Thomas Herden
Process completed instances of recurring items created by the Obsidian Tasks plugin
User Plugins
4 years ago by mnowotnik
Allows user scripts to use plugin API
Metadata Auto Classifier
2 years ago by Beomsu Koh
AI-powered Obsidian plugin that automatically classifies and generates metadata (tags, frontmatter) for your notes.
Cron
3 years ago by Callum Loh
Obsidian cron / schedular plugin to schedule automatic execution of commands
Gnome Terminal Loader
3 years ago by David Carmichael
Auto Periodic Notes
2 years ago by Jamie Hurst
Obsidian plugin to create new periodic notes automatically in the background and allow these to be pinned in your open tabs. Requires the "Periodic Notes" plugin.
Code Block Labels
4 years ago by Sean Bowers
Provides labels for codeblocks in Obsidian
Stenography
5 years ago by bramses
Auto Hyperlink
3 years ago by take6
Automation
2 years ago by Benature
Auto Front Matter
3 years ago by conorzhong
NoteMover shortcut
a year ago by Lars Bücker
Quickly and easily move notes to predefined folders. Perfect for organizing your notes.
Frontmatter generator
3 years ago by Hananoshika Yomaru
A plugin for Obsidian that generates frontmatter for notes
Open File by Magic Date
4 years ago by simplgy
Code::Stats
3 years ago by MiskaMyasa
The Code::Stats plugin allows you to track your coding progress and earn XP for writing markdown in the Obsidian editor.
R.E.L.A.X.
2 years ago by Syr
Regex Obsidian Plugin
Tab Rotator
3 years ago by Steven Jin
Obsidian Rotate opened tabs with a specified time interval
Babashka
3 years ago by Filipe Silva
Run Obsidian Clojure(Script) codeblocks in Babashka.
NeuroVox
a year ago by Synaptic Labs
Obsidian plugin for transcription and generation
Simple Code Formatter
2 years ago by SY
Format current code block in obsidian.
Run
2 years ago by Hananoshika Yomaru
Generate markdown from dataview query and javascript.
Codeblock Template
3 years ago by Super10
A template plugin that allows for the reuse of content within Code Blocks!一个可以把Code Block的内容重复利用模板插件!
Current View
10 months ago by Lucas Ostmann
Automatically set the view mode (Reading, Live Preview, Source) for notes in Obsidian using folder rules, file patterns, or frontmatter.
Snippets Manager
2 years ago by Venkatraman Dhamodaran
Snippets Manager (Text Expander) For Obsidian
Title As Link Text
a year ago by Lex Toumbourou
An Obsidian plugin to set the Link Text using the document title
Blueprint
3 months ago by François Vaux
Repeatable templates plugin for Obsidian
Steward
6 months ago by Dang Nguyen
A vault-specific agent equipped with agentic capacity, fast search, flexible commands, vault management, and terminals to "jump" into other CLI agents, such as Claude, Gemini, etc.
RSS Copyist
2 years ago by aoout
Get the RSS articles as notes.
Tag Breakdown Generator
3 years ago by Hananoshika Yomaru
Break down nested tags into multiple parent tags
Note 2 Tag Generator
2 years ago by Augustin
Alt-Click to Copy
2 years ago by Veer Sheth
Lean Syntax Highlight
2 years ago by tomaz1502
A plugin for Obsidian that provides syntax highlight for Lean.
Daily note creator
2 years ago by Mario Holubar
Automatically creates missing daily notes.
Personal OS
2 years ago by A.Buot
Note UID Generator
a year ago by Valentin Pelletier
Allow you to automatically generate UID for the notes in your vault.
Todos sort
a year ago by Jiri Sifalda
A plugin for Obsidian that sorts todos within a note
Google Calendar Importer
7 months ago by Fan Li
A simple and light-weighted google calendar importer, allow injecting the events / tasks of a day automatically to your daily notes, or import it to anywhere with a command.
Code Language Completer
2 years ago by Stanley Wang
minimal Obisdian plugin, fine-tuned to speed up developer note-taking
Auto Replacer
10 months ago by Alecell
A live text replacement plugin that applies automatic formatting, corrections, or custom replacements in real-time. Define your own regex-based rules and transformation logic to modify text dynamically as you type.
Timeline Canvas Creator
10 months ago by chris-codes1
Quickly create timeline structured canvases in Obsidian.
Inkporter
a year ago by Ayush Kumar Saroj
Inkporter is an Obsidian plugin that digitizes handwritten notes with smart ink isolation, adaptive theming, and seamless import workflows.
Missing Link File Creator
a year ago by Lemon695
The plugin creates both missing links and the corresponding files.
Last Position
a year ago by saktawdi
Automatically scroll to the last viewed position when opening the markdown document.
Vault File Renamer
a year ago by Louan Fontenele
Vault File Renamer: Automatically standardizes file names to GitHub style (lowercase, no accents, only -, ., _) while preserving folder structure and file contents.
pycalc
a year ago by pycalc
LinkMagic
2 years ago by AndyReifman
AI integration Hub
a year ago by Hishmat Salehi
A modular AI integration hub for Obsidian
Template Filename
a year ago by Callum Alpass
Obsidian plugin for creating notes with templatable filenames
Note Linker with Previewer
2 years ago by Nick Allison
Obsidian Plugin to find and Link notes
Svelte Syntax Highlighter
2 years ago by Typhoon-Kim
This plugin adds Svelte syntax highlighting to Obsidian.
Sentinel
a year ago by Giorgos Sarigiannidis
A plugin for Obsidian that allows you to update properties or run commands based on document visibility changes.
tidit
a year ago by codingthings.com
tidit is an Obsidian - https://obsidian.md - plugin that adds timestamps to your document as you type — when you want it, how you want it, where you want it.
Organized daily notes
a year ago by duchangkim
Automatically organizes your daily notes into customizable folder structures for better organization and easier navigation.
Task Mover
a year ago by Mariia Nebesnaia
A plugin for obsidian to move unfinished tasks to the daily note automatically
URL Formatter
8 months ago by Thomas Snoeck
Automatically formats specific URLs pasted into Obsidian into clean Markdown links.
AI Note Tagger
a year ago by Jasper Mayone
Auto tagging obsidian notes w/ AI
Rapid AI
2 years ago by Rapid AI
AI Assistant for selected text and generating content with Markdown. Shortcuts and quick action buttons provide instant AI assistance. It provides a high availability API for unlimited Chat GPT request rates, so you can ensure smooth work for any workload.
Snippetsaurus
a year ago by Christian Humbert
Hotstrings
a year ago by wakywayne
Runsh
a year ago by Ddone
A simple plugin that allows to run shell commands from obsidian.
Tasks Cleaner
a year ago by lowit
🧹 Tasks Cleaner is a plugin for Obsidian that helps you automatically remove old completed tasks from your Markdown notes
Varinote
a year ago by Giorgos Sarigiannidis
A plugin for Obsidian that allows you to add variables in Templates and set their values during the Note creation.
Rsync
a year ago by Ganapathy Raman
An Obsidian plugin to perform sync files between machines using Rsync
Memos AI Sync
a year ago by leoleelxh
obsidian-memos-sync-plugin,将 Memos 内容同步到 Obsidian 的插件,提供无缝集成体验。
Inline Code Copy
a year ago by Hongchen Lin
Watched-Metadata
2 years ago by Nail Ahmed
Watches for changes in metadata and updates the note content accordingly.
Jura Links
2 years ago by Lukas Collier & Emi Le
Verlinke deine Normangaben, Aktenzeichen oder Fundstellen in deiner Obsidian Notiz mit Gesetzesanbietern.
Mastodon Threading
a year ago by El Pamplina de Cai
Obsidian plugin to compose and post threads to Mastodon
NotePix
8 months ago by Ayush Parkara
NotePix automatically uploads images, screenshots from your Obsidian vault to a designated GitHub repository. It then seamlessly replaces the local link with a fast URL, keeping your vault lightweight and portable.
Discord Message Sender
10 months ago by okawak
Obsidian Plugin: Send messages from a Discord channel to your Vault
Plugin REPL
a year ago by readwithai
An in-note Read Evaluate Print Loop to execute JavaScript within Obsidian
Daily Note Structure
2 years ago by db-developer
This obsidian plugin creates a structure for your daily notes
Note From Form
a year ago by Sergei Kosivchenko
Obsidian plugin that adds support to define input form and generate notes based on it
Auto Daily Note
a year ago by John Dolittle
Fast Image Auto Uploader
2 years ago by Longtao Wu
upload images from your clipboard by gopic
Daily Notes Automater
a year ago by David Pedrero
ruby.wasm
2 years ago by geeknees
Obsidian RubyWasm Plugin
Copy Local Graph Paths
a year ago by Amy Z
copy-local-graph-paths is a simple Obsidian plugin that copies the paths of notes linked to your current page.
Open or Create File
7 months ago by Ilya Paripsa
Set up Obsidian commands that create or open files based on predefined patterns.
Blog AI Generator
a year ago by Gareth Ng
Obsidian Plugin: generate blog via AI based on the current note.
Paste as Embed
2 years ago by Matt Laporte
Obsidian plugin to paste contents of clipboard into a new note, and embed it in the active note.
Current File
2 years ago by Mark Fowler
An Obsidian plugin to allows external applications to know what file Obsidian is currently viewing
IMSwitch in Math Block
a year ago by XXM
Notes 2 Tweets
2 years ago by Tejas Sharma
Generate and schedule tweets automatically from your notes on Obsidian
Random Wikipedia Article
10 months ago by SpencerF718
An Obsidian plugin to generate a note of a random Wikipedia article.
Hanko
a year ago by Telehakke
Obsidian plugin.
Handlebars Dynamic Templating
3 months ago by Hide_D
Handlebars dynamic templating. Define template files and use them dynamically via hb blocks. Template recursion is also possible.
KOI Sync
a year ago by Luke Miller
Content OS
8 months ago by eharris128
Post to LinkedIn from within Obsidian
Move Cursor On Startup
8 months ago by Jared Kelnhofer
Obsidian plugin to move the cursor to the right and back to the left when starting up. Why? To keep DataView expressions from not running on the first load of, say, your Home file.
One Step Wiki Link
a year ago by Busyo
用于 Obsidian 一步插入当前界面匹配到的所有外链(维基链接)
EUpload
a year ago by Appleex
Obsidian 插件,专用于上传文件到存储仓库。目前支持 Lskypro(兰空图床),后续有需求会引入其它存储方式,如:Github/Gitee等等。