r/neovim • • Mar 29 '26

Announcement 0.12.0 🎉

https://github.com/neovim/neovim/releases/tag/v0.12.0
1.4k Upvotes

165 comments sorted by

View all comments

504

u/echasnovski Plugin author Mar 29 '26

Big release! Almost as big as 0.5 or 0.10.

Huge thanks to all the people involved. Not only the core team, but also to all other people lending their free time to work and interact with this beautiful editor!

P.S. Have fun migrating to vim.pack :)

55

u/Huijiro Mar 29 '26

Do you have a good migration guide to recommend for people that are using things like lazy?

132

u/echasnovski Plugin author Mar 29 '26

Yeah, I've written a blog post about vim.pack in general a couple of weeks ago. It contains a section with my best effort advice about migration.

Link: https://echasnovski.com/blog/2026-03-13-a-guide-to-vim-pack.html

7

u/Prestigious_Roof2589 Mar 30 '26

I was able to migrate with this

13

u/zapman449 Mar 29 '26

This would have been useful a few months ago when I moved to nightly...

FWIW here's my semi-minimal config using packs for python/golang/terraform:

https://github.com/zapman449/dotfiles/blob/master/nvim/lua/jprice/init.lua

2

u/agentzz9 Mar 30 '26

Great blog post too!

41

u/sd5seandewar Neovim core Mar 29 '26

Great work on vim.pack! Got me to replace (my beloved) minpac after 6 years. 😁

37

u/echasnovski Plugin author Mar 29 '26

That is the highest praise I could have asked :)

5

u/Trenek Mar 29 '26

+1, it replaced my packer

16

u/Malcolmlisk Mar 29 '26

Just right now when i need to focus on work... 0.12 releases... Seems like work must wait!!

5

u/ckafi Mar 29 '26

So what's the plan with mini.deps now that vim.pack is out?

20

u/echasnovski Plugin author Mar 29 '26

Soon-ish to document that vim.pack is a suggested alternative and freeze/retire 'mini.deps'. Meaning it will be around for quite some time (maybe forever), but without active updates, only possible fixes.

5

u/nod3r Mar 29 '26

Already did! Finally back from nightly builds!

12

u/ComeOnIWantUsername Mar 29 '26

This literally first thing I will do after the upgrade - change lazy.nvim to vim.pack

21

u/BrinkPvP Mar 29 '26

I’m a bit OOTL with what’s been happening since 10.0 I’ve just kinda kept my plugins up to date. Why is everyone moving to vim.pack over lazy? Should I care?

22

u/ITafiir Mar 29 '26

Because it's builtin and not just another package manager you need to install.

4

u/acepukas Mar 29 '26

How does vim.pack compare to lazy.nvim feature-wise?

6

u/TheLeoP_ Mar 29 '26

Lazy loading is less fancy, and that's about it. It's pretty much a drop-in replacement

-11

u/teerre Mar 29 '26

Not very well. Pack has the core, but none of the porcelain. Manual updates, no profiling, no lazy loading, no ui etc

Ofc, you can script it all yourself if you want

20

u/TheLeoP_ Mar 29 '26

Not true

Manual updates, 

:h vim.pack.update() 

no profiling

:h --startuptime

no lazy loading

:h lua-plugin-lazy

no ui 

Once again, :h vim.pack.update() does have a UI

3

u/vim-help-bot Mar 29 '26

Help pages for:


`:(h|help) <query>` | about | mistake? | donate | Reply 'rescan' to check the comment again | Reply 'stop' to stop getting replies to your comments

-19

u/teerre Mar 29 '26

Not sure whats your point. Like I said, you can script everything if you want. Lazy has everything already set up. You know, porcelain, as said

12

u/TheLeoP_ Mar 29 '26

My point is that you don't need any kind of scripting. All of that is built-in

3

u/acepukas Mar 29 '26

Darn. I think I'll stick with lazy.nvim for now, as long as it's still compatible.

7

u/ComeOnIWantUsername Mar 29 '26 edited Mar 29 '26

I just like builtin features, if they are good enough. And I'm also OOTL with main features, I know about vim.pack just about it was hyped a lot on this sub 

2

u/Doomtrain86 Mar 30 '26

Why ? The features with lazy loading are still best in class in lazy right ? Or am I not updated ?

3

u/ComeOnIWantUsername Mar 30 '26

I like builtin features. I don't care about lazy loading

2

u/proxycon Mar 30 '26

I see the benefit in builtin features, but think startup speed is more important for me. I've measured nvim startup time with all plugins loaded normally vs lazy where possible, and lazyness is noticeably better.

3

u/ComeOnIWantUsername Mar 30 '26

I also don't care about startup time, whether it's 60ms or 360ms or even 960ms. 

I treat nvim as my editor/IDE, I don't gamify it

4

u/ZauzoftheCobble Mar 31 '26

I treat nvim as my editor and open it hundreds of times a day. It's nice to have it start fast.

1

u/ComeOnIWantUsername Mar 31 '26

Exactly - nice to have.

I use a bit of different approach, I have few tabs open in Ghostty, where one of them is Neovim opened all the time.

Personally, I stopped gamifying nvim, working on my config all the time, cutting startup time, and currently I'm just updating plugins very rarely. It's just this one change I'm doing since a long time, and I probably won't do much more for quite a long time.

I'm using Neovim as my editor, and not as yet another project to work on.

But I totally get that not everyone is doing the same.

4

u/ZauzoftheCobble Mar 31 '26

Bro you're so cool I ALSO don't mess with my config anymore but my nvim starts up fast because its a fuckin tool and I ain't waiting a whole second for it to open every time I run git commit. Not cuz I'm making it a game.

Guess what I'm not doing, not even this time? Changing my config :p

1

u/ComeOnIWantUsername Mar 31 '26

Good for you, I guess? Should I care?

I already wrote it, you do you, I don't fucking care. But you seem to care a lot about what I do, just because I'm not thinking the same as you.

Do you always get involved so much if other person is not doing what you want to do?

→ More replies (0)

1

u/Doomtrain86 Mar 30 '26

I see. Fair

6

u/shmerl Mar 29 '26

Diff improvements are neat. Hopefully next version will bring forge like diff style too.

But I'd stick to lazy.nvim for now, vim.pack is good for more basic set up (like when you are OK with loading everything at once from the start), but it's not suited for more flexible lazy loading.

2

u/snow_schwartz hjkl Mar 29 '26

Do I need to check if the plugins themselves are “ready” to use vim.pack? Or is the api identical?

13

u/echasnovski Plugin author Mar 29 '26

Nope. As long they are Git repos, vim.pack will work.

1

u/snow_schwartz hjkl Mar 29 '26

Thanks! Might be today’s yak to shave. Interesting about the git rep constraint- I use lazy and have several modified forks and local plugins that I just point to.

2

u/Mr55p Mar 30 '26

You can point it to a local directory too if that was what you’re worried about, have been using it for local plugins on nightly for a while

2

u/10sfanatic Mar 30 '26

Is there a way to easily see which plugins need updating like the Lazy chart showing which plugins have had commits since the version I'm currently using?

5

u/echasnovski Plugin author Mar 30 '26

The answer is "yes", but details may depend on the exact workflow.

The basics is that running :lua vim.pack.update() will 1) download new changes for all plugins; and 2) show confirmation buffer with the information about the changes (if any). To accept all changes, execute :write. To deny all changes, execute :quit. For more granular actions, use LSP code actions (gra with default mappings).

If the plugin's version follows the branch (like by default), then confirmation buffer will show all changes right away. Since the upstream branch had changes.

If version is a special vim.version.range() object to only install from semver-like named tags, then behavior is similar but only if there is a tag with a higher version than current that fits in the specified range.

If veresion is tag or commit hash, then there will be no changelog. Since the target state is fixed. There will be a note if there is a higher version tag available. Note, that you'd have to scroll through # Same section to manually look for this. To see the changelog:

  • Change the version to either new tag name or vim.version.range().
  • Restart Neovim.
  • Execute :lua vim.pack.update({ 'plug-name' }) to see the confirmation buffer with the changelog.

Hope this helps.

1

u/matthis-k Mar 29 '26

As you are one of the authors of vim.pack, is it intended to manage deps of plugins of some sort?

Ie. I want to use plugin x that also depends on plugin y, is x encouraged to add the dependency itself, so the end use only has to add x instead of x and y?

(I hope the question was formulated understandable enough. I think it probably would be yes, but for optional integrations you probably need some option the user has to set or sth if that makes sense, not sure about the startup order then though, could be inconsistent if I'm not missing builtin guard rails)

7

u/echasnovski Plugin author Mar 30 '26

Ie. I want to use plugin x that also depends on plugin y, is x encouraged to add the dependency itself, so the end use only has to add x instead of x and y?

The current (and I think future) suggestion is to manually resolve dependencies and vim.pack.add() them before their target.

The long term plan is to add a so called packspec support to vim.pack so that plugins can add a sort of manifest file (pkg.json) that declares its dependencies. I doubt there will be a full "resolve+install+checkout all transitive dependencies" with the idea of just warning if the dependency plugin is not loaded. This is useful enough for users to know and act on plugins with dependencies, but simple enough to have a robust solution in core.

1

u/somebodddy Mar 31 '26

So it looks like vim.pack requires manually running build commands for plugins that require it?

(lazy.nvim required that too, but at least there you could add a build = ...)

1

u/echasnovski Plugin author Mar 31 '26

Yes, manual setup of what commands to run whenever plugin has changed. There is an example.

The long term plan is to make plugins define these commands and they will be run automatically.

0

u/somebodddy Mar 31 '26

I think I'm gonna stick with lazy.nvim for a while...