curtsies
Curses-like terminal wrapper, with colored strings!
What it is and what it does
Curtsies is a terminal interaction library that wraps low-level terminal control to let you build interactive console applications with colored and styled text. It provides three main abstractions: FmtStr objects for ANSI-formatted strings, FSArray objects for composable grids of formatted text, and window objects (FullscreenWindow for alternate-screen mode like Vim, or CursorAwareWindow for history-preserving mode) that render those grids and capture keyboard input events.
The library depends on blessed for terminal capability detection and cwcwidth for character width calculation. It's designed for applications that need fine-grained control over terminal rendering—games, interactive REPLs, monitoring dashboards—without the complexity of a full TUI framework. The package has been actively maintained since 2013 and remains compatible with modern Python versions.
Use it for:
- Build interactive terminal games or demos that respond to keyboard input and render colored text grids.
- Create terminal-based monitoring dashboards or status displays with real-time updates.
- Develop interactive command-line tools with formatted output and user input handling.
- Add colored, styled output to REPL environments or debugging utilities.
- Render complex text layouts in fullscreen or scrolling terminal modes.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Curtsies provides a Python library for building interactive terminal applications with colored text, formatted strings, and fullscreen or history-preserving window modes, handling keyboard input and grid-based character rendering.
Yes, if you need a lightweight, permissively licensed library for interactive terminal UIs with colored text and keyboard input on POSIX systems. The low install friction, active maintenance, and lack of known vulnerabilities make it a safe choice. The Alpha status reflects the package's maturity rather than instability—it has been in use since 2013. Not suitable for Windows without additional compatibility work.
Install
curtsies on PyPI
pip
pip install curtsiesuv
uv add curtsiespoetry
poetry add curtsiesInstalling curtsies
Before you install
Low install friction with a pure Python wheel. Actively maintained as of August 2026 with recent commits; development status is marked Alpha but the package has been stable since its 2013 release.
License in practice
MIT license (permissive) places no restrictions on use, modification, or distribution in proprietary or open-source projects.
Quickstart
pip install curtsies
from curtsies import FullscreenWindow, Input, FSArray
from curtsies.fmtfuncs import red, bold
with FullscreenWindow() as window:
a = FSArray(window.height, window.width)
a[0:1, 0:10] = [red(bold('Hello'))]
window.render_to_terminal(a)
with Input() as input_generator:
for c in input_generator:
if c == '':
break
Requires Python 3.10 or later; POSIX operating system (Linux, macOS, BSD) based on classifier metadata.
Verify before relying
- Whether the package works reliably on non-POSIX systems (classifiers list only POSIX support).
- Current state of documentation at the linked readthedocs URL and whether examples remain functional.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 2 — blessed, cwcwidth |
| Maintenance | actively maintained — 435 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 556,398/month — #6,020 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: curtsies-0.4.3-py3-none-any.whl
Tags
More Terminals packages
Wraps any iterable to display a real-time…
copyleft · top 100 on PyPI
richRich renders styled text, tables, progress…
permissive · top 100 on PyPI
coloramaColorama makes ANSI escape sequences for…
permissive · top 100 on PyPI
wcwidthMeasures the displayed width of Unicode strings…
permissive · top 1,000 on PyPI
ptyprocessRun a subprocess in a pseudo terminal (pty) and…
permissive · top 1,000 on PyPI
pexpectPexpect spawns and controls interactive console…
permissive · top 1,000 on PyPI
coloredColored provides ANSI/VT100 escape sequences…
permissive · top 5,000 on PyPI
pastelPastel adds colored text output to terminal…
permissive · top 5,000 on PyPI
styleApplies ANSI color and text styling to terminal…
permissive · top 15,000 on PyPI
pansiPansi provides a clean interface for rendering…
permissive · top 15,000 on PyPI
simple-colorsAdds colored and styled text output to terminal…
unclear · top 15,000 on PyPI
crayonsCrayons provides colored text output for…
permissive · top 15,000 on PyPI
blessingsBlessings provides a clean Python API for…
permissive · top 5,000 on PyPI
blessedBlessed provides a clean Python interface for…
permissive · top 5,000 on PyPI
termcolorAdds ANSI color and text formatting (bold,…
permissive · top 1,000 on PyPI