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

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

Built distributions (wheels)

Table of built distributions (wheels) for fff-search 0.10.4
File
fff_search-0.10.4-cp310-abi3-win_amd64.whl CPython 3.10 abi3 Windows x86-64 Details
fff_search-0.10.4-cp310-abi3-manylinux_2_38_x86_64.whl CPython 3.10 abi3 Linux glibc 2.38+ x86-64 Details
fff_search-0.10.4-cp310-abi3-manylinux_2_38_aarch64.whl CPython 3.10 abi3 Linux glibc 2.38+ ARM64 Details
fff_search-0.10.4-cp310-abi3-macosx_11_0_arm64.whl CPython 3.10 abi3 macOS 11.0+ ARM64 Details
fff_search-0.10.4-cp310-abi3-macosx_10_12_x86_64.whl CPython 3.10 abi3 macOS 10.12+ x86-64 Details

Total release size: 26.3 MB

Release files / fff_search-0.10.4.tar.gz

Download URL fff_search-0.10.4.tar.gz
Size 2.1 MB
Tags Source
SHA-256 checksum
How to use checksums
8fe6ef94bbc88cf1c784bacfa7f16c845a44f123cc9fda82ece8b0fd77d236d3
BLAKE2b-256 checksum
How to use checksums
0fb48e9e4b118fac05ce63cfd794755b4d67469556fc69b01b6a94d55a62fdc1
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 15, 2026.

Transparency log

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

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

Transparency log

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

Download URL fff_search-0.10.4-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
91db022d3ee74d80a78af42ee07e7ce1f2fc7875017256cb780e133f458fe10c
BLAKE2b-256 checksum
How to use checksums
c2636b1156248efc14d96e0bec3ca4a2bdc99ab75e19410aae7ececa1b4551ac
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 15, 2026.

Transparency log

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

Download URL fff_search-0.10.4-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
b12e799991ba08ee454cbe9f078a7810f8bc42b3f8aa7a0e3ef497805ad08b83
BLAKE2b-256 checksum
How to use checksums
75eea8f431ebdbf70cc640c9624228f0dec7b4f5e8f246a3db115190f7fd1528
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 15, 2026.

Transparency log

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

Download URL fff_search-0.10.4-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
c45711076a34035a0180c9d3b5188e5e68c2028a077e45466152955d25fa56ca
BLAKE2b-256 checksum
How to use checksums
69755ebaea5e85fb124219745b193a1eb768c15215916aac122a26c34052fdec
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 15, 2026.

Transparency log

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

Download URL fff_search-0.10.4-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
11dd3aa63c084ae57e64e8147e0938deec7386409cf71afa224e69857c7388dc
BLAKE2b-256 checksum
How to use checksums
6b4edbfc343309217020453692a2f25a8965a6b47984c1d2620260df90ca3d9d
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 15, 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

This release

0.10.4 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