HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
Yomguithereal
react-blessed
JavaScript2015–2023
Yomguithereal / react-blessed

react-blessed

A react renderer for blessed.

24Distinct people
30Mentions
1Explicit recommenders
4.5KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A react renderer for blessed.

GitHub

Where it is used

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

What people are saying

My favorite: https://github.com/Yomguithereal/react-blessed

srott 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 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 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: 2015-07-23 05:20:13 UTC to 2023-05-08 17:18:20 UTC.

0369122015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 5 mentions; 5 submissions, 0 comments20152016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 12 mentions; 1 submissions, 11 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 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): 1 mentions; 0 submissions, 1 comments2023

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
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC550
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC202
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC12111
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC404
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC101
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC303
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC101
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 UTC101

From the project README

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

Read the project’s introduction
react-blessed A React custom renderer for the blessed library. This renderer should currently be considered as experimental, is subject to change and will only work with React's latest version (17.x.x, using Fiber). Summary Installation Demo Usage Rendering a basic application Nodes & text nodes Refs Events Classes Using blessed forks Using the devtools Roadmap FAQ Contribution License Installation You can install react-blessed through npm: # Be sure to install react>=17.0.0 & blessed>=0.1.81 before npm install blessed react # Then just install `react-blessed` npm install react-blessed Demo For a quick demo of what you could achieve with such a renderer you can clone this repository and check some of the examples: git clone https://github.com/Yomguithereal/react-blessed cd react-blessed npm install # To see which examples you can run: npm run demo # Then choose one to run: npm run demo animation Usage Rendering a basic application import React, {Component} from 'react'; import blessed from 'blessed'; import {render} from 'react-blessed'; // Rendering a simple centered box class App extends Component { render() { return ( <box top="center" left="center" width="50%" height="50%" border={{type: 'line'}} style={{border: {fg: 'blue'}}}> Hello World! </box> ); } } // Creating our screen const screen = blessed.screen({ autoPadding: true, smartCSR: true, title: 'react-blessed hello world' }); // Adding a way to quit the program screen.key(['escape', 'q', 'C-c'], function(ch, key) { return process.exit(0); }); // Rendering the React app using our screen const component = render(<App />, screen); Nodes & text nodes Any of the blessed widgets can be rendered through react-blessed by using a lowercased tag title. Text nodes, on the other hand, will be rendered by applying the setContent method with the given text on the parent node. Refs As with React's DOM renderer, react-blessed lets you handle the original blessed nodes, if you ever need them, through refs. class CustomList extends Component { componentDidMount() { // Focus on the first box this.refs.first.focus(); } render() { return ( <element> <box ref="first"> First box. </box> <box ref="second"> Second box. </box> </element> ); } } Events Any blessed node event can be caught through a on-prefixed listener: class Completion extends Component { constructor(props) { super(props); this.state = {progress: 0, color: 'blue'}; const interval = setInterval(() => { if (this.state.progress >= 100) return clearInterval(interval); this.setState({progress: this.state.progress + 1}); }, 50); } render() { const {progress} = this.state, label = `Progress - ${progress}%`; // See the `onComplete` prop return <progressbar label={label} onComplete={() => this.setState({color: 'green'})} filled={progress} style={{bar: {bg: this.state.color}}} />; } } Classes For convenience, react-blessed lets you handle classes looking like what react-native proposes. Just pass object or an array of objects as the class of your components likewise: // Let's say we want all our elements to have a fancy blue border const stylesheet = { bordered: { border: { type: 'line' }, style: { border: { fg: 'blue' } } } }; class App extends Component { render() { return ( <element> <box class={stylesheet.bordered}> First box. </box> <box class={stylesheet.bordered}> Second box. </box> </element> ); } } You can of course combine classes (note that the given array of classes will be compacted): // Let's say we want all our elements to have a fancy blue border const stylesheet = { bordered: { border: { type: 'line' }, style: { border: { fg: 'blue' } } }, magentaBackground: { style: { bg: 'magenta' } } }; class App extends Component { render() { // If this flag is false, then the class won't apply to the second box const backgroundForSecondBox = this.props.backgroundForSecondBox; return ( <element> <box class={[stylesheet.bordered, stylesheet.magentaBackground]}> First box. </box> <box class={[ stylesheet.bordered, backgroundForSecondBox && stylesheet.magentaBackground ]}> Second box. </box> </element> ); } } Using blessed forks Because blessed is not actively maintained in quite a while, you might want to use one of it's forks. To do that, import createBlessedRenderer function instead: import React, {Component} from 'react'; import blessed from 'neo-blessed'; import {createBlessedRenderer} from 'react-blessed'; const render = createBlessedRenderer(blessed); Using the devtools react-blessed can be used along with React's own devtools for convenience. To do so, just install react-devtools in your project and all should work out of the box when running the Electron app, as soon as a react-blessed program is running on one of your shells. Roadmap Full support (meaning every tags and options should be handled by the renderer). react-blessed-contrib to add some sugar over the blessed-contrib library (probably through full-fledged components). Faq <list/> : To enable interactions, add mouse={ true } and/or keys={ true } Contribution Contributions are obviously welcome. Be sure to add unit tests if relevant and pass them all before submitting your pull request. # Installing the dev environment git clone git@github.com:Yomguithereal/react-blessed.git cd react-blessed npm install # Running the tests npm test License MIT
Read the full README on GitHub

What Hacker News says

30 sources
Context: I'm building a roguelike (https://en.wikipedia.org/wiki/Roguelike) and would love to be able to take advantage of Blessed with react-blessed (https://github.com/Yomguithereal/react-blessed) to render everything. If I can get Blessed to render to the browser, perhaps I can use that as a renderer for react-blessed. That way I can build an entire terminal interface in React. And even if that didn't go through, I'd at least be able to write a custom React renderer to take advantage of Blessed's window functionality and stuff. If all that fails I'll just have to write a Blessed-lite layer for XTerm and then write a custom React renderer for that.
In Ask HN: Is it possible to get Blessed to render to the DOM?
Read the rest
In React Native and Yoga Both Given MIT Licence by Facebook
If you want to build interactive terminal interfaces, check out blessed [0]. Even better, you can use react-blessed [1] to write declarative UI code! You can also find additional widgets in blessed-contrib [2]. For actually shipping the code around, you could use pkg [3] to generate a single binary. That lets you avoid having to install node or any supporting libraries. [0] https://github.com/chjj/blessed [1] https://github.com/Yomguithereal/react-blessed [2] https://github.com/yaronn/blessed-contrib [3] https://github.com/zeit/pkg
In GRV – Git Repository Viewer
Read the rest
some cases even everyday eco-system packages can be applied. For instance: https://github.com/gaearon/react-blessed-hot-motion (native console app using plain react-motion to move stuff around).
In Guide to JavaScript Frameworks
Honestly that is like saying Windows Phone doesn't need the apps. React has a self sufficient cross platform eco system. I don't think people using primarily web frameworks even realize the implications of that yet. React works outside of the browser, and not just natively on mobile but literally everywhere. Imagine you use React as you always would to make a native command line application (https://github.com/Yomguithereal/react-blessed), but now you want to have a store or move things around, so you `npm install react-redux react-motion` and you just apply it (https://github.com/gaearon/react-blessed-hot-motion). Look at the code and try to picture the overhead if you had to do this in C++. Being able to transfer code and knowledge, and seeing new renderers pop up for the wildest platforms each day, as well as official renderers made by
Read the rest
big vendors (https://github.com/Microsoft/react-native-windows), the idea of a web-bound Angular-like framework seems odd in 2018. I wouldn't expect Vue to get the same kind of popularity without at least competing or doing something new.
In 2017 JavaScript Rising Stars
This is a really neat looking project (and the GH readme references the original HN discussion). For folks who are generally into TTY UIs and dashboards, I also want to point out the Blessed terminal rendering lib and its ecosystem (which even includes a React bridge!): - https://github.com/chjj/blessed - https://github.com/yaronn/blessed-contrib - https://github.com/Yomguithereal/react-blessed (edited for syntax and also to clarify I am not affiliated with the above, just a fan)
In Drawille: Pixel graphics in terminal with Unicode braille characters
> What often goes unnoticed is that declarative languages are not very future-proof [...] Surely that will not happen to React, you say, because it gets so many things right? Surely that will not happen to React, you say, because it gets so many things right? It is often not appreciated how simple React really is. Its simplicity is actually well suited to survive a long, long time. Forget classes, lifecycles, schedulers and all this stuff for a moment. If you boil it down what you're left with is but a single signature: `createElement(name, props, chilren)`. That's what JSX transpiles into. With that you can map pretty much every visual-oriented api on earth and as we can plainly see it goes further than that and starts rendering flat out everything that can be rendered in the same friendly manner we're used to: shell consoles: https://gi
Read the rest
thub.com/Yomguithereal/react-blessed word: https://github.com/nitin42/redocx pdf: https://github.com/diegomura/react-pdf samplers: https://twitter.com/GabeRicard/status/911989894267973633 mobile: https://facebook.github.io/react-native/ 3d: https://github.com/Izzimach/react-three windows: https://github.com/Microsoft/react-native-windows macos: https://github.com/ptmt/react-native-macos sketchapp: http://airbnb.io/react-sketchapp/ keynote: https://twitter.com/nishb1/status/913744410537537536 VR: https://facebook.github.io/react-vr/ hardware: https://github.com/iamdustan/react-hardware What's even crazier is that everyday eco-system packages can be applied to the wildest targets. For instance animations via react-motion on shell consoles: https://github.com/gaearon/react-blessed-hot-motion or react-router on VR: https://youtu.be/Mf0Fy8iHp8k?t=12m25s It's always the simple, almost trivial ideas that seem to survive and spread. React was released 4 years ago and has kept to a stable api. 16 was a rewrite, and it's a drop in replacement.
In WalmartLabs opensources its tool for bringing React Native to mobile apps
One optimization that's not hard to do for terminal output is a line cache: if a row is the same, don't render it. The rendering logic is probably already operating on lines, so this doesn't require the fancy diffing; but diffing a flat grid seems easier anyway vs the dom tree. For context, (I suspect parent already understands this) this is analogous to the vdom optimizations (not shouldComponentUpdate optimizations) possible with React. Except the algorithm is more straightforward: for each character on the grid, is the content the same since the previous render? This library looks real neat, a declarative TUI with an api already familiar to many developers. I've thought this would be a neat thing to exist since I started using React after having written a similar declarative, redraw-only-as-necessary terminal rendering library for bpyt
Read the rest
hon (http://ballingt.com/bpython-curtsies/). In it (http://curtsies.readthedocs.io/en/latest/) the only rendering optimization was a line cache. For the specific use case of an interactive interpreter this worked pretty well: once a line is changing, it's probably changing a lot. But you could go further using the output of diffing of arrays of terminal text. edit: whoa https://github.com/Yomguithereal/react-blessed looks awesome for this
In Ink: React for interactive command-line apps

Showing the 15 most recent of 30 sources. Enable JavaScript to search and browse every indexed mention.

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.