skillfed

pick

Pick an option in the terminal with a simple GUI

pick v2.6.0 539.5K downloads/30d#6,108 on PyPI
Permissive license MIT Active released

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 pick

uv

uv add pick

poetry

poetry add pick

Installing 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

License :: OSI Approved :: MIT LicenseProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.14Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9

Tags

terminal selection menuinteractive cli pickercurses selection listterminal gui choicekeyboard-driven menucommand line option selectorterminal prompt with choices
cli-uiterminal-interaction

More Terminals packages