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>

To print the content of a file in the cache, or the entries of a tree, run:

fstree cat-file <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_IGNORE_PATTERN: Patterns to ignore in addition to those of the ignore file, one per line, with the syntax of the lines of the ignore file. They come after those of the ignore file, so they take precedence. They are not stored in the tree, so the same patterns must be given when it is checked out. Also given as --ignore-pattern, once for each pattern.

  • FSTREE_PERMISSIONS: How permissions are recorded in trees and restored at checkout, exact or git. Defaults to exact, which records and restores all permission bits. With git, only whether a file is executable is recorded, as git does, so trees written from checkouts made with different umasks are the same. Files are then checked out with 0666 or 0777 and directories with 0777, less the umask. Applies to POSIX systems only. Also given as --permissions.

  • FSTREE_REMOTE: The remote address of the server to connect to. Defaults to jolt://localhost:9090. Use tls:// for a gRPC server with TLS, and https:// for an HTTP server with TLS.

  • FSTREE_CONNECT_TIMEOUT: Seconds to wait for the connection to a gRPC server before giving up. Defaults to 60.

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

Servers that require authentication are configured with the same variables as Jolt:

  • JOLT_CACHE_TOKEN: Token that authenticates the client with the server. It is only sent over TLS, to tls:// and https:// remotes.

  • JOLT_CA_CERT: PEM file with the certificates of the authorities that the certificate of the server is verified with, such as a private authority.

  • JOLT_ALLOW_INSECURE_TOKEN: Set to true to send the token without TLS.

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

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.11.205
File Actions
pyfstree-26.11.205-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details for pyfstree-26.11.205-cp314-cp314-win_amd64.whl
pyfstree-26.11.205-cp314-cp314-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 Linux musl 1.2+ x86-64 Details for pyfstree-26.11.205-cp314-cp314-musllinux_1_2_x86_64.whl
pyfstree-26.11.205-cp314-cp314-manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64 Details for pyfstree-26.11.205-cp314-cp314-manylinux_2_28_x86_64.whl
pyfstree-26.11.205-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details for pyfstree-26.11.205-cp314-cp314-macosx_11_0_arm64.whl
pyfstree-26.11.205-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for pyfstree-26.11.205-cp313-cp313-win_amd64.whl
pyfstree-26.11.205-cp313-cp313-musllinux_1_2_x86_64.whl CPython 3.13 CPython 3.13 Linux musl 1.2+ x86-64 Details for pyfstree-26.11.205-cp313-cp313-musllinux_1_2_x86_64.whl
pyfstree-26.11.205-cp313-cp313-manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64 Details for pyfstree-26.11.205-cp313-cp313-manylinux_2_28_x86_64.whl
pyfstree-26.11.205-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for pyfstree-26.11.205-cp313-cp313-macosx_11_0_arm64.whl
pyfstree-26.11.205-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for pyfstree-26.11.205-cp312-cp312-win_amd64.whl
pyfstree-26.11.205-cp312-cp312-musllinux_1_2_x86_64.whl CPython 3.12 CPython 3.12 Linux musl 1.2+ x86-64 Details for pyfstree-26.11.205-cp312-cp312-musllinux_1_2_x86_64.whl
pyfstree-26.11.205-cp312-cp312-manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64 Details for pyfstree-26.11.205-cp312-cp312-manylinux_2_28_x86_64.whl
pyfstree-26.11.205-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for pyfstree-26.11.205-cp312-cp312-macosx_11_0_arm64.whl
pyfstree-26.11.205-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for pyfstree-26.11.205-cp311-cp311-win_amd64.whl
pyfstree-26.11.205-cp311-cp311-musllinux_1_2_x86_64.whl CPython 3.11 CPython 3.11 Linux musl 1.2+ x86-64 Details for pyfstree-26.11.205-cp311-cp311-musllinux_1_2_x86_64.whl
pyfstree-26.11.205-cp311-cp311-manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64 Details for pyfstree-26.11.205-cp311-cp311-manylinux_2_28_x86_64.whl
pyfstree-26.11.205-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for pyfstree-26.11.205-cp311-cp311-macosx_11_0_arm64.whl
pyfstree-26.11.205-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details for pyfstree-26.11.205-cp310-cp310-win_amd64.whl
pyfstree-26.11.205-cp310-cp310-musllinux_1_2_x86_64.whl CPython 3.10 CPython 3.10 Linux musl 1.2+ x86-64 Details for pyfstree-26.11.205-cp310-cp310-musllinux_1_2_x86_64.whl
pyfstree-26.11.205-cp310-cp310-manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64 Details for pyfstree-26.11.205-cp310-cp310-manylinux_2_28_x86_64.whl
pyfstree-26.11.205-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details for pyfstree-26.11.205-cp310-cp310-macosx_11_0_arm64.whl

Total release size: 197.1 MB

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

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

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

Download URL pyfstree-26.11.205-cp314-cp314-musllinux_1_2_x86_64.whl
Size 12.9 MB
Tags CPython 3.14 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
572345e67236ce4e66df860d838738f84e752bc632f39f24673f4365739750f9
BLAKE2b-256 checksum
How to use checksums
79d519d5d27a6dae9e99cd939c7152fea30fb9ffda776f6801054895cb7ac258
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp314-cp314-manylinux_2_28_x86_64.whl
Size 11.8 MB
Tags CPython 3.14 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
beb6e31d5d084d297ffb6a751db65c53eb194d19d3e7b130067b383cdb2a464b
BLAKE2b-256 checksum
How to use checksums
97fba50125fd3d29c28be326fae2e4b250a17742d655e8f19978e9d5603e353b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp314-cp314-macosx_11_0_arm64.whl
Size 8.5 MB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7c31d884e13e5e939b8344e213de7b5ec3e0d0c3b4b28b8c93bd58ad05072e0e
BLAKE2b-256 checksum
How to use checksums
fb88c211de9e70eba5e3b081c20b7323a009ca9e9b533ed5b45a4c25edb2eff6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

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

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

Download URL pyfstree-26.11.205-cp313-cp313-musllinux_1_2_x86_64.whl
Size 12.9 MB
Tags CPython 3.13 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
c3483a850b1688a0ad7032445673599af308fc16a2a41dba3e1cc5af199bcf2c
BLAKE2b-256 checksum
How to use checksums
50d7321869e14d19102d99b98fc78617be19b9ec148d6ccc87e4ecb9f709f1a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp313-cp313-manylinux_2_28_x86_64.whl
Size 11.8 MB
Tags CPython 3.13 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
7c2cbc3d0f4aca32887ce2aa2b60bf0ac179b577aec1610275d3cb7afc1ff1d5
BLAKE2b-256 checksum
How to use checksums
a5ac8d3cbfe073208373a08b5e9aafb228a18c7d34ea8405badfa606bb634b4f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp313-cp313-macosx_11_0_arm64.whl
Size 8.5 MB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8c44be9cc9e72af20a60655ad36bed749ed01aa6bad00f4121d10dd01a85cf8d
BLAKE2b-256 checksum
How to use checksums
ed458f8b8aca6357e784ae7ac0ecef1a7b25fe4cf924acada1d5e5518b9ac219
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

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

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

Download URL pyfstree-26.11.205-cp312-cp312-musllinux_1_2_x86_64.whl
Size 12.9 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
138a45c978e3aa4657d43647503a0324bea88f21f2dd5a10fe63c2c7e6ee3368
BLAKE2b-256 checksum
How to use checksums
ba738f212a8377528a7a9e1f4698c3be49ac861b7b586fce3aae8e20db6a2d80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp312-cp312-manylinux_2_28_x86_64.whl
Size 11.8 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
b19bba881b72ff4efd5a79d538b3d8786003b57c1f5c0062ffb7064c0badbf1d
BLAKE2b-256 checksum
How to use checksums
45f1bd5ad6a8aed2807ad4180a8e363725390714a06ad9e16e3cc03038b1ddc9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp312-cp312-macosx_11_0_arm64.whl
Size 8.5 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
75dd034dc8013ce944b1df01484cdffa8876fec1ce879c4e16bddf4a2eed43a5
BLAKE2b-256 checksum
How to use checksums
5cb5a4754c6c425f240335063e1068655c02412512b84fb3e48b2e85aeb3c227
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp311-cp311-win_amd64.whl
Size 6.3 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
5e3ce882dea7de359a5d7e6cb8730992dee21941d1d7fe00cfa157ef21c4c318
BLAKE2b-256 checksum
How to use checksums
73e08c4da3cdfc3539e8ad2f8c5eaaaa20fb39070920d391323e0f9a52d97d2c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp311-cp311-musllinux_1_2_x86_64.whl
Size 12.9 MB
Tags CPython 3.11 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
9c94ea16de15e86be2514cc49d4f3b3564e6b439e32f17ad1878352b72f954e3
BLAKE2b-256 checksum
How to use checksums
6d0c65c3b21850db9a75e40a60ea54e9966189513602d6732b36fe903b26ed53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp311-cp311-manylinux_2_28_x86_64.whl
Size 11.8 MB
Tags CPython 3.11 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d16f3ee4a8e7bfc0e3b8cb4b08650bb54e134bd90bb8d69343266fbb2c55b3dd
BLAKE2b-256 checksum
How to use checksums
2f250f73dfa4ec2682cab374af5b287b5aadd951e83c769319b98c592ad66b8d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp311-cp311-macosx_11_0_arm64.whl
Size 8.5 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
12bb74da9dab63979233676351ec02650715c40d977fcf349fd96c224272ed9b
BLAKE2b-256 checksum
How to use checksums
06af51a213ac4f669e0bfd06fc3cbe6ae29f4e4eea9cf0c45b94d36f51cdd2f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp310-cp310-win_amd64.whl
Size 6.3 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
f4addac27908cf057cf32e00378bc1460b796ae56977950fb06fb4b360da98b0
BLAKE2b-256 checksum
How to use checksums
94489c277d53623f1e11b5515925ef420dbf7fd12fa14a52cce9da2f1c4abf5b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp310-cp310-musllinux_1_2_x86_64.whl
Size 12.9 MB
Tags CPython 3.10 Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
cd5486e0971b5badf65cfce33ac26a45e03d59c8674107c9d45334c56874789c
BLAKE2b-256 checksum
How to use checksums
27936ebc36d75c1df46b1f1dc6bb5415dc341c889ccd9d80f26773a5f667497f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-cp310-cp310-manylinux_2_28_x86_64.whl
Size 11.8 MB
Tags CPython 3.10 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
b371428d881af4645925b94631974437bbbf8e04b031f9dd8eab4ca4ce73d6bf
BLAKE2b-256 checksum
How to use checksums
f3b999696c0d1c9336eaf846ce51f8613b36f30e70d0695d6530091208d277c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

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

Download URL pyfstree-26.11.205-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
9f38686e9b45a26b9e49cb0503f3e1d937387b923e2eff4fad780eb3f281a4c5
BLAKE2b-256 checksum
How to use checksums
4eaa4379b466c6caa28381ab516761fd4fd3e0bdf041bd8a6b43210a49e6c033
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.16

Security for pyfstree 26.11.205

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