One interface, native monitors

Use the same command line on build scripts, editors, automation, and developer workflows while fswatch chooses the platform monitor that fits the host.

macOS FSEvents, kqueue Fast recursive directory monitoring with native file system event support.
Linux inotify, fanotify Default inotify support plus opt-in fanotify process attribution in recent releases.
BSD kqueue Event notifications through the native kqueue interface used by FreeBSD and other BSD systems.
Solaris and Illumos File Events Notification Native file event monitoring through the Solaris FEN API and derivatives.
Windows ReadDirectoryChangesW Directory change monitoring through the Windows file notification API.
Portable fallback poll monitor A stat-based monitor for environments without a dedicated event API.

Stream paths

Print changed paths as they arrive, or use null-delimited output for shell-safe pipelines.

Batch events

Use count mode to rebuild, rerun tests, or trigger one command per change batch.

Filter noise

Use legacy filters, conjunctive include-minus-exclude filters, event filters, or traversal pruning before your automation sees noise.

Quick start

Install from your package manager when available, or build a release tarball when you need full control over the target system.

Homebrew MacPorts FreeBSD pkg Release tarball
$ brew install fswatch
$ fswatch -r ~/project
/Users/me/project/src/main.cpp
/Users/me/project/include/main.hpp

Current release documentation

Read the 1.20.1 manual from the GitHub release assets, or browse the release tag for source documentation.

Project source

Report issues, read release notes, and inspect the C, C++, and command-line implementation on GitHub.