How to Install Neovim on Ubuntu: The Hyperextensible Vim-Based Editor
Neovim is a hyperextensible fork of Vim that rebuilds the editor around a modern, asynchronous core. It bundles a fast Lua runtime, a native Language Server Protocol client, Treesitter parsing and a scriptable API, which is why it has become the terminal editor of choice for a huge slice of the developer community.
On Ubuntu, keeping up with Neovim is the tricky part. The neovim package in the Ubuntu archive and even the interim releases tend to lag behind upstream, and many popular Lua plugins require API functions that only exist in recent versions. Running an older build often means plugins silently fail to load.
The unofficial deb.griffo.io repository fixes that by shipping a current Neovim build as a proper Ubuntu package. You install nvim with apt and receive new versions through the ordinary system update flow.
What Makes Neovim Special?
- ๐ Lua-first configuration - Script the whole editor in Lua on the quick LuaJIT runtime, no Vimscript required.
- ๐ง Built-in LSP client - Completion, diagnostics, hover docs and refactoring without bolting on external clients.
- ๐ณ Treesitter integration - Real parse trees drive highlighting, indentation and precise text objects.
- โก Asynchronous job control - Formatters, linters and builds run in the background while you keep typing.
- ๐ Hyperextensible API - A stable RPC layer lets tools and GUIs remote-control the editor.
- ๐ฅ๏ธ Multiple front-ends - Share one config between the terminal and GUIs such as Neovide.
- ๐ค Vim compatibility - Bring your existing Vim habits and much of your old config with you.
- ๐ฆ Rich plugin ecosystem - lazy.nvim, Telescope, Mason and hundreds of Lua plugins are built for it.
Why Use the deb.griffo.io Repository?
- Easy installation and updates through APT with no manual tarball wrangling.
- Automatic dependency management courtesy of the Debian/Ubuntu packaging format.
- Always tracks upstream releases, unlike the archive which trails behind.
- No compiling from source and no CMake, build tools or nightly builds to babysit.
- Works across supported Ubuntu releases, with the codename detected for you.
Prerequisites
Make sure you have the following in place:
- An Ubuntu system (Jammy 22.04 LTS, Noble 24.04 LTS, or newer)
sudoprivilegescurlavailable (sudo apt install curlif needed)
Step 1: Add the deb.griffo.io Repository
Register the signing key and the APT source with these commands:
# Create the keyrings directory
sudo install -d -m 0755 /etc/apt/keyrings
# Download and install the repository GPG key
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
# Add the repository (auto-detects your distro codename)
echo "deb [signed-by=/etc/apt/keyrings/deb.griffo.io.gpg] https://deb.griffo.io/apt $(lsb_release -sc 2>/dev/null) main" | sudo tee /etc/apt/sources.list.d/deb.griffo.io.list > /dev/null
# Update the package list
sudo apt update
Step by step:
- Create the keyrings directory - guarantees
/etc/apt/keyringsexists with correct permissions. - Install the GPG key - fetches the repository key and stores a de-armoured copy in a dedicated keyring for signature checks.
- Add the repository - appends a
signed-bysource line, withlsb_release -scsupplying your Ubuntu codename automatically. - Update the package list - makes APT aware of the packages the repository offers.
Step 2: Update the Package List
If you did not run the last command above, refresh the index now:
sudo apt update
Step 3: Install Neovim
Install with a single APT command:
sudo apt install neovim-latest
APT pulls in the required dependencies and installs a current Neovim across the system.
Step 4: Verify the Installation
Remember the executable is nvim. Confirm the install:
nvim --version
Expect something along these lines:
NVIM v0.11.2
Build type: Release
LuaJIT 2.1.1703358377
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/share/nvim"
Run :checkhealth for more info
Getting Started with Neovim
First Launch
Run nvim to open the editor. Useful entry points:
# Empty buffer
nvim
# Open one file
nvim app/models.py
# Open several at once
nvim main.go handlers.go router.go
Once inside, :Tutor walks you through modal editing, :help opens the reference manual, and :checkhealth reports on the health of your configuration and plugins.
Where Configuration Lives
Neovim looks for its config in ~/.config/nvim, keyed off the XDG base directories. The main file is init.lua:
mkdir -p ~/.config/nvim
nano ~/.config/nvim/init.lua
A sensible starting configuration:
-- ~/.config/nvim/init.lua
vim.g.mapleader = " "
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.expandtab = true
vim.opt.shiftwidth = 4
vim.opt.tabstop = 4
vim.opt.ignorecase = true
vim.opt.smartcase = true
vim.opt.termguicolors = true
vim.keymap.set("n", "<leader>h", ":nohlsearch<CR>", { desc = "Clear search highlight" })
Adding Plugins
Most Neovim users manage plugins with lazy.nvim. Bootstrap it and declare a starter set:
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git", "clone", "--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
{ "catppuccin/nvim", name = "catppuccin", priority = 1000 },
{ "nvim-treesitter/nvim-treesitter", build = ":TSUpdate" },
{ "nvim-telescope/telescope.nvim", dependencies = { "nvim-lua/plenary.nvim" } },
})
Restart Neovim and the plugins install automatically. Use :Lazy to update, profile or remove them later.
Language Servers and Diagnostics
Pair nvim-lspconfig with Mason to install servers without leaving the editor. Open :Mason, install a server such as pyright, then enable it:
require("lspconfig").pyright.setup({})
From there gd jumps to definitions, K shows documentation, [d and ]d walk through diagnostics, and :lua vim.diagnostic.open_float() shows the message under the cursor.
Core Commands Cheat Sheet
i / a enter insert mode (before / after cursor)
Esc return to normal mode
:w :q :wq write, quit, write-and-quit
dd / yy / p delete line, yank line, paste
gg / G jump to top / bottom of file
/pattern search forward
:%s/old/new/g substitute across the whole file
Keeping Neovim Updated
Neovim tracks your normal Ubuntu update cycle:
sudo apt update && sudo apt upgrade
When a newer Neovim lands in deb.griffo.io, it is upgraded together with your other packages.
Other Tools from deb.griffo.io
The repository carries plenty of complementary tools for Ubuntu:
- Helix - a post-modern modal editor if you want to try a different take on modal editing.
- fzf - a fuzzy finder that powers fast file and buffer pickers.
- Lazygit - a Git terminal UI you can invoke without leaving Neovim.
- Zed - a high-performance multiplayer editor for GUI-based work.
Troubleshooting
GPG or Key Errors
If APT complains that the repository is unsigned or the key is invalid, re-add the key:
curl -fsSL https://deb.griffo.io/EA0F721D231FDD3A0A17B9AC7808B4DD62C41256.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Package Not Found
If APT cannot find neovim:
- Re-run
sudo apt updateafter adding the repository. - Verify your Ubuntu release is supported (Jammy, Noble, or newer).
- Check the source list:
cat /etc/apt/sources.list.d/deb.griffo.io.list.
Snap or Stale nvim Taking Priority
Ubuntu users sometimes have Neovim installed as a snap or in ~/.local/bin. Check which binary wins:
which -a nvim
snap list | grep -i nvim
Remove the competing install (sudo snap remove nvim or delete the stray binary) and open a new shell so the packaged nvim in /usr/bin is used.
Uninstalling
Remove the editor with:
sudo apt remove neovim-latest
To also remove the repository definition and key:
sudo rm /etc/apt/sources.list.d/deb.griffo.io.list
sudo rm /etc/apt/keyrings/deb.griffo.io.gpg
sudo apt update
Your ~/.config/nvim directory survives an uninstall; remove it by hand for a full reset.
Conclusion
With deb.griffo.io, Ubuntu users get a modern, current nvim through APT rather than a lagging archive build or a hand-compiled binary. You gain the Lua runtime, native LSP and Treesitter, all managed by the package tooling you already rely on.
The next move is to grow a configuration in ~/.config/nvim and add the plugins your stack needs. Whatever setup you settle on, staying current is now just part of your regular apt upgrade.
Resources
Disclaimer: The deb.griffo.io repository is an unofficial community project and is not affiliated with the official Debian or Ubuntu projects, or with the upstream Neovim project.