Skip to content

vpx: watch reports for vpx --watch, and vpx watch on oxc-node's watcher #3141

Open

Description

@fengmk2

Follow-up to #2936. vpx --watch is Node.js watch mode with the script loader. It restarts when an imported file changes, but not in two common cases, which tsx watch misses as well:

  • A tsconfig edit, such as a new paths mapping.
  • A file an import is waiting for, created after the first run (import "./later.js", then later.ts is added).

It also has none of tsx watch's options: include and exclude globs, clearing the screen, rerunning on Enter, a kill timeout, or polling for Docker, WSL, and network drives.

oxc-node added both pieces in oxc-project/oxc-node#861, which #2936 syncs (ce22828):

  1. Dependency reports. With enable_watch_report on, the binding records the tsconfig files it reads and the paths a failed resolve looked for. @oxc-node/core's loader sends them as { "watch:import": [url] } over IPC, the message Node.js's own watcher already reads, so node --watch restarts on them.
  2. oxnode watch. A tsx-style watcher, about 2,500 lines of TypeScript on Node.js built-ins.

Plan

  1. Reports for vpx --watch. Forward enable_watch_report and take_watch_dependencies in packages/cli/binding/src/oxc_node.rs. Port the relay into vpx's loader: the preload reports on the in-thread path, and the off-thread hooks send through a channel to the main thread. It is on only when WATCH_REPORT_DEPENDENCIES is set. vpx --watch then restarts on tsconfig edits and created files, with no new process.
  2. Signal ack. Port the child's side of OXNODE_SIGNAL_ACK into the preload, so the watcher does not deliver Ctrl+C twice when it runs in a pipe or the background.
  3. vpx watch. Run oxc-node's watcher, bundled from the vendored source, once Expose the oxnode watch watcher as an entry an embedder can run with its own loader oxc-project/oxc-node#871 gives it an entry that takes vpx's loader and name.
    • Both CLIs route vpx watch <script>: the global vpx execs Node.js with the bundled watcher, and the local bin calls it in process.
    • Add docs and snapshots, and a vp migrate rule that rewrites tsx watch to vpx watch.

Notes

Activity

  1. self-assigned this
    on Oct 20, 2026
  2. added theissue type on Oct 20, 2026
  3. added a commit that references this issue on Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Fields

Priority

None yet

Effort

None yet

Target date

None yet

Start date

None yet

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions