phpactor / amp-fswatch
Async Filesystem Watcher for Amphp
Installs: 401 394
Dependents: 3
Suggesters: 0
Security: 0
Stars: 11
Watchers: 1
Forks: 2
Open Issues: 2
pkg:composer/phpactor/amp-fswatch
Requires
- php: ^8.0
 - amphp/amp: ^2.4
 - amphp/process: ^1.1
 - psr/log: ^1.1
 - symfony/filesystem: ^5.0|^6.0
 - webmozart/glob: ^4.4
 
Requires (Dev)
- amphp/phpunit-util: ^1.3
 - ergebnis/composer-normalize: ^2.0
 - friendsofphp/php-cs-fixer: ^3.15
 - jangregor/phpstan-prophecy: ^1.0
 - phpactor/test-utils: ~1.1.3
 - phpspec/prophecy-phpunit: ^2.0
 - phpstan/phpstan: ^1.1
 - phpunit/phpunit: ^9.0
 - symfony/var-dumper: ^5.0|^6.3
 
This package is auto-updated.
Last update: 2025-10-28 16:34:30 UTC
README
This is an Amp library for asynchronously monitor paths on your file system changes using various stategues.
It's been created to trigger code indexing in Phpactor.
- Promise based API.
 - Capable of automatically selecting a supported watcher for the current environment.
 - Provides realtime (e.g. 
inotify) watchers in addition to polling ones. - Provides decorators for:
- Including / excluding patterns.
 - Buffering notifications.
 
 - Unitifed configuration for all watchers.
 
Usage
See bin/watch for an implementation, which looks something like this:
Loop::run(function () use () { $logger = // create a PSR logger $config = new WatcherConfig([$path]); $watcher = new PatternMatchingWatcher( new FallbackWatcher([ new BufferedWatcher(new InotifyWatcher($config, $logger), 10), new FindWatcher($config, $logger), new PhpPollWatcher($config, $logger), new FsWatchWatcher($config, $logger) ], $logger), [ '/**/*.php' ], [] ); $process = yield $watcher->watch([$path]); while (null !== $file = yield $process->wait()) { fwrite(STDOUT, sprintf('[%s] %s (%s)'."\n", date('Y-m-d H:i:s.u'), $file->path(), $file->type())); } });
Watchman
Watchman needs to be installed and will work on Linux, Mac and Windows.
use Phpactor\AmpFsWatch\Watcher\Watchman\WatchmanWatcher; $watcher = new WatchmanWatcher($config, $logger);
Inotify
Use the Linux inotifywait binary to monitor for changes.
use Phpactor\AmpFsWatch\Watcher\Inotify\InotifyWatcher; $watcher = new InotifyWatcher($config, $logger); // ...
Fswatch
Unstable: This watcher has not been extensively tested.
FsWatch is a cross-platform (Linux,Mac,Windows) file watching utility which will automatically use the platforms native functionality when possible.
use Phpactor\AmpFsWatch\Watcher\FsWatch\FsWatchWatcher; $watcher = new FsWatchWatcher($config, $logger); // ...
Find
Use the find binary (Linux and Mac) to poll for file changes.
Poll for changes every second:
use Phpactor\AmpFsWatch\Watcher\Find\FindWatcher; $watcher = new FindWatcher($config, $logger); // ...
Note that while this should work on GNU and BSD variants of find it may not
work on other variants due to being invoked with -newerxy switch, which is
not in the POSIX standard.
PHP Poll
This is the slowest and most resource intensive option but it should work on all environments.
use Phpactor\AmpFsWatch\Watcher\Find\FindWatcher; $watcher = new PhpPollWatcher($config, $logger); // ...
Fallback
The fallback watcher will automatically select the first supported watcher on the current system:
use Phpactor\AmpFsWatch\Watcher\Fallback\FallbackWatcher; $watcher = new FallbackWatcher( [ new InotifyWatcher($logger), new FindWatcher(500, $logger) ] $logger ); // ...
Contributing
This package is open source and welcomes contributions! Feel free to open a pull request on this repository.
Support
- Create an issue on the main Phpactor repository.
 - Join the 
#phpactorchannel on the Slack Symfony Devs channel.