curses-fzf
About
A pure Python implementation of fzf (fuzzyfinder) using the curses library -
no external fzf binary required.
Although there are many good fzf libraries available, they all have one thing in common:
They are wrappers to the shell tool fzf.
This is not inherently bad, but has one major downside: It does not integrate well into Python code.
- What if you want to fuzzy-find over a list of dicts or objects?
- What if you want to pre-select items (e.g. tags already set for a resource, that could be unset while selecting new ones)?
- What if you want to display additional information along with the entry to fuzzy-find on?
- What if you want to customize the fuzzy-finder algorithm?
To all of the above questions this module is the answer.
What can it do?
It provides a curses-based TUI for fuzzy-searching lists of any item type. Perfect for CLI tools needing interactive filtering of user options.
It allows for single or multi select, preview functions, preselection of items and more. The module is designed to be highly customizable to fit your use-case: Provide your own scoring logic, remap keys or add your own functions to keybindings, change the color theme, ...
It is easy and straight-forward to use:
from curses_fzf import FuzzyFinder, CursesFzfAborted
data = ["apple", "banana", "grape", "orange", "watermelon"]
fzf = FuzzyFinder(multi=True)
try:
result = fzf.find(data)
except CursesFzfAborted:
print("Fuzzy finder aborted by user.")
else:
for item in result:
print(item)
See documentation - basic usage for further details.
Metadata
Release files for curses-fzf 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| curses_fzf-0.3.0.tar.gz | 110.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| curses_fzf-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 129.9 kB
Release files / curses_fzf-0.3.0.tar.gz
| Download URL | curses_fzf-0.3.0.tar.gz |
|---|---|
| Size | 110.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64f076dc421cb2be417c67e6e5e2fde864ebc8424db8c90c5f45045ff2d9202c
|
|
BLAKE2b-256 checksum How to use checksums |
4c73ae166e2061990c8a0411c296e388862e152b7ee359d70ffbffb4329c2054
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 8, 2026.
Transparency logRelease files / curses_fzf-0.3.0-py3-none-any.whl
| Download URL | curses_fzf-0.3.0-py3-none-any.whl |
|---|---|
| Size | 19.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cddb8b9fd543b62d3f1f5b790691926a4d0117b46d117e89dc639ff6d4bb8c93
|
|
BLAKE2b-256 checksum How to use checksums |
8b897b6b5ad0efc766773e6a26136da0cf49c58fc2b0dc00f65a732a4b8f0940
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 8, 2026.
Transparency log