HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
dankamongmen
notcurses
C2019–2026
dankamongmen / notcurses

notcurses

blingful character graphics/TUI library. definitely not curses.

30Distinct people
48Mentions
0Explicit recommenders
4.8KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

blingful character graphics/TUI library. definitely not curses.

GitHub

Where it is used

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

What people are saying

No recommendation phrase was found in the indexed comments.

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 year48 dated mentions

Observed mentions: 2019-12-10 13:10:42 UTC to 2026-02-18 15:01:32 UTC.

0510152019-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): 8 mentions; 3 submissions, 5 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 15 mentions; 4 submissions, 11 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 12 mentions; 0 submissions, 12 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 5 mentions; 3 submissions, 2 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 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
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 UTC835
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC15411
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC12012
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC505
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC532
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC101

From the project README

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

Read the project’s introduction
Notcurses: blingful TUIs and character graphics What it is: a library facilitating complex TUIs on modern terminal emulators, supporting vivid colors, multimedia, threads, and Unicode to the maximum degree possible. Things can be done with Notcurses that simply can't be done with NCURSES. It is furthermore fast as shit. What it is not: a source-compatible X/Open Curses implementation, nor a replacement for NCURSES on existing systems. for more information, see dankwiki and the man pages. in addition, there is Doxygen output. i wrote a coherent guidebook, which is available for free download (or paperback purchase). i've not yet added many documented examples, but src/poc/ and src/pocpp/ contain many small C and C++ programs respectively. notcurses-demo covers most of the functionality of Notcurses. If you're running Notcurses applications in a Docker, please consult "Environment notes" below. Introduction Notcurses abandons the X/Open Curses API bundled as part of the Single UNIX Specification. For some necessary background, consult Thomas E. Dickey's superb and authoritative NCURSES FAQ. As such, Notcurses is not a drop-in Curses replacement. Wherever possible, Notcurses makes use of the Terminfo library shipped with NCURSES, benefiting greatly from its portability and thoroughness. Notcurses opens up advanced functionality for the interactive user on workstations, phones, laptops, and tablets, possibly at the expense of e.g. some industrial and retail terminals. Fundamentally, Curses assumes the minimum and allows you (with effort) to step up, whereas Notcurses assumes the maximum and steps down (by itself) when necessary. The latter approach probably breaks on some older hardware, but the former approach results in new software looking like old hardware. Why use this non-standard library? Thread safety, and efficient use in parallel programs, has been a design consideration from the beginning. A more orderly surface than that codified by X/Open: Exported identifiers are prefixed to avoid common namespace collisions. Where reasonable, static inline header-only code is used. This facilitates compiler optimizations, and reduces loader time. Notcurses can be built without its multimedia functionality, requiring a significantly lesser set of dependencies. All APIs natively support the Universal Character Set (Unicode). The nccell API is based around Unicode's Extended Grapheme Cluster concept. Visual features including images, fonts, video, high-contrast text, sprites, and transparent regions. All APIs natively support 24-bit color, quantized down as necessary for the terminal. Portable support for bitmapped graphics, using Sixel, Kitty, and even the Linux framebuffer console. Support for unambiguous keyboard protocols. "TUI mode" facilitates high-performance, non-scrolling, full-screen applications. "CLI mode" supports scrolling output for shell utilities, but with the full power of Notcurses. It's Apache2-licensed in its entirety, as opposed to the drama in several acts that is the NCURSES license (the latter is summarized as "a restatement of MIT-X11"). Much of the above can be had with NCURSES, but they're not what NCURSES was designed for. On the other hand, if you're targeting industrial or critical applications, or wish to benefit from time-tested reliability and portability, you should by all means use that fine library. Requirements Minimum versions generally indicate the oldest version I've tested with; it may well be possible to use still older versions. Let me know of any successes! (build) CMake 3.21.0+ and a C17 compiler (OPTIONAL) (OpenImageIO, testing, C++ bindings): A C++17 compiler (build+runtime) From NCURSES: terminfo 6.1+ (build+runtime) GNU libunistring 0.9.10+ (OPTIONAL) (build+runtime) libgpm 1.20+ (OPTIONAL) (build+runtime) From QR-Code-generator: libqrcodegen 1.5.0+ (OPTIONAL) (build+runtime) From FFmpeg: libswscale 5.0+, libavformat 57.0+, libavutil 56.0+, libavdevice 57.0+ (OPTIONAL) (build+runtime) OpenImageIO 2.15.0+, requires C++ (OPTIONAL) (testing) Doctest 2.3.5+ (OPTIONAL) (documentation) pandoc 1.19.2+ (OPTIONAL) (python bindings): Python 3.7+, CFFI 1.13.2+, pypandoc 1.5+ (runtime) Linux 2.6+, FreeBSD 11+, DragonFly BSD 5.9+, Windows 10 v1093+, or macOS 11.4+ More information on building and installation is available in INSTALL.md. Wrappers If you wish to use a language other than C to work with Notcurses, numerous wrappers are available. Several are included in this repository, while others are external. Language Lead(s) Repository Ada Jeremy Grosser JeremyGrosser/notcursesada C++ Marek Habersack, nick black internal Dart Nelson Fernandez kascote/dart_notcurses Julia Dheepak Krishnamurthy kdheepak/Notcurses.jl Nim Michael S. Bradley, Jr. michaelsbradleyjr/nim-notcurses Python nick black internal Python igo95862 internal Rust José Luis Cruz dankamongmen/libnotcurses-sys Zig Jakub Dundalek dundalek/notcurses-zig-example Raku Matt Doughty m-doughty/Notcurses-Native Included tools Nine executables are installed as part of Notcurses: ncls: an ls that displays multimedia in the terminal ncneofetch: a neofetch ripoff ncplayer: renders visual media (images/videos) nctetris: a tetris clone notcurses-demo: some demonstration code notcurses-info: detect and print terminal capabilities/diagnostics notcurses-input: decode and print keypresses notcurses-tester: unit testing tfman: a swank manual browser To run notcurses-demo from a checkout, provide the data directory via the -p argument. Demos requiring data files will otherwise abort. The base delay used in notcurses-demo can be changed with -d, accepting a floating-point multiplier. Values less than 1 will speed up the demo, while values greater than 1 will slow it down. notcurses-tester likewise requires that data, populated with the necessary data files, be specified with -p. It can be run by itself, or via make test. Documentation With -DUSE_PAND
Read the full README on GitHub

What Hacker News says

48 sources
I see TFA mentions Solarized. I've been using Solarized light for longer than I can remember, even on Windows where I can (eg VSCode), and it goes a long way to making my eyes happy. I share the irritation with dark blue on black and can't stand dark mode (maybe I'm now old and no longer 31337 ... alas ...) For my ncurses brothers, saw this but have not used yet: https://github.com/dankamongmen/notcurses For my plan9 brothers: one day we will have a new acme, written in common lisp and displaying all the correct colors, and lo it will be glorious.
In Terminals should generate the 256-color palette
notcurses is probably the best option for getting the best you can out of a random terminal (see https://github.com/dankamongmen/notcurses/blob/master/TERMIN... which details the status of most terminals people use), but the main thing is to choose a decent terminal that meets your needs. I personally use xterm (after using various other terminals, both "modern" and VTE-based), as I'm on Linux, and I need to connect to various devices (e.g. networking gear) where I need a reliable terminal that handles whatever those devices throw at it. The graphical mechanisms that work for me therefore are sixel and tektronic.
In Chafa: Terminal Graphics for the 21st Century
MSYS2. And copy over prebuilt dependencies. And while we say C++, I suggest always to use Meson as build tool. Which allows you to use WrapDB (built in dependency-manager) aside from available native libraries and own local sources. MSYS2: https://www.msys2.org Meson: https://mesonbuild.com The problem about Windows is, that Microsoft adds new APIs repeatingly and doesn’t care much about the previous ones. While on Linux we’ve Gtk1, Gtk2, Gtk3 and Gtk4. And while people complain about deprecations and changes they actually mean „API changes require work to use the new major. But these people keep maintaining it. And provide upgrade paths to enhanced versions? I’m in!“. HiDPI, Wayland, new Widgets, new renderers and a scene-graph. PS: If you need to keep it small and simple and address professional (power) users I suggest a TUI with the
Read the rest
venerable ncurses. Or notcurses. Notcurses: https://github.com/dankamongmen/notcurses. Demo of Ncurses (For the lulz): https://www.youtube.com/watch?v=dcjkezf1ARY
In Writing GUI apps for Windows is painful
The broader world probably knows him best for the terminal handling library Notcurses[1] and a lot of telling terminal emulator authors to get their shit together. I’ve had his grad-school project libtorque[2] (HotPar ’10), an event-handling and scheduling library, on my to-read list for years, but I can’t seem to figure out how it accomplishes the interesting things it does. [1] https://nick-black.com/dankwiki/index.php/Notcurses, https://github.com/dankamongmen/notcurses/ [2] https://nick-black.com/dankwiki/index.php/Libtorque
In Io uring
What the hell, ouch. This looks to be very buggy across the board. Here’s a test: LF='\n'; ESC='\e'; CSI=$ESC'['; DCS=$ESC'P'; ST=$ESC'\\' CUF=$CSI'%dC' # cursor forward SIXEL=$DCS'q%s'$ST # sixel image printf "before $SIXEL$CUF after$LF" \ '#0;2;0;0;0#1;2;100;100;0#2;2;0;100;0#1~~@@vv@@~~@@~~$#2??}}GG}}??}}??-#1!14@' \ 2 With a freshly launched terminal on my machine, I get: - in XTerm (xterm -xrm "XTerm*decTerminalID: vt340"), "before ", "HI", " after", that is to say exactly what you want, out of the box; - in Foot, "before ", "HI", newline, some spaces, "after"; - in Contour, "before ", "HI", enough newlines to clear the screen (?..), no spaces (?!..), "after". OK, sez I, let’s just save the cursor position (DECSC, ESC 7) before the image and restore it (DECRC, ESC 8) afterwards, then skip over it; that is, DECSC
Read the rest
=$ESC'7'; DECRC=$ESC'8' # add to definitions printf "before $DECSC$SIXEL$DECRC$CUF after$LF" # change format string In XTerm, this (rightly) makes no difference. In Foot and Contour however, you still end up a line resp. a screen below where you started, if now with the correct horizontal position. So it seems to me like what you want should work by default, except it doesn’t. It should be possible to instead just treat the whole thing as a framebuffer overlay (by computing or directly asking for the character cell size, as Kirill Panov rightly admonishes me is possible with XTWINOPS) without touching the cursor; that’s what the “sixel scrolling” setting (DECSDM) is supposed to do. Then you can just manually move the cursor forward however many positions after you’re done drawing. Except apparently the DEC manual (the VT330/340 one above) and DEC hardware contradict each other as to which setting of DECSDM (set or reset) corresponds to which scrolling state (enabled or disabled), and XTerm has implemented it according to the manual not the VT3xx[1,2,3]—then most other emulators followed suit[4]—then XTerm switched to following the hardware[5,6] (unless you and that’s what I’m seeing on my machine right now. So now you need to check if you’re on XTerm ≥ 369 or not[7]. And also for other terminals’ versions, because apparently that’s a thing now[8,9]. Again, ouch. P.S. DEC had an internal doc for how their terminals should operate (DEC STD 070) [10]. It does not document DECSDM at all. [1] https://github.com/wez/wezterm/issues/217#issuecomment-86449... [2] https://github.com/hackerb9/lsix/issues/41 [3] https://github.com/dankamongmen/notcurses/issues/1782 [4] https://github.com/arakiken/mlterm/pull/23 [5] https://invisible-island.net/xterm/xterm.log.html#xterm_369 [6] https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-T... [7] https://github.com/dankamongmen/notcurses/commit/0918fa251e2... (the correct version cutoff is 369 not 359, the patch contains a now-fixed bug) [8] https://github.com/dankamongmen/notcurses/issues/2204 [9] https://github.com/dankamongmen/notcurses/blob/master/src/li... (look for mentions of invertsixel or invert80) [10] http://www.bitsavers.org/pdf/dec/standards/EL-SM070-00_DEC_S...
In Are We Sixel Yet
For those interested in learning more about terminal emulators and character graphics, checkout Nick Black's book Hacking the Planet (with Notcurses): A Guide to TUIs and Character Graphics[1]. While the overall focus of the book is on programming with Notcurses[2], the author shares a wealth of related info and history throughout its pages. Note also that Notcurses has evolved quite a bit, but the book is still a nice resource. [1] https://nick-black.com/htp-notcurses.pdf [2] https://github.com/dankamongmen/notcurses#readme
In A Guide to the Terminal, Console, and Shell
There's sixel [0] to display pics in text terminals. Also apparently the kitty terminal has a custom protocol to blit graphics on text terminals too [1]. There's a library with some impressive demos called "notcurses" if you are curious what kind of graphics can be displayed in a terminal ... the author uploaded some demos to YT showing the capabilities. It's been discussed in HN a bunch of times [2]. 0: https://en.wikipedia.org/wiki/Sixel 1: https://sw.kovidgoyal.net/kitty/graphics-protocol/ 2: https://github.com/dankamongmen/notcurses - https://hn.algolia.com/?q=notcurses
In Best command-line-only video games (2019)

Showing the 15 most recent of 48 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.