vitals.nvim is a minimalist background health monitor for Neovim. It passively runs build, test, and lint commands and shows their status as simple, unobtrusive icons in your statusline - no popups, no interruptions.
Think GitHub PR checks, but for your local dev workflow.
⚠️ Warning: This project is still taking shape.vitals.nvim is in early development. The API and behavior may change, and portions of the README may not yet reflect the current code.
- 🧠 Runs background checkers (e.g.
vitest,eslint,cargo check) - 🎯 Shows a single icon per checker (pass/fail/pending) in the statusline
- 🔧 Configurable per project via
vitals.config.lua - 🎨 Clean statusline integration with custom highlight groups
- 💤 Fully passive: only visual feedback unless you ask for more
- 🔌 Powered by
vim.loopand runs cross-platform with no dependencies
Using lazy.nvim:
{
"gisikw/vitals.nvim",
config = function()
require("vitals")
end,
}In your project root, create a vitals.config.lua file:
return {
checks = {
{
name = "Tests",
cmd = "pnpm exec vitest run",
interval = 10,
},
{
name = "Lint",
cmd = "eslint .",
interval = 30,
},
},
}Each check runs on a timer (in seconds). You can mix and match commands freely.
Vitals provides a native lualine component:
require("lualine").setup({
sections = {
lualine_c = {
"branch",
require("vitals.lualine"),
},
},
})Each checker will be shown as a glyph:
- ✅
for pass - ❌
for fail - ⏳
for pending
- Log viewer (e.g.
:VitalsLog) - File watcher support (in addition to timer)
- Per-checker
on_savetriggers - Tool-specific adapters (e.g.
vitestwith smart diffing) - Optional notification or virtual text integration