perf: use fsevents on macOS for file watching#7596
Conversation
How to use the Graphite Merge QueueAdd the label graphite: merge to this PR to add it to the merge queue. You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
|
Hmm, it seems |
d885312 to
a4d03fc
Compare
338e84b to
d140e49
Compare
a4d03fc to
5290eb8
Compare
d140e49 to
f12b860
Compare
5290eb8 to
9fc475c
Compare
✅ Deploy Preview for rolldown-rs canceled.
|
9fc475c to
0daa03e
Compare
There was a problem hiding this comment.
Pull request overview
This PR switches from using kqueue to fsevents for file watching on macOS, improving performance for large projects through native recursive watch support. Additionally, it adds deduplication of file paths when processing watch events, since the same file can have multiple change types (create, update, delete) that need to be consolidated before rebuilding.
Key changes:
- Removes explicit
macos_kqueuefeature flags from notify dependencies in Cargo.toml, allowing the default fsevents backend on macOS - Adds
.unique()call to deduplicate file paths when multiple change events (different kinds) occur for the same file - Imports
itertools::Itertoolsto support the.unique()method
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| Cargo.toml | Removes macos_kqueue feature overrides from rolldown-notify dependencies, enabling fsevents as the default backend on macOS |
| crates/rolldown/src/watch/watcher.rs | Adds itertools import and .unique() call to deduplicate file paths when processing watch changes |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Benchmarks Rust |
Merge activity
|
Now that I implemented some improvements (rolldown/notify#59, rolldown/notify#60), it doesn't error on large projects. kqueue doesn't have a way to watch recursively, so it's faster to use fsevent which supports recursive watches.
03eb9ab to
370d760
Compare
## [1.0.0-beta.57] - 2025-12-24 ✨ TypeScript Project References Support - Rolldown now supports TypeScript project references when manually specifying a `tsconfig` - See more details: https://rolldown.rs/options/tsconfig 💥 Rename `__export` to `__exportAll` - Update `rolldown-plugin-dts` to the latest version for compatibility ### 💥 BREAKING CHANGES - tsconfig: enable project references support in manual mode (#7545) by @shulaoda ### 🚀 Features - add `CANNOT_CALL_NAMESPACE` warning (#7636) by @sapphi-red - add import path for unresolved import diagnostics (#7625) by @sapphi-red - optimize dynamic entry facade chunks by merging with common chunks when they are captured by common chunks (#7486) by @IWANABETHATGUY ### 🐛 Bug Fixes - rename `__export` to `__exportAll` to be compatible with `cjs-module-lexer` (#7640) by @IWANABETHATGUY - strip UTF-8 BOM when using text loader (#7635) by @sapphi-red - rolldown_plugin_replace: avoid crashing with invalid delimiters (#7621) by @sapphi-red ### 🚜 Refactor - export all filter functions (#7622) by @sxzz - allow multiple help messages in diagnostics (#7624) by @sapphi-red ### 📚 Documentation - add README.md to packages/rolldown (#7556) by @Copilot ### ⚡ Performance - use fsevents on macOS for file watching (#7596) by @sapphi-red ### 🧪 Testing - handle re-exports of external modules in CJS format (#7641) by @IWANABETHATGUY - update integration to use vite's rolldown-canary branch (#7633) by @shulaoda ### ⚙️ Miscellaneous Tasks - docs: fix Netlify ignore condition to detect docs changes across all PR commits (#7637) by @Copilot - deps: update rollup submodule for tests to v4.54.0 (#7630) by @sapphi-red - skip benchmarks for PRs with 'graphite: merge-when-ready' label (#7631) by @Boshen - deps: update esbuild for tests to 0.27.2 (#7629) by @sapphi-red - fix "update-test-dependencies" workflow (#7628) by @sapphi-red - deps: update test262 submodule for tests (#7626) by @sapphi-red - deps: update dependency oxlint to v1.35.0 (#7623) by @renovate[bot] Co-authored-by: shulaoda <[email protected]>

Now that I implemented some improvements (rolldown/notify#59, rolldown/notify#60), it doesn't error on large projects. kqueue doesn't have a way to watch recursively, so it's faster to use fsevent which supports recursive watches.