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.9.198
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 196.8 MB
Release files / pyfstree-26.9.198-cp314-cp314-win_amd64.whl
| Download URL | pyfstree-26.9.198-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e86dd684bd300cef5e9ef588a88664c119c160ac316a4113186100fce7c0d033
|
|
BLAKE2b-256 checksum How to use checksums |
36065eb599b118f12593e71b27bc41c065710f19bb22aa47ba70ed6469a77497
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp314-cp314-musllinux_1_2_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
f4e5943580d2f508994e91c9876f0ed342a9ca854a43ec0bf0dcb924c67530b8
|
|
BLAKE2b-256 checksum How to use checksums |
fd9c1f4aca5584304941e3e9892156eb0df08de07cd84eade1340783a172b848
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
a1f9fa3c379b01d5b8117ae3b181c2de665a59b3bbe266fe3e0f413f57870883
|
|
BLAKE2b-256 checksum How to use checksums |
ed511694e535331c7ca9434fad785bd96586adf8b07c29e686d0d7e7824d769e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | pyfstree-26.9.198-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 |
11bde9b035fc56f4eb09810ed79f11eb4843d1ce5c5bd9cd5424629225fa4e2e
|
|
BLAKE2b-256 checksum How to use checksums |
2217d45a3f9bbaf1f77a713086168a2ce689158ea0030f5eef02087dff2a53af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp313-cp313-win_amd64.whl
| Download URL | pyfstree-26.9.198-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c4bb588a0e3b6df3ad64c609306f7ead34cb8aa33a05b8e702ab1cf6ae516992
|
|
BLAKE2b-256 checksum How to use checksums |
445c87a76d309c3a07963faed4ad320e3e72a9362101033679f43f0047c33926
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp313-cp313-musllinux_1_2_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
49e3e90597981c9c34497e9427948a7868ddac4349fa6121d9b73432c289b957
|
|
BLAKE2b-256 checksum How to use checksums |
b564675f4051b464c9e59e32c5e67eca58d3c8dc4ecb76a26d97efcbb483bc17
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
29c75ec23b5ff4674bbeca6c662e977a3467df3bcadedb08292cb2dfe83472de
|
|
BLAKE2b-256 checksum How to use checksums |
3a5ef649132752233cab62f0a4f06f63d23cf433f550510cc31cbb962e6bb108
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | pyfstree-26.9.198-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 |
c0c1a82583aa2c0ce0e4d15ae944efe72e5c28bfcfcce6f04aab4419bf250b80
|
|
BLAKE2b-256 checksum How to use checksums |
d6310faf8994f3fde5f0afcbef62dd0af4e51c8ee28210843466ba92976ed6a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp312-cp312-win_amd64.whl
| Download URL | pyfstree-26.9.198-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6246ca0d017ef9f75f33a6152ca1ff3665f88d601ad75c29f8f5d1df2d95a3a8
|
|
BLAKE2b-256 checksum How to use checksums |
80491765b5378dd7bef9080ee478b854e52037ec5aa1ddd7fb1234d02f9947b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp312-cp312-musllinux_1_2_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
8a323d855439c9c02f7ac214dbef38a2950237725b20b26b5c73339b02d6fe84
|
|
BLAKE2b-256 checksum How to use checksums |
79c72cafabab88f3853720c0b55696e8bc32320b9929ee8c3489da8ece359227
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
6181ff7d08f7ed24cbbfd99151b81cece9687111e9a2df53ecaa9d64f22db249
|
|
BLAKE2b-256 checksum How to use checksums |
77323b303f520c961aea2942a966491a4a1a0fe8a6f4ddc1a12ccbbad421f256
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | pyfstree-26.9.198-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 |
7877d840c66e087bb32b2a3d14604f7b8b319cb7491c8f0b3236901df00f8c17
|
|
BLAKE2b-256 checksum How to use checksums |
12c72ce4e1f20187f54c1c9972ebd8a146ad8200397a393cf8ec2650b050d73e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp311-cp311-win_amd64.whl
| Download URL | pyfstree-26.9.198-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
37a7b64f9a9b187f5f59d18aaff09e2510be0d95e512626bf67c116d4419380b
|
|
BLAKE2b-256 checksum How to use checksums |
90fff5f069befc8aa70d15ec7ee63647e8974dc37a1cb802e14a4628fb69ea53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp311-cp311-musllinux_1_2_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
924de9ccc56e635e001c6872e0fb8f0ed9636144882bf2574969d76812522f61
|
|
BLAKE2b-256 checksum How to use checksums |
440f1a5d5572a08830d49b008abc1e8d8e27f8d2833be6a541d73495c2c0df1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
972ff572d3f58c1eda3986d97d3ffbd134ce069fd49008374de85e2824b20d9e
|
|
BLAKE2b-256 checksum How to use checksums |
e3fe45f6318a23b095de48738007164ec73399738c64500f3a9f1697b609d48c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | pyfstree-26.9.198-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 |
855bbf076d198524476a00ee827ecadd01980c5687e0d68cc8fd66884fdc6f25
|
|
BLAKE2b-256 checksum How to use checksums |
addcc6cf423f48ad79422ab24354bdc4795b5ff2d480bf15a3cf72cba35013c5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp310-cp310-win_amd64.whl
| Download URL | pyfstree-26.9.198-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f5fadb2071dc99024b8a16b2efa02141a27b9ffa10a871d4dd7f9e484beb7c0d
|
|
BLAKE2b-256 checksum How to use checksums |
d5892a9fbb0f5949623a7c6d2429e68ee2df0623b1639d265d35a3a5b07d2f7b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp310-cp310-musllinux_1_2_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
8cfaa35dfc90534a1165ade616ca4644d1d29253a856645d6447e57af9dbf18c
|
|
BLAKE2b-256 checksum How to use checksums |
d3e50fc8baa2cbd4e571e4c72e99b366f0f144dfe3f30de485239cc2c2bba76b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | pyfstree-26.9.198-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 |
cb7c18735f7b9f302392a1e56f591f30caf8c6351534e097ffebb36201315d40
|
|
BLAKE2b-256 checksum How to use checksums |
4f356f4450827a01f99e4ccba82ad624ec5a8a42e408b26940448e5a4e23ced4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / pyfstree-26.9.198-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | pyfstree-26.9.198-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 |
73a471c5b3e9a20644c42dc52fe50d0f3c90435179a9d6ff83b7a877ef9c40f3
|
|
BLAKE2b-256 checksum How to use checksums |
2c8836593955a253a719d01a3df6a50cba48ab582c7b647ab82b97ecdc7ac495
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Security for pyfstree 26.9.198
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.