/pod-registry

Pod manifests describe where pods can be downloaded, etc.

Primary LanguageClojure

Pod registry

The central place to register babashka pods for easy usage with babashka.

Loading and using a pod

Registered pods can be loaded using a qualified symbol and a version string:

(require '[babashka.pods :as pods])
(pods/load-pod 'org.babashka/buddy "0.1.0")

From then on, a pod exposes namespaces which can be called like regular Clojure:

(require '[pod.babashka.buddy.core.hash :as hash])
(hash/md5 "foo")

Registered pods

Pod Description Latest version Example Language
atomisthq/tools.docker docker golang utils for clojure 0.1.0 link golang
borkdude/clj-kondo A static analyzer and linter for Clojure code that sparks joy 2024.03.13 link clojure
com.fluree/crypto A Clojure(Script) crypto library for the Fluree graph database 0.1.2 link clojure
com.github.clojure-lsp/clojure-lsp Language Server (LSP) for Clojure 2022.11.03-00.14.57 link clojure
epiccastle/bbssh SSH remote execution and file copy 0.6.0 link clojure
epiccastle/spire Pragmatic idempotent machine provisioning over SSH (mac and linux only) 0.1.2 link clojure
huahaiy/datalevin Datalevin Database 0.9.5 link clojure
justone/brisk Freeze and thaw with Nippy at the command line 0.3.0 link clojure
justone/tabl Make tables from data in your terminal 0.3.0 link clojure
lispyclouds/docker A babashka pod for interacting with docker via clj-docker-client 0.1.1 link clojure
org.babashka/aws AWS client based on aws-api 0.1.2 link clojure
org.babashka/buddy Cryptographic API provided by buddy 0.3.4 link clojure
org.babashka/etaoin Etaoin, a pure Clojure webdriver protocol implementation 0.1.0 link clojure
org.babashka/filewatcher Filewatcher based on Rust notify 0.0.1 link rust
org.babashka/fswatcher Filewatcher based on Go fsnotify 0.0.5 link golang
org.babashka/go-sqlite3 Interact with sqlite3 0.2.3 link golang
org.babashka/hsqldb HSQLDB access via next.jdbc 0.1.2 link clojure
org.babashka/instaparse Instaparse pod 0.0.4 link clojure
org.babashka/lanterna A Clojurey wrapper around the Lanterna terminal output library. 0.0.1 link clojure
org.babashka/mssql MSSQL access via next.jdbc 0.1.2 link clojure
org.babashka/mysql MySQL access via next.jdbc 0.1.2 link clojure
org.babashka/oracle Oracle access via next.jdbc 0.1.0 clojure
org.babashka/parcera Grammar-based Clojure(script) parser 0.0.1 link clojure
org.babashka/postgresql Postgresql access via next.jdbc 0.1.2 link clojure
org.babashka/tools-deps-native Tools deps alpha as a pod 0.1.6 link clojure
retrogradeorbit/bootleg Template processing command line tool to help build static websites. Inbuilt support for html, hiccup, hickory, selmer, mustache, markdown, enlive, json, yaml and edn. 0.1.9 link clojure
rorokimdim/stash Encrypted text storage 0.3.3 link haskell
tommy-mor/go-valve-query query/rcon valve source engine servers 0.1.1 golang
tzzh/aws Interact with AWS 0.0.3 link golang
tzzh/mail Send emails 0.0.2 link golang

Registering a pod

To register a pod, create a nested directory in manifests with the following structure:

<org>/<pod-name>/<version>

and add a manifest.edn file like the following example:

{:pod/name tzzh/mail
 :pod/description "Send emails"
 :pod/version "0.0.2"
 :pod/license ""
 :pod/example "https://raw.githubusercontent.com/babashka/pod-registry/master/examples/tzzh_mail.clj"
 :pod/language "go"
 :pod/artifacts
 [{:os/name "Linux.*"
   :os/arch "amd64"
   :artifact/url "https://github.com/tzzh/pod-tzzh-mail/releases/download/v0.0.2/pod-tzzh-mail_0.0.2_Linux_x86_64.zip"
   :artifact/executable "pod-tzzh-mail"}
  {:os/name "Mac.*"
   :os/arch "x86_64"
   :artifact/url "https://github.com/tzzh/pod-tzzh-mail/releases/download/v0.0.2/pod-tzzh-mail_0.0.2_Darwin_x86_64.zip"
   :artifact/executable "pod-tzzh-mail"}
  {:os/name "Windows.*"
   :os/arch "amd64"
   :artifact/url "https://github.com/tzzh/pod-tzzh-mail/releases/download/v0.0.2/pod-tzzh-mail_0.0.2_Windows_x86_64.zip"
   :artifact/executable "pod-tzzh-mail.exe"}]}

The required fields are :pod/name, :pod/version and :pod/artifacts. For the sake of programmatical integrity you can populate :pod/description, :pod/example (with a link) and :pod/language fields as well.

You can then load the pod in your babashka script as follows:

(require '[babashka.pods :as pods])
(pods/load-pod 'tzzh/mail "0.0.2")

(require '[pod.tzzh.mail :as m])
(m/send-mail ...)

The :pod/artifacts vector will be matched in order on operating system and architecture. For the first match, the :artifact/url, a zip file, will be downloaded and extracted. After extraction there should be a file with the same name as :artifact/executable which will be made executable and invoked as the pod.