explaingit

dankamongmen/notcurses

4,503CAudience · developerComplexity · 4/5LicenseSetup · moderate

TLDR

A modern C library for building visually rich terminal programs with true color, images, video, and animations, designed for today's terminals rather than lowest-common-denominator hardware.

Mindmap

mindmap
  root((notcurses))
    What It Does
      Rich terminal UIs
      Graphics in terminal
    Features
      24-bit color
      Images and video
      Unicode support
    Platforms
      Linux and BSD
      macOS
      Windows
    Use Cases
      Terminal dashboards
      Media viewers
      Animated CLIs
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Build a full-screen terminal dashboard that displays live metrics with 24-bit color gradients and embedded images.

USE CASE 2

Create a terminal-based image or media viewer that renders bitmapped graphics using the Sixel or Kitty protocol.

USE CASE 3

Add rich visual output to a CLI tool, colored text, animated sprites, progress indicators, that degrades gracefully on older terminals.

Tech stack

CC++PythonRustCMake

Getting it running

Difficulty · moderate Time to first run · 30min

Requires CMake, a C17 compiler, and NCURSES terminal info libraries, a Sixel-capable terminal is needed for image rendering.

Free to use and modify for any purpose, including commercial products, as long as you keep the license notice.

In plain English

Notcurses is a C library for building rich, visually complex programs that run inside a terminal window. Terminal programs are the text-based apps you open in a command-line shell. Most such programs are built on an older standard called Curses (or NCURSES), which was designed for older hardware and assumes the minimum capabilities of a display. Notcurses takes the opposite approach: it assumes a modern terminal and steps down gracefully for older ones, rather than starting at the floor. The library supports 24-bit color, images, video, animated sprites, transparent regions, and bitmapped graphics using standards called Sixel and Kitty. All of its APIs handle Unicode text natively, including complex characters made from multiple code points. Thread safety was a design goal from the start, so it works in programs that do several things at once. It runs on Linux, FreeBSD, DragonFly BSD, Windows, and macOS. There are two main usage modes. TUI mode is for full-screen applications that stay in place on screen, similar to a text editor or a dashboard. CLI mode is for scrolling output in a shell, like a normal command-line tool, but with access to the full visual feature set. The library is not compatible with the existing NCURSES API, so it is not a drop-in replacement for programs already built on NCURSES. Language bindings are available for C++, Python, Rust, Ada, Dart, Julia, and others. Some are included directly in this repository and others are maintained externally. The Python bindings are on PyPI and the Rust bindings are on crates.io. Building from source requires CMake, a C17-capable compiler, and a few libraries from the NCURSES project for terminal information. The project includes a demo program called notcurses-demo that shows most of the library's functionality. The author has also written a full guidebook available as a free PDF download. The code is licensed under Apache 2. The full README is longer than what was shown.

Copy-paste prompts

Prompt 1
Using notcurses in C, create a full-screen TUI that displays a 24-bit color gradient background with a centered text panel showing live system stats.
Prompt 2
How do I render a PNG image inside a notcurses plane using the Sixel protocol, then animate it by swapping frames in a loop?
Prompt 3
Show me how to use the Python bindings for notcurses to display a scrolling colored log output in a terminal CLI tool.
Prompt 4
Using notcurses in Rust, write a minimal example that initializes a screen, prints Unicode emoji text with 24-bit color, and cleans up on exit.
Open on GitHub → Explain another repo

← dankamongmen on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.