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)
  • sudo privileges
  • curl available (sudo apt install curl if 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:

  1. Create the keyrings directory - guarantees /etc/apt/keyrings exists with correct permissions.
  2. Install the GPG key - fetches the repository key and stores a de-armoured copy in a dedicated keyring for signature checks.
  3. Add the repository - appends a signed-by source line, with lsb_release -sc supplying your Ubuntu codename automatically.
  4. 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:

  1. Re-run sudo apt update after adding the repository.
  2. Verify your Ubuntu release is supported (Jammy, Noble, or newer).
  3. 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.