2022-02-01 18:01:11 +00:00
# cli-truncate
2020-05-04 18:50:13 +01:00
> Truncate a string to a specific width in the terminal
Gracefully handles [ANSI escapes ](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles ). Like a string styled with [`chalk` ](https://github.com/chalk/chalk ). It also supports Unicode surrogate pairs and fullwidth characters.
## Install
2025-07-15 07:28:14 +00:00
``` sh
npm install cli-truncate
2020-05-04 18:50:13 +01:00
```
## Usage
``` js
2022-02-01 18:01:11 +00:00
import cliTruncate from 'cli-truncate' ;
2020-05-04 18:50:13 +01:00
cliTruncate ( 'unicorn' , 4 ) ;
//=> 'uni…'
// Truncate at different positions
cliTruncate ( 'unicorn' , 4 , { position : 'start' } ) ;
//=> '…orn'
cliTruncate ( 'unicorn' , 4 , { position : 'middle' } ) ;
//=> 'un…n'
cliTruncate ( 'unicorns rainbow dragons' , 6 , { position : 'end' } )
//=> 'unico…'
cliTruncate ( '\u001B[31municorn\u001B[39m' , 4 ) ;
//=> '\u001B[31muni\u001B[39m…'
// Truncate Unicode surrogate pairs
cliTruncate ( 'uni\uD83C\uDE00corn' , 5 ) ;
//=> 'uni\uD83C\uDE00…'
// Truncate fullwidth characters
cliTruncate ( '안녕하세요' , 3 ) ;
//=> '안…'
// Truncate the paragraph to the terminal width
const paragraph = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.' ;
2025-07-15 07:28:14 +00:00
cliTruncate ( paragraph , process . stdout . columns ) ;
2020-05-04 18:50:13 +01:00
//=> 'Lorem ipsum dolor sit amet, consectetuer adipiscing…'
```
## API
### cliTruncate(text, columns, options?)
#### text
Type: `string`
2025-07-15 07:28:14 +00:00
The text to truncate.
2020-05-04 18:50:13 +01:00
#### columns
Type: `number`
2022-02-01 18:01:11 +00:00
The number of columns to occupy in the terminal.
2020-05-04 18:50:13 +01:00
#### options
Type: `object`
##### position
Type: `string` \
Default: `'end'` \
2025-07-15 07:28:14 +00:00
Values: `'start' | 'middle' | 'end'`
2020-05-04 18:50:13 +01:00
2022-02-01 18:01:11 +00:00
The position to truncate the string.
2020-05-04 18:50:13 +01:00
##### space
Type: `boolean` \
Default: `false`
Add a space between the text and the ellipsis.
``` js
2022-02-01 18:01:11 +00:00
import cliTruncate from 'cli-truncate' ;
2020-05-04 18:50:13 +01:00
cliTruncate ( 'unicorns' , 5 , { space : false } ) ;
//=> 'unic…'
cliTruncate ( 'unicorns' , 5 , { space : true } ) ;
//=> 'uni …'
cliTruncate ( 'unicorns' , 6 , { position : 'start' , space : true } ) ;
//=> '… orns'
cliTruncate ( 'unicorns' , 7 , { position : 'middle' , space : true } ) ;
//=> 'uni … s'
```
##### preferTruncationOnSpace
Type: `boolean` \
Default: `false`
Truncate the string from a whitespace if it is within 3 characters from the actual breaking point.
``` js
2022-02-01 18:01:11 +00:00
import cliTruncate from 'cli-truncate' ;
2020-05-04 18:50:13 +01:00
cliTruncate ( 'unicorns rainbow dragons' , 20 , { position : 'start' , preferTruncationOnSpace : true } )
//=> '…rainbow dragons'
// without preferTruncationOnSpace
cliTruncate ( 'unicorns rainbow dragons' , 20 , { position : 'start' } )
//=> '…rns rainbow dragons'
cliTruncate ( 'unicorns rainbow dragons' , 20 , { position : 'middle' , preferTruncationOnSpace : true } )
//=> 'unicorns…dragons'
cliTruncate ( 'unicorns rainbow dragons' , 6 , { position : 'end' , preferTruncationOnSpace : true } )
//=> 'unico…'
// preferTruncationOnSpace would have no effect if space isn't found within next 3 indexes
cliTruncate ( 'unicorns rainbow dragons' , 6 , { position : 'middle' , preferTruncationOnSpace : true } )
//=> 'uni…ns'
```
2022-02-01 18:01:11 +00:00
##### truncationCharacter
Type: `string` \
Default: `…`
The character to use at the breaking point.
``` js
import cliTruncate from 'cli-truncate' ;
cliTruncate ( 'unicorns' , 5 , { position : 'end' } ) ;
//=> 'unic…'
cliTruncate ( 'unicorns' , 5 , { position : 'end' , truncationCharacter : '.' } ) ;
//=> 'unic.'
cliTruncate ( 'unicorns' , 5 , { position : 'end' , truncationCharacter : '' } ) ;
//=> 'unico'
```
2020-05-04 18:50:13 +01:00
## Related
- [wrap-ansi ](https://github.com/chalk/wrap-ansi ) - Wordwrap a string with ANSI escape codes
- [slice-ansi ](https://github.com/chalk/slice-ansi ) - Slice a string with ANSI escape codes