The Haskell-Scriptable Editor
Haskell Other
Latest commit 2bef802 Jan 30, 2017 @ethercrow ethercrow committed on GitHub Merge pull request #970 from noughtmare/master
Fixed hint spawning multiple interpreters
Failed to load latest commit information.
example-configs Release 0.13.5 Dec 10, 2016
maintainer Release 0.13 Sep 29, 2016
yi-core Fixed hint spawning multiple interpreters Jan 26, 2017
yi-frontend-pango Make Regex exports explicit Dec 26, 2016
yi-frontend-vty Release 0.13.5 Dec 10, 2016
yi-fuzzy-open Release 0.13.5 Dec 10, 2016
yi-ireader Release 0.13.5 Dec 10, 2016
yi-keymap-cua Release 0.13.5 Dec 10, 2016
yi-keymap-emacs Fix some ghc warnings Jan 8, 2017
yi-keymap-vim Fix memory leak Jan 18, 2017
yi-language Fix memory leak Jan 18, 2017
yi-misc-modes Fix some ghc warnings Jan 8, 2017
yi-mode-haskell Fix some ghc warnings Jan 8, 2017
yi-mode-javascript Release 0.13.5 Dec 10, 2016
yi-snippet Fix some ghc warnings Jan 8, 2017
yi Release 0.13.5 Dec 10, 2016
.authorspellings Add .authorspellings file Oct 22, 2010
.ghci .ghci Nov 3, 2014
.gitignore Added *.cabal to gitignore and removed .cabal files Aug 14, 2016
.travis.yml Support alex >=3.2.1 Dec 8, 2016
AUTHORS Update changelog and authors Dec 10, 2016
CHANGELOG Update changelog and authors Dec 10, 2016
LICENSE Collapse outer directory structure. Oct 30, 2014 More badges Oct 13, 2016
lts-6.yaml Whitelist the required version of optparse-applicative Oct 14, 2016
lts-7.yaml Whitelist the required version of optparse-applicative Oct 14, 2016
shell.nix Update shell.nix to build with GHC 8 and provide some missing libraries Dec 20, 2016
stack.yaml Fix undiscoverable ListLike Text Char instance in yi-core Yi.Tag Dec 20, 2016


Travis Hackage Hackage-Deps yi on Stackage LTS 7 yi on Stackage Nightly

Yi is a text editor written in Haskell and extensible in Haskell. The goal of Yi is to provide a flexible, powerful and correct editor core scriptable in Haskell.

Its features include

  • a purely functional editor core;
  • keybindings written as parsers of the input;
  • Emacs, Vim and Cua (subset) emulations provided by default;
  • Vty (terminal) and Gtk-based Pango UIs

The long term goal of the project is to make Yi the editor of choice for the haskell hacker. The main short term goal is to maximize Yi's Fun Factor. This means that we want to

  • improve hackability (and therefore architecture) and
  • add cool features.

We also want to simplify the core Yi package to make it more accessible, splitting some parts into several packages.

Other information (much of it old) is available on the Haskell wiki.



See this documentation page for installation instructions. Hacking instructions if you're using the nix package manager are also there.

Getting Source

Yi source repository is available on GitHub.

To get the git version,

$ git clone git://

If you plan to do more serious hacking, you probably want the supporting repositories from the GitHub project page. You should cross-reference with the cabal file to see what you might need.

Reporting Bugs

Please report issues on GitHub.

Mailing List

Our mailing list is yi-devel, hosted at Google Groups. Please ask us questions on this list! All development discussion occurs on this list.

IRC channel

Our channel is #yi at Freenode. Please note that it is rather slow (very slow compared to #haskell), so be prepared to stay for longer than 5 minutes.

Configuring Yi

Yi uses the Dyre package to have dynamic reconfiguration. You can configure Yi by creating ~/.config/yi/yi.hs, and then Yi is reconfigured whenever you update this file. Example configuration files are in yi/examples/ (copy any of these into ~/.config/yi/ as yi.hs and restart Yi).

You can find some sample user configs in the source repository on GitHub. To use one of these configurations, install the package and then create a configuration file ~/.config/yi/yi.hs like this:

import Yi
import Yi.Config.Users.Anders

main = yi config

It's possible to customize even these user configs in the same way as the example configurations.

Frontend Compatibility

        |  Vty    Pango
Linux   |   X       X
OSX     |   X       X
Windows |           X

Windows support for Vty may eventually come; patches on the vty package would certainly be appreciated.

The plan is to move the UI frontends into separate packages, but this has not yet happened.


If you're interested in optimizing Yi, here is a way to get profiling:

  1. Change ghcOptions in yi/src/library/Yi/Main.hs:
-                  ghcOptions = [],
+                  ghcOptions = ["-auto-all", "-prof", "-osuf=p_o", "-hisuf=p_hi", "-rtsopts"],
  1. Recompile yi with --enable-library-profiling:
cabal configure --enable-library-profiling && cabal install --reinstall
  1. Run yi first to get a compiled real executable.

  2. Then call real executable from cache directory with profiling options. On any XDG-compatible (Unix-like) system this should look like:

~/.cache/yi/yi-linux-x86_64 +RTS -Pa

Reading material

There are some papers which might interest you. If you plan on hacking on Yi, it's very recommended that you read these