pick
Pick an option in the terminal with a simple GUI
What it is and what it does
pick is a lightweight Python library for building interactive terminal menus where users select from a list of options using keyboard controls. It wraps the curses library (or optionally blessed) to handle terminal rendering and input, letting you present a list of choices and capture the user's selection—either a single pick or multiple selections if multiselect mode is enabled. The library handles the low-level terminal state management, so you only need to pass a list of options and a title, then read back which item was chosen and its index.
The package is designed for CLI applications that need simple, interactive user input without external GUI frameworks. It supports customization like custom selection indicators, default starting positions, minimum selection counts for multiselect mode, and integration with existing curses applications via a screen object parameter. On Windows, it depends on windows-curses to provide the curses interface; on Unix-like systems, curses is typically available in the standard library.
Use it for:
- Build a CLI tool that prompts users to select a single item from a list of options
- Create an interactive menu in a terminal application where users can pick multiple items with space-bar selection
- Add a terminal-based configuration wizard that guides users through choices with keyboard navigation
- Integrate a selection dialog into an existing curses-based terminal application
- Implement a command-line tool that lets users choose from dynamically generated option lists
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
pick provides a Python library to create interactive terminal selection lists where users can browse and choose one or multiple options using keyboard navigation.
Yes. pick is a mature, actively maintained library with no known vulnerabilities, permissive MIT licensing, and low install friction. It solves a specific, common problem—interactive terminal selection—cleanly and with minimal dependencies. Install it if you need to add keyboard-driven menu selection to a CLI application.
Install
pick on PyPI
pip
pip install pickuv
uv add pickpoetry
poetry add pickInstalling pick
Before you install
Low install friction with a single optional runtime dependency (windows-curses). Active maintenance as of 2026-02-28, supporting Python 3.8 through 3.14.
License in practice
MIT license permits commercial and private use with minimal restrictions; you may use, modify, and distribute pick freely provided you include the license notice.
Quickstart
$ pip install pick
from pick import pick
title = 'Choose an option: '
options = ['Option A', 'Option B', 'Option C']
selected_option, index = pick(options, title)
print(selected_option, index)
On Windows, windows-curses is required as a runtime dependency; on Unix-like systems, curses is typically built-in.
Verify before relying
- Whether the optional blessed backend offers performance or feature advantages over the default curses backend
- Compatibility with non-ASCII characters and multi-byte encodings in terminal environments
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.8) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 1 — windows-curses |
| Maintenance | actively maintained — 167 days since the last release |
| First released | |
| Downloads | 539,545/month — #6,108 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: pick-2.6.0-py3-none-any.whl
Keywords: terminal, gui
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
simple-term-menuCreates interactive command-line menus where…
permissive · top 5,000 on PyPI
blessedBlessed provides a clean Python interface for…
permissive · top 5,000 on PyPI
bulletBullet provides styled, interactive CLI prompts…
permissive · top 15,000 on PyPI
textual-autocompleteAdds fuzzy-matching autocomplete dropdowns to…
permissive · top 15,000 on PyPI
pythondialogProvides a Python interface to the UNIX dialog…
copyleft · top 15,000 on PyPI
portpickerFinds and returns an unused network port on the…
permissive · top 5,000 on PyPI
streamlit-option-menuA Streamlit component that renders a static…
unclear · top 15,000 on PyPI
pyfzfpyfzf wraps the fzf command-line fuzzy finder,…
permissive · top 15,000 on PyPI
iterfzfProvides a Python interface to fzf, a…
copyleft · top 15,000 on PyPI
questoQuesto provides modular, extensible CLI prompt…
permissive · top 15,000 on PyPI