A minimal knowledge layer for Markdown in Neovim.
Ma.nvim lets structure emerge from filenames rather than directories. Notes live in a flat filesystem, while hierarchy is inferred through dot-separated segments and hyphenated words.
Inspired by Dendron and Obsidian, Ma provides vault-scoped navigation and safe file operations — without imposing folder-based structure.
Ma (間) is a Japanese concept often translated as interval or space between.
It does not mean emptiness as absence. It refers to meaningful space — the gap that makes relation possible.
In Ma.nvim, structure is not imposed through folders. It emerges in the intervals:
- Dots define hierarchy.
- Hyphens define words.
- Meaning lives in the space between segments.
Ma also implies time — the pause between actions, the space we take to write, reflect, and connect ideas in plain text.
- Neovim (>= 0.11.0) or the lastest neovim relesed.
- devicons (icons).
- Marksman (Markdown LSP) — Enables LSP-powered Markdown navigation (e.g.
gdon links, semantic link resolution, document symbols).
I recommend pinning to the latest release tag, e.g. using lazy.nvim
{
'gmcusaro/ma.nvim', version = '*',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-telescope/telescope.nvim',
-- optional but recommended
{ 'nvim-telescope/telescope-fzf-native.nvim', build = 'make' },
{ "nvim-tree/nvim-web-devicons", otps = {} }
}
}Ma need a vault - a root folder containing Markdown notes.
opts = {
vaults = {
{ name = "My brain", path ="~/My_brain"}
}
}Run :Ma to parse your notes by filename segments (. for hierarchy, - for words) and explore them through Telescope. Read docs
require('ma'.setup({
vaults = {
-- If nil or {}, it uses the current working directory as the root. By default the "active" vault is the first.
},
respect_gitignore = true,
autochdir = "lcd",
depth = nil,
delete_to_trash = true,
picker_actions = {
{ "c", "create" },
{ "r", "rename" },
{ "d", "delete" },
},
date_format_frontmatter = "%Y %b %d - %H:%M:%S",
telescope = {},
columns = { "git", "icons" },
sort = { by = "name", order = "asc" },
daily_notes = {
date_format = nil, -- default "%Y.%b-%d"
locale = nil, -- default current locale
}
})This package is licensed under the Apache License. See LICENSE for more information.
