Want to take your software engineering career to the next level? Join the mailing list for career tips & advice Click here


Ivy - a generic completion frontend for Emacs, Swiper - isearch with an overview, and more. Oh, man!

Subscribe to updates I use swiper

Statistics on swiper

Number of watchers on Github 808
Number of open issues 200
Average time to close an issue 1 day
Main language Emacs Lisp
Average time to merge a PR 1 day
Open pull requests 36+
Closed pull requests 143+
Last commit over 2 years ago
Repo Created over 5 years ago
Repo Last Updated over 2 years ago
Size 3.78 MB
Homepage http://oremacs.co...
Organization / Authorabo-abo
Latest Release0.10.0
Page Updated
Do you use swiper? Leave a review!
View open issues (200)
View swiper activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Software engineers: It's time to get promoted. Starting NOW! Subscribe to my mailing list and I will equip you with tools, tips and actionable advice to grow in your career.
Evaluating swiper for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

Build Status

flexible, simple tools for minibuffer completion in Emacs

This repository contains:

Ivy, a generic completion mechanism for Emacs.

Counsel, a collection of Ivy-enhanced versions of common Emacs commands.

Swiper, an Ivy-enhanced alternative to isearch.



Ivy is a generic completion mechanism for Emacs. While it operates similarly to other completion schemes such as icomplete-mode, Ivy aims to be more efficient, smaller, simpler, and smoother to use yet highly customizable.

To try Ivy, just call M-x ivy-mode. This will enable generic Ivy completion, including specific completion for file and buffer names.


Install the ivy package from MELPA / GNU ELPA.



The manual is available as HTML.

After installing from MELPA, the manual is also available through the (ivy) Info node.

The source file for the Info page is here.


Ivy and Swiper wiki is here: the wiki.

Small config example

(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(setq enable-recursive-minibuffers t)
(global-set-key "\C-s" 'swiper)
(global-set-key (kbd "C-c C-r") 'ivy-resume)
(global-set-key (kbd "<f6>") 'ivy-resume)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "<f1> f") 'counsel-describe-function)
(global-set-key (kbd "<f1> v") 'counsel-describe-variable)
(global-set-key (kbd "<f1> l") 'counsel-find-library)
(global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
(global-set-key (kbd "<f2> u") 'counsel-unicode-char)
(global-set-key (kbd "C-c g") 'counsel-git)
(global-set-key (kbd "C-c j") 'counsel-git-grep)
(global-set-key (kbd "C-c k") 'counsel-ag)
(global-set-key (kbd "C-x l") 'counsel-locate)
(global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
(define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history)

Note: parts of this config can be replaced by using counsel-mode.


ivy-mode ensures that any Emacs command using completing-read-function uses ivy for completion.

Counsel takes this further, providing versions of common Emacs commands that are customised to make the best use of ivy. For example, counsel-find-file has some additional keybindings. Pressing DEL will move you to the parent directory.

Enabling counsel-mode remaps built-in Emacs functions that have counsel replacements:

Emacs command Counsel equivalent
execute-extended-command counsel-M-x
describe-bindings counsel-descbinds
describe-function counsel-describe-function
describe-variable counsel-describe-variable
describe-face counsel-describe-face
list-faces-display counsel-faces
find-file counsel-find-file
find-library counsel-find-library
imenu counsel-imenu
load-library counsel-load-library
load-theme counsel-load-theme
yank-pop counsel-yank-pop
info-lookup-symbol counsel-info-lookup-symbol
pop-to-mark-command counsel-mark-ring
bookmark-jump counsel-bookmark



Swiper is an alternative to isearch that uses ivy to show an overview of all matches.


A helm version of swiper is also available: swiper-helm.



There's also a ten minute video demo.

Frequently asked questions

Q: How do I enter an input that matches one of the candidates instead of this candidate? Example: create a file bar when a file barricade exists in the current directory.

A: Press C-M-j. Alternatively, you can make the prompt line selectable with (setq ivy-use-selectable-prompt t).


Please see the guidelines for reporting issues and opening pull requests.

swiper open issues Ask a question     (View All Issues)
  • over 3 years use swiper+ivy-occur to delete/replace certain lines/values?
  • over 3 years How can I bind a key to exit an ivy / minibuffer interaction
  • over 3 years Feature: backspace delete to last matching string
  • over 3 years cursor following and recenter after choose in counsel-pt
  • over 3 years Unrecognized file name in the compile-goto-error command.
  • over 3 years ivy seems to get confused about live windows
  • over 3 years Missing information for possible actions on pressing ``` M-o ``` ?
  • over 3 years Escaping of $ not working properly in counsel-git-grep
  • over 3 years Flx not being used for swiper searches
  • over 3 years Apply action to all candidates at once
  • over 3 years it's only once possible to use ivy-wgrep-change-to-wgrep-mode.
  • over 3 years Differerent face for ivy completion at point
  • over 3 years Better `counsel-semantics`?
  • almost 4 years Ivy and sbt-mode
  • almost 4 years No info docs when installed from elpa
  • almost 4 years feature request: provide ivy backend for list-colors-display
  • almost 4 years Gnome Tracker
  • almost 4 years can ivy-ignore-buffers be made to work like ido-mode?
  • almost 4 years Somehow I can't tab-complete things inside term after enabling ivy-mode
  • almost 4 years Equivalent to smex-major-mode-commands?
  • almost 4 years Font lock problem of `ivy--regex-ignore-order`
  • almost 4 years Auto resize minibuffer window ?
  • almost 4 years virtual-buffers: 2 files with same name in different directories, only one is shown
  • almost 4 years Install counsel, get an error: need swiper
  • almost 4 years Way to hide some buffers from ivy-switch-buffer?
  • almost 4 years Possible problem with ivy-partial-or-done and tramp
  • almost 4 years The minibuffer of swiper-all doesn't work properly
  • almost 4 years Problems with trailing backslash and more
  • almost 4 years Feature idea: Command swapping
  • almost 4 years any swiper/counsel way to browse mark/global mark ring visually?
swiper open pull requests (View All Pulls)
  • Filter buffers with functions.
  • port helm mode manager to ivy
  • Add ivy-fixed-height-minibuffer
  • ivy.el: hydra-style action prompt
  • Use Ivy to browse eshell and shell history entries
  • Allow counsel_describe_function to use smex
  • ivy.el: actions conditional on candidate
  • Remove needless code
  • fix counsel-company for multiple cursors
  • Store full window-configuration with ivy-push-view
  • counsel.el (counsel-rpm): New command
  • add highlighter function configuration to ivy
  • CD to home on `~/` not just `~`
  • Implement an M-x for major-mode commands
  • Refactor check for flx fuzzy
  • New example to show how to associate values
  • Make counsel-imenu show functions as "Function: func".
  • Make counsel-ag prompt for extra args when using prefix arg.
  • Add ./ and ../ to ivy--magic-file-slash.
  • counsel: no need to hard-code ivy-height values
  • ivy.el (ivy-switch-buffer): Add option to display path
  • counsel.el: remove unnecessary with-ivy-window macro call
  • counsel.el : add optional argument initial-input to counsel-grep
  • counsel-ag-occur does not respect extra args passed to counsel-ag via a prefix argument
  • Search tweaks
  • Add a command to switch to shell buffers.
  • Add an informative interface for ivy.
  • Keep this-command around for `ivy-read` as new input is typed
  • Counsel open file externally asynchronously
  • Prevent DEL key (delete-forward-char) interfering with candidates
  • Add counsel-up-level command
  • Better behavior when initial-input contains ~/
  • Add "insert buffer name" action similar to eshell-insert-buffer-name.
  • Add ivy-display-schemes and use it.
  • counsel-linux-apps-directories: Add guixsd's application directory
  • counsel.el (counsel-ag, counsel-rg): store command persistently
swiper questions on Stackoverflow (View All Questions)
  • Ionic 1.2.x + Swiper: Looped Slide changes
  • Why didn't Swiper put its functions in prototype?
  • idangerous swiper slides shows gap on bigger monitor
  • How we can use MAGTEK credit card swiper with chrome or firefox?
  • Go to a specific slide with iDangerous Swiper
  • Swiper API - How to get alert on swipe for left side?
  • How to implement javascript swiper slider plugin into angular application
  • idangerous swiper not working on big monitor
  • Swiper Slider on Angular Directive nodeType null error
  • freeMode not working on Swiper inside an inner slide
  • swiper slider showing single bullet with jquery tabs?
  • jQuery Swiper Script to Run after Ng-Repeat elements are loaded - AngularJS
  • JQuery Swiper Plugin content disappears when in loop
  • IDangero.us Swiper framework does not work properly
  • Using swiper for dynamic data?
  • swiper iDangero.us Swiper in Wordpress
  • to lock the keypress till the whole section of the swiper slides
  • Swiper + Ionic TypeError: Cannot read property 'nodeType' of null
  • idangero.us swiper control
  • Banner Slider in Swiper Slider inside Tab Menu Tab Panel
  • How can the images in "Swiper" from iDangnero.us be made SEO?
  • jQuery Swiper event when sliding animation is on
  • Image Slider Swiper function
  • Select Box Not Working when Placed within Swiper
  • javascript swiper library in an angular directive
  • Multiple Swiper instances inside each loop
  • Idangerous Swiper, need to cancel sliding to next slide
  • freeMode not working in mobile browser using Swiper
  • iDangerous Swiper - Change content of swiper-slide onClick
  • Swiper Slider not working inside Bootstrap Tab Panel
swiper list of languages used
swiper latest release notes
0.10.0 ivy 0.10.0

The Changelog for version 0.10.0 (and previous versions) is available here.

0.9.0 ivy 0.9.0

The Changelog for version 0.9.0 (and previous versions) is available here

0.8.0 ivy 0.8.0

The Changelog for version 0.8.0 (and previous versions) is available here

Other projects in Emacs Lisp