unstale

pypi / watchdog

watchdog

What changed in watchdog 6 to 7, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-05.

19 breaking3 deprecations11 new APIs and options1 performance5 behavior and defaults12 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.2.11 on npm

watchdog 738 changes

Breaking changes 11

  • Replaces the deprecated DelayedQueue.delay_sec attribute.

    7.0.0release notes

  • Adds an event for directory metadata modifications, separate from content modifications; these events no longer trigger on_modified().

    7.0.0release notes

  • EventDispatcher rejects bool values for timeout instead of treating True as one second.

    7.0.0release notes

  • EventEmitter rejects bool values for timeout instead of treating True as one second.

    7.0.0release notes

  • Adds an event for file metadata modifications, separate from content modifications; these events no longer trigger on_modified().

    7.0.0release notes

  • Registration errors for a requested root path are no longer suppressed; a missing root raises FileNotFoundError.

    7.0.0release notes

  • Implement on_attrib() to handle file and directory metadata modification events.

    7.0.0release notes

  • Pattern matching now uses full-match semantics; users must update patterns to glob-like syntax, such as changing *.py to **/*.py.

    7.0.0release notes

  • Adds ignore_policy to configure multi-path event filtering for moves and renames; matching is now strict by default.

    7.0.0release notes

  • The default changes from "*" to "**" to match absolute paths at any depth under full_match() semantics.

    7.0.0release notes

  • Support for Python 3.9 and 3.10 is dropped.

    7.0.0release notes

Deprecations 3

  • Replaces the deprecated debounce_interval_seconds argument and attribute of EventDebouncer and AutoRestartTrick.

    7.0.0release notes

  • The EventDebouncer and AutoRestartTrick argument and attribute are deprecated in favor of debounce_interval; the old names still work with a DeprecationWarning.

    7.0.0release notes

  • The attribute is deprecated in favor of delay; the old name still works with a DeprecationWarning.

    7.0.0release notes

New APIs and options 9

  • The inotify and fsevents backends support the follow_symlink keyword argument.

    7.0.0release notes

  • FSEventsEmitter and FSEventsObserver accept a latency keyword argument; raising it coalesces duplicate events.

    7.0.0release notes

  • Returns the total number of changes in a DirectorySnapshotDiff.

    7.0.0release notes

  • ObservedWatch supports the follow_symlink keyword argument.

    7.0.0release notes

  • Observer supports use as a context manager for automatic start and stop management.

    7.0.0release notes

  • watchmedo can now be run with python -m watchdog.

    7.0.0release notes

  • Adds ignore_policy to configure multi-path event filtering for moves and renames.

    7.0.0release notes

  • ShellCommandTrick and watchmedo shell-command allow configuring shell_executable and cwd.

    7.0.0release notes

  • Adds a time-duration type alias; duration parameters previously hinted as int now accept float.

    7.0.0release notes

Behavior and default changes 4

  • With ignore_device=True, moved files and directories are detected when the device ID changes between snapshots.

    7.0.0release notes

  • Supports inotify on FreeBSD 15 and newer.

    7.0.0release notes

  • The path annotation reflects pathlib.Path support, and watches can now be scheduled on individual files.

    7.0.0release notes

  • File system events are now shown by default.

    7.0.0release notes

Fixes and other changes 11

  • Watches directories moved in from outside a recursively watched directory so changes inside them are reported.

    7.1.0release notes

  • Creates the inotify instance lazily, allowing observer and polling imports to succeed when the instance limit is reached.

    7.1.0release notes

  • Reconciles recursive watches after a queue overflow so subsequent filesystem changes are observed.

    7.1.0release notes

  • Prevents a KeyError from killing the inotify thread when a directory tree is copied or extracted into a recursively watched directory.

    7.1.0release notes

  • BaseObserver now uses on_thread_start() instead of overriding start(), aligning it with BaseThread.

    7.1.0release notes

  • Fixes building the fsevents extension on PyPy by updating the bundled compatibility header.

    7.1.0release notes

  • Reconciles recursively watched directories renamed before their source watch was registered and reports initial changes in existing descendants.

    7.1.0release notes

  • Generates YAML that watchmedo tricks can load, with trick options nested under the trick name rather than unsupported args/kwargs keys.

    7.1.0release notes

  • case_sensitive=False matching now ignores case on Python versions below 3.13.

    7.0.0release notes

  • Transient polling OSErrors are logged and retried instead of emitting a directory deletion event and stopping the emitter.

    7.0.0release notes

  • Adds support for Python 3.15.

    7.0.0release notes

watchdog 613 changes

Breaking changes 8

  • Removed the unused function from the echo module.

    6.0.0release notes

  • Removed the unused function from the echo module.

    6.0.0release notes

  • Removed the unused function from the echo module.

    6.0.0release notes

  • Removed the unused function from the echo module.

    6.0.0release notes

  • Removed the unused function from the echo module.

    6.0.0release notes

  • Removed the unused function from the echo module.

    6.0.0release notes

  • Removed the unused function from the echo module.

    6.0.0release notes

  • Removed the --trace CLI argument because events are logged by default at the LoggerTrick class level.

    6.0.0release notes

New APIs and options 2

  • Added the __repr__() method to the HelpFormatter class.

    6.0.0release notes

  • Added the __repr__() method to the Trick class.

    6.0.0release notes

Performance 1

  • Uses select.poll() instead of deprecated select.select(), if available.

    6.0.0release notes

Behavior and default changes 1

  • The stop_signal keyword argument can now be either a signal.Signals or an int.

    6.0.0release notes

Fixes and other changes 1

  • Fixed reading the inotify file descriptor after closing it.

    6.0.0release notes