Packages

Library · v2.0.8

fixnow

An asynchronous multilingual Node.js spell checker with suggestions, eight bundled dictionaries, protected-token handling, and language-specific ESM and CommonJS entry points.

Installation

Add it to your project

Install the published package in your project, then import only the API surface your application needs.

npm install fixnow

fixnow checks text against bundled dictionaries and returns structured spelling issues with optional correction suggestions. It supports Arabic, German, English, Spanish, French, Portuguese, Russian, and Vietnamese without downloading language data at runtime.

The API is asynchronous because dictionaries are loaded from disk when first needed. Use the root entry when an application switches languages, or a language subpath when one language is enough.

Eight language dictionaries

Import Language Dictionary license
fixnow/ar Arabic LGPL-3.0
fixnow/de German LGPL-3.0
fixnow/en English MIT
fixnow/es Spanish LGPL-3.0
fixnow/fr French MIT
fixnow/pt Portuguese GPL-3.0-or-later
fixnow/ru Russian GPL-3.0-or-later
fixnow/vi Vietnamese MIT

The library code is MIT licensed. The dictionary files retain the licenses shown above and ship with their notices.

Check text and request suggestions

import { checkText, createChecker, suggest } from 'fixnow';

const issues = await checkText('This sentance has a typo', {
  language: 'en',
  suggestions: true,
});

const spanish = createChecker('es');
const isCorrect = await spanish.isCorrect('código');
const alternatives = await suggest('bonjoor', { language: 'fr' });

Each issue includes the misspelled word, its offset and length, and—when enabled—a list of suggestions. Bound checkers expose check, suggest, isCorrect, and warmup for one language.

In version 2, language is required. Spanish accent tolerance is an explicit acceptAccentOmissions option rather than an implicit default.

Keep technical text intact

The default tokenizer skips protected segments such as code spans, URLs, email addresses, paths, CLI flags, hexadecimal colors, filenames, and dotted identifiers. Applications can replace, extend, or disable that pattern through protectedSegments.

ignoreWords, flagWords, case sensitivity, minimum word length, and a custom protected-word callback provide additional control without modifying a dictionary.

Language-specific imports

import { check, suggest } from 'fixnow/es';

const issues = await check('Esto es un herror', { suggestions: true });
const alternatives = await suggest('herror', 3);

Subpath imports keep the consuming bundle focused on one language. The npm package still contains all eight dictionaries, so installing it downloads the complete dictionary set.

Keep it external when bundling

fixnow resolves its compressed dictionaries from node_modules/fixnow/dictionaries/ at runtime. Node-targeted bundlers—including VS Code extension and CommonJS builds—must keep fixnow external instead of inlining it.

await esbuild.build({
  entryPoints: ['src/index.ts'],
  bundle: true,
  external: ['fixnow'],
  format: 'cjs',
  platform: 'node',
});

The package requires Node.js 20 or newer and publishes matching ESM, CommonJS, and TypeScript declaration surfaces.