Wondering what’s next for npm?Check out our public roadmap! »

    TypeScript icon, indicating that this package has built-in type declarations

    4.1.1 • Public • Published

    Richtypo: HTML typography enhancer for Node.js

    npm Build Status Codecov

    Richtypo prepares your texts to publication on web: applies typography rules like quotes ("“”), dashes (-) and non-breaking spaces to make text easier to read.

    Richtypo comes with typography rules for English, French and Russian, but you can customize them and create your own rules — each rule is an independent JavaScript function.

    Have a look at the example page and its source.


    npm install richtypo

    You will probably need to install a rule package for your language, like this:

    npm install richtypo-rules-en

    But it’s not required, see how to create your own rules.

    Rule packages

    These packcages contain recommended typography rules for different languages:


    Basic usage

    import richtypo from 'richtypo';
    import rules from 'richtypo-rules-en';
    const text =
      'There are 1000 "rules" to enrich your text with Richtypo.';
    richtypo(rules, text);

    Will produce something like that:

    There are 1,000 “rules” to enrich your text with Richtypo.

    Note: The default export of richtypo-rules-en contains recommended rules but you can import each rule separately, see below.

    Note:   is actually rendered by Richtypo as the Unicode character for non-breaking-space \xA0 which works well with any modern browser. We use   in the examples to make it visible.

    Note: Richtypo works better when the input text is cleared from special characters. Use the he package and its decode function to remove special characters.


    Richtypo can be curried and used as below:

    import richtypo from 'richtypo';
    import rules from 'richtypo-rules-en';
    const rt = richtypo(rules);
    const text =
      'There are 1000 "rules" to enrich your text with Richtypo.';
    // Will produce the same output as in the previous section


    Run only rules you need by importing them separately:

    import richtypo from 'richtypo';
    import { spaces, quotes } from 'richtypo-rules-en';
    const text =
      'There are 1000 "rules" to enrich your text with RichTypo.';
    // this will only run spaces and quotes rules
    richtypo([spaces, quotes], text);

    Note: Have a look at the example page and its source.

    Custom rules

    Rules are JavaScript functions that take a string and return a transformed string. For example, a rule that replaces three dots (...) with an ellipsis () can look like this:

    const ellipsis = text => text.replace(new RegExp(/\.{2,}/gim), '');

    And then you use it as any other rule:

    import richtypo from 'richtypo';
    richtypo(ellipsis, 'Typography everywhere...');
    // -> Typography everywhere…

    Common rules package

    richtypo-rules-common package contains common typography rules that you can use or extend in your own rules.


    The common rules package exports definitions, convenience constants that you can use in your own rules. For example, definitions.quotes is set as '["“”«»‘’]', which allows you to write:

    import { definitions } from 'richtypo-rules-common';
    const quoteToUnderscore = text =>
      text.replace(new RegExp(`${definitions.quotes}`, 'gm'), '_');
    export default {
    Common rules

    The common rules package also exports rules that you can reuse as is.

    For example, the ellipsis rule replaces ... with symbol. Rather than you having to rewrite that rule, you can reexport it as part of your rules.

    import { ellipsis } from 'richtypo-rules-common';
    export default {

    Some rules such as the quotes rule are factory rules and need to be “configured”.

    import { ellipsis, quotesFactory } from 'richtypo-rules-common';
    export default {
      quotes: quotesFactory({ openingQuote: '«', closingQuote: '»' })

    For the complete list of common rules, check out the Readme page of the common rule package.


    Don’t forget to test your rules. Have a look at the English rules package to see how tests are done.

    Authors and license

    Artem Sapegin and contributors.

    MIT License, see the included License.md file.


    npm i richtypo

    DownloadsWeekly Downloads






    Unpacked Size

    11.2 kB

    Total Files


    Last publish


    • avatar