Skip to content
v2.4.0—hearts alive
Choose a tag to compare
@dankamongmen dankamongmen released this
· 1586 commits to master since this release

120 days, 1581 commits, and 323 issues resolved since 2.3.0.
660 days, 6769 commits, and 1,442 issues resolved since Day 0.
split your lungs with blood and thunder when you see the white whale!
check out this gource video of development!

the 2.4.0 release of Notcurses is dedicated with loving memory to Gregory Allen Black, aka Pa Dank, 1949–2021.
give 'em shit in the afterlife, dad. don't take any guff from those fucking swine.
hearts alive. roll tide roll.

A MASTODONIC RELEASE, primarily focused on bugfixes, portability, and robustness, but with plenty of new features as well. This development cycle saw our first kernel patch land; it will be present in Linux 5.15. I hope to do some further kernel work to enhance the Linux console. Since 2.3.0, changes include (but are not at all limited to):

  • Notcurses now supports macOS and Microsoft Windows. It is included in Homebrew and MacPorts.
    • Big thanks to @michaelsbradleyjr who bought a Mac Mini and made it available to the project, and figured out what the hell MSYS2 and UCRT are, and generally dragged us (for better or worse) into the dread lands of closed source.
    • Here it is running in the lovely new Microsoft Terminal:


  • Support for bitmap graphics on the Linux framebuffer console.
  • Support for Linux console mouse events via GPM when built with -DUSE_GPM=on.
  • Support for the kitty keyboard protocol.
    • I encourage its adoption by other terminals!
  • Tremendous improvement in Sixel and especially Kitty graphics, including support for extremely efficient updates using the new Kitty animation protocol, including a feature motivated by Notcurses.
  • Support for NCBLIT_PIXEL in ncuplot/ncdplot. Behold beautiful pixel plots:


  • The terminal is now extensively (but efficiently) queried on startup. Some properties are derived from the results.
    • Numerous patches were submitted to upstream terminals to support this functionality.
    • Eventually, this will be expanded to eliminate our reliance on TERM and dependence on terminfo.
    • Eliminated the need to call notcurses_check_pixel_support() before using NCBLIT_PIXEL.
  • Non-interpolative scaling is now available for ncvisuals, suitable for pixel art and other purposes (thanks @joseluis !).
    • ncplayer now supports -n for non-interpolative scaling
  • Removed NCSTYLE_{INVIS, BLINK, STANDOUT, REVERSE}. They remain defined for now, but will be removed for ABI3.
    • Added ncchannels_reverse() to make up for NCSTYLE_REVERSE.
  • Scrolling is now supported on the standard plane.
  • A new binary, notcurses-info, explores Unicode conformance and terminal capabilities in a single screen of output.


  • The new "CLI mode" supports CLI-style (as opposed to fullscreen TUI) applications with the full power of Notcurses, and is intended to replace Direct Mode. Direct Mode will be maintained, but not expanded any further. ncneofetch, notcurses-demo's summary table, and notcurses-info all use CLI mode.
  • Added support for synchronized updates
  • Scrolling a plane now scrolls bound planes with it, unless they're created with NCPLANE_OPTION_FIXED.
  • ncvisual_subtitle_plane() has replaced ncvisual_subtitle(), and now supports all LibAV subtitle types, including Type-1 DVB (bitmap subtitles)
  • ncblit_as_rgba()/ncvisual_from_plane() now support NCBLIT_BRAILLE
  • Added ncvisual_from_rgb_loose(), ncvisual_from_rgb_packed() (thanks @kaniini!), and ncvisual_from_palindex()
  • ncls now defaults to pixel blitting.
  • Added ncplane_moverel() (thanks @tomek-szczesny!).

with <3 from the dankest

hearts alive