An Elixir wrapper for native file system change monitoring across macOS, Linux, and Windows.
FileSystem is an Elixir library that wraps native filesystem monitoring APIs to provide real-time file change notifications. It solves the problem of efficiently detecting filesystem events (like file modifications, creations, or deletions) across different operating systems within Elixir applications.
Elixir developers building applications that need to react to filesystem changes, such as development tools, build systems, or real-time data processors.
Developers choose FileSystem for its cross-platform reliability using native OS APIs, its simple Elixir-friendly API, and seamless integration with OTP patterns like GenServer.
Filesystem monitor for elixir
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Leverages OS-specific APIs like fsevent on macOS, inotify on Linux/BSD, and inotify-win on Windows for efficient, real-time event detection without polling, as highlighted in the README's system support section.
Designed to work with GenServer, making it easy to embed in Elixir applications; the README includes a clear example of integrating with a GenServer for event handling.
Allows fine-tuning with platform-specific parameters such as latency and watch_root, enabling optimization for different use cases, as demonstrated in the backend options example.
Provides a straightforward API to start monitors, subscribe to events, and receive messages with file paths and event types, reducing boilerplate code for developers.
On MacOS 10.14, users must manually run a command to compile the native listener, which adds setup complexity and potential for errors, as noted in the README.
Relies on external system libraries (e.g., fsevent, inotify) that may not be available or up-to-date in all environments, increasing deployment and maintenance risks.
Returns low-level events and paths without built-in abstractions, requiring developers to implement custom logic for parsing and responding, as seen in the GenServer example where manual handling is necessary.