zellij-org/zellij · warning
!!! cargo make has been deprecated by zellij !!! Our build
Error message
!!! cargo make has been deprecated by zellij !!! Our build system is now `cargo xtask`. Don't worry, you won't have to install anything! - To get an overview of the new build tasks, run `cargo xtask --help` - Quick compatibility table: | cargo make task | cargo xtask equivalent | | ------------------------------- | ----------------------------- | | make | xtask | | make format | xtask format | | make build | xtask build | | make test | xtask test | | make run | xtask run | | make run -l strider | xtask run -- -l strider | | make install /path/to/binary | xtask install /path/to/binary | | make publish | xtask publish | In order to disable xtask during the transitioning period: Delete/comment the `[alias]` section in `.cargo/config.toml` and use `cargo make` as before. If you're unhappy with `xtask` and decide to disable it, please tell us why so we can discuss this before making it final for the next release. Thank you!
What it means
Not a failure but a migration notice: zellij replaced cargo-make with cargo xtask, and the deprecated entry point (XtaskCmd::Deprecated, reached via the old `cargo make` alias routing) deliberately returns an error containing a task-mapping table so old scripts stop working and get translated.
Source
Thrown at xtask/src/main.rs:179
match env::var_os("CARGO_TARGET_DIR") {
Some(dir) => PathBuf::from(dir),
None => crate::project_root().join("target"),
}
}
pub fn cargo() -> anyhow::Result<PathBuf> {
std::env::var_os("CARGO")
.map_or_else(|| which::which("cargo"), |exe| Ok(PathBuf::from(exe)))
.context("Couldn't find 'cargo' executable")
}
// Set terminal title to 'msg'
pub fn status(msg: &str) {
eprint!("\u{1b}]0;{}\u{07}", msg);
}
fn deprecation_notice() -> anyhow::Result<()> {
Err(anyhow::anyhow!(
" !!! cargo make has been deprecated by zellij !!!
Our build system is now `cargo xtask`. Don't worry, you won't have to install
anything!
- To get an overview of the new build tasks, run `cargo xtask --help`
- Quick compatibility table:
| cargo make task | cargo xtask equivalent |
| ------------------------------- | ----------------------------- |
| make | xtask |
| make format | xtask format |
| make build | xtask build |
| make test | xtask test |
| make run | xtask run |
| make run -l strider | xtask run -- -l strider |
| make install /path/to/binary | xtask install /path/to/binary |
| make publish | xtask publish |View on GitHub (pinned to 98a0837077)
Solutions
- Translate the command using the printed table (make build -> `cargo xtask build`, make run -l strider -> `cargo xtask run -- -l strider`, etc.)
- Run `cargo xtask --help` to see all available tasks
- Update CI pipelines, docs and aliases to the xtask equivalents
- To keep cargo make during a transition, comment out the [alias] section in .cargo/config.toml as the notice instructs
Example fix
# before cargo make build # -> error: cargo make has been deprecated # after cargo xtask build
Defensive patterns
Strategy: fallback
Validate before calling
# translate legacy cargo make calls before they hit xtask
translate() {
case "$1 $2" in
'make build') echo 'xtask build';;
'make test') echo 'xtask test';;
'make run') echo 'xtask run';;
*) echo "xtask${2:+ $2}";;
esac
} Type guard
fn translate_make(args: &[String]) -> Option<Vec<String>> {
let task = args.first()?;
let mapped = match task.as_str() {
"build" => "build", "test" => "test", "format" => "format",
"run" => "run", "publish" => "publish", _ => return None,
};
Some(std::iter::once(mapped.to_string()).chain(args[1..].iter().cloned()).collect())
} Try / catch
let out = Command::new("cargo").arg("make").output()?;
if !out.status.success() && String::from_utf8_lossy(&out.stderr).contains("cargo make has been deprecated") {
// fall back to the xtask equivalent parsed from the printed table
run!("cargo xtask {task}")?;
} Prevention
- Migrate scripts and CI off cargo make when updating zellij; the mapping table is in the error text
- Keep a small translate wrapper for muscle-memory commands during the transition
- Delete the [alias] section only if you must stay on cargo make; otherwise update everything to xtask
When it happens
Trigger: Invoking a deprecated command, e.g. `cargo make build` routed through xtask's compatibility alias, or `cargo xtask <deprecated-subcommand>`.
Common situations: CI pipelines, Makefile-adjacent scripts, or muscle memory still calling cargo make after updating to a newer zellij checkout.
Related errors
- either '--build' or '--test' must be provided!
- flags '--build' and '--test' are mutually exclusive!
- flag '--no-push' can only be used with '--cargo-registry'
- Swap Layout not found for: {}
AI-assisted analysis of zellij-org/zellij@98a0837077 (2026-08-16).
Data as JSON: /api/errors/55aa40aff9cae582.
Report an issue: GitHub.