lynn - native-first neovim plugin manager with charm
lynn is a small plugin manager built around neovim’s native vim.pack system.
it's designed to feel invisible - doing just enough to ease plugin use without layering on complexity.
ideal for native-first distros or anyone who prefers minimal configuration flow.
- manages plugins using
vim.pack - declarative plugin list stored in a single file
- integrates softly into the neovim lifecycle
- no bootstrapping code in your
init.lua - no abstraction over how plugins are actually loaded
- just a clear place to define what you want, and a helper to make it happen
- keeps your plugin specs simple
-- init.lua or wherever
vim.pack.add({
{ src = "https://github.com/comfysage/lynn.nvim", name = "lynn" }
})- define your plugins in
lua/plugins.lua(or wherever you choose) - call
require("lynn").setup("plugins")from your config - lynn handles passing your plugins to
vim.pack.addand gives you a simple way to add lazy-loading
you can define your plugin spec like this:
{
"owner/repo", -- or `url = "owner/repo"`/`url = "https://github.com/owner/repo"`
name = "plugin-name", -- optionally rename the plugin
event = "BufEnter", -- optional event
}as you can see there's no opts or config field.
instead lynn simply uses the :runtime command to source your configs in config/.
lynn automatically sources any files in config/ that match the plugin name.
this means you can simply create a mini.lua file in your config/ directory
and whenever mini.nvim is loaded lynn will source it for you.
this means you dont need to clutter your lua/plugins/ directory with config
functions anymore - they're just separate files.
- neovim 0.12+ (for
vim.pack) - git
lynn does not track plugin versions using a lockfile or manage updates automatically.
this is by design - the plugin is based entirely on the vim.pack engine.
for a working example, see sylvee. lynn is extracted from that project and maintained as a soft dependency.