Home Reference Source Repository

textlint Build Status

The pluggable linting tool for text(plain text and markdown).

It is similar to ESLint.


$ npm install textlint -g


textlint has not default rule!!

Should use textlint with --rule or --ruledir.

todo:lint result

:information_source: See examples/cli

# install textlint rule
npm install --save-dev textlint-rule-no-todo
# use with `textlint-rule-no-todo` rule
# shorten `textlint-rule-no-todo` to `no-todo`.
textlint --rule no-todo README.md


See command help.

$ textlint -h
  textlint [options] file.md [file.txt] [dir]

    -h, --help                 Show help.
    -c, --config path::String  Use configuration from this file or sharable config.
    --rule [path::String]      Set rule package name and set all default rules to off.
    --rulesdir [path::String]  Set rules from this directory and set all default rules to off.
    -f, --format String        Use a specific output format. - default: stylish
    -v, --version              Outputs the version number.
    --ext [String]             Specify text file extensions.
    --no-color                 Enable color in piped output.
    -o, --output-file path::String  Enable report to be written to a file.
    --quiet                    Report errors only. - default: false
    --stdin                    Lint code provided on <STDIN>. - default: false

Allow to use with multiple rules.

$ textlint --rule no-todo --rule very-nice-rule README.md


.textlintrc is config file that is loaded as YAML, JSON or JS via MoOx/rc-loader.

$ textlint --rule no-todo --rule very-nice-rule README.md

is equal to

  "rules": {
    "no-todo": true,
    "very-nice-rule": true,

The config object can define rule's option.

  "rules": {
    "no-todo": false, // disable
    "very-nice-rule": {
        "key": "value"

Pass rule's options("key": "value") to very-nice-rule.

It mean that use the following format:

  "rules": {
    "<rule-name>": true | false | object

:information_source: See examples/config-file


textlint plugin is a set of rules and rulesConfig.

To enable plugin, put the "plugin-nameinto.textlinrc`.

// `.textlinrc`
    "plugins": [
    // overwrite-plugins rules config
    // <plugin>/<rule>
    "rules": {
        "plugin-name/rule-name" : false

:information_source: See docs/plugin.md

Rule list - Collection of textlint rule

See Collection of textlint rule · azu/textlint Wiki.

If you create new rule, and add it to the wiki :)

Built-in formatters

Currently, you can use "stylish" (defaults), "compact", "checkstyle", "jslint-xml", "junit", "tap", "pretty-error".

e.g.) use pretty-error.js

$ textlint -f pretty-error file.md

More detail in azu/textlint-formatter.

Use as node modules

You can use textlint as node modules.

$ npm install textlint --save-dev

Minimal usage:

var TextLintEngine = require("textlint").TextLintEngine;
var engine = new TextLintEngine({
    rulePaths: ["path/to/rule-dir"]
var results = engine.executeOnFiles(["README.md"]);
console.log(results[0].filePath);// => "README.md"
console.log(results[0].messages);// => [{message:"lint message"}]
if (engine.isErrorResults(results)) {
    var output = engine.formatResults(results);

High level usage:

var textlint = require("textlint").textlint;
    // rule-key : rule function(see docs/create-rules.md)
    "rule-key": function(context){
        var exports = {};
        exports[context.Syntax.Str] = function (node) {
            context.report(node, new context.RuleError("error message"));
        return exports;
var results = cliEngine.executeOnFiles(["README.md"]);
console.log(results[0].filePath);// => "README.md"
console.log(results[0].messages);// => [{message:"lint message"}]

More detail:

FAQ: How to create rules?

Please see docs/

Use with XXX

gulp plugin for textlint.

The plugin for Atom Linter provides an interface to textlint.


  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D


MIT and

lib/load-rules.js, util/traverse.js, cli.js are:

Copyright (c) 2013 Nicholas C. Zakas. All rights reserved.

SCG: TextLint is similar project.

SCG: TextLint's place is equal to my textlint(Fortuitously, project's name is the same too!).


via Natural Language Checking with Program Checking Tools


Thanks to ESLint.