Introduction
LazyVim is a Neovim distribution built on top of lazy.nvim that provides a complete IDE experience with carefully chosen defaults. It uses an extras system that lets you toggle optional feature packs for languages, formatters, and tools without editing plugin specs by hand.
What LazyVim Does
- Configures LSP, formatting, linting, and completion with zero manual setup
- Provides 80+ optional extras for language support and tool integrations
- Ships keymaps built around which-key for discoverability
- Handles automatic plugin updates with lazy.nvim lockfiles
- Offers a dashboard, file explorer, buffer management, and terminal integration
Architecture Overview
LazyVim is structured as a lazy.nvim plugin itself. It defines a base configuration, then layers user overrides on top. The extras system works by exposing optional lazy.nvim spec files that users enable in their config. When an extra is activated, its plugins, LSP servers, and formatters are automatically registered. This approach keeps the base lean while supporting deep customization.
Self-Hosting & Configuration
- Clone the LazyVim starter template into your Neovim config directory
- Enable extras in lua/config/lazy.lua by adding them to the extras table
- Override any plugin spec by creating a file in lua/plugins/ with the same plugin name
- Customize keymaps, options, and autocmds in lua/config/
- Requires Neovim 0.9+ and optionally a Nerd Font
Key Features
- Extras system for toggling language and tool support declaratively
- Which-key integration shows available keybindings contextually
- Pre-configured formatters via conform.nvim and linters via nvim-lint
- Automatic Mason installation of LSP servers and tools
- Built-in support for Telescope, Neo-tree, and Trouble diagnostics
Comparison with Similar Tools
- kickstart.nvim — educational starter; LazyVim is a full managed distribution
- NvChad — focuses on custom UI and themes; LazyVim focuses on the extras ecosystem
- AstroNvim — community plugin packs via astrocommunity; LazyVim uses built-in extras
- LunarVim — IDE layer with its own installer; LazyVim is just a lazy.nvim plugin
- Doom Emacs — Emacs module system; LazyVim offers a similar concept for Neovim
FAQ
Q: How do I enable TypeScript support? A: Add lazyvim.plugins.extras.lang.typescript to your extras list in lua/config/lazy.lua.
Q: Can I use LazyVim alongside my existing config? A: No. LazyVim expects to own the Neovim config directory. Back up your existing config first.
Q: How do I override a default keymap? A: Create a keymaps.lua file in lua/config/ and define your overrides there.
Q: Is LazyVim still maintained? A: Yes. It receives regular updates and new extras from the maintainer and community.