Emacs has a lot of different packages for minibuffer UI, search, and completion. Some of the packages I am aware of are Icicles, Ido, Ivy, Counsel, Swiper, Consult, Vertico, Selectrum, Orderless, Embark, Helm.

Some of these packages provide UI, some completion, some key mappings. As far as I understand some of them are designed to work with each other, and others are incompatible. Some packages may be old and practically deprecated. I found it very difficult to navigate this diverse landscape. Is there any consolidated comparison of what these packages provide, description of their compatibility and features?

  • I've met - via usual browser search - many comparisons of the pairs or trios of the packages you had mentioned, so maybe that could be a good starting point.
    – Y. E.
    Commented Oct 19, 2021 at 14:29
  • Pointing explicitly to a couple that you found useful might be more, er... useful !-)
    – NickD
    Commented Oct 19, 2021 at 20:09
  • I've tried a few, but I'm an old dog (and you know what they say about old dogs), so I don't use any of them (other than what I get without any installation/customization). But looking through the links in @dalanicolai's answer, I may try Vertico, because I like the poster of the film version :-)
    – NickD
    Commented Oct 19, 2021 at 20:20

2 Answers 2


I guess the most elaborate comparison is given in the Selectrum readme.

Next to that I think you should read about the philosophy behind the Vertico and Embark packages, which I find very appealing. However, I have tried them out, and I guess especially for a beginner, it is a little hard and quite some work to find out which packages to include in the ecosystem, and how to configure all of them.

So to first get a feeling of a great, and more or less fully configured, minibuffer completion ecosystem, I would suggest you start with Ivy or Helm. Personally I use Spacemacs, which provides (suggests to use) Helm by default. But I have switched to Ivy because I find it a little easier to configure (i.e. use it in my own packages) and I have read in multiple places that it is more lightweight. For sure its counsel package (see start of Ivy readme) provides everything I require.

While using Ivy, and if you like to tinker, you can slowly read about and 'investigate' how to setup Vertico or Selectrum (or some other preferred alternative) and friends.

Of course this is only my, very briefly stated, personal perspective, and I am open to any comments/corrections/expansions on it.

  • 1
    Hi, @dalanicolai, thanks for your reply. My story is kind of similar: I started with Helm and moved to ivy, counsel and swiper as I liked more lightweight functionality that I can at least partially remember (which I can't with helm). I recently figured out about Vertico and Embark packages, but did not find a decent description of how are they different from swiper with ivy that I'm using. Selectrum readme is a good start indeed, this seems to be exactly what I was looking for. Commented Oct 19, 2021 at 19:43
  • 1
    @NickD Thanks for the fix, it was better, but not exactly how I intended it. So I've corrected the links as intended. Indeed the Vertico link points to the alternatives section because that is where the philosophy/motivation behind the package is explained. Commented Oct 19, 2021 at 22:51

When comparing consider simple vs complex. One factor to consider is keep it simple by using something built into emacs.

As you move from one computing platform to the next over time and prefer to use emacs using something native has advantages.

Some of the very powerful completion engines need a package manager to be installed, and the completion engine files to be installed and configured. Just the configuration may be more complex that everything you need to know to use a more basic tool. Much of this generally requires a computer be connected to the internet (to fetch packages) which may not be possible.

You may not want to repeat this procedure on every computing platform encountered (home/office desktop, lab machines, windows, Linux, machines on air-gaped networks etc). You will find little differences in the customization needed on different platforms which is a complicating factor.

The more complex 3rd party packages are also more prone to bugs and if you are a user you will find them (they are changing more frequently than emacs). Maybe you have an open source developers "happy to help" attitude or maybe you just want to get your job done.

Most of what is needed from a completion engine is complete files for find-file and select buffers for switch-buffer. The built in mechanisms tend to do this well stand-alone or with a simple configuration.

If users enjoy or need the complexity/power/features or are a emacs-lisp hobbyist then the more complex approaches might be worth it to you (if you are using emacs to develop emacs).

I work with people who use several other editors and none of them spend much time writing code for the editor or changing it for the platform they are on. I do spend the time. The others are free to spend time developing in the primary domain of concern (not developing/maintaining emacs).

I use icicles most of the time, and have found it very useful but difficult to learn, and maintain over a variety of computing environments for the past 10 years or so.

I have also used Ido.

Another users comments on icicles. http://ergoemacs.org/misc/emacs_power_of_icicles.html

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.