sindresorhus/string-width

Get the visual width of a string - the number of columns required to display it

527

stars

81

commits

JavaScript

primary language

Jul 8, 2026

updated

Browse cluster: CLI string width and terminal formatting

README

string-width

Get the visual width of a string - the number of columns required to display it

Some Unicode characters are fullwidth and use double the normal width. ANSI escape codes are stripped and do not affect the width.

Useful to be able to measure the actual width of command-line output.

Install

npm install string-width

Usage

import stringWidth from 'string-width';

stringWidth('a');
//=> 1

stringWidth('古');
//=> 2

stringWidth('\u001B[1m古\u001B[22m');
//=> 2

API

stringWidth(string, options?)

string

Type: string

The string to be counted.

options

Type: object

ambiguousIsNarrow

Type: boolean
Default: true

Count ambiguous width characters as having narrow width (count of 1) instead of wide width (count of 2).

Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). If the context cannot be established reliably, they should be treated as narrow characters by default.

countAnsiEscapeCodes

Type: boolean
Default: false

Whether ANSI escape codes should be counted.

Contributors

sindresorhus

59 commits

fisker

7 commits

coreyfarrell

2 commits

BendingBender

2 commits

sindresorhus/string-width

Get the visual width of a string - the number of columns required to display it

527

stars

81

commits

JavaScript

primary language

Jul 8, 2026

updated

Browse cluster: CLI string width and terminal formatting

README

string-width

Get the visual width of a string - the number of columns required to display it

Some Unicode characters are fullwidth and use double the normal width. ANSI escape codes are stripped and do not affect the width.

Useful to be able to measure the actual width of command-line output.

Install

npm install string-width

Usage

import stringWidth from 'string-width';

stringWidth('a');
//=> 1

stringWidth('古');
//=> 2

stringWidth('\u001B[1m古\u001B[22m');
//=> 2

API

stringWidth(string, options?)

string

Type: string

The string to be counted.

options

Type: object

ambiguousIsNarrow

Type: boolean
Default: true

Count ambiguous width characters as having narrow width (count of 1) instead of wide width (count of 2).

Ambiguous characters behave like wide or narrow characters depending on the context (language tag, script identification, associated font, source of data, or explicit markup; all can provide the context). If the context cannot be established reliably, they should be treated as narrow characters by default.

countAnsiEscapeCodes

Type: boolean
Default: false

Whether ANSI escape codes should be counted.

Contributors

sindresorhus

59 commits

fisker

7 commits

coreyfarrell

2 commits

BendingBender

2 commits

Languages

JavaScript

98.7%

TypeScript

1.3%