Skip to content
ํ”„๋กœ์ ํŠธ

obsidian-nvim/obsidian.nvim has 2,245 GitHub stars and 154 forks. GitHot measured -1 stars in 24 hours and +5 in 7 days. Last checked 2026-11-14 18:19 UTC. Last push 2026-11-10.

์ด ์ˆ˜์น˜๋ฅผ ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์ธก์ •๋œ ์Šคํƒ€ ์ฆ๊ฐ€

in 24h
-1
in 7 days
+5
in 15 days
๊ธฐ๋ก ์ˆ˜์ง‘ ์ค‘
in 1 month
๊ธฐ๋ก ์ˆ˜์ง‘ ์ค‘

์„œ๋กœ ๊ฒน์น˜๋Š” ๊ธฐ๊ฐ„์˜ ์ˆœ์ฆ๊ฐ€๋Ÿ‰์ด๋ฉฐ ์ผ๋ณ„ ํ•ฉ๊ณ„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ธก์ •๊ฐ’์ด ์—†์œผ๋ฉด ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค. ์Šคํƒ€๋Š” ๊ด€์‹ฌ๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์†Œ๊ฐœ

Obsidian ๐Ÿค Neovim (actively maintained version)

๊ฐœ๋ฐœ ๋„๊ตฌ

README.md

Original

obsidian.nvim


A community fork of epwalsh/obsidian.nvim, neovim plugin for Obsidian vaults.

Built for people who love the concept of Obsidian -- a simple, markdown-based notes app -- but love Neovim too much to stand typing characters into anything else.

This plugin is not meant to replace Obsidian, but to complement it. The Obsidian app comes with a mobile app and has a lot of functionality that's not feasible to implement in Neovim, such as the graph explorer view. That said, this plugin stands on its own as well. You don't necessarily need to use it alongside the Obsidian app.

๐Ÿด About the fork

The original project has not been actively maintained for quite a while and with bugs, issues and pull requests piling up, people from the community decided to fork and maintain the project.

  • Discussions are happening in GitHub Discussions
  • Sponsor the project at Open Collective
  • To migrate from original repo or older releases, see Breaking changes
  • See the documentation:
    • obsidian.nvim documentation for documentation of the latest release.
    • :Obsidian help or :Obsidian helpgrep for documentation update to date with your current installation.
    • :h obsidian-api for API reference.

โญ Features

โ–ถ๏ธ Completion: Ultra-fast, asynchronous autocompletion for note references and tags via in-process LSP (triggered by typing [[ for wiki and markdown links, # for tags, [^ for footnotes). Use [[##query to search headings across the vault. For blocks, use [[^query for the current note, [[note^query or [[note#^query for a named note, and [[^^query across the vault; unlabeled blocks receive an ID when selected.

Vault-wide block candidates are indexed in memory on first use and updated per note when watched files change. The index starts warming at [[^^; completion items appear once the block query reaches completion.min_chars (set it to 0 to show candidates for a bare prefix).

๐Ÿƒ Navigation: Navigate throughout your vault via links, backlinks, tags and etc.

๐Ÿ“ท Images: Paste images into notes.

๐Ÿ“Ž Embeds: Render Markdown notes, headings, and blocks inline, with paged whole-note previews. See Embeds.

๐Ÿ“ˆ Status: See note status in footer like obsidian app.

๐Ÿ”„ Sync: Sync support for Obsidian Sync.

Keymaps

  • smart_action, bind to <CR> will:
    • If cursor is on a link, follow the link.
    • If cursor is on a tag, show all notes with that tag in a picker.
    • If cursor is on a checkbox, toggle the checkbox, see Checkbox.create_new.
    • If cursor is on a heading, cycle the fold of that heading, see Folding to set this up.
  • nav_link, bind to [o and ]o will navigate cursor to next valid link in the buffer.

For other available actions and remapping default ones, see Keymaps

Commands

There's one entry point user command for this plugin: Obsidian

  • Obsidian<CR> (<enter>) to select sub commands.
  • Obsidian <Tab> to get completion for sub commands.
  • Sub commands are context sensitive, meaning some actions will only appear when:
    • you are in a note.
    • you are in visual mode.
  • See Commands for more info.

[!Warning] Note subcommands related to refactoring, like rename and template And all the visual mode commands, will be moved to code actions in 3.17.0.

Top level commands

  • :Obsidian check - check for common issues in your vault and plugin setup
  • :Obsidian dailies [OFFSET ...] - open a picker list of daily notes
    • :Obsidian dailies -2 1 to list daily notes from 2 days ago until tomorrow
  • :Obsidian help - find files in the plugin help docs
  • :Obsidian helpgrep - grep files in the plugin help docs
  • :Obsidian new [TITLE] - create a new note
  • :Obsidian open [QUERY] - open a note in the Obsidian app
    • query is used to resolve the note to open by ID, path, or alias, else use current note
  • :Obsidian properties [KEY] [VALUE] - get a picker list of frontmatter properties across the vault
    • with no arguments, opens a three-stage picker: property keys, then values for the chosen key, then notes carrying that key/value pair
    • KEY alone skips to the values stage; KEY VALUE skips straight to matching notes
  • :Obsidian today [OFFSET_OR_DATE] - open/create a new daily note
    • offset is in days, e.g. use :Obsidian today -1 to go to yesterday's note.
    • you can also give an argument like 3-1/2026-3-1, it will parse common date formats and open daily for that specific date.
    • Unlike :Obsidian yesterday and :Obsidian tomorrow this command does not differentiate between weekdays and weekends
  • :Obsidian tomorrow - open/create the daily note for the next working day
  • :Obsidian yesterday - open/create the daily note for the previous working day
  • :Obsidian new_from_template [TITLE] [TEMPLATE] - create a new note with TITLE from a template with the name TEMPLATE
    • both arguments are optional. If not given, the template will be selected from a list using your preferred picker
  • :Obsidian quick_switch - switch to another note in your vault, searching by its name with a picker
  • :Obsidian rebuild_cache - force a full cache rescan and flush
  • :Obsidian search [QUERY] - search for (or create) notes in your vault using ripgrep with your preferred picker
  • :Obsidian sync [SUBCMD] - use obsidian-headless to access official obsidian sync service. Default off, enable with opts.sync.enabled = true, for more see Sync.
  • :Obsidian tags [TAG ...] - get a picker list of all occurrences of the given tags
  • :Obsidian unique_note [TITLE] - create a new note with a unique, timestamp-based ID
  • :Obsidian workspace [NAME] - switch to another workspace

Note commands

  • :Obsidian backlinks - get a picker list of references to the current note
    • grr/vim.lsp.buf.references to see references in quickfix list
  • :Obsidian follow_link [STRATEGY] - follow a note reference under the cursor
    • available strategies: vsplit, hsplit, vsplit_force, hsplit_force
    • If the link does not exist, you will be prompted to create it. If you choose to create it, the link in the buffer will be automatically updated with the new note's ID and alias.
  • :Obsidian toc - get a picker list of table of contents for current note
  • :Obsidian footnotes - get a select list of all footnotes in current note, with preview
  • :Obsidian template [NAME] - insert a template from the templates folder, selecting from a list using your preferred picker
  • :Obsidian links - get a picker list of all links in current note
  • :Obsidian paste_img [IMGNAME] - paste an image from the clipboard into the note at the cursor position by saving it to the vault and adding a markdown image link
  • :Obsidian rename [NEWNAME] - rename the note of the current buffer or reference under the cursor, updating all backlinks across the vault
    • runs :wa before renaming, and loads every note with backlinks into your buffer-list
    • after renaming you need to do :wa again for changes to take effect
    • alternatively, call vim.lsp.buf.rename or use grn
  • :Obsidian toggle_checkbox - cycle through checkbox options

Visual mode commands

  • :Obsidian extract_note [TITLE] - extract the visually selected text into a new note and link to it
  • :Obsidian link [QUERY] - link an inline visual selection of text to a note
    • query will be used to resolve the note by ID, path, or alias, else query is selected text
  • :Obsidian link_new [TITLE] - create a new note and link it to an inline visual selection of text
    • if title is not given, selected text is used

LSP code actions

  • Use gra or :=vim.lsp.buf.code_action() to trigger note specific actions.
  • See LSP code actions and Actions for more info.

๐Ÿ“ Requirements

System requirements

  • Neovim >= 0.11.0
  • For completion and search features: ripgrep
  • Additional system dependencies:
    • Windows WSL users need wsl-open for :Obsidian open.
    • MacOS users need pngpaste (brew install pngpaste) for :Obsidian paste_img. ImageMagick is optional and corrects macOS paste gamma when installed (brew install imagemagick).
    • Linux users need xclip (X11) or wl-clipboard (Wayland) for :Obsidian paste_img.

Plugin dependencies

There's no required dependency, but there are a number of optional dependencies that enhance the obsidian.nvim experience.

To use a specific picker, set picker.name in your config, e.g.:

require("obsidian").setup {
  picker = {
    name = "snacks.picker", -- use snacks picker
    -- name = "telescope.nvim",   -- or telescope
    -- name = "fzf-lua",     -- or fzf-lua
    -- name = "mini.pick",   -- or mini.pick
  },
}

๐Ÿ“ฅ Installation

[!WARNING] For stability you may want to use latest release, be aware that the README on main may reference features that haven't been released yet.

So view the README on the tag for the latest release instead of main.

[!TIP] To see your installation status, run :checkhealth obsidian

To try out or debug this plugin, run nvim -u minimal.lua in the installed root to try in a clean environment

Using lazy.nvim

return {
  "obsidian-nvim/obsidian.nvim",
  version = "*", -- use latest release, remove to use latest commit
  ---@module 'obsidian'
  ---@type obsidian.config
  opts = {
    legacy_commands = false, -- this will be removed in 4.0.0
    workspaces = {
      {
        name = "personal",
        path = "~/vaults/personal",
      },
      {
        name = "work",
        path = "~/vaults/work",
      },
    },
  },
}

Using rocks.nvim

:Rocks install obsidian.nvim

Using vim.pack (nvim-0.12+)

vim.pack.add {
  {
    src = "https://github.com/obsidian-nvim/obsidian.nvim",
    version = vim.version.range "*", -- use latest release, remove to use latest commit
  },
}

require("obsidian").setup {
  legacy_commands = false, -- this will be removed in 4.0.0
  workspaces = {
    {
      name = "personal",
      path = "~/vaults/personal",
    },
    {
      name = "work",
      path = "~/vaults/work",
    },
  },
}

โš™๏ธ Configuration

To configure obsidian.nvim, pass your custom options that are different from default options to require"obsidian".setup().

๐Ÿค Contributing

Please read the CONTRIBUTING guide before submitting a pull request.

neo451
neo451

๐Ÿ’ป
Stefan Otte
Stefan Otte

๐Ÿ’ป
guspix
guspix

๐Ÿ’ป
ffricken
ffricken

๐Ÿ’ป
Erlan Rangel
Erlan Rangel

๐Ÿ’ป
bosvik
bosvik

๐Ÿ’ป
Jost Alemann
Jost Alemann

๐Ÿ“–
Luis Garcia
Luis Garcia

๐Ÿ’ป
Joe
Joe

๐Ÿ’ป
Horia Gug
Horia Gug

๐Ÿ’ป
Aquiles Gomez
Aquiles Gomez

๐Ÿ’ป
Alvaro Sevilla
Alvaro Sevilla

๐Ÿ’ป
Sebastian Stark
Sebastian Stark

๐Ÿ’ป
Jumpei Yamakawa
Jumpei Yamakawa

๐Ÿ’ป
marcocofano
marcocofano

๐Ÿ’ป
Jaehaks
Jaehaks

๐Ÿ’ป
Magnus
Magnus

๐Ÿ’ป
Noam Stolero
Noam Stolero

๐Ÿ’ป
aileot
aileot

๐Ÿ’ป
Rico Sta. Cruz
Rico Sta. Cruz

๐Ÿ“–
KIM Hyunjae
KIM Hyunjae

๐Ÿ’ป
Ben Burgess
Ben Burgess

๐Ÿ’ป
Sebastian Szyller
Sebastian Szyller

๐Ÿ’ป
nobe4
nobe4

๐Ÿ’ป
Anaritus
Anaritus

๐Ÿ’ป
Michael Davis
Michael Davis

๐Ÿ’ป
Brian Rodriguez
Brian Rodriguez

๐Ÿ’ป
carschandler
carschandler

๐Ÿ“–
Aki Sasaki
Aki Sasaki

๐Ÿ’ป
Reinaldo Molina
Reinaldo Molina

๐Ÿ’ป
Stuart Rackham
Stuart Rackham

๐Ÿ’ป
Ahmed Mughal
Ahmed Mughal

๐Ÿ’ป
trash-panda-v91-beta
trash-panda-v91-beta

๐Ÿ’ป
Jakob Westhoff
Jakob Westhoff

๐Ÿ’ป
Christian Johansen
Christian Johansen

๐Ÿ’ป
Volodymyr Kot
Volodymyr Kot

๐Ÿ’ป
Jorge Villalobos
Jorge Villalobos

๐Ÿ’ป
Tak
Tak

๐Ÿ’ป
Emilio Marin
Emilio Marin

๐Ÿ’ป
Vladimir Gusev
Vladimir Gusev

๐Ÿ’ป
FirelightFlagboy
FirelightFlagboy

๐Ÿ’ป
Cameron Ring
Cameron Ring

๐Ÿ’ป
Miklรณs Balรกzs
Miklรณs Balรกzs

๐Ÿ’ป
Clรฉment Vannicatte
Clรฉment Vannicatte

๐Ÿ“–
Anatoliy
Anatoliy

๐Ÿ’ป
acidsugarx
acidsugarx

๐Ÿ’ป
Joรฃo Sampaio
Joรฃo Sampaio

๐Ÿ’ป
Sundar Gurumurthy
Sundar Gurumurthy

๐Ÿ’ป
apalermo01
apalermo01

๐Ÿ’ป
S1RENS
S1RENS

๐Ÿ’ป
CaeChao
CaeChao

๐Ÿ’ป
Kahlil Hodgson
Kahlil Hodgson

๐Ÿ’ป
Frederik Roland Christiansen
Frederik Roland Christiansen

๐Ÿ’ป
Lucky Laughing
Lucky Laughing

๐Ÿ’ป
Jorg Jenni
Jorg Jenni

๐Ÿ’ป
zzhirong
zzhirong

๐Ÿ’ป
Franco Ruggeri
Franco Ruggeri

๐Ÿ’ป
John T. Kelly
John T. Kelly

๐Ÿ’ป
antinomie8
antinomie8

๐Ÿ’ป
Todd
Todd

๐Ÿ“–
beekeepeer
beekeepeer

๐Ÿ’ป
tdashelby-cmyk
tdashelby-cmyk

๐Ÿ“–
Giovanni Smith-Alvarez
Giovanni Smith-Alvarez

๐Ÿ’ป
Christo
Christo

๐Ÿ’ป
Rich Snapp
Rich Snapp

๐Ÿ’ป
Neil Syiemlieh
Neil Syiemlieh

๐Ÿ’ป
Anshu Gahire
Anshu Gahire

๐Ÿ’ป
Maciej Gajewski
Maciej Gajewski

๐Ÿ’ป
Xiangnong Wu
Xiangnong Wu

๐Ÿ’ป
MoltenMonster
MoltenMonster

๐Ÿ’ป
Samuel Huang
Samuel Huang

๐Ÿ’ป
Johannes Schmรถlder
Johannes Schmรถlder

๐Ÿ’ป
berce
berce

๐Ÿ’ป
Diogo Pombeiro
Diogo Pombeiro

๐Ÿ’ป
sean0407
sean0407

๐Ÿ’ป

โค๏ธ Acknowledgement

We would like to thank epwalsh for creating this beautiful plugin. If you're feeling especially generous, he still appreciates some coffee funds!.