by Dom Lachowicz

Current maintainer: Reuben Thomas


February 4, 2018: Enchant 2.2.3 released.

January 3, 2018: Enchant 2.2.1 released.

December 12, 2017: Enchant 2.2.0 released.

August 8, 2017: Enchant 2.1.0 released.

August 4, 2017: Enchant 2.0.0 released.

February 6, 2017: Enchant 1.6.1 released.

April 1, 2010: Enchant 1.6.0 released.

May 23, 2009: Enchant 1.5.0 released.

May 5, 2008: Enchant 1.4.2 released.

What is Enchant?

Enchant is a library (and command-line program) that wraps a number of different spelling libraries and programs with a consistent interface. By using Enchant, you can use a wide range of spelling libraries, including some specialised for particular languages, without needing to program to each library's interface. If it's not convenient to call a C library, you can access most of Enchant's functionality via the enchant program, which communicates over a pipe, like ispell, and is indeed ispell-compatible.


Enchant is capable of having multiple backends loaded at once. Currently, Enchant has 6 backends:

Getting Enchant

You can get Enchant from Github. https://github.com/AbiWord/enchant

Older versions are still available from the AbiSource website.

You can browse the Enchant source: https://github.com/AbiWord/enchant. Enchant's public API can be found here. Enchant's provider plugin API can be found here. Enchant's C++ API can be found here.

User configuration

Users can install their own dictionaries for several back-ends, and even their own spell-checker back-end plugins, and can configure which back-ends are used for which languages.

Building Enchant

Enchant's build system uses GNU Autotools, which means that it works on most operating systems and with most compilers, including MSVC and XCode.

Enchant is vanilla C and C++ code, and as such should be buildable with just about any C/C++ compiler.

LibEnchant imposes no dependencies other than libc on programs that use it. Internally, Enchant requires Glib2 version 2.6 or later.

All inputs and outputs are in UTF-8 encoding. Language tags use the familiar ISO standards, and take the form of "xx_YY" (language_LOCALE), where the locale ("_YY") portion is optional, but encouraged. We may consider extending the language tag mechanism to accommodate future needs, such as medical dictionaries.

Programs using Enchant

Enchant is used by AbiWord, LyX, and, via gspell and GtkSpell, a number of Gtk and GNOME applications. Emacs support is in development.

Backends for additional spell-checking systems are welcomed.

Bugs and development

Please use Github issue tracker if possible to file bugs, offer patches or request new features. Even better, submit a Pull Request! Alternatively, feel free to send a message to the abiword-devel mailing list.

The list for Enchant discussion is the AbiWord-devel list. Please see http://www.abisource.com/developers/ for more information on how to join, and for archives.

Enchant is quite mature, but it still lacks features. Some work has already been done as part of past Google Summer of Code projects that has not yet been integrated into releases (see the issue tracker). Some functionality available in the underlying spelling libraries but not yet supported by Enchant could also usefully be added to Enchant's APIs.

If you'd like to contribute to Enchant, please read the file HACKING.


Enchant is licensed under the LGPL license, with an Exception so that non-free plugin backends could be loaded and used by Enchant. Thus, it is possible to use the native spell checkers on proprietary platforms (macOS, MS Office,…).

What's in a Name?

The definition of "Enchant" is roughly "to cast a spell". So, it's a pun!