Native, fast starting Clojure interpreter for scripting
Find a file
Michiel Borkent a54e1831c5 v0.0.2
2019-08-09 18:25:36 +02:00
.circleci initial commit 2019-08-09 15:43:27 +02:00
.clj-kondo initial commit 2019-08-09 15:43:27 +02:00
doc initial commit 2019-08-09 15:43:27 +02:00
resources v0.0.2 2019-08-09 18:25:36 +02:00
script initial commit 2019-08-09 15:43:27 +02:00
src shorter notation for functions and regexes 2019-08-09 18:17:28 +02:00
test/babashka initial commit 2019-08-09 15:43:27 +02:00
.gitignore initial commit 2019-08-09 15:43:27 +02:00
LICENSE initial commit 2019-08-09 15:43:27 +02:00
project.clj initial commit 2019-08-09 15:43:27 +02:00
README.md simplify doc 2019-08-09 18:23:31 +02:00
reflection.json initial commit 2019-08-09 15:43:27 +02:00

babashka

CircleCI Clojars Project cljdoc badge

A pure, fast and (severely!) limited version of Clojure in Clojure for shell scripting.

Properties:

  • pure (no side effects)
  • fast startup time
  • interprets only one form
  • reads from stdin and writes to stdout

Status

Experimental. Not all Clojure core functions are supported yet, but can be easily added. PRs welcome.

Installation

Linux and macOS binaries are provided via brew.

Install:

brew install borkdude/brew/babashka

Upgrade:

brew upgrade babashka

You may also download a binary from Github.

Usage

The first argument to bb is the form to be executed. There is one special variable, *in* which is EDN that is piped from stdin.

If the first argument is --version, then bb will print the version and exit. If the first argument is --raw, then bb will interpret stdin as string input.

Examples:

$ ls | bb --raw '*in*'
["LICENSE" "README.md" "bb" "doc" "pom.xml" "project.clj" "reflection.json" "resources" "script" "src" "target" "test"]

$ ls | bb --raw '(count *in*)'
11

$ echo '[1 1 1 1 2]' | bb '(vec (dedupe *in*))'
[1 2]

$ echo '[{:foo 1} {:bar 2}]' | bb '(filter :foo *in*)'
({:foo 1})

Functions are written using the reader tag #f. Currently up to three arguments are supported.

$ echo '3' | bb '(#f (+ %1 %2 %3) 1 2 *in*)'
6

Regexes are written using the reader tag #r.

$ ls | bb --raw '*in*' | bb '(filterv #f (re-find #r "reflection" %) *in*)'
["reflection.json"]

Test

Test the JVM version:

script/test

Test the native version:

BABASHKA_TEST_ENV=native script/test

Build

You will need leiningen and GraalVM.

script/compile

License

Copyright © 2019 Michiel Borkent

Distributed under the EPL License, same as Clojure. See LICENSE.