What are null-ls alternatives? 15 new plugins, neogit, neo-tree and lsp-zero updates


Hello everyone 👋

This week we have another summer update from This Week in Neovim with lots of updates!

First I wanted to share a picture by u/the_nameless_nomad posted in this reddit thread. Great post! Glad they had a great time reading Practical Vim, and I hope it gets you all in the summer vibe!

reading practical vim on the beach

This week we have news from Neovim core, 15 exciting new plugin announcements, several plugin updates, including major updates from neogit, neo-tree and lsp-zero, and we discuss what alternatives exist for null-ls.

Hope you enjoy!

Neovim core

Updates of Neovim itself, which are available on Neovim nightly.


  • Early WIP/draft PR: add vim.lsp.server to create in-process server
  • vim.lsp.start() now maps K to use vim.lsp.buf.hover() if the server supports it, unless 'keywordprg' was customized before calling vim.lsp.start(). 33e1a8
  • Added nvim_win_text_height() to get the number of screen lines occupied by a range of text in a given window. db8fe6
  • vim.wo can now be double indexed for :setlocal behaviour. Currently only 0 for the buffer index is currently supported. c379d7

Neovim Plugin Community

Neovim is full of active plugins. This section is about the community and what is going on.

New plugins


An unofficial collection of linters and formatters configured for efm-langserver to work with the builtin nvim-lsp


  • Out-of-box configurations for 70+ linters & formatters
  • Intelligently detect tools installed project-wide or system-wide - works only for node/npm, php/composer and ruby/bundler (additional support for other build tools coming soon)
  • Use :checkhealth for a quick diagnostic on tools, to check if tool is available
  • Customize configs for your project needs

Could efm-langserver with efmls-configs-nvim be a good replacement for null-ls?



An unofficial collection of different linter and formatter configurations for diagnostic-languageserver used for built-in nvim-lsp


  • Out-of-box configurations for 40+ linters & formatters
  • Intelligently detect tools installed project-wide or system-wide - works only for node/npm, php/composer and ruby/bundler, additional support for other build tools coming soon
  • Use :checkhealth to see any missing tools
  • Customize configs for your project needs



Async formatting and linting utility for neovim.

Another Neovim plugin by glepnir, and another contented as a replacement for null-ls.


  • Blazingly fast
  • Async using coroutine and luv spawn
  • Builtin support for popular formatters and linters
  • Light-weight



Rainbow delimiters for Neovim with Tree-sitter

This Neovim plugin provides alternating syntax highlighting (“rainbow parentheses”) for Neovim, powered by Tree-sitter. The goal is to have a hackable plugin which allows for different configuration of queries and strategies, both globally and per file type. Users can override and extend the built-in defaults through their own configuration.

This is a fork of nvim-ts-rainbow2, which was implemented as a module for nvim-treesitter. However, since nvim-treesitter deprecated the module system this standalone plugin had to be created.


A simple, fancy tabline for Neovim.


GhostText plugin for Neovim with zero dependencies. Supports neovim running inside WSL! Windows/Linux/macOS supported out-of-the-box! Other OSes need python3.6+ installed)

GhostText is a tool to enable using your text editor to write in the browser. Everything you type in the editor will be instantly updated in the browser (and vice versa).


Neovim compiler for building and running your code without having to configure anything

compiler.nvim supports building and running code for 10 languages, with 4 more on the way. This first stable release has 100% test coverage, has support for :checkhealth, and support multiple compilation modes.


a fog descends upon your editor ☁ dark color scheme inspired by the woods for vim and neovim

A color scheme for Neovim inspired by the woods, built using lush. supports treesitter, gitsigns, lazy, which-key, telescope, lsp diagnostics, and more.


A simplified version of the ocean color scheme with treesitter and lualine support.


A neovim plugin to navigate and execute code cells

Notebook Navigator lets you manipulate and send code cells to a REPL.

A great feature that comes on by default with VSCode is the ability to define code cells and send them to a REPL like you would do in a Jupyter notebook but without the hassle of notebook files. Notebook Navigator brings you back that functionality and more!


A plugin that provides ways to encode and decode text using various codecs like base64.


A lightweight neovim plugin for pinning fragments of code to the screen.


Enhance your Neovim with Fennel

Enhance your Neovim experience through Fennel with zero overhead. Write Fennel, run Lua, nfnl will not load unless you're actively modifying your Neovim configuration or plugin source code.

  • Only loads when working in directories containing a .nfnl.fnl configuration file.
  • Automatically compiles *.fnl files to *.lua when you save your changes.
  • Can be used for your Neovim configuration or plugins with no special configuration, it just works for both.
  • Includes a Clojure inspired standard library (based on Aniseed).
  • Compiles your Fennel code and then steps out of the way leaving you with plain Lua that doesn't require nfnl to load in the future.

A streamlined successor to Aniseed!


Automatically formats files when saving using either LSP or shell utilities like prettierd or shfmt

This could be another replacement for the formatting part of null-ls. It restores the cursor of any window showing the current file (useful when editing the same file in a split).

NOTE: This is a work in progress and the API might change.


Utilities to provide a better experience for using nvim-dap

Try this plugin to set up your debugging experience in Neovim!


Updated plugins

Massive update to Neogit and new home

magit for neovim

NeoGit just merged a huge PR stacked with updates: https://github.com/NeogitOrg/neogit/pull/554. Including 500+ commits, 130 files changed, and 6000+ lines added, 3000+ lines removed

Here are just a couple of the new features:

  • Cherry Picking popup
  • Reverting popup
  • Resetting popup
  • Branch configuration popup
  • Remotes configuration popup
  • Config options added on different popups
  • TreeSitter Integration for gitcommit and git_rebase parsers
  • Telescope Integration
  • etc...


Neo-tree v3.0 released

Neovim plugin to manage the file system and other tree like structures.

Here are just a couple of the new features in v3.0:

  • feat(sources): add follow_current_file.leave_dirs_open option
  • fix(icons): replace obsolete Nerd Fonts icons
  • docs: fix outdated diagnostics signs info
  • docs: add Buffers entry to Nerd Fonts v3 source selector example
  • refactor(filesystem): fix recursive expand of nodes
  • fix(devicons): let nvim-web-devicons decide the extension
  • fix(utils): typo in open split command
  • feat(ui/inputs): enable normal mode in rename popup

There are also breaking changes so make sure you read the release notes when upgrading! Check out :Neotree migrations for help!


lsp-zero v3 branch is ready for testing

The goal for version 3 will be to delete code previously marked as deprecated and remove the .setup(). The branch is now ready for testing and the plan is to go live with v3 as the new default on September 20.

Biggest changes:

  • lsp-zero will no longer manage the setup of mason.nvim
  • to get a minimal working config for nvim-cmp you'll need to call the function .extend_cmp()

Read more in the Reddit post!


New home for nvim-cokeline

A Neovim bufferline for people with addictive personalities

nvim-cokeline was recently moved from noib3/cokeline.nvim to willothy/nvim-cokeline, make sure to update your config accordingly.

Archiving jose-elias-alvarez/typescript.nvim

A Lua plugin, written in TypeScript, to write TypeScript (Lua optional).

Just like null-ls, typescript.nvim is being archived. Thank you again Jose, for all your contributions!


What are null-ls alternatives?

There has been several discussions this week about what comes after null-ls, what are the available alternatives?

Some options were outlined by folke in this reddit comment. This is a non-comprehensive list on null-ls alternatives and ways forward for the community:

You can search for formatting or lsp plugins on Dotfyle by filtering on category on the plugin search page to find even more options.

If you have tried any of these alternatives or another alternative, please share your thoughts on Reddit!


Add your the plugin in either of the following to be featured in This Week in Neovim and Dotfyle:

Contribute to the development of Dotfyle:

  • File issues and submit pull requests on GitHub
  • Discuss ideas on Discord