- v8.0.1Latest
- v8.0.0
- v7.0.0
- v6.11.0
- v6.10.0
- v6.9.1
- v6.9.0
- v6.8.0
- v6.7.1
- v6.7.0
- v6.6.0
- v6.5.0
- v6.4.0
- v6.3.6
- v6.3.5
- v6.3.4
- v6.3.3-next.1
- v6.3.3
- v6.3.2
- v6.3.2-next.1
- v6.3.1
- v6.3.0
- v6.3.0-next.3
- v6.3.0-next.2
- v6.3.0-next.1
- v6.2.2
- v6.2.2-next.1
- v6.2.1
- v6.2.0
- v6.1.1
- v6.1.0
- v6.0.0
- v5.0.0
- v4.1.1
- v4.1.0
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- v3.0.1
- v3.0.0
- v2.0.1
- v2.0.0
- v1.3.0
- v1.2.1
- v1.2.0
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.0
rad 💯
A general purpose build tool.
- Concise, statically typed, batteries included.
- No DSL, no stringly typed tasks, no malarkey.
- Command tasks, function tasks, and
make
-like tasks supported.
Jump to:
branch | status |
---|---|
main | |
next |
Usage
Rad is generally used as a CLI:
$ rad <task-name> [--help]
For example, $ rad build
or $ rad --log-level=info test
!
It can be used as a library too :).
Rad always consumes a rad.ts
file, such as the one shown here:
// rad.ts
import { Task, Tasks } from "https://deno.land/x/rad@v7.0.0/src/mod.ts";
// command/shell tasks
const format = `prettier --write`;
const test = `deno test`;
// function tasks
const compile: Task = {
dependsOn: [format],
fn: ({ sh, ...toolkit }) => sh("tsc"),
};
const greet = {
fn: () => Deno.writeTextFile("/tmp/hello", "world"),
};
// make-style tasks
const transpile: Task = {
target: "phony",
prereqs: ["prereq1", "prereq2"],
async onMake({ logger }, { changedPrereqs /*, prereqs */ }) {
for await (const req of changedPrereqs) {
logger.info(`req: ${req.path} ${req.isFile}`);
}
},
};
export const tasks: Tasks = {
compile,
format,
greet,
test,
};
Install
There are a few formal ways to use rad
. Regardless of the route you choose,
know that all strategies support using pinned versions, adherent to semver. See
the releases page.
usage | install-method | install-steps |
---|---|---|
cli | deno |
deno install --global -f -A -n rad https://raw.githubusercontent.com/cdaringe/rad/v7.0.0/src/bin.ts |
cli | docker |
docker pull cdaringe/rad 1 |
cli | curl |
curl -fsSL https://raw.githubusercontent.com/cdaringe/rad/v7.0.0/assets/install.sh | sh (versioned)curl -fsSL https://raw.githubusercontent.com/cdaringe/rad/main/assets/install.sh | sh (latest) |
library | deno |
import * as rad from https://github.com/cdaringe/rad/blob/main/v7.0.0/mod.ts |
1For docker users, consider making a nice shell alias
# shell profile, e.g. .bash_profile
function rad() {
docker run --rm -v $PWD:/rad cdaringe/rad --log-level info "$@";
}
What is it
A build tool! It competes with make, npm-scripts, velociraptor, bazel, gradle,
ant, gulp, or any of the other many tools out there! On various metrics, rad
is subjectively better than some of the outstanding tools out there, and in some
cases, not-so-much. We invite you to understand some of its core characteristics
and interfaces.
rad
offers:
- simple, programmable task interfaces
- easy to understand, declarative build steps
- type-checked tasks
- no quirky DSLs (
make
,gradle
, and friends 😢). your build is code, not an arbitrary language or stringly (read: bummerly) typed script runner. - productive toolkit API for nuanced tasks that benefit from programming. see toolkit
- bottom-up,
make
-style build targets- fast builds, skip redundant work when inputs haven’t changed
- cli mode, or library mode
- portability. build automation for any language or project, in many
environments (*limited to Deno target architectures, for the time being.
long term, we may package this in
Rust
) - great UX
- debug-ability. 🐛 inspect your data, tasks, or even rad itself
- employs a real scripting language–not
bash/sh
! shell languages are great for running other programs, not for plumbing data
See
why not <my-favorite-build-tool>
?
Read more on our documentation site