Very Simple Erlang Spell Checker
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples [#141943791] fixing PR comments Apr 4, 2017
src [#41] Version Bump to 0.1.5 Oct 15, 2018
test [#48] increasing coverage Oct 12, 2018
.gitignore [#45] Integrating with codecov Oct 12, 2018
LICENSE Update LICENSE Aug 25, 2016
ci [#30] adding travis Oct 12, 2018
elvis.config [#141943791] Markdown support Mar 31, 2017
rebar.lock [#40] updating dependencies Oct 12, 2018

Sheldon Build Status codecov

Very Simple Erlang Spell Checker.

Note: Sheldon also suggests correct words when some word is misspelled. That functionality was highly inspired by the Elixir project spell_check.

Contact Us

If you find any bugs or have a problem while using this library, please open an issue in this repo (or a pull request :)).

And you can check all of our open-source projects at


NOTE sheldon only works with Erlang 21 or greater

  1. Clone the repo
  2. rebar3 compile


Erlang Shell

First of all Sheldon is an application and it needs to be started. You can use rebar3 shell to set the necessary paths, then use sheldon:start/0 or application:ensure_all_started(sheldon) in order to start Sheldon but if you are using Sheldon as a dependency you can let OTP starts it from file too.

Sheldon only has two main methods, sheldon:check/1 and sheldon:check/2. As a user, you just need to use those.

1> sheldon:check("I want to check this correct text").
2> sheldon:check("I want to check this misspeled text").
#{bazinga => <<"That's no reason to cry. One cries because one is sad. For example, I cry because others are stupid, and that ma"...>>,
  misspelled_words => [#{candidates => ["misspeed","misspelled"],
     line_number => 1,
     word => "misspeled"}]}


sheldon:check/2 works like sheldon:check/1 but it accepts a Configuration parameter. With this Conf parameter we can apply some rules to the text we want to check. Those rules are ignore words, ignore patterns and ignore blocks.

This is the format (see sheldon_config.erl), no key is required:

#{ ignore_words    => [string()]
 , ignore_patterns => [regex()]
 , ignore_blocks   => [ignore_block()]
 , adapters        => [adapter()]

Then, if we call the previous sheldon:check/1 but with configuration we can skip the error

3> sheldon:check("I want to check this misspeled text", #{ignore_words => ["misspeled"]}).


Sometimes we have to check the spelling of formatted text but sheldon handles it as a plain text so we will face problems with that. One example is markdown files, if we try to check them sheldon will complain about things like '##' or '*something*'. For these cases sheldon provides adapters. An adapter is an Erlang module with an adapt/1 function which will receive a line in binary() format and returns that line transformed. For example, sheldon provides markdown_adapter which converts from markdown to plain text.

In order to use them we only have to declare them in the config file:

#{adapters => [markdown_adapter]}.

You can create your own adapter which fits your requirements, you only need to implement the sheldon_adapter behavior and to provide some code to adapt/1 function.

-spec adapt(binary()) -> iodata().
adapt(Line) ->

You can add all the adapters you want and they will be executed in order.


Check this out.


sheldon:check/1 and sheldon:check/2 have the same result type, you can see sheldon_result.erl. Sheldon will return the ok atom if the check went well else it'll return

    #{ misspelled_words := [misspelled_word()]
     , bazinga          := string()

misspelled_word's list will be returned ordered by line number. If more than one misspelled word per line appears they will be ordered by order of appearance.


  • Erlang/OTP 21+