thcThought Control

Notcurses

C TUI library for maximal terminals: pixels, video, planes, threads.

notcurses.com ↗repo ↗docs ↗Hacking the Planet with Notcurses (book PDF) ↗dankwiki: Notcurses (terminal performance table) ↗Rust bindings libnotcurses-sys ↗

license
Apache-2.0 · COPYRIGHT file is Apache-2.0; GitHub API reports NOASSERTION because of the file layout.
language
C (C++ wrappers; Python and Rust bindings)
backing
Individual: Nick Black (dankamongmen); GitHub Sponsors.
stars
4,740 (as of 2026-10-09)
downloads
Distributed mainly via distro packages (Repology); Rust libnotcurses-sys 169k all-time, 954 in the last 90 days (crates.io)
latest release
v3.0.17, 2025-10-28
first release
2019-11
borrow

Its graphics engineering is the reference for scene's pixel layer, but it's a C library in maintenance mode with no agent model.

Borrow from it: take a specific idea, API or format.

the steelman: the best honest case for it

Notcurses is the most ambitious terminal graphics engine ever shipped: z-ordered planes with transparency composited into each frame, images and full video blitted through Sixel, Kitty or the Linux framebuffer, and a ladder of Unicode blitters (half-blocks to octants and braille) when pixels are unavailable — all thread-safe, all with 24-bit colour quantized per terminal, and measured with a published per-terminal benchmark methodology. It 'assumes the maximum and steps down', which is exactly the right stance for an agent-era terminal that wants pixels. It has a free guidebook, Python and Rust bindings, and is widely packaged across distributions (Repology).

scores
datadriveseeedittimeratetermpxteachmatureopen
UI as data0 scene 5Imperative C API on planes
Agent can drive it1 scene 5
Agent can see it2 scene 5Cell readback exists but only in-process
Small, targeted edits0 scene 5
Time travel0 scene 0
Live data rate4 scene 5Published hundreds of FPS (old measurements)
Terminal native5 scene 5
Pixel graphics5 scene 4Sixel/Kitty/fbcon bitmaps, video, plane compositing with alpha: the richest pixel story in the group
Teaching1 scene 3
Maturity3 scene 1Stable 3.x, widely packaged, few visible production users, slowing maintenance
Openness4 scene 4Apache-2.0 but a one-person project

Notcurses scene now scene planned

how agents use it

How

Code generation (C/Python/Rust). No protocol or socket.

Wiring it in

High: C API, manual memory, app must add its own control layer.

Seeing the result

In-process the app can read rendered cells (notcurses_at_yx, ncplane_contents); otherwise screen scraping.

Small edits

None from outside.

History

None.

In short

A powerful renderer with no agent story.

architecture

Notcurses abandons the X/Open Curses API: drawing happens on z-ordered ncplanes grouped into piles; notcurses_render composites planes (with transparency, blending) into a frame and rasterizes only the damage to the terminal. Cells are grapheme-cluster based with 24-bit color quantized as needed. ncvisuals load images/video (FFmpeg or OpenImageIO) and blit via the best available method — Sixel, Kitty, Linux framebuffer, or Unicode half/quadrant/sextant/octant/braille blitters. Thread safety was a design goal. Higher-level widgets (menus, readers, plots, reels, trees, selectors) are built in.

performance

The only project in this group with a published, reproducible frame-rate methodology (notcurses-demo, three runs per terminal), though the table is from ~2019-2020 terminal versions.

adoption and upkeep

Adoption

Respected and widely packaged, but no prominent applications found; best known for notcurses-demo and the author's own tools (ncls, ncplayer).

Maintainability

Feature-complete and stable at 3.x but in maintenance mode with a single author.

Releases: Slowing: v3.0.12 2025-01-09, v3.0.13 01-11, v3.0.14 04-27, v3.0.15 04-30, v3.0.16 05-04, v3.0.17 10-28; nothing since. · Contributors: ~50 (GitHub contributors API incl. anonymous) · Recent: 0 commits and 0 merged PRs since 2026-07-11; 33 commits in the past year, last 2026-05-18 (GitHub API); 332 open issues · Bus factor: low: Nick Black has ~7,950 of the commits

weaknesses
and thc-scene

Overlap

Pixel layer under/over text, capability probing with cell fallbacks, compositing of layers.

What scene would be reinventing

Plane compositing with alpha and the pixel-protocol ladder with Unicode blitter fallbacks — Notcurses solved these years ago (in C).

The gap it leaves

Serializable UI, live agent control and readback, streams, hot-swap, time travel, modern maintenance.

What to borrow

  • The blitter ladder (pixel → octant/sextant/quadrant/half-block/braille) as scene's pixel fallback
  • 'Assume the maximum and step down' only on positive terminal confirmation (it won't use bitmaps unless the terminal says so)
  • Planes/piles as a mental model for scene's callout and card layers
  • notcurses-demo-style per-terminal benchmark methodology
sources
  1. GitHub API repos/dankamongmen/notcurses api.github.com
  2. Notcurses README github.com
  3. COPYRIGHT (Apache-2.0) github.com
  4. dankwiki Notcurses (performance table) nick-black.com
  5. LWN: Hacking the planet with Notcurses lwn.net
  6. crates.io libnotcurses-sys crates.io