Making Neovim fast again
March 27, 2026
Since past few days, I had been noticing that my inital <leader> ff doesn’t
open telescope file finder. Instead, I have to wait like a second and retry
the shortcut to make it work. I tried to ignore it but over time it has become
an annoying little delay which has ruined the peace of my life. So, I thought of
investigating the issue and try to make it blazingly fast again.
This is my current experience when I open neovim and fail miserably trying to
open telescope file finder.

I found a way to time my neovim startup time. From man nvim:
--startuptime file
During startup, append timing messages to file. Can be used to diagnose slow startup times.
So, running nvim --startuptime startup.log I got a 652 line output in
startup.log file. The main line is the final line, which is
130.901 000.004: --- NVIM STARTED ---
it shows that my neovim takes about 130ms for the startup. There is also a
a second tool called :Lazy profile which claims to be more accurate than
nvim --startuptime. According to it, my startup time is 136.13ms.
Startuptime: 136.13ms
Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
LazyStart 22.35ms
LazyDone 123.32ms (+100.97ms)
UIEnter 136.13ms (+12.81ms)
Read the full outputs on these pastes:
While it surprises me too, ig it is not fast enough because it takes me two tries to open the file finder. Now you might say something like “why not just wait half a second after opening neovim?” And to that I say

What’s the fun in accepting the easy way out? So, I choose to optimize my neovim config to make is fast again (maybe i should start calling it MAFA).
The first and probably the easiest way to make your neovim fast is to use lazy loading. From what I understand of it, lazy loading makes the plugins load when some specific event is triggered. You can set the event according to your needs so that the plugins are loaded only when they are needed.
I can sort the plugins by their startuptime in :Lazy profile and it seems that
the worst offender is nvim-cmp which alone takes around 32ms. Just adding a
simple
event = "InsertEnter"
makes it load only when I start writing into some file and makes the startup faster. Similarly, setting event tringgers for some of the most time-taking plugins drastically reduced my startup time, which is now sitting at a blazingly fast speed of around 50ms. Thats real gains.
Startuptime: 40.91ms
Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
LazyStart 7.43ms
LazyDone 31.74ms (+24.31ms)
UIEnter 40.91ms (+9.18ms)
But I was still having the issue of initial keypresses missing. Digging a little
deeper helps me find that the culprit was which-key’s <leader> key
registration. It didn’t recognize the shortcut until the plugin was loaded
(around 20ms) and my fast ass was already typing by then. So, I moved that
shortcut to run immediately. Something like this
{
"folke/which-key.nvim",
event = "VeryLazy",
keys = {
{ "<leader>ff", "<cmd>Telescope find_files<CR>", desc = "Find files" },
},
Well, ig the optimization was a by-product. Got from 136ms startup time to just 40ms. Shaved around a 100ms roughly. No biggie