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
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.
npm install string-width
import stringWidth from 'string-width';
stringWidth('a');
//=> 1
stringWidth('古');
//=> 2
stringWidth('\u001B[1m古\u001B[22m');
//=> 2
Type: string
The string to be counted.
Type: object
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.
Type: boolean
Default: false
Whether ANSI escape codes should be counted.
JavaScript
98.7%
TypeScript
1.3%
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
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.
npm install string-width
import stringWidth from 'string-width';
stringWidth('a');
//=> 1
stringWidth('古');
//=> 2
stringWidth('\u001B[1m古\u001B[22m');
//=> 2
Type: string
The string to be counted.
Type: object
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.
Type: boolean
Default: false
Whether ANSI escape codes should be counted.
JavaScript
98.7%
TypeScript
1.3%