ascii-table vs blessed vs cli-table vs cli-table3 vs table
Node.js Command Line Table Libraries
ascii-tableblessedcli-tablecli-table3tableSimilar Packages:

Node.js Command Line Table Libraries

These libraries provide various functionalities for displaying data in a tabular format within the command line interface (CLI). They allow developers to create visually appealing and structured outputs that enhance the readability of data presented in terminal applications. Each library has its own unique features, styles, and capabilities, catering to different needs for formatting and displaying tables in Node.js applications.

Npm Package Weekly Downloads Trend

3 Years

Github Stars Ranking

Stat Detail

Package
Downloads
Stars
Size
Issues
Publish
License
ascii-table0181-2310 years agoMIT
blessed011,886-25611 years agoMIT
cli-table02,29417.3 kB185 years ago-
cli-table3063446.2 kB262 years agoMIT
table0973335 kB332 years agoBSD-3-Clause

Feature Comparison: ascii-table vs blessed vs cli-table vs cli-table3 vs table

Rendering Style

  • ascii-table:

    ascii-table offers a straightforward ASCII rendering style, making it easy to display tables in a simple text format. It is perfect for quick outputs without any additional styling requirements.

  • blessed:

    blessed provides a rich rendering style with support for colors, borders, and various UI components, allowing for more visually appealing tables and interfaces in terminal applications.

  • cli-table:

    cli-table supports basic ASCII rendering with customizable styles, allowing developers to define borders, padding, and alignment for a clean presentation of tabular data.

  • cli-table3:

    cli-table3 enhances rendering capabilities with support for row spanning and improved styling options, providing a modern approach to table display in the CLI.

  • table:

    table supports both ASCII and Unicode rendering, allowing for flexible table designs that can accommodate various character sets and styles.

Complexity and Features

  • ascii-table:

    ascii-table is simple and lightweight, focusing on basic table generation without complex features. It is ideal for quick implementations where advanced functionality is not necessary.

  • blessed:

    blessed is a more complex library that includes a wide range of features beyond table rendering, such as input handling and window management, making it suitable for comprehensive terminal applications.

  • cli-table:

    cli-table offers a balance of simplicity and functionality, providing essential features for table formatting without overwhelming complexity, making it easy to integrate into projects.

  • cli-table3:

    cli-table3 builds on cli-table with additional features such as row spanning and better performance, making it a more robust choice for applications that require advanced table functionalities.

  • table:

    table provides a versatile set of features, including support for different data types and advanced formatting options, making it suitable for applications that need flexibility in table presentation.

Maintenance and Community Support

  • ascii-table:

    ascii-table is lightweight and has a smaller community, which may result in less frequent updates and support compared to larger libraries.

  • blessed:

    blessed has a strong community and is actively maintained, ensuring that it stays up-to-date with the latest features and improvements for terminal applications.

  • cli-table:

    cli-table is widely used and has a solid community, though it may not receive as many updates as newer libraries. It remains a reliable choice for basic table needs.

  • cli-table3:

    cli-table3 is actively maintained and has a growing community, making it a good choice for developers looking for a modern alternative to cli-table.

  • table:

    table is well-maintained and has a supportive community, ensuring that it receives regular updates and enhancements.

Learning Curve

  • ascii-table:

    ascii-table has a very low learning curve, making it easy for developers to get started quickly without extensive documentation or setup.

  • blessed:

    blessed has a steeper learning curve due to its comprehensive feature set and capabilities, which may require more time to understand and utilize effectively.

  • cli-table:

    cli-table is relatively easy to learn, with straightforward documentation and examples that help developers implement it quickly in their projects.

  • cli-table3:

    cli-table3 is similar to cli-table in terms of learning curve, but its additional features may require some time to fully grasp and utilize effectively.

  • table:

    table has a moderate learning curve, with a balance of features that are easy to understand while also offering advanced options for those who need them.

Usage Scenario

  • ascii-table:

    ascii-table is best suited for simple command-line applications where quick and basic table outputs are needed without additional complexity.

  • blessed:

    blessed is ideal for building complex terminal applications that require interactive components and advanced UI features, making it suitable for larger projects.

  • cli-table:

    cli-table works well for standard CLI applications that need basic table formatting, making it a go-to choice for many developers.

  • cli-table3:

    cli-table3 is perfect for applications that require more advanced table features, such as row spanning, while still maintaining ease of use.

  • table:

    table is versatile and can be used in a variety of scenarios where both ASCII and Unicode table rendering is needed, making it suitable for diverse applications.

How to Choose: ascii-table vs blessed vs cli-table vs cli-table3 vs table

  • ascii-table:

    Choose ascii-table if you need a simple and lightweight solution for generating ASCII tables with minimal dependencies. It is straightforward to use and ideal for quick implementations where advanced features are not required.

  • blessed:

    Opt for blessed if you are looking for a comprehensive library that not only supports table rendering but also provides a full suite of terminal UI components. It is suitable for building more complex CLI applications with interactive features.

  • cli-table:

    Select cli-table for a classic and widely-used solution that supports basic table formatting with customizable styles. It is a good choice for projects that need a balance between simplicity and functionality.

  • cli-table3:

    Use cli-table3 if you require a more modern and actively maintained version of cli-table with additional features such as row spanning and improved performance. It is perfect for applications that need enhanced table capabilities without sacrificing ease of use.

  • table:

    Choose table if you need a flexible library that supports both ASCII and Unicode table rendering. It is suitable for applications that require more advanced formatting options and the ability to handle various data types.

README for ascii-table

Ascii Table

Build Status devDependency Status NPM version

Easy table output for node debugging, but you could probably do more with it, since its just a string.

Table of Contents

Usage

Node.js

var AsciiTable = require('ascii-table')

Browser

<script src="ascii-table.min.js"></script>

Note: If using in the browser, it will be placed under window.AsciiTable

Example

Basic usage

var table = new AsciiTable('A Title')
table
  .setHeading('', 'Name', 'Age')
  .addRow(1, 'Bob', 52)
  .addRow(2, 'John', 34)
  .addRow(3, 'Jim', 83)

console.log(table.toString())
.----------------.
|    A Title     |
|----------------|
|   | Name | Age |
|---|------|-----|
| 1 | Bob  |  52 |
| 2 | John |  34 |
| 3 | Jim  |  83 |
'----------------'

We can make a simple table without a title or headings as well.

var table = new AsciiTable()

table
  .addRow('a', 'apple', 'Some longer string')
  .addRow('b', 'banana', 'hi')
  .addRow('c', 'carrot', 'meow')
  .addRow('e', 'elephants')


console.log(table.toString())
.------------------------------------.
| a | apple     | Some longer string |
| b | banana    | hi                 |
| c | carrot    | meow               |
| e | elephants |                    |
'------------------------------------'

API

Static Methods

AsciiTable

See: AsciiTable.factory for details on instantiation

AsciiTable.factory([title], [options])

Table instance creator

  • title - table title (optional, default null)
  • options - table options (optional)
    • prefix - string prefix to add to each line on render

Note: If an object is passed in place of the title, the fromJSON method will be used to populate the table.

Example:

var table = AsciiTable.factory('title')

var table = AsciiTable.factory({
  title: 'Title'
, heading: [ 'id', 'name' ]
, rows: [ 
    [ 1, 'Bob' ]
  , [ 2, 'Steve' ] 
  ] 
})

AsciiTable.align(direction, val, len, [pad])

Shortcut to one of the three following methods

  • direction - alignment direction (AsciiTable.LEFT, AsciiTable.CENTER, AsciiTable.RIGHT)
  • val - string to align
  • len - total length of created string
  • pad - padding / fill char (optional, default ' ')

Example:

table.align(AsciiTable.LEFT, 'hey', 7) // 'hey    '

AsciiTable.alignLeft(val, len, [pad])

  • val - string to align
  • len - total length of created string
  • pad - padding / fill char (optional, default ' ')

Example:

table.alignLeft('hey', 7, '-') // 'hey----'

AsciiTable.alignCenter(val, len, [pad])

  • val - string to align
  • len - total length of created string
  • pad - padding / fill char (optional, default ' ')

Example:

table.alignCenter('hey', 7) // '  hey  '

AsciiTable.alignRight(val, len, [pad])

  • val - string to align
  • len - total length of created string
  • pad - padding / fill char (optional, default ' ')

Example:

table.alignRight('hey', 7) // '    hey'

AsciiTable.alignAuto(val, len, [pad])

Attempt to do intelligent alignment of provided val, String input will be left aligned, Number types will be right aligned.

  • val - string to align
  • len - total length of created string
  • pad - padding / fill char (optional, default ' ')

Example:

table.align(AsciiTable.LEFT, 'hey', 7) // 'hey    '

AsciiTable.arrayFill(len, [val])

Create a new array at the given len, filled with the given value, mainly used internally

  • len - length of array
  • val - fill value (optional)

Example:

AsciiTable.arrayFill(4, 0) // [0, 0, 0, 0]

Instance Methods

instance.setBorder([edge], [fill], [top], [bottom])

Set the border characters for rendering, if no arguments are passed it will be reset to defaults. If a single edge arg is passed, it will be used for all borders.

  • edge - horizontal edges (optional, default |)
  • fill - vertical edges (optional, default -)
  • top - top corners (optional, default .)
  • bottom - bottom corners (optional, default ')

Example:

var table = new AsciiTable('Stars')
table
  .setBorder('*')
  .setHeading('oh', 'look')
  .addRow('so much', 'star power')

console.log(table.toString())
************************
*        Stars         *
************************
*   oh    *    look    *
************************
* so much * star power *
************************

instance.removeBorder()

Example:

table.removeBorder()

console.log('' + table)
  #     Fruit           Thing
 --- ----------- --------------------
  a       apple   Some longer string
  b      banana           hi
  c      carrot          meow
  e   elephants

instance.setAlign(idx, direction)

  • idx - column index to align
  • direction - alignment direction, (AsciiTable.LEFT, AsciiTable.CENTER, AsciiTable.RIGHT)

Example:

table
  .setAlign(2, AsciiTable.RIGHT)
  .setAlign(1, AsciiTable.CENTER)

console.log(table.toString())
.-------------------------------------.
| a  |   apple   | Some longer string |
| b  |   banana  |                 hi |
| c  |   carrot  |               meow |
| e  | elephants |                    |
'-------------------------------------'

instance.setAlignLeft(idx)

Alias to instance.setAlign(idx, AsciiTable.LEFT)

instance.setAlignCenter(idx)

Alias to instance.setAlign(idx, AsciiTable.CENTER)

instance.setAlignRight(idx)

Alias to instance.setAlign(idx, AsciiTable.RIGHT)

instance.setTitle(title)

  • title - table title

Example:

var table = new AsciiTable('Old Title')

table.setTitle('New Title')

instance.getTitle()

Get the current title of the table

Example:

table.getTitle() // 'New Title'

instance.setTitleAlign(direction)

  • direction - table alignment direction

Example:

instance.setTitleAlignLeft()

Alias to instance.setTitleAlign(AsciiTable.LEFT)

instance.setTitleAlignCenter()

Alias to instance.setTitleAlign(AsciiTable.CENTER)

instance.setTitleAlignRight()

Alias to instance.setTitleAlign(AsciiTable.RIGHT)

instance.sort(iterator)

  • iterator - sorting method to run against the rows

Example:

table.sort(function(a, b) {
  return a[2] - b[2]
})
console.log(table.toString())
.----------------.
| 2 | John |  34 |
| 1 | Bob  |  52 |
| 3 | Jim  |  83 |
'----------------'

instance.sortColumn(index, iterator)

Sorting shortcut for targeting a specific column

  • index - column idx to sort
  • iterator - sorting method to run against column values

Example:

// This is quivalent to the `sort` example above
table.sortColumn(2, function(a, b) {
  return a - b
})

instance.setHeading(heading, [...])

Set the column headings for the table, takes arguments the same way as addRow

  • heading - heading array or arguments

Example:

table.setHeading('ID', 'Key', 'Value')

// or:

table.setHeading(['ID', 'Key', 'Value'])

instance.setHeadingAlign(direction)

  • direction -

Example:

instance.setHeadingAlignLeft()

Alias to instance.setHeadingAlignLeft(AsciiTable.LEFT)

instance.setHeadingAlignCenter()

Alias to instance.setHeadingAlignLeft(AsciiTable.CENTER)

instance.setHeadingAlignRight()

Alias to instance.setHeadingAlignLeft(AsciiTable.RIGHT)

instance.addRow(row, [...])

Rows can be added using a single array argument, or the arguments if multiple args are used when calling the method.

  • row - array or arguments of column values

Example:

var table = new AsciiTable()

table
  .addRow(1, 'Bob', 52)
  .addRow([2, 'John', 34])

console.log(table.render())
.---------------.
| 1 | Bob  | 52 |
| 2 | John | 34 |
'---------------'

instance.addRowMatrix(rows)

Bulk addRow operation

  • rows - multidimentional array of rows

Example:

table.addRowMatrix([
  [2, 'John', 34]
, [3, 'Jim', 83]
])

instance.setJustify(enabled)

Justify all columns to be the same width

  • enabled - boolean for turning justify on or off, undefined considered true

Example:

table
  .addRow('1', 'two', 'three')
  .setJustify()

console.log(table.toString())
.-----------------------.
| 1     | two   | three |
'-----------------------'

instance.toString()

Render the instance as a string for output

Alias: [valueOf, render]

instance.toJSON()

Return the JSON representation of the table, this also allows us to call JSON.stringify on the instance.

Example:

var table = new AsciiTable('Title')

table
  .setHeading('id', 'name')
  .addRow(1, 'Bob')
  .addRow(2, 'Steve')

console.log(table.toJSON())
console.log(JSON.stringify(table))
{
  title: 'Title'
, heading: [ 'id', 'name' ]
, rows: [ 
    [ 1, 'Bob' ]
  , [ 2, 'Steve' ] 
  ] 
}
{"title":"Title","heading":["id","name"],"rows":[[1,"Bob"],[2,"Steve"]]}

instance.fromJSON(obj)

Populate the table from json object, should match the toJSON output above.

Alias: [parse]

Example:

var table = new AsciiTable().fromJSON({
  title: 'Title'
, heading: [ 'id', 'name' ]
, rows: [ 
    [ 1, 'Bob' ]
  , [ 2, 'Steve' ] 
  ] 
})

instance.clear()

Clear / reset all table data

Alias: [reset]

instance.clearRows()

Reset all row data, maintains title and headings.

Install

With npm

npm install ascii-table

Contributors

Matthew Oliveira Peter Daum

License

(The MIT License)

Copyright (c) 2013 Beau Sorensen

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.