fff-search
Python bindings for FFF (Fast File Finder), built with PyO3 and Maturin. Install with pip install fff-search; import as fff.
Requirements
- Python >= 3.10
- Rust toolchain (to build the native extension)
- uv (recommended)
Development setup
cd packages/fff-python
uv sync --all-extras
uv run maturin develop --release
Running tests
cd packages/fff-python
uv run pytest -v
Standalone example
cd packages/fff-python
uv run python examples/basic.py .
Basic usage
from fff import FileFinder
with FileFinder("/path/to/project", watch=False) as finder:
finder.wait_for_scan_blocking(timeout_ms=5000)
print(f"Indexed under {finder.base_path}")
result = finder.search("main")
if result:
print(f"Showing {len(result)} of {result.total_matched} matches")
for item, score in zip(result.items, result.scores):
print(f"{item.relative_path}: {score.total}")
Async usage
wait_for_scan is a coroutine that polls the scan status and yields to the
event loop, so it never blocks other tasks. Use wait_for_scan_blocking from
synchronous code.
import asyncio
from fff import FileFinder
async def main():
with FileFinder("/path/to/project", watch=False) as finder:
await finder.wait_for_scan(timeout_ms=5000)
result = finder.search("main")
print(result)
asyncio.run(main())
Watching files
Subscribe to filesystem changes with a glob, an exact path, or a directory
subtree (requires watch=True, the default). The callback receives normalized
batches of up to 128 events on a dedicated callback thread. Each path appears
at most once; avoid long-running work so later callbacks are not delayed.
from fff import FileFinder
with FileFinder("/path/to/project") as finder:
finder.wait_for_scan_blocking(timeout_ms=5000)
def on_change(events):
for e in events:
print(e.kind, e.path) # created | modified | removed | rescan
# Globs are relative to the project root; wildcard-free patterns resolve
# inside the indexed tree — an existing directory watches its whole
# subtree, anything else is an exact file path.
sub = finder.watch("src/**/*.py", on_change)
...
sub.unsubscribe() # non-blocking; the callback never runs after this
# No pattern (None) watches the entire indexed tree
with finder.watch(None, on_change):
...
# Directory subtree with per-subscription excludes (parcel-watcher style)
with finder.watch("src", on_change, ignore=["*.log", "src/vendor"]):
...
A rescan event means individual changes were lost (index overflow or an
ignore-file change) — re-check anything you care about.
Building wheels
cd packages/fff-python
uv run maturin build --release
The produced wheel is abi3 compatible with Python 3.10+.
Release files for fff-search 0.10.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fff_search-0.10.6.tar.gz | 2.1 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| fff_search-0.10.6-cp310-abi3-win_amd64.whl | CPython 3.10 | abi3 | Windows x86-64 | Details |
| fff_search-0.10.6-cp310-abi3-manylinux_2_38_x86_64.whl | CPython 3.10 | abi3 | Linux glibc 2.38+ x86-64 | Details |
| fff_search-0.10.6-cp310-abi3-manylinux_2_38_aarch64.whl | CPython 3.10 | abi3 | Linux glibc 2.38+ ARM64 | Details |
| fff_search-0.10.6-cp310-abi3-macosx_11_0_arm64.whl | CPython 3.10 | abi3 | macOS 11.0+ ARM64 | Details |
| fff_search-0.10.6-cp310-abi3-macosx_10_12_x86_64.whl | CPython 3.10 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 26.2 MB
Release files / fff_search-0.10.6.tar.gz
| Download URL | fff_search-0.10.6.tar.gz |
|---|---|
| Size | 2.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3b8b1a8e5d90696210f9655fc1d23382484bd19dda07afbecdc31adea0d9911c
|
|
BLAKE2b-256 checksum How to use checksums |
32c2300172eb264f2d815cd6ebcc61fe95ecaa2c0ef9378f376ea009647a77be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 30, 2026.
Transparency logRelease files / fff_search-0.10.6-cp310-abi3-win_amd64.whl
| Download URL | fff_search-0.10.6-cp310-abi3-win_amd64.whl |
|---|---|
| Size | 5.5 MB |
| Tags | CPython 3.10 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
9d6181588bdd9c5d3cca1bf49218c80c8c9075cfde803b7408ad642a64ab56af
|
|
BLAKE2b-256 checksum How to use checksums |
6e9fafff4b38ac20076df78b170dba6d849c39b1f7860f9b51a2d776b0255a74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 30, 2026.
Transparency logRelease files / fff_search-0.10.6-cp310-abi3-manylinux_2_38_x86_64.whl
| Download URL | fff_search-0.10.6-cp310-abi3-manylinux_2_38_x86_64.whl |
|---|---|
| Size | 5.3 MB |
| Tags | CPython 3.10 Linux glibc 2.38+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
c47010ca61947318494b2576e915d7fb7671f38e91e7721c244e96c7bcf85bbb
|
|
BLAKE2b-256 checksum How to use checksums |
c4d4071627c40425e02beaf30d68258e6751880144665cf0f74dd9edaf2e6157
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 30, 2026.
Transparency logRelease files / fff_search-0.10.6-cp310-abi3-manylinux_2_38_aarch64.whl
| Download URL | fff_search-0.10.6-cp310-abi3-manylinux_2_38_aarch64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.10 Linux glibc 2.38+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
26dac5882d22afdd85a96f111937fdd2223285597e9654600cb3964bd8c480e8
|
|
BLAKE2b-256 checksum How to use checksums |
032abc4e1f1b4320d69b3e799297aacd569dd8bbb2dec913cca45234d3a3433f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 30, 2026.
Transparency logRelease files / fff_search-0.10.6-cp310-abi3-macosx_11_0_arm64.whl
| Download URL | fff_search-0.10.6-cp310-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.9 MB |
| Tags | CPython 3.10 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
64b3f03d93540f05936171649f392321162ac8185e01af2cfba3dd9e82de54a4
|
|
BLAKE2b-256 checksum How to use checksums |
1529f4836d8c3182821c0d516cd82347283cfa41b4890e8d6e35498e3a7a38e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 30, 2026.
Transparency logRelease files / fff_search-0.10.6-cp310-abi3-macosx_10_12_x86_64.whl
| Download URL | fff_search-0.10.6-cp310-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.9 MB |
| Tags | CPython 3.10 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
28ca0944b5e182bb6d4fd410871bf52c66fddb9af08b5710077d06089811e0ff
|
|
BLAKE2b-256 checksum How to use checksums |
733b1056872179708a6ed3b1e7341ab03c76baad21748ef2a3f42ed001a4fe34
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Aug 30, 2026.
Transparency log