windows-curses
Support for the standard curses module on Windows
What it is and what it does
Windows-curses bridges a gap in Python's standard library: the curses module, which provides low-level terminal control for building text-based user interfaces, is not available on Windows by default. This package wraps PDCurses (a cross-platform curses implementation) and provides pre-built wheels for Windows, allowing developers to write terminal UI code that works across Windows, Linux, and macOS without platform-specific branches.
The package includes a pragmatic enhancement: starting from version 2.0, it automatically handles terminal resizing by calling resize_term(0, 0) when KEY_RESIZE is received, mimicking the behavior of ncurses on Unix systems. PDCurses is compiled with wide character support, so get_wch() is available and UTF-8 is enforced as the encoding.
Use it for:
- Build cross-platform terminal UIs (dashboards, menus, forms) that work on Windows without code changes.
- Port existing ncurses-based Python applications from Unix to Windows with minimal modification.
- Create Windows console applications that need fine-grained control over cursor position, colors, and text attributes.
- Develop interactive command-line tools that rely on the standard curses API across all platforms.
- Handle terminal resizing events in Windows terminal applications without manual SIGWINCH-style workarounds.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
Provides the standard Python curses module on Windows by wrapping PDCurses, enabling terminal UI development that would otherwise require platform-specific workarounds.
Yes, if you need curses on Windows. It is actively maintained, has no known vulnerabilities, and solves a real gap in Python's Windows support. The medium install friction (platform-specific wheels) is a one-time cost. If you are building cross-platform terminal UIs or porting Unix code to Windows, this is the standard solution.
Install
windows-curses on PyPI
pip
pip install windows-cursesuv
uv add windows-cursespoetry
poetry add windows-cursesInstalling windows-curses
Before you install
Medium install friction due to platform-specific wheel requirements across multiple Python versions (3.6–3.14, both 32- and 64-bit). Package is actively maintained with recent commits and no known vulnerabilities.
License in practice
Licensed under PSF2 (Python Software Foundation License), a permissive license that allows free use, modification, and distribution with minimal restrictions.
Quickstart
pip install windows-curses
import curses
def main(stdscr):
stdscr.addstr('Hello, Windows!')
stdscr.refresh()
stdscr.getch()
curses.wrapper(main)
Windows-only; requires a compatible Python version (3.6–3.14) and appropriate architecture (32- or 64-bit) matching your installation.
Verify before relying
- Whether the automatic resize_term(0, 0) hack in version 2.0+ works reliably with all terminal emulators on Windows.
- Performance characteristics compared to native ncurses on Unix-like systems when ported code runs on Windows.
- Compatibility with third-party curses libraries or wrappers beyond standard Python curses API.
Package facts
| License | PSF2 (permissive) |
| Python support | not specified |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | none |
| Maintenance | actively maintained — 136 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 214,729/month — #9,409 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: windows_curses-2.4.2-cp310-cp310-win32.whl; windows_curses-2.4.2-cp310-cp310-win_amd64.whl; windows_curses-2.4.2-cp311-cp311-win32.whl; windows_curses-2.4.2-cp311-cp311-win_amd64.whl; windows_curses-2.4.2-cp312-cp312-win32.whl; windows_curses-2.4.2-cp312-cp312-win_amd64.whl; windows_curses-2.4.2-cp313-cp313-win32.whl; windows_curses-2.4.2-cp313-cp313-win_amd64.whl; windows_curses-2.4.2-cp314-cp314-win32.whl; windows_curses-2.4.2-cp314-cp314-win_amd64.whl; windows_curses-2.4.2-cp36-cp36m-win32.whl; windows_curses-2.4.2-cp36-cp36m-win_amd64.whl; windows_curses-2.4.2-cp37-cp37m-win32.whl; windows_curses-2.4.2-cp37-cp37m-win_amd64.whl; windows_curses-2.4.2-cp38-cp38-win32.whl; windows_curses-2.4.2-cp38-cp38-win_amd64.whl; windows_curses-2.4.2-cp39-cp39-win32.whl; windows_curses-2.4.2-cp39-cp39-win_amd64.whl
Tags
More Software Development packages
Provides backported and experimental type hints…
permissive · top 100 on PyPI
numpyNumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
fastapiFastAPI is a Python web framework for building…
permissive · top 100 on PyPI
annotated-docProvides a way to document function parameters,…
permissive · top 100 on PyPI
typerTyper builds command-line applications from…
permissive · top 1,000 on PyPI
distlibDistlib provides low-level packaging utilities…
permissive · top 1,000 on PyPI
jinxedJinxed provides pure-Python implementations of…
copyleft · top 5,000 on PyPI
pythondialogProvides a Python interface to the UNIX dialog…
copyleft · top 15,000 on PyPI
urwidUrwid is a Python console UI library that lets…
copyleft · top 5,000 on PyPI
blessedBlessed provides a clean Python interface for…
permissive · top 5,000 on PyPI
asciimaticsAsciimatics provides cross-platform terminal UI…
permissive · top 15,000 on PyPI
blessingsBlessings provides a clean Python API for…
permissive · top 5,000 on PyPI
ptyprocessRun a subprocess in a pseudo terminal (pty) and…
permissive · top 1,000 on PyPI
curtsiesCurtsies provides a Python library for building…
permissive · top 15,000 on PyPI
ansible-navigatoransible-navigator is a text-based user…
permissive · top 15,000 on PyPI
pudbPuDB is a full-screen console-based visual…
permissive · top 5,000 on PyPI