vl

Shell scripting with TypeScript. Runs on top of Deno.

vl started as a port of zx to deno. The main motivation for this package was the lack of typescript support in zx. That’s where I got the idea to use deno, since it supports TypeScript natively.

Bash is great, but when it comes to writing scripts, it has it’s limitations and people tend to go for more expressive programming languages. JavaScript/TypeScript is a great choice, since they are approachable by a huge number of developers. The vl package provides provides wrappers around child_process, and a number of other things for all your shell scripting needs. Since vl uses deno, it has access to both the rich standard library of deno, and the battle tested standard libraries of node through it’s node compatibility.

#!/usr/bin/env vl

import "../globals.d.ts";

const { create, mkdir } = Deno;

await Promise.all([
  $`sleep 1; echo 1`,
  <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal"></mi><mi>s</mi><mi>l</mi><mi>e</mi><mi>e</mi><mi>p</mi><mn>2</mn><mo separator="true">;</mo><mi>e</mi><mi>c</mi><mi>h</mi><mi>o</mi></mrow><annotation encoding="application/x-tex">`sleep 2; echo </annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.8889em;vertical-align:-0.1944em;"></span><span class="mord">‘</span><span class="mord mathnormal">s</span><span class="mord mathnormal" style="margin-right:0.01968em;">l</span><span class="mord mathnormal">ee</span><span class="mord mathnormal">p</span><span class="mord">2</span><span class="mpunct">;</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal">ec</span><span class="mord mathnormal">h</span><span class="mord mathnormal">o</span></span></span></span>{2}`,
  $`sleep 3; echo 3`,
]);

await fetch("https://google.com");

await mkdir("tests");
await create("tests/test.txt");

cd("tests");
await $`ls`;
cd("..");

// clean up
await $`rm -rf tests`;

Pipelines

await $`echo "Hello, stdout!"`
  .pipe(fs.createWriteStream("/tmp/output.txt", {}));

await $`cat /tmp/output.txt`;

Install

Prerequisites

  • deno
deno install --allow-all -f https://deno.land/x/violet@<version_number>/vl.ts