The next step after Neovim — a curated, batteries-included config framework built on lazy.nvim.
init.lua from scratchA blank canvas. Neovim ships with a native LSP client, Treesitter, and a Lua API, but none of it is wired up. You choose every plugin, every keymap, every default. Total control, but hours (or weeks) of config work before it feels like an IDE.
A pre-configured, opinionated Neovim setup: LSP, completion, formatting, linting, Treesitter, a file explorer, fuzzy finder, statusline, and sane keymaps all wired together out of the box. You extend it with small plugin-spec files instead of building the whole stack yourself.
init.lua plus a plugin/config structure built on the lazy.nvim plugin manager. You can always eject and go back to a bare config.
| Feature | Neovim (vanilla) | LazyVim | Notes |
|---|---|---|---|
| Setup time | Hours–weeks (DIY) | minutes | git clone the starter, open nvim, plugins install automatically. |
| Plugin manager | None by default | lazy.nvim | LazyVim is built directly on top of lazy.nvim — lockfile, lazy-loading, UI included. |
| LSP configuration | built-in client, manual setup | pre-wired + Mason | LazyVim auto-installs language servers via mason.nvim and configures them per-language. |
| Autocompletion | none (plugin required) | included (nvim-cmp/blink.cmp) | Snippets, LSP completion, and command-line completion all pre-configured. |
| Treesitter | built-in, no parsers | auto-installed parsers | LazyVim installs and updates parsers for languages you use automatically. |
| File explorer | netrw only | neo-tree | Modern sidebar tree with git status, preview, and fuzzy filtering. |
| Fuzzy finder | none | Telescope / fzf-lua | Find files, grep, buffers, symbols — all pre-bound to <leader> keymaps. |
| Statusline / UI | Plain default | lualine, bufferline, dashboard | Polished UI out of the box: icons, tabs, breadcrumbs, start screen. |
| Keymap discoverability | None built-in | which-key | Press <leader> and a popup shows every available keymap, grouped and labeled. |
| Formatting / linting | manual | conform.nvim + nvim-lint | Format-on-save and linters pre-mapped per filetype, auto-installed via Mason. |
| Config structure | One init.lua (your choice) |
opinionated modules | LazyVim splits config into lua/plugins/*.lua spec files — easy to add, override, or disable. |
| Language extras | N/A | :LazyExtras | One-command toggles for language packs (Python, Rust, Go, TypeScript, etc.) with full LSP+DAP+lint stacks. |
| Health checks | :checkhealth (core only) |
:checkhealth + LazyVim checks |
LazyVim adds its own health checks covering the whole preconfigured stack. |
| Updating | Manual, per-plugin | :Lazy update | Single command updates all plugins with a lockfile diff and changelog view. |
| Customization ceiling | unlimited | unlimited (it's still Neovim) | Every LazyVim default can be overridden or removed — nothing is locked in. |
| Learning curve | Steep (build everything) | Gentle (learn on top of good defaults) | LazyVim teaches good keymap conventions as you use it, via which-key hints. |
| Opinionatedness | None — a blank slate | High — sane defaults chosen for you | A trade-off: less bikeshedding, but you inherit someone else's choices. |
Cloning the LazyVim starter and opening nvim gives you LSP, completion, formatting, git signs, fuzzy finding, and a file tree immediately — the setup that normally takes a DIY config days or weeks to reach.
Instead of picking one plugin out of ten competing options for every feature, LazyVim has already made (and tested) that choice. You get a coherent, working stack rather than a pile of plugins that may or may not play nicely together.
which-key surfaces every keybinding contextually as you type <leader>, so you learn the config by using it instead of memorizing a cheatsheet or reading someone else's init.lua.
:LazyExtras opens a picker of language/tooling bundles (Python, Rust, Go, Docker, Markdown, …). Toggle one on and LazyVim installs the LSP server, formatter, linter, and Treesitter parser together.
LazyVim isn't a black box — it's readable Lua you can inspect, override, or delete. Every default lives in a plugin spec you can find and change. Nothing about it locks you out of raw Neovim.
Plugin compatibility, breaking changes, and new Neovim features get absorbed by the LazyVim maintainers and community, instead of landing on you to track down and fix individually.
Move any current Neovim config aside so LazyVim starts clean:
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bak
Clone the official starter template and remove its git history so it's yours:
git clone https://github.com/LazyVim/starter \
~/.config/nvim
rm -rf ~/.config/nvim/.git
Open nvim. lazy.nvim bootstraps itself and installs every plugin automatically:
nvim
Wait for installation to finish, then restart.
Add language support and inspect your setup:
:LazyExtras " toggle language packs
:Lazy " manage plugins
:checkhealth " verify the install
:LazyVim " changelog & docs
Add custom plugins in lua/plugins/*.lua — each file returns a lazy.nvim plugin spec.
| Stage | What it gives you | Best for |
|---|---|---|
| Vim | Modal editing muscle memory — motions, operators, registers | Learning the core skill that transfers everywhere |
| Neovim | Lua scripting, built-in LSP/Treesitter, an extensible platform | Building exactly the editor you want, piece by piece |
| LazyVim | All of the above, pre-assembled into a working IDE | Getting productive fast without losing the ability to customize |