# The license in this repository lives in a Makefile header, held by the FSF

> This repository ships three Emacs packages, Ivy, Counsel and Swiper, plus a fourth source file the page never mentions. The recorded license is unknown, there is no license file at the root, the GitHub tags stopped in 2019, and the copyright in the build file belongs to the Free Software Foundation.

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

- Repository: https://github.com/abo-abo/swiper
- Website: https://oremacs.com/swiper/
- Stars: 2,429 · Forks: 333
- Language: Emacs Lisp
- License: not declared
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/abo-abo-swiper

## The recorded license is unknown and no license file exists at the root

There is no LICENSE file in this repository. The entries at the root are `.dir-locals.el`, `.elpaignore`, `.github/`, `.gitignore`, `.mailmap`, CONTRIBUTING.org, the Makefile, README.md, the Lisp sources, `doc/` and `targets/`, and the recorded license is empty. What states the terms is the header of the Makefile, which carries the standard GNU notice: copyright C 2015 to 2026 Free Software Foundation, Inc., the line saying this file is part of GNU Emacs, and redistribution under the GNU General Public License, version 3 or, at your option, any later version, with the warranty disclaimer. Two things follow from that. The terms are discoverable only if you open a build file, which is not where anyone looks for a license. And the copyright holder is the Free Software Foundation rather than the person whose account hosts the repository, which is consistent with the header's claim that the code is part of GNU Emacs and makes redistribution a question about Emacs rather than about this repository.

## Tags named after ivy stopped in 2019 while the archives kept shipping

Three tags are visible and all three are named for one of the three packages, not for the repository. They are 0.13.0 on 2019-10-16, 0.12.0 on 2019-07-20 and 0.11.0 on 2019-01-26, each titled with the package name `ivy`. The default branch is `master` and its last push is dated 2026-09-13, so the source has moved nearly seven years past the newest tag. None of that is the version most users get, because installation is not from a tag. The page tells you to install the `ivy` package from GNU ELPA or MELPA, and on Debian 10 and later, including Ubuntu 18.04 and its derivatives, to install all three at once with `sudo apt install elpa-counsel`, with Hydra support in a separate `elpa-ivy-hydra` package. Each package carries four badges, one each for GNU-devel ELPA, GNU ELPA, MELPA and MELPA Stable, so the version a user actually installs lives in those four archives and the page never states it.

## Three packages are documented and a fourth source file is not

The opening paragraph names what the repository contains: Ivy, a generic completion mechanism; Counsel, a collection of Ivy enhanced versions of common Emacs commands; and Swiper, an Ivy enhanced alternative to Isearch. The tree carries more Lisp than that. Alongside `ivy.el`, `counsel.el` and `swiper.el` there is `colir.el`, and there is no mention of it anywhere on the page, which means a file you find in the checkout has no documented role. The rest are supporting files with names that describe themselves: `ivy-overlay.el`, `ivy-faces.el`, `ivy-avy.el`, `ivy-hydra.el` and `ivy-test.el`, the last of which is the test suite sitting at the repository root rather than in a test directory. There is also `swiper.svg`, the image used in the screenshot section, and a `.mailmap` for contributor attribution. Ivy itself is tried with `M-x` and `ivy-mode`, which turns on generic completion including specific completion for file and buffer names.

## Two source files will not byte-compile without activating the package first

The Makefile splits the sources into two lists, and the split is not cosmetic. Most files compile with a plain pattern rule that runs `batch-byte-compile`, but two of them, `ivy-avy.el` and `ivy-hydra.el`, get an extra flag appended to their compile invocation:

```
$(opt-elcs): ELCFLAGS += -l targets/elpa.el -f ivy--elpa-activate
```

Those two files are grouped as the optional sources, and compiling them requires loading the package activation helper and calling `ivy--elpa-activate` before the byte compiler runs. The dependency target does the same job one level up, running `ivy--elpa-install` in a batch Emacs. The practical consequence is that the obvious command, byte-compiling one of those files directly in a fresh Emacs, is not what the project does and is not guaranteed to work. Note also what the Makefile does not have: there is no install target anywhere in it. The default goal is compile, and the other targets are deps, test, clean, checkdoc, check-declare and plain, so a source checkout builds and checks itself and leaves installation to the package archives.

## Four developer checks and one test entry point, all in batch Emacs

`make test` compiles everything and then hands one file to Emacs's own test framework:

```
test: compile $(test-elcs)
	$(EMACS) -Q -batch -L . $(test-elcs:%.elc=-l %) \
	  -f ert-run-tests-batch-and-exit
```

So the suite is ERT, run in a batch Emacs started with `-Q` so that no user configuration is loaded, and the only test file is `ivy-test.el`. Around it sit three checks that are not tests. `make checkdoc` runs the checkdoc linter over the compiled sources. `make check-declare` evaluates `check-declare-directory` on the whole directory, which is what catches a function that is called but never declared. `make plain` compiles and then loads `targets/plain.el`, which exists to check the sources load without byte compilation. That is four entry points into the same batch Emacs invocation style, which means a contributor can reproduce every one of them locally with nothing but an Emacs binary and make.

## Enabling counsel-mode remaps seventeen built-in commands

Ivy attaches itself through two Emacs entry points rather than by replacing anything: enabling `ivy-mode` makes any command that calls `completing-read` or `completion-in-region` complete through Ivy. Counsel goes further by shipping replacements for common commands, and `counsel-mode` is what remaps the built-ins onto them. The page gives the mapping as a table of seventeen pairs, including `execute-extended-command` to `counsel-M-x`, `describe-bindings` to `counsel-descbinds`, the describe family for functions, variables, symbols and faces, `apropos-command` to `counsel-apropos`, `list-faces-display` to `counsel-faces`, `find-file` to `counsel-find-file`, `find-library`, `imenu`, `load-library`, `load-theme`, `yank-pop`, `info-lookup-symbol`, `pop-to-mark-command` to `counsel-mark-ring` and `bookmark-jump` to `counsel-bookmark`. One behaviour change is called out: pressing DEL in `counsel-find-file` moves to the parent directory. Counsel replacements also add their own keybindings, which `counsel-find-file` is given as the example of. Swiper is the third piece, an alternative to Isearch that uses Ivy to show an overview of all matches, with a Helm implementation offered separately as `swiper-helm` for anyone who wants the same overview without Ivy.

## The configuration example ends in the middle of a binding

The small configuration example is the part of the page most people copy, and it stops before the end. Three setopts come first, turning on Ivy, setting `ivy-use-virtual-buffers` and `enable-recursive-minibuffers`, with a fourth line commented out that enables `search-default-mode` with `char-fold-to-regexp` for anyone who wants Swiper to use it. Then the key bindings start, and the block ends on an opening form with nothing inside it:

```elisp
(keymap-global-set
```

Before that break you get `C-s` bound to `swiper-isearch`, `C-c C-r` and `f6` bound to `ivy-resume`, `M-x` bound to `counsel-M-x`, `C-x C-f` bound to `counsel-find-file`, and `f1` followed by `f`, `v` or `o` bound to the counsel describe commands. A second worked example, this one for typing a candidate literally rather than accepting the completion, is complete: press `C-M-j`, or set `ivy-use-selectable-prompt` to make the prompt line selectable. Documentation otherwise lives outside the repository, in the `(ivy)` Info node installed with the package, in `doc/ivy.org` as the source that generates it, in an HTML manual hosted on ELPA, and in a wiki on GitHub. The page also carries a screenshot of Swiper in Emacs using the `swiper.svg` file at the repository root, and points at a video demo of about ten minutes, which is the shortest description of what the overview looks like on screen.

## Conclusion

This repository suits an Emacs user who wants completion, command remapping and an isearch overview from one package family, and who is willing to install from a package archive rather than from source. Before adopting it, read the terms in the Makefile rather than trusting the absent license metadata, because the copyright there is held by the Free Software Foundation and the code is described as part of GNU Emacs, which is a different arrangement from a personal repository's usual one. Note that the version you get comes from GNU ELPA or MELPA, since the GitHub tags named after ivy stopped in 2019, and note that two of the source files need the package activation step before they will compile at all.

## FAQ

### What are Ivy, Counsel and Swiper?

They are three Emacs packages in one repository. Ivy is a generic completion mechanism that makes any command calling `completing-read` or `completion-in-region` complete through it, Counsel is a set of Ivy enhanced versions of common commands with a remapping mode, and Swiper is an alternative to Isearch that shows an overview of all matches.

### How do I install Ivy, Counsel and Swiper?

Install the `ivy`, `counsel` or `swiper` package from GNU ELPA or MELPA, which also installs the manual under the `(ivy)` Info node. On Debian 10 and later, including Ubuntu 18.04 and derivatives, `sudo apt install elpa-counsel` installs all three, and `sudo apt install elpa-ivy-hydra` adds Hydra support.

### What license is abo-abo/swiper under?

The recorded license is empty and there is no license file at the repository root. The terms appear in the Makefile header instead: copyright 2015 to 2026 Free Software Foundation, Inc., a line saying the file is part of GNU Emacs, and redistribution under the GNU General Public License version 3 or later.

### How do I build and test the Emacs sources in this repository?

The Makefile's default goal is compile, and `make test` compiles and then runs `ivy-test.el` through ert-run-tests-batch-and-exit in a batch Emacs started with -Q. `make deps` installs the package dependencies, `make checkdoc`, `make check-declare` and `make plain` run the documentation, declaration and load checks, and there is no install target.

### How do I type a completion candidate literally in Ivy?

Press `C-M-j`, which inserts the candidate you typed instead of completing to the matched candidate, as in creating a file named `bar` when `barricade` exists. Alternatively, make the prompt line selectable with `(setopt ivy-use-selectable-prompt t)`, which the page's own frequently asked questions section describes.

## Sources

- [abo-abo/swiper on GitHub](https://github.com/abo-abo/swiper)
- [Issues](https://github.com/abo-abo/swiper/issues)
- [Project website](https://oremacs.com/swiper/)
- [README](https://github.com/abo-abo/swiper/blob/master/README.md)
- [Releases](https://github.com/abo-abo/swiper/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/abo-abo-swiper
