#wasm #cli


A customizable helper to watch for changes in your projects using xtask

4 releases

0.1.6 Dec 5, 2022
0.1.5 Oct 25, 2022
0.1.3 Aug 20, 2022
0.1.1 Feb 14, 2022

#213 in Development tools

Download history 72/week @ 2022-12-09 61/week @ 2022-12-16 50/week @ 2022-12-23 32/week @ 2022-12-30 116/week @ 2023-01-06 107/week @ 2023-01-13 47/week @ 2023-01-20 127/week @ 2023-01-27 84/week @ 2023-02-03 62/week @ 2023-02-10 123/week @ 2023-02-17 120/week @ 2023-02-24 164/week @ 2023-03-03 52/week @ 2023-03-10 55/week @ 2023-03-17 21/week @ 2023-03-24

302 downloads per month
Used in 2 crates (via xtask-wasm)


238 lines


actions status crate version documentation dependencies status licenses

This crate provides a Watch that launch a given command, re-launching the command when changes are detected in your source code.

This Watch struct is intended to be used with the xtask concept and implements clap::Parser so it can easily be used in your xtask crate. See clap's flatten to see how to extend it.


The best way to add xtask-watch to your project is to create a workspace with two packages: your project's package and the xtask package.

Create a project using xtask

  • Create a new directory that will contains the two package of your project and the workspace's Cargo.toml

    mkdir my-project
    cd my-project
    touch Cargo.toml
  • Create the project package and the xtask package using cargo new:

    cargo new my-project
    cargo new xtask
  • Open the workspace's Cargo.toml and add the following:

    members = [
  • Create a .cargo/config.toml file and add the following content:

    xtask = "run --package xtask --"

The directory layout should look like this:

├── .cargo
   └── config.toml
├── Cargo.toml
├── my-project
   ├── Cargo.toml
   └── src
       └── ...
└── xtask
    ├── Cargo.toml
    └── src
        └── main.rs

And now you can run your xtask package using:

cargo xtask

You can find more informations about xtask here.

Use xtask-watch as a dependency

Finally, add the following to the xtask package's Cargo.toml:

xtask-watch = "0.1.0"


A basic implementation

use std::process::Command;
use xtask_watch::{

enum Opt {

fn main() -> Result<()> {
    let opt: Opt = clap::Parser::parse();

    let mut run_command = Command::new("cargo");

    match opt {
        Opt::Watch(watch) => {
            log::info!("Starting to watch `cargo check`");


A more complex demonstration

examples/demo provides an implementation of xtask-watch that naively parse a command given by the user (or use cargo check by default) and watch the workspace after launching this command.


When using the re-export of clap, you might encounter this error:

error[E0433]: failed to resolve: use of undeclared crate or module `clap`
 --> xtask/src/main.rs:4:10
4 | #[derive(Parser)]
  |          ^^^^^^ use of undeclared crate or module `clap`
  = note: this error originates in the derive macro `Parser` (in Nightly builds, run with -Z macro-backtrace for more info)

This occurs because you need to import clap in the scope too. This error can be resolved like this:

use xtask_wasm::clap;


Or like this:

use xtask_wasm::{clap, clap::Parser};



~130K SLoC