Skip to main content

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)

Source distribution for fff-search 0.10.6
File Size Uploaded
fff_search-0.10.6.tar.gz 2.1 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for fff-search 0.10.6
File
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 log

Release 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 log

Release 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 log

Release 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 log

Release 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 log

Release 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

Release history Release notifications | RSS feed

0.11.0

6 release files

This release

0.10.6 This release

6 release files

0.10.5

6 release files

0.10.4

6 release files

0.10.1

6 release files

0.10.0

6 release files

0.9.6

6 release files

0.9.5

6 release files

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page