werk is a simplistic and opinionated command runner, similar to just, and
also a simplistic build system, similar to make.
You Betta Werk! 💅
Caution
Werk is early alpha software. Use at your own risk. It may eat your
files, so run git commit before trying it out.
GNU make is extremely useful, but very hard to use correctly, especially if you have modern expectations of your build system, and you just want a convenient way to execute build scripts, create asset packs, or run housekeeping tasks in your project.
just is also extremely useful, and easy to use, but cannot build files. It can
only run commands, delegating to make, cargo, or other build systems to
actually produce output. Furthermore, it can be difficult to write
cross-platform Justfiles, usually relying on a platform-specific shell
availability.
For mode details, consult the the book.
werk can currently only be installed from source, which requires that you have
Rust and Cargo installed.
- Clone this repository.
- Run
cargo install --path werk-cli. - Ensure that your
$PATHcontains the path to Cargo binaries. This is usually the case if you have a working installation of Rust and Cargo.- Cargo installs binaries in
$CARGO_HOME/bin. - On UNIX-like systems, the default install location is
$HOME/.cargo/bin. - On Windows, the default install location is
%USERPROFILE%\.cargo\bin.
- Cargo installs binaries in
- Clone this repository.
- Install the extension from
werk-vscode:- From the command-line:
code --install-extension <path-to-werk-vscode> - From within VS Code: Run "Developer: Install Extension from Location..." and
point it to the path to the
werk-vscodedirectory within this repository.
- From the command-line:
- Clone this repository
- Install the extension from
zed-werk:- From within Zed: Run "zed: install dev extension" and
point it to the path to the
zed-werkdirectory within this repository.
- From within Zed: Run "zed: install dev extension" and
point it to the path to the
werkwill probably never be fastest.- User friendliness is always higher priority.
- Reporting "no changes" quickly is specifically not a goal. Use Ninja if
this is important to you. Typically,
werkis invoked when the user has actually made changes. - That said,
werkdoes try to be reasonably fast, and is implemented in Rust using best practices.
werkwill probably never support all use cases.- It is designed to support the use cases that are important to me, the author.
- The needs of build systems are vast and varied. Use the one that fits
your purposes, or file a feature request if you believe that
werkwould be greater if it could reasonably support it.
werkwill never be a scripting language. It is strictly declarative with minimal support for logic and expressions, but doesn't have (and won't have) loop constructs.
See Examples.
- IDE integration to run individual tasks.
- WASM host support.
Werk is designed and written by humans, with very limited use of LLMs.
- Design and implementation of all major components is done by humans.
- LLMs have been used at the "auto-complete" level within the main components, and all LLM output has been carefully reviewed.
- LLMs have been used to give feedback about and review certain aspects of the code. Humans have verified and reacted to the feedback.
- Certain minor components have been developed by LLMs, especially around terminal output formatting.
- The Zed extension and tree-sitter parser has been fully authored by Claude Opus 4.7 based on Werk's native parser, and carefully reviewed before being published.
If any piece of this project violates the copyright of any author through the use of LLMs and their unattributed training data, such violation is unintentional and will be fixed as soon as possible, either through attribution or removal of the offending code. Please don't hesitate to report any such violations.