HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
chjj
blessed
JavaScript2013–2026
chjj / blessed

blessed

A high-level terminal interface library for node.js.

26Distinct people
30Mentions
1Explicit recommenders
11.9KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A high-level terminal interface library for node.js.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

Fun fact - xterm.js was originally created by chjj who also wrote the code for Handshake DNS among other things. My favorite is blessed [1]. He’s definitely a super programmer.…

rasengan used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 8:03:49 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year30 dated mentions

Observed mentions: 2013-07-17 16:48:42 UTC to 2026-03-27 15:01:54 UTC.

02462013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 6 mentions; 3 submissions, 3 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 2 mentions; 1 submissions, 1 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 6 mentions; 1 submissions, 5 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 1 submissions, 0 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC202
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC101
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC633
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC101
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC404
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC312
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC110
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC211
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC615
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC101
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC202
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC000
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC000
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC110

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
blessed A curses-like library with a high level terminal interface API for node.js. Blessed is over 16,000 lines of code and terminal goodness. It's completely implemented in javascript, and its goal consists of two things: Reimplement ncurses entirely by parsing and compiling terminfo and termcap, and exposing a Program object which can output escape sequences compatible with any terminal. Implement a widget API which is heavily optimized for terminals. The blessed renderer makes use of CSR (change-scroll-region), and BCE (back-color-erase). It draws the screen using the painter's algorithm and is sped up with smart cursor movements and a screen damage buffer. This means rendering of your application will be extremely efficient: blessed only draws the changes (damage) to the screen. Blessed is arguably as accurate as ncurses, but even more optimized in some ways. The widget library gives you an API which is reminiscent of the DOM. Anyone is able to make an awesome terminal application with blessed. There are terminal widget libraries for other platforms (primarily python and perl), but blessed is possibly the most DOM-like (dare I say the most user-friendly?). Blessed has been used to implement other popular libraries and programs. Examples include: the slap text editor and blessed-contrib. The blessed API itself has gone on to inspire termui for Go. Install $ npm install blessed Example This will render a box with line borders containing the text 'Hello world!', perfectly centered horizontally and vertically. NOTE: It is recommend you use either smartCSR or fastCSR as a blessed.screen option. This will enable CSR when scrolling text in elements or when manipulating lines. var blessed = require('blessed'); // Create a screen object. var screen = blessed.screen({ smartCSR: true }); screen.title = 'my window title'; // Create a box perfectly centered horizontally and vertically. var box = blessed.box({ top: 'center', left: 'center', width: '50%', height: '50%', content: 'Hello {bold}world{/bold}!', tags: true, border: { type: 'line' }, style: { fg: 'white', bg: 'magenta', border: { fg: '#f0f0f0' }, hover: { bg: 'green' } } }); // Append our box to the screen. screen.append(box); // Add a png icon to the box var icon = blessed.image({ parent: box, top: 0, left: 0, type: 'overlay', width: 'shrink', height: 'shrink', file: __dirname + '/my-program-icon.png', search: false }); // If our box is clicked, change the content. box.on('click', function(data) { box.setContent('{center}Some different {red-fg}content{/red-fg}.{/center}'); screen.render(); }); // If box is focused, handle `enter`/`return` and give us some more content. box.key('enter', function(ch, key) { box.setContent('{right}Even different {black-fg}content{/black-fg}.{/right}\n'); box.setLine(1, 'bar'); box.insertLine(1, 'foo'); screen.render(); }); // Quit on Escape, q, or Control-C. screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); }); // Focus our element. box.focus(); // Render the screen. screen.render(); Documentation Widgets Base Nodes Node (abstract) Screen Element (abstract) Boxes Box Text Line ScrollableBox (deprecated) ScrollableText (deprecated) BigText Lists List FileManager ListTable Listbar Forms Form Input (abstract) Textarea Textbox Button Checkbox RadioSet RadioButton Prompts Prompt Question Message Loading Data Display ProgressBar Log Table Special Elements Terminal Image ANSIImage OverlayImage Video Layout Other Helpers Mechanics Content & Tags Colors Attributes Alignment Escaping SGR Sequences Style Colors Attributes Transparency Shadow Effects Events Event Bubbling Poisitioning Rendering Artificial Cursors Multiple Screens Server Side Usage Notes Windows Compatibility Low-level Usage Testing Examples FAQ Widgets Blessed comes with a number of high-level widgets so you can avoid all the nasty low-level terminal stuff. Base Nodes Node (from EventEmitter) The base node which everything inherits from. Options: screen - The screen to be associated with. parent - The desired parent. children - An arrray of children. Properties: Inherits all from EventEmitter. type - Type of the node (e.g. box). options - Original options object. parent - Parent node. screen - Parent screen. children - Array of node's children. _data, , $ - An object for any miscellanous user data. index - Render index (document order index) of the last render call. Events: Inherits all from EventEmitter. adopt - Received when node is added to a parent. remove - Received when node is removed from it's current parent. reparent - Received when node gains a new parent. attach - Received when node is attached to the screen directly or somewhere in its ancestry. detach - Received when node is detached from the screen directly or somewhere in its ancestry. Methods: Inherits all from EventEmitter. prepend(node) - Prepend a node to this node's children. append(node) - Append a node to this node's children. remove(node) - Remove child node from node. insert(node, i) - Insert a node to this node's children at index i. insertBefore(node, refNode) - Insert a node to this node's children before the reference node. insertAfter(node, refNode) - Insert a node from node after the reference node. detach() - Remove node from its parent. emitDescendants(type, args..., [iterator]) - Emit event for element, and recursively emit same event for all descendants. get(name, [default]) - Get user property with a potential default value. set(name, value) - Set user property to value. Screen (from Node) The screen on which every other node renders. Options: program - The blessed Program to be associated with. Will be automatically instantiated if none is provided. smartCSR - Attempt to perform CSR optimization on all possible elements (not just full-width ones, elements with uniform cells to their
Read the full README on GitHub

What Hacker News says

0 sources

No sources match this period.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.