Skip to main content
Build status

fstree - filesystem tree sharing and sync

Fstree a tool to share a filesystem tree over the network and keep it in sync.

It is similar to rsync, but it is designed to be used in a client-server model, where trees are pushed and pulled between the server and the clients. Merkle trees are used to efficiently determine what parts of the tree need to be downloaded or uploaded.

Files and directories can be ignored using a .fstreeignore file in the root of the tree. It uses the same syntax as .gitignore files, including negated patterns: a pattern prefixed with ! re-includes paths that an earlier pattern ignored, and the last pattern matching a path decides whether it is ignored. To match a literal leading !, escape it as \!.

As in git, a file below an ignored directory cannot be re-included by a negated pattern. Ignored directories are pruned while the tree is scanned, so their contents are never visited.

A simple gRPC protocol is used to communicate between the client and the server. A reference server implementation is available as the robrt/jolt-cache Docker image on Docker Hub.

HTTP remotes are also supported for basic upload and download of objects. This allows integration with existing HTTP file servers or CDNs. Note that HTTP remotes are significantly less efficient than the gRPC server, as they do not support querying for the presence of multiple objects and trees at once.

Usage

To start the server, run:

docker run -v /path/to/data:/data -p 9090:9090 robrt/jolt-cache -i

To push a tree to the server, run:

fstree write-tree-push --remote jolt://localhost:9090 /path/to/data

The steps above can be split into two separate commands:

fstree write-tree /path/to/data
fstree push --remote jolt://localhost:9090 <digest>

To push a tree to a standard HTTP server, run:

fstree write-tree-push --remote http://localhost:8080 /path/to/data'

To pull a tree from the server, run:

fstree pull-checkout --remote jolt://localhost:9090 <digest> /path/to/data

The steps above can be split into two separate commands:

fstree pull --remote jolt://localhost:9090 <digest>
fstree checkout <digest> /path/to/data

To pull a tree from a standard HTTP server, run:

fstree pull-checkout --remote http://localhost:8080 <digest> /path/to/data

To list the contents of a tree, run:

fstree ls-tree <digest>

Configuration

Configuration can be passed as command line arguments or environment variables.

The following environment variables are supported:

  • FSTREE_CACHE: The directory where the local object cache is stored. Defaults to ~/.cache/fstree on Linux and macOS and ~/AppData/Local/fstree on Windows.

  • FSTREE_IGNORE: The relative path to the ignore file. Defaults to .fstreeignore in the root of the tree.

  • FSTREE_REMOTE: The remote address of the server to connect to. Defaults to jolt://localhost:9090.

  • FSTREE_THREADS: The number of threads to use for parallel operations. Defaults to the number of CPU cores.

The following command line arguments are supported:

  • --cache: See FSTREE_CACHE.

  • --ignore: See FSTREE_IGNORE.

  • --remote: See FSTREE_REMOTE.

  • --threads: See FSTREE_THREADS.

Building

The project can be built using CMake, but developers typically use Jolt as a higher level orchestrator. To build the project using Jolt, run:

pip install jolt
jolt build fstree

Metadata

Release files for pyfstree 26.10.202

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for pyfstree 26.10.202
File Actions
pyfstree-26.10.202-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for pyfstree-26.10.202-cp314-cp314-win_amd64.whl
pyfstree-26.10.202-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details for pyfstree-26.10.202-cp314-cp314-musllinux_1_2_x86_64.whl
pyfstree-26.10.202-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details for pyfstree-26.10.202-cp314-cp314-manylinux_2_28_x86_64.whl
pyfstree-26.10.202-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for pyfstree-26.10.202-cp314-cp314-macosx_11_0_arm64.whl
pyfstree-26.10.202-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for pyfstree-26.10.202-cp313-cp313-win_amd64.whl
pyfstree-26.10.202-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details for pyfstree-26.10.202-cp313-cp313-musllinux_1_2_x86_64.whl
pyfstree-26.10.202-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for pyfstree-26.10.202-cp313-cp313-manylinux_2_28_x86_64.whl
pyfstree-26.10.202-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for pyfstree-26.10.202-cp313-cp313-macosx_11_0_arm64.whl
pyfstree-26.10.202-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for pyfstree-26.10.202-cp312-cp312-win_amd64.whl
pyfstree-26.10.202-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details for pyfstree-26.10.202-cp312-cp312-musllinux_1_2_x86_64.whl
pyfstree-26.10.202-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for pyfstree-26.10.202-cp312-cp312-manylinux_2_28_x86_64.whl
pyfstree-26.10.202-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for pyfstree-26.10.202-cp312-cp312-macosx_11_0_arm64.whl
pyfstree-26.10.202-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for pyfstree-26.10.202-cp311-cp311-win_amd64.whl
pyfstree-26.10.202-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details for pyfstree-26.10.202-cp311-cp311-musllinux_1_2_x86_64.whl
pyfstree-26.10.202-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details for pyfstree-26.10.202-cp311-cp311-manylinux_2_28_x86_64.whl
pyfstree-26.10.202-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for pyfstree-26.10.202-cp311-cp311-macosx_11_0_arm64.whl
pyfstree-26.10.202-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for pyfstree-26.10.202-cp310-cp310-win_amd64.whl
pyfstree-26.10.202-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details for pyfstree-26.10.202-cp310-cp310-musllinux_1_2_x86_64.whl
pyfstree-26.10.202-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details for pyfstree-26.10.202-cp310-cp310-manylinux_2_28_x86_64.whl
pyfstree-26.10.202-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for pyfstree-26.10.202-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 196.2 MB

Release files / pyfstree-26.10.202-cp314-cp314-win_amd64.whl

Download URL pyfstree-26.10.202-cp314-cp314-win_amd64.whl
Size 6.5 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
7169a663bee14a2a27228dc1a24788f13ca428bf4f82e76bc5450fac7d15e906
BLAKE2b-256 checksum
How to use checksums
fc438aaf427d6da14699bcbcb4ba35ad726801bcf33696717cb102e6f78958c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp314-cp314-musllinux_1_2_x86_64.whl

Download URL pyfstree-26.10.202-cp314-cp314-musllinux_1_2_x86_64.whl
Size 12.8 MB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
2a1612779bbb63fe6946ab2edb658937f89e4deba0f4f10ad0fa3e17ff4fb305
BLAKE2b-256 checksum
How to use checksums
ee1a14ec8031fcfb7ca1d82de890772806dfd26b7b3a0cfb481af3cd4961c06f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp314-cp314-manylinux_2_28_x86_64.whl

Download URL pyfstree-26.10.202-cp314-cp314-manylinux_2_28_x86_64.whl
Size 11.7 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
0e03302e26ba9af7b8ff5dc0c8a55114c845def3cf6d24b0392bacde3e177bbb
BLAKE2b-256 checksum
How to use checksums
5c887bbaa3e45e6ece01d516d2f5905614a67c55a35b627431adc4e8872fa2fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp314-cp314-macosx_11_0_arm64.whl

Download URL pyfstree-26.10.202-cp314-cp314-macosx_11_0_arm64.whl
Size 8.4 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2a48c4f7405589b7abd82182e66bca0b398cdccdabc1182c105aa175fd92bdda
BLAKE2b-256 checksum
How to use checksums
555cfb52a0b6113665b3706a0b2f97d2ae765dd54375ff0d83687150630dd93f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp313-cp313-win_amd64.whl

Download URL pyfstree-26.10.202-cp313-cp313-win_amd64.whl
Size 6.3 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
b85d73b96611cd17196709ea7a258e21123a03d30a4b35d72a33b6687621b969
BLAKE2b-256 checksum
How to use checksums
163993182e726150a6fdd6283b86aa4a7ba4981837e09052df2d9094c262ff95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp313-cp313-musllinux_1_2_x86_64.whl

Download URL pyfstree-26.10.202-cp313-cp313-musllinux_1_2_x86_64.whl
Size 12.8 MB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
7f2f4ea11fd555f1d0e6cea2462b0836930a3e84e01d16e5025638778c17f312
BLAKE2b-256 checksum
How to use checksums
a504385c4b63e3ea35a7d983ab6eeb13f6523cbc42d01aaa0802945dcd6d3368
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp313-cp313-manylinux_2_28_x86_64.whl

Download URL pyfstree-26.10.202-cp313-cp313-manylinux_2_28_x86_64.whl
Size 11.7 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
4f5a383dabb408dcf906858448a922e2fb0e94057db724ddc77b5209f94e4394
BLAKE2b-256 checksum
How to use checksums
b3990d0ff2399b9c0ff55fe14f42be6dcbb526cdc1e6da589418f6c5b343eb4c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp313-cp313-macosx_11_0_arm64.whl

Download URL pyfstree-26.10.202-cp313-cp313-macosx_11_0_arm64.whl
Size 8.4 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
65b679baff9ba5ee81749c4ecf49fa4b9b369108f477c786fc8b22560f649243
BLAKE2b-256 checksum
How to use checksums
df091cedba42f696c7c6d47d6ff243b665b3b2b33f5b72e03a5a1b2270e28cff
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp312-cp312-win_amd64.whl

Download URL pyfstree-26.10.202-cp312-cp312-win_amd64.whl
Size 6.3 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
8966d49ff2f6e1df7fd9d4e745bfe2937371d8c132d29f758549515668bccbb1
BLAKE2b-256 checksum
How to use checksums
dbb1f545631461a8c1f4d1ac8a923cb4b96571b7cfdf8289262fd00ad235958e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp312-cp312-musllinux_1_2_x86_64.whl

Download URL pyfstree-26.10.202-cp312-cp312-musllinux_1_2_x86_64.whl
Size 12.8 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
f51a8176637511c86e9f96eb09a41b462a658e1aff5a645411da9a36a1d9b396
BLAKE2b-256 checksum
How to use checksums
086c7a3ec6dc508845c7ff3e5b4ee18a385b7563e1211faf0e7fd852198ff4c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp312-cp312-manylinux_2_28_x86_64.whl

Download URL pyfstree-26.10.202-cp312-cp312-manylinux_2_28_x86_64.whl
Size 11.7 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1f67bb7fae2fa21d8fc514a852b7f86e8902be273693d5614f638279a81b412a
BLAKE2b-256 checksum
How to use checksums
cf633d88fe47dcfc3979b278ab8ca44f168d67f504292321f6bcafe9f81f4ecc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp312-cp312-macosx_11_0_arm64.whl

Download URL pyfstree-26.10.202-cp312-cp312-macosx_11_0_arm64.whl
Size 8.4 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5b7b3bddf9a42f035286378bf1b5d52227b3ebef320ceb6306e43c58de480864
BLAKE2b-256 checksum
How to use checksums
bff8cd5bda1e14868d9e4d7db7129f7e052b0aaa549dd78461aceac25ea69aba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp311-cp311-win_amd64.whl

Download URL pyfstree-26.10.202-cp311-cp311-win_amd64.whl
Size 6.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
1889a86f167d467295f7f4960e47079d3c612c18af0d48d4031fd5765af80862
BLAKE2b-256 checksum
How to use checksums
3860b4f363eb547c121dca05f5b07db9319abaab9d8221882fa71c2e0bd34d79
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp311-cp311-musllinux_1_2_x86_64.whl

Download URL pyfstree-26.10.202-cp311-cp311-musllinux_1_2_x86_64.whl
Size 12.8 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
532d49f4bbcef9f490bf6cbac19556655df2b4be6b9e43a0e590e0a0bfde74fc
BLAKE2b-256 checksum
How to use checksums
cf4c72615ca9c22bb8919bd0124b4391d576716489aa74f03867db1153e303fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp311-cp311-manylinux_2_28_x86_64.whl

Download URL pyfstree-26.10.202-cp311-cp311-manylinux_2_28_x86_64.whl
Size 11.7 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
ad729ac623465ca6ae167590f983cd09aa1fbd363e7af60ba6cbcd6c62e96a3a
BLAKE2b-256 checksum
How to use checksums
f9e184c3bbbf61ba30e960678644f0f29a7a515b7b68714fabd711ae612c0c6b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp311-cp311-macosx_11_0_arm64.whl

Download URL pyfstree-26.10.202-cp311-cp311-macosx_11_0_arm64.whl
Size 8.4 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5f92abf52e49985bf367f6e555f91f36e48121383606355958230af7ff3637c0
BLAKE2b-256 checksum
How to use checksums
fc89b4c36173b7ddc2e3d2df34a239d7e2dbef73987ddffda6348ea59d93a04c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp310-cp310-win_amd64.whl

Download URL pyfstree-26.10.202-cp310-cp310-win_amd64.whl
Size 6.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
899cdb5e81714f039f31103b7e40dd462cea842cca3938d4af40c514c5eff361
BLAKE2b-256 checksum
How to use checksums
1072958e393727378cf1cfac86c21c3781f5727e6414e1f9672dad4a23e048d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp310-cp310-musllinux_1_2_x86_64.whl

Download URL pyfstree-26.10.202-cp310-cp310-musllinux_1_2_x86_64.whl
Size 12.8 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
69344ce2a2b6b8c022305da5c38087a6584d29f45a9cbc61ae7bc78104986599
BLAKE2b-256 checksum
How to use checksums
3a9e887fbd95ae6d09f45972281ec35cb358cc337797da7b0b8caadd882e4ecb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp310-cp310-manylinux_2_28_x86_64.whl

Download URL pyfstree-26.10.202-cp310-cp310-manylinux_2_28_x86_64.whl
Size 11.7 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2a8efd4f2cde3fcbf6a2cbf03b55cbb56132fce610a00e1df973204d527cbf4c
BLAKE2b-256 checksum
How to use checksums
24fecd2b2fd865b006aeba42a1ccd3d614debef03638d7663aab45a2d17d192d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / pyfstree-26.10.202-cp310-cp310-macosx_11_0_arm64.whl

Download URL pyfstree-26.10.202-cp310-cp310-macosx_11_0_arm64.whl
Size 8.4 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
adc7374ac850f35657a2b79ba2e1b4bd00c5940cee1453a1e08713927605bce4
BLAKE2b-256 checksum
How to use checksums
b65667e6cb5effbeb600078021b2976eaebfcd1112a7b48465759342afe16d39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Security for pyfstree 26.10.202

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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