finds.dev← search

// the find

egoist/maid

★ 2,031 · JavaScript · MIT · updated Jun 2022

Markdown driven task runner.

A CLI task runner where tasks are defined as h2 sections in a Markdown file instead of a JS/YAML config, so the same file that documents your build steps is the file that runs them. Fits small JS projects that want a lightweight Makefile replacement with mixed bash/js/python steps and don't need a real dependency graph.

Using Markdown as the task format is a genuinely good idea — the README-as-config trick means `maid help` output and the docs never drift apart, and code blocks per language (bash, js, py) let a task shell out or run inline JS without a separate script file. Async JS tasks work by just exporting a Promise-returning function, which is a clean way to hook into Node APIs directly instead of spawning a subprocess. Support for pre/post hooks (`prebuild`/`postbuild`) mirrors npm scripts, so anyone coming from package.json scripts will find the mental model familiar.

Last push was 2022-06-26 — four years stale, no activity, and the js/py task runners shell out to whatever `node`/`python` is on PATH with no version pinning, so it'll quietly break as those toolchains move on. The before/after/parallel task ordering is driven by parsing natural-language sentences like "Run task `x` after this" out of paragraph text — there's no formal grammar, so a slightly different phrasing in your maidfile silently fails to trigger the dependency instead of erroring. Test coverage is a single snapshot test on the markdown parser; there's nothing testing the actual task execution, hook ordering, or the CLI argument passthrough (`${@:1}`) that several examples rely on. No TypeScript types and no mention of Windows support anywhere in the docs, despite bash-specific arg syntax throughout.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →