"vty is a very simple terminal interface library."

Darcs repository: http://code.haskell.org/vty/

Known Issues

  • No windows support
  • Does not verify the terminal actually supports the required UTF-8 encoding.
  • Cursor should be manually managed for a consistent appearance across terminals.
  • GHC 6.8 support needs to be revisited.


The latest release is This release is compatible GHC 6.10. It will, likely, not compile with any other compiler. The API for the 4.0 series has changed from that provided by 3.*. The changes should be fairly straight-forward.

Release 4.0.0 &

  • Completely rewritten output backend.
    • Efficient, scanline style output span generator. Has not been fully optimized, but good enough.
    • The details required to display the desired picture on a terminal are well encapsulated.
    • Terminfo based display terminal implementation. With specialized derivitives for xterm, Terminal.app, and iTerm.app.
      • Attempts to robustly handle even terminals that don't support all display attributes.
      • I've tested the following terminals with success: iTerm.app, Terminal.app, xterm, rxvt, mlterm, Eterm, gnome-terminal, konsole, screen, linux vty. Hopefully you will be as successfull.
    • Improved unicode support. Double wide characters will display as expected.
  • 256 color support. See Graphics.Vty.Attributes.Color240. The actual output color is adjusted according to the number of colors the terminal supports.
  • The Graphics.Vty.Image combinators no longer require matching dimensions to arguments. Unspecified areas are filled in with a user-customizable background pattern. See Graphics.Vty.Picture.
  • output images are always cropped to display size.
  • Significant code coverage by QuickCheck? tests. An interactive test for those final properties that couldn't be automatically verified.

issues resolved:


  • Depends on terminfo 0.3.*


  • Uses extensible-exceptions for GHC 6.8.2 compatibility.

Release 3.1.8

  • The terminal state is restored on shutdown.
  • code style updates
  • The application using vty optionally construct a Vty instance that places a delay between atomic inputs. This is done by providing mkVtyEscDelay a delay in microseconds. The equation mkVty still exists and is equivalent to "mkVtyEscDelay 0".

Release 3.1.6

  • Fixed GHC warnings over use of deprecated -fffi option
  • Updated to depend on base >= 4 && < 5. Thanks to Andrea Vezzosi
  • Until VTY is updated to use Control.Exception.Extensible use 3.1.2 on GHC 6.8

Release 3.1.4

  • Updated to compile with GHC 6.10.1. Thanks Roman Cheplyaka

Release 3.1.2

  • Changed input handling to have (hopefully) better responsiveness and lower CPU usage.

Release 3.1.0

  • API change: Adds the field "refresh :: IO ()" which can be used to force a refresh of the terminal display.

Release 3.0.4

  • UTF-8 input support.
  • Cleanup and documentation
  • Uses Terminfo package

Release 3.0.2

  • Input reads is now done using non-blocking IO.
  • A input character of '\t' is now mapped to the KASCII '\t' [] event instead of KASCII 'I' [MCtrl] event. Fixes #3