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.3

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.3
File Size Uploaded
fff_search-0.10.3.tar.gz 2.1 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for fff-search 0.10.3
File
fff_search-0.10.3-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
fff_search-0.10.3-cp310-abi3-manylinux_2_38_x86_64.whl CPython 3.10 abi3 Linux glibc 2.38+ x86-64 Details
fff_search-0.10.3-cp310-abi3-manylinux_2_38_aarch64.whl CPython 3.10 abi3 Linux glibc 2.38+ ARM64 Details
fff_search-0.10.3-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
fff_search-0.10.3-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.3.tar.gz

Download URL fff_search-0.10.3.tar.gz
Size 2.1 MB
Tags Source
SHA-256 checksum
How to use checksums
17286af7d5613c136ef8e70a9ea08153d4638b394368bcc59aeba8b5a70f54e3
BLAKE2b-256 checksum
How to use checksums
7b9e4ed45b4fcd434c0e3ed259634ba4d49073a14a576cfee2752ca6d067095a
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 7, 2026.

Transparency log

Release files / fff_search-0.10.3-cp310-abi3-win_amd64.whl

Download URL fff_search-0.10.3-cp310-abi3-win_amd64.whl
Size 5.5 MB
Tags CPython 3.10 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
ee8f8d7a5c77692a3483af2fa102ed5063de8e2da08b192a1bbcecc2b2cce645
BLAKE2b-256 checksum
How to use checksums
c7e3b736bb0b7aa69c0f268048d75c6b4b46f790018926986974cd73424881e4
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 7, 2026.

Transparency log

Release files / fff_search-0.10.3-cp310-abi3-manylinux_2_38_x86_64.whl

Download URL fff_search-0.10.3-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
80cb09f34b3abae21610374e68600a834ef0c21749c0cf6c5dae2f350f82bc37
BLAKE2b-256 checksum
How to use checksums
f5aa21ce00e910220b0820fcf2e5cabd991c9133d1b54ec6af41c2b9b9a8cdf4
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 7, 2026.

Transparency log

Release files / fff_search-0.10.3-cp310-abi3-manylinux_2_38_aarch64.whl

Download URL fff_search-0.10.3-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
637b24dec8f8e9bd6900c949d8b35feb5382b430b20de72c68a47d8541b9ca9b
BLAKE2b-256 checksum
How to use checksums
a5e45a26154a5a26078baa2770dd4bcb747c9e7ef6208fa6b4860273a2703cfe
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 7, 2026.

Transparency log

Release files / fff_search-0.10.3-cp310-abi3-macosx_11_0_arm64.whl

Download URL fff_search-0.10.3-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
31f35b0f862d79c64eb965c2b5e909b724663e0bc6930c263ee3cbf8008a28d8
BLAKE2b-256 checksum
How to use checksums
90d89276b31083d782d7ad533f149f956812600bfe441c207c3daefc56d68fc5
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 7, 2026.

Transparency log

Release files / fff_search-0.10.3-cp310-abi3-macosx_10_12_x86_64.whl

Download URL fff_search-0.10.3-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
fa46ecd3a3a338729f947bbb50e87833f6303c3f78431ca48eff3301791b3312
BLAKE2b-256 checksum
How to use checksums
b10380682e7e2c3f8513b5d52cac7bd6711a83635706e2b29861c32cd610aad2
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 7, 2026.

Transparency log

Release history Release notifications | RSS feed

0.11.0

6 release files

0.10.6

6 release files

0.10.5

6 release files

0.10.4

6 release files

This release

0.10.3 This release

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