DEV Community

Omar
Omar

Posted on

I built a TOML-based task runner in Rust

Every project I work on has the same problem. There's always a set of commands I run in the same order every time, setting up dependencies, building, running checks. I got tired of either remembering them or keeping a random notes file.

Makefiles work but feel wrong outside of C projects. npm scripts are JavaScript-only. just is great but it's another syntax to learn on top of everything else.

So I built xeq.

demo

You define named scripts in a xeq.toml file and run them with one command:

[check]
run = [
    "cargo fmt --check",
    "cargo clippy -- -D warnings",
    "cargo test"
]

[build]
run = [
    "xeq:check",
    "cargo build --release"
]
Enter fullscreen mode Exit fullscreen mode
xeq run build
Enter fullscreen mode Exit fullscreen mode

That's it. No new syntax, just TOML that any project already understands.

It supports variables with fallback values, positional and named arguments, environment variables, nested script calls, parallel execution with thread control, and on_success/on_error event hooks.

The feature I'm most happy with is xeq validate, it catches undefined variables, missing nested scripts, circular dependencies, and parallel conflicts before you run anything.

There are also 30+ init templates so you can get started instantly:

xeq init rust
xeq init docker
xeq init nextjs
Enter fullscreen mode Exit fullscreen mode

It works on Linux, macOS, and Windows.

Still early but functional. Would love feedback❤️

Top comments (0)