11 KiB
Libraries and projects
The following libraries and projects are known to work with babashka.
Table of contents:
Libraries
clj-http-lite
A fork of a fork of clj-http-lite. Example:
$ export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {clj-http-lite {:git/url "https://github.com/babashka/clj-http-lite" :sha "f44ebe45446f0f44f2b73761d102af3da6d0a13e"}}}' -Spath)"
$ bb "(require '[clj-http.lite.client :as client]) (:status (client/get \"https://www.clojure.org\"))"
200
spartan.spec
An babashka-compatible implementation of clojure.spec.alpha.
missing.test.assertions
This library checks if no assertions have been made in a test:
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {borkdude/missing.test.assertions {:git/url "https://github.com/borkdude/missing.test.assertions" :sha "603cb01bee72fb17addacc53c34c85612684ad70"}}}')
$ lein bb "(require '[missing.test.assertions] '[clojure.test :as t]) (t/deftest foo) (t/run-tests)"
Testing user
WARNING: no assertions made in test foo
Ran 1 tests containing 0 assertions.
0 failures, 0 errors.
{:test 1, :pass 0, :fail 0, :error 0, :type :summary}
medley
Requires bb >= v0.0.71. Latest coordinates checked with with bb:
{:git/url "https://github.com/weavejester/medley" :sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}
Example:
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {medley {:git/url "https://github.com/weavejester/medley" :sha "a4e5fb5383f5c0d83cb2d005181a35b76d8a136d"}}}')
$ bb -e "(require '[medley.core :as m]) (m/index-by :id [{:id 1} {:id 2}])"
{1 {:id 1}, 2 {:id 2}}
limit-break
A debug REPL library.
Latest coordinates checked with with bb:
{:git/url "https://github.com/technomancy/limit-break" :sha "050fcfa0ea29fe3340927533a6fa6fffe23bfc2f" :deps/manifest :deps}
Example:
$ export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {limit-break {:git/url "https://github.com/technomancy/limit-break" :sha "050fcfa0ea29fe3340927533a6fa6fffe23bfc2f" :deps/manifest :deps}}}' -Spath)"
$ bb "(require '[limit.break :as lb]) (let [x 1] (lb/break))"
Babashka v0.0.49 REPL.
Use :repl/quit or :repl/exit to quit the REPL.
Clojure rocks, Bash reaches.
break> x
1
clojure-csv
A library for reading and writing CSV files. Note that babashka already comes
with clojure.data.csv, but in case you need this other library, this is how
you can use it:
export BABASHKA_CLASSPATH="$(clojure -Sdeps '{:deps {clojure-csv {:mvn/version "RELEASE"}}}' -Spath)"
./bb -e "
(require '[clojure-csv.core :as csv])
(csv/write-csv (csv/parse-csv \"a,b,c\n1,2,3\"))
"
regal
Requires bb >= v0.0.71. Latest coordinates checked with with bb:
{:git/url "https://github.com/lambdaisland/regal" :sha "d4e25e186f7b9705ebb3df6b21c90714d278efb7"}
Example:
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {regal {:git/url "https://github.com/lambdaisland/regal" :sha "d4e25e186f7b9705ebb3df6b21c90714d278efb7"}}}')
$ bb -e "(require '[lambdaisland.regal :as regal]) (regal/regex [:* \"ab\"])"
#"(?:\Qab\E)*"
cprop
A clojure configuration libary. Latest test version: "0.1.16".
comb
Simple templating system for Clojure. Latest tested version: "0.1.1".
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {comb {:mvn/version "0.1.1"}}}')
$ rlwrap bb
...
user=> (require '[comb.template :as template])
user=> (template/eval "<% (dotimes [x 3] %>foo<% ) %>")
"foofoofoo"
user=> (template/eval "Hello <%= name %>" {:name "Alice"})
"Hello Alice"
user=> (def hello (template/fn [name] "Hello <%= name %>"))
user=> (hello "Alice")
"Hello Alice"
nubank/docopt
Docopt implementation in Clojure, compatible with babashka.
arrangement
A micro-library which provides a total-ordering comparator for Clojure
values. Tested with version 1.2.0.
clojure.math.combinatorics
$ bb --classpath "$(clojure -Spath -Sdeps '{:deps {org.clojure/math.combinatorics {:mvn/version "0.1.6"}}}')" \
-e "(use 'clojure.math.combinatorics) (permutations [:a :b])"
((:a :b) (:b :a))
testdoc
Yet another doctest implementation in Clojure.
$ export BABASHKA_CLASSPATH=$(clojure -Sdeps '{:deps {testdoc {:mvn/version "1.2.0"}}}' -Spath)
$ bb '(ns foo (:use clojure.test testdoc.core))
(defn foo "
=> (foo)
:foox"
[] :foo)
(deftest footest
(is (testdoc (var foo))))
(test-var (var footest))'
FAIL in (footest) (:1)
(= (foo) :foox)
expected: :foox
actual: :foo
doric
Library for printing tables.
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {doric {:mvn/version "0.9.0"}}}')
$ bb "(use 'doric.core) (println (table [:a :b :c] [{:a 1 :b 2 :c 3} {:a 4 :b 5 :c 6}]))"
|---+---+---|
| A | B | C |
|---+---+---|
| 1 | 2 | 3 |
| 4 | 5 | 6 |
|---+---+---|
clojure.data.zip
Utilities for clojure.zip, among other things a more fluent way to work with xml.
Small sample:
$ export BABASHKA_CLASSPATH=$(clojure -Spath -Sdeps '{:deps {org.clojure/data.zip {:mvn/version "1.0.0"}}}')
$ cat data_zip_xml.clj
(require '[clojure.data.xml :as xml])
(require '[clojure.zip :as zip])
(require '[clojure.data.zip.xml :refer [text attr attr= xml-> xml1-> text=]])
(def data (str "<root>"
" <character type=\"person\" name=\"alice\" />"
" <character type=\"animal\" name=\"march hare\" />"
"</root>"))
(let [xml (-> data java.io.StringReader. xml/parse zip/xml-zip)]
(prn :alice-is-a (xml1-> xml :character [(attr= :name "alice")] (attr :type)))
(prn :animal-is-called (xml1-> xml :character [(attr= :type "animal")] (attr :name))))
$ bb data_zip_xml.clj
:alice-is-a "person"
:animal-is-called "march hare"
(see for exaple this article for more on clojure.data.zip).
clj-psql
A small Clojure wrapper for interacting with psql.
user> (psql/query conn "select name, subject from grades where grade = 100")
=> ({:name "Bobby Tables", :subject "Math"}
{:name "Suzy Butterbean", :subject "Math"})
camel-snake-kebab
A library for word case conversions.
aero
A small library for explicit, intentful configuration.
clojure.data.generators
Random data generators
honeysql
Turn Clojure data structures into SQL
bond
Spying and stubbing library, primarily intended for tests.
Pods
Babashka pods are programs that can be used as Clojure libraries by babashka.
- babashka-sql-pods: pods for interacting with SQL databases
- bootleg: static HTML website generation
- brisk: Freeze and thaw with Nippy at the command line
- clj-kondo: a Clojure linter
- pod-babashka-filewatcher: a filewatcher pod based on Rust notify
- pod-babashka-parcera: pod around the parcera Clojure parser
- pod-janet-peg: a pod for calling Janet's PEG functionality
- pod-jaydeesimon-jsoup: a pod for parsing HTML using CSS queries backed by Jsoup
- pod-lispyclouds-docker: A pod for interacting with docker
- tabl: Make tables from data in your terminal
Projects
babashka-test-action
Github Action to run clojure.test by Babashka.
deps.clj
A port of the clojure bash script to Clojure / babashka.
Also see deps.clj documentation.
4bb
4clojure as a babashka script!
babashka lambda layer
Babashka Lambda runtime packaged as a Lambda layer.
Release on push Github action
Github Action to create a git tag + release when pushed to master. Written in babashka.
justone/bb-scripts
A collection of scripts developed by @justone.
nativity
Turn babashka scripts into binaries using GraalVM native-image.
cldwalker/bb-clis
A collection of scripts developed by @cldwalker.
krell template
Babashka script for creating React Native (Krell) project
wee-httpd
A wee multi-threaded web server
covid19-babashka
A babashka script to obtain covid-19 related information.
bb-spotify
Contol your spotify player using babashka.
lambdaisland/open-source
Internal tooling used by Lambda Island projects. Noteworthy: a babashka-compatible hiccup script.
There's also subshell which is like sh/sh, but it inherits stdin/stdout/stderr, so that the user sees in real time what the subprocess is doing, and can possibly interact with it. More like how shelling out in a bash script works.