PHPackages                             b13/distributed-flysystem - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. b13/distributed-flysystem

ActiveTypo3-cms-extension[File &amp; Storage](/categories/file-storage)

b13/distributed-flysystem
=========================

Syncs files between frontend nodes in a multi-head environment based on PHP League / Flysystem

0.4.0(3mo ago)37.8k1GPL-2.0-or-laterPHPPHP ^8.1

Since Apr 28Pushed 3mo ago6 watchersCompare

[ Source](https://github.com/b13/distributed-flysystem)[ Packagist](https://packagist.org/packages/b13/distributed-flysystem)[ RSS](/packages/b13-distributed-flysystem/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (5)Dependencies (3)Versions (10)Used By (0)

Distributed Flysystem for TYPO3 Core
------------------------------------

[](#distributed-flysystem-for-typo3-core)

Imagine you run a multi-head environment with TYPO3. Each application server is a "node".

As usual, there are caveats, and hurdles to work around with. Typically you have local cache files ("var/"), and (ideally) a FAL driver via a remote shared storage for "fileadmin". The database is on a cluster, and you run a Redis sentinel for shared caches.

But what about the other files that TYPO3 sometimes generates?

In an ideal world, TYPO3 would be handling most of the logic already, but due to some extensions or "compressed" files, some files get generated on e.g. "node 20" in typo3temp/ which aren't available on the other nodes.

In the past, we had NFS to work around this usually, but when NFS is not an option, we built a "workaround" extension for this, based on Frank De Jonge's [Flysystem](https://flysystem.thephpleague.com/v3/docs/)abstraction layer.

Every time a file in e.g. `typo3temp` gets accessed, and the file is not available on this node, the other nodes are checked via SFTP and if one node has the file, it is downloaded on the current nodes' typo3temp/ folder.

Currently, this extension is a "pull" solution - fetching the files if needed - but a deeper integration with the Local driver of the File Abstraction Layer should monitor this behavior as well in a separate step.

Installation
------------

[](#installation)

Set it up via composer: `composer req b13/distributed-flysystem`.

Configuration
-------------

[](#configuration)

Add a proper configuration for your SFTP connection to all your nodes in your LocalConfiguration for example:

```
$GLOBALS['TYPO3_CONF_VARS']['FILE']['flysystem'] = [
    'default' => [
        'rootPath' => '/path/from/sftp/ch-root/to/public/path/',
        'username' => 'b13',
        'password' => null,
        'port' => 2222,
        'privateKey' => Environment::getVarPath() . '/my-sftp_privkey',
        'passphrase' => 'take it or leave it',
        'timeout' => 10
    ],
    'nodes' => [
        'node01' => [
            'host' => '1.2.3.4'
            'alias' => 'primary'
        ],
        'node02' => [
            'host' => '1.2.3.5',
            'username' => 'b14',
        ],
    ],
];

```

Modify your .htaccess file on each node to activate the "pulling" mechanism:

```
# Rewrite non-existent fileadmin and typo3temp files to a custom eID script
RewriteCond %{REQUEST_URI} "^(/fileadmin|/typo3temp/assets/).*" [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.*$ %{ENV:CWD}index.php?eID=flysystem [QSA,L]

```

Caveats
-------

[](#caveats)

It is expected that the `rootPath` variable is set to the folder of the public directory of TYPO3's installation.

License
-------

[](#license)

As TYPO3 Core, *distributed flysystem* is licensed under GPL2 or later. See the LICENSE file for more details.

###  Health Score

48

—

FairBetter than 95% of packages

Maintenance82

Actively maintained with recent releases

Popularity27

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity56

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 80% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~437 days

Total

5

Last Release

97d ago

PHP version history (3 changes)0.1.0PHP ^7.2 || ^8.0

0.2.0PHP ^8.0

0.4.0PHP ^8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/165630?v=4)[Benni Mack](/maintainers/bmack)[@bmack](https://github.com/bmack)

---

Top Contributors

[![bmack](https://avatars.githubusercontent.com/u/165630?v=4)](https://github.com/bmack "bmack (16 commits)")[![jschlier](https://avatars.githubusercontent.com/u/9108576?v=4)](https://github.com/jschlier "jschlier (3 commits)")[![ervaude](https://avatars.githubusercontent.com/u/7824856?v=4)](https://github.com/ervaude "ervaude (1 commits)")

### Embed Badge

![Health badge](/badges/b13-distributed-flysystem/health.svg)

```
[![Health](https://phpackages.com/badges/b13-distributed-flysystem/health.svg)](https://phpackages.com/packages/b13-distributed-flysystem)
```

###  Alternatives

[league/flysystem-aws-s3-v3

AWS S3 filesystem adapter for Flysystem.

1.6k263.6M790](/packages/league-flysystem-aws-s3-v3)[unisharp/laravel-filemanager

A file upload/editor intended for use with Laravel 5 to 10 and CKEditor / TinyMCE

2.2k3.3M74](/packages/unisharp-laravel-filemanager)[league/flysystem-sftp-v3

SFTP filesystem adapter for Flysystem.

6129.6M91](/packages/league-flysystem-sftp-v3)[yii2-starter-kit/yii2-file-kit

Yii2 file upload and storage kit

151216.8k6](/packages/yii2-starter-kit-yii2-file-kit)[azure-oss/storage-blob-flysystem

Flysystem adapter for Azure Storage PHP

29936.0k10](/packages/azure-oss-storage-blob-flysystem)[causal/image_autoresize

Simplify the way your editors may upload their images: no complex local procedure needed, let TYPO3 automatically resize down their huge images/pictures on-the-fly during upload (or using a command for batch processing) and according to your own business rules (directory/groups). This will highly reduce the footprint on your server and speed-up response time if lots of images are rendered (e.g., in a gallery). Features an EXIF/IPTC extractor to ensure metadata may be used by the FAL indexer even if not preserved upon resizing.

19455.6k](/packages/causal-image-autoresize)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
