Repository navigation
Releases
Releases · notify-rs/notify
notify-types: v2.3.0
Immutable
release. Only release title and notes can be modified.
notify-types 2.3.0 (2026-11-09)
- CHANGE: raise MSRV from 1.88 to 1.91
- FEATURE: add
user_datatoEventAttributesandEvent, including serde and Debug support. The value participates in event equality and hashing so deduplication retains notifications with distinct watch IDs #1012 #1069 - DOCS: clarify how to pair rename events when several watches share a tracker #1072
notify: v9.0.0-rc.8
Immutable
release. Only release title and notes can be modified.
Announcement
This is the final release candidate for v9. We recommend trying out, any feedback is appreciated!
notify 9.0.0-rc.8 (2026-11-09)
- CHANGE: raise MSRV from 1.88 to 1.91
- CHANGE:
Errorgains a private field;ErrorKindandUpdatePathsErrorare now#[non_exhaustive]. Use error constructors (includingUpdatePathsError::new),..in struct patterns, and wildcard enum matches #1060 #1071 breaking - DEPS: upgrade
notify-typesto 2.3.0 for per-watch user data support - FEATURE: add
WatchPathConfig::with_user_data(u64)to identify watches throughEvent::user_data()andError::user_data()on all backends, including failed batch operations viaUpdatePathsError.source#1012 #388 - FEATURE: [Windows] add opt-in
Config::with_windows_extended_informationfor file/folder classification in create/remove events; unsupported APIs and filesystems return errors #261 #1061 - PERF: [Windows] share parent-directory watches across individual file watches, reuse buffers, and skip work for filtered events. Idle polling is removed, and configuration changes wake the watcher immediately. Buffers are now 64 KiB per OS watch, up from 16 KiB #1056 #1077
- PERF: [inotify, kqueue] speed up unwatch, especially with many watched paths or nested user watches #1074 #1075 #1079
- PERF: [inotify] update recursive walk barriers incrementally instead of rebuilding them from all watches #1076
- FIX: [Windows] deliver fatal asynchronous read errors to the event handler; malformed notifications produce an
InvalidDataerror and a rescan event #1077 - FIX: [kqueue] report recoverable child errors while continuing recursive watches, stop additions at file descriptor limits with
ErrorKind::MaxFilesWatch, and ignore missing directories during event-triggered scans #703 #455 #596 - FIX: [kqueue] avoid hangs on FIFOs by skipping special files during recursive walks and rejecting explicit watches on them with
Unsupportederrors #1058 - FIX: [inotify] detect ancestor symlink loops in newly added directories to avoid watching the same tree repeatedly #1065
- FIX: [inotify] report a change in a directory or file that two watches share through a symlink or a hard link under the path of each watch, and watch the new subdirectories of a shared directory for every recursive watch. A rename in a shared directory is reported once for each of those watches, with the same tracker #1072
- FIX: [macOS] return an error and release the callback context if FSEvents stream creation fails #1080
- FIX: [macOS] release the FSEvents stream and its context when spawning the runloop thread fails #1081
- FIX: [macOS] avoid leaking
CFErrorobjects when resolving watch paths #1082 - FIX: [poll] recover a poisoned watch mutex in
watched_paths#1062 - DOCS: clarify kqueue and FSEvents event details, recursive-watch coverage, and kqueue file descriptor limits #1062
notify-debouncer-mini: v0.8.0-rc.1
Immutable
release. Only release title and notes can be modified.
debouncer-mini 0.8.0-rc.1
- CHANGE: update notify to version 9.0.0-rc.8 breaking
- CHANGE:
DebounceEventResultnow returnsDebouncedEventBatch::Events(Vec<DebouncedEvent>)orDebouncedEventBatch::Rescanon success breaking - FIX: forward rescan notifications immediately, with or without paths, so callers can refresh state for all watched paths
- CHANGE: raise MSRV to 1.91
- PERF: reuse the pending-event map with
HashMap::extract_ifinstead of rebuilding it on every debounce tick - CHANGE: add
#[must_use]annotations to debouncer config builder APIs - FEATURE: impl
EventHandlerforfutures::channel::mpsc::UnboundedSenderandtokio::sync::mpsc::UnboundedSenderbehind thefuturesandtokiofeature flags #767
notify-debouncer-full: v0.8.0-rc.3
Immutable
release. Only release title and notes can be modified.
debouncer-full 0.8.0-rc.3 (2026-11-09)
- CHANGE: upgrade
notifyto 9.0.0-rc.8 andnotify-typesto 2.3.0 - CHANGE: raise MSRV from 1.88 to 1.91
- CHANGE: update to edition 2024 #990
- CHANGE: remove the deprecated no-op methods
Debouncer::watcherandDebouncer::cache#1059 breaking - CHANGE:
FileIdCache::add_single_pathis a required method, andFileIdCache::add_pathis a provided method that walks the path and callsadd_single_pathfor each entry; a custom cache only has to cache single paths #1034 breaking - CHANGE:
FileIdCache::rescantakes&[WatchRoot]instead of&[(PathBuf, RecursiveMode)];WatchRootis#[non_exhaustive], providesWatchRoot::new, and requires..when destructuring #1027 #1060 breaking - FEATURE: add the
freebsd_inotifyfeature to enable notify's native inotify backend when cross-compiling for FreeBSD 14.5+ #972 #989 - PERF: park the debouncer thread to avoid idle polling, and only wake it when work arrives while it is idle #933 #1078
- PERF: speed up file ID lookups and registration with a hash map and an index of child paths for subtree removal #1078
- PERF: avoid scanning unrelated event queues and cached file IDs when removing a path #1073
- FIX: for an event on a direct child of a non-recursive watch, cache only that entry and not the entries below it, which the watch does not report #1037
- FIX: pair the source and the destination of a rename below the same root when the watcher reports the rename once for each watch, for example for two watches that reach one directory through a symlink #1054
- FIX: pair the source and the destination of a rename by file ID only when one of them has no tracker, so a later move-in is no longer reported as a rename of a file that an earlier rename moved #1070
- FIX: unwatching a path no longer deregisters roots nested under it, and re-fingerprints the nested roots whose cached IDs the removal dropped #1028
- FIX: if the watcher fails to construct,
new_debouncer_optno longer leaks the debouncer thread or the event handler #1040
notify: v8.2.2
Immutable
release. Only release title and notes can be modified.
notify-types: v2.2.0
Immutable
release. Only release title and notes can be modified.
notify-types 2.2.0 (2026-10-28)
- FEATURE: add
debouncer_mini::DebouncedEventBatchto distinguish path changes from rescan notifications #1032 - FEATURE: re-export
debouncer_full::Instantso consumers can use the same instant type with or without theweb-timefeature #1031 - CHANGE: raise MSRV to 1.88
- CHANGE: update to edition 2024
- CHANGE: add
#[must_use]annotations toEventKindpredicates plusEventandEventAttributesgetter/builder APIs
notify: v9.0.0-rc.7
Immutable
release. Only release title and notes can be modified.
notify 9.0.0-rc.7 (2026-10-28)
- FIX: [inotify] report newly created subdirectories found while extending a recursive watch, including nested directories created before their watches were installed; this recovery covers directories only #727
- FIX: [macOS] preserve pending FSEvents across stream rebuilds when watches are added, removed, or updated in a batch #993
- PERF: [macOS] keep the FSEvents stream running when rewatching an unchanged path, removing a covered watch, or applying a batch with unchanged stream roots #1033
- FIX: [inotify] remove every path of a deleted directory or file that two paths share through a symlink or a hard link, so
watched_pathsno longer lists it #1038 - FIX: [inotify] keep watching a directory below a deleted root that a symlink from outside the root still reaches #1038
- PERF: [inotify] batch
Watcher::update_pathsoperations and skip redundant metadata reads when adding non-recursive watches #1041 - FIX: [Windows] finish stopping a watch before releasing its handles: release the wakeup semaphore before sending
Stop, and close the directory handle and completion semaphore only after the pending read has completed (leaked ifCancelIofails) #1051 - DEPS: upgrade
notify-typesto 2.2.0 #1032 - DOCS: clarify WSL2 notification limitations, watching files replaced by editors, and backend behavior when watched paths are renamed, moved, or deleted #1048 #1053
notify v8.2.1
Immutable
release. Only release title and notes can be modified.
notify 8.2.1 (2026-10-25)
- CHANGE: raise MSRV from 1.77 to 1.85 #719 #723 breaking
- CHANGE: replace
fsevent-syswithobjc2-core-foundationandobjc2-core-serviceson macOS, preserving thefsevent-sysfeature for compatibility #726 - CHANGE: update
windows-systo 0.61 #1045 - FIX: prevent
FsEventWatcherfrom crashing when unwatching an empty path #718 - FIX: clean up deleted paths in
INotifyWatchereven when the kernel has already removed their watch descriptors #720 - FIX: propagate FSEvents stream startup errors from
watch,unwatch, andPathsMut::commit#733 - MISC: expand watcher backend tests and fix flaky polling tests #728 #732 #734
notify: v9.0.0-rc.6
Immutable
release. Only release title and notes can be modified.
notify 9.0.0-rc.6 (2026-10-17)
- FIX: [macOS] prevent intermittent hangs during rapid watch/unwatch sequences with
FsEventWatcher#1013 - FIX: [poll] return an error from
watchwhen the path does not exist instead of failing silently, matching the other backends #998 - FIX: [poll] detect subsecond symlink mtime changes when symlink following is disabled, with or without content comparison #1004
- PERF: [macOS] avoid restarting the FSEvents stream when adding or updating a watch covered by a recursive ancestor on the same volume; document
Watcher::update_pathsfor bulk registration #988 - FIX: [Windows] return
Error::watch_not_foundfromunwatchwhen the path is not watched instead of succeeding silently, matching the other backends #1014 - PERF: [macOS] find an event's watch by hash, not by scanning #1022
- FIX: [kqueue] keep a non-recursive watch non-recursive when a subdirectory is created or removed in it, and watch every new entry in a recursively watched directory, including files removed and recreated in the same batch #1025
- FIX: [kqueue] register watches added before a recursive walk fails, and skip child entries that disappear during the walk #1017
- FIX: [macOS] deliver FSEvents recovery notifications reported at an ancestor of a watched path as rescan events #1021
- FIX: [inotify] never abandon a recursive watch, report what failed instead #970
- FIX: [inotify] report the directories a recursive watch could not walk into, rather than leaving their subtrees silently unwatched #970
- PERF: [inotify, kqueue] avoid scanning all watches for each entry during recursive watch registration while preserving event path representations for nested watches #986
- PERF: [kqueue] watch new directory entries without rewalking the entire watched subtree #1025
notify: v9.0.0-rc.5
Immutable
release. Only release title and notes can be modified.
notify 9.0.0-rc.5 (2026-08-30)
- CHANGE: update to edition 2024
- FEATURE: [FreeBSD] select native inotify automatically when building on FreeBSD 14.5+ and kqueue otherwise. The
freebsd_inotifyfeature enables inotify when cross-compiling for FreeBSD 14.5+. - DEPS: bump
inotifyto 0.11.4 for native FreeBSD support - FEATURE: [macOS] add
Config::with_fsevent_latencyto configure FSEvents stream latency #930 - FIX: [linux] coalesce duplicate inotify cleanup events and handle kernel-removed descriptors without spurious
EINVALorWatchNotFoundlogs - FIX: [windows] emit a Remove event when a watched directory is deleted, matching inotify and FSEvents
- FIX: [windows] surface
ReadDirectoryChangesWread-start failures #935 - FIX: [windows] prevent watch shutdown and watched-directory deletion races from emitting spurious I/O errors #958
- FIX: [windows] emit a rescan event when
ReadDirectoryChangesWdiscards change details [#964] - FEATURE: [windows] report created file/folder kinds when they can be determined #935
- CHANGE: [macOS] improve FSEvents callback performance by avoiding unnecessary allocations and repeated handler locking
- FIX: [macOS] refuse to create FSEvents streams whose combined path count would make macOS close a file descriptor this process owns
- CHANGE: [macOS] pass a single FSEvents stream root for watches nested inside another recursive watch on the same volume; a coalesced watch no longer reports a separate root-changed event when it or one of its ancestors is renamed
- PERF: [kqueue] avoid filesystem walks for recursive kqueue unwatch
- FEATURE: add
Watcher::watch_withto pass per-path settings, andWatchPathConfig::with_dereference_symlinksto watch a symbolic link itself instead of its destination, which also makes a dangling link watchable #255 - FIX: [poll] detect subsecond file mtime changes without content hashing