Skip to content
Back to skills

Borkdude

ASecurity

Guidance for selecting the right ClojureScript runtime across scripting, browser, Node, and embedded use.

  • 61 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 6, 2026
toolsgoshellbashsqlnode

Works with

  • cursor
  • cli

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 6, 2026

npx -y skills add plurigrid/asi --skill borkdude --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Borkdude?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Borkdude
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/plurigrid-borkdude-0a8bb5f7/badge)](https://www.skillsdirectory.com/skills/plurigrid-borkdude-0a8bb5f7)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: borkdude
<<<<<<< HEAD
description: Guidance for selecting the right ClojureScript runtime across scripting, browser, Node, and embedded use.
source: local
license: UNLICENSED
---

<!-- Propagated to codex | Trit: 0 | Source: .ruler/skills/borkdude -->
=======
description: Babashka and ClojureScript runtime selection guidance by @borkdude
---

<!-- Propagated to amp | Trit: 0 | Source: .ruler/skills/borkdude -->
>>>>>>> origin/feature/skill-connectivity-hub-20251226

# Borkdude Skill: ClojureScript Runtime Selection

**Status**: ✅ Production Ready
**Trit**: 0 (ERGODIC - runtime neutral)
**Principle**: Right tool for context
**Author**: Michiel Borkent (@borkdude)

---

## Overview

**Borkdude** provides guidance for selecting the appropriate ClojureScript runtime based on execution context. Named after Michiel Borkent, creator of Babashka, SCI, Cherry, Squint, and other Clojure tools.

## Runtime Matrix

| Runtime | Context | JVM | Node | Browser | REPL |
|---------|---------|-----|------|---------|------|
| **Babashka** | Scripting | ✗ | ✗ | ✗ | ✓ |
| **SCI** | Embedded | ✓ | ✓ | ✓ | ✓ |
| **Cherry** | Compiler | ✗ | ✓ | ✓ | ✓ |
| **Squint** | Compiler | ✗ | ✓ | ✓ | ✓ |
| **Scittle** | Browser | ✗ | ✗ | ✓ | ✓ |
| **nbb** | Node | ✗ | ✓ | ✗ | ✓ |

## Decision Tree

```
Start
  │
  ├── Need fast startup? ─────────► Babashka (bb)
  │
  ├── Browser target?
  │     ├── Minimal bundle? ──────► Squint
  │     ├── Full ClojureScript? ──► Cherry  
  │     └── Script tag? ──────────► Scittle
  │
  ├── Node scripting? ────────────► nbb
  │
  └── Embedded interpreter? ──────► SCI
```

## Commands

```bash
# Babashka (scripting)
bb script.clj

# nbb (Node)
npx nbb script.cljs

# Squint (compile to JS)
npx squint compile src/main.cljs

# Cherry (compile with macros)
npx cherry compile src/main.cljs

# Scittle (browser)
# <script src="https://cdn.jsdelivr.net/npm/scittle@0.6.15/dist/scittle.js"></script>
```

## SCI (Small Clojure Interpreter)

Embedded interpreter for sandboxed evaluation:

```clojure
(require '[sci.core :as sci])

(def ctx (sci/init {:namespaces {'user {'foo (fn [] "bar")}}}))

(sci/eval-string* ctx "(user/foo)")
;; => "bar"
```

## Cherry vs Squint

| Feature | Cherry | Squint |
|---------|--------|--------|
| ClojureScript compat | High | Medium |
| Bundle size | Larger | Smaller |
| Macros | Full support | Limited |
| Interop | CLJS-style | JS-native |
| Target audience | CLJS developers | JS developers |

## Babashka Pods

Extend Babashka with pods:

```clojure
(require '[babashka.pods :as pods])

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

(sqlite/execute! "test.db" ["CREATE TABLE users (id INTEGER PRIMARY KEY)"])
```

## Integration with Music Topos

```clojure
;; Use Babashka for scripts
(ns ruler.propagate
  (:require [babashka.fs :as fs]))

;; Use SCI for embedded color evaluation
(def color-ctx
  (sci/init {:namespaces 
             {'gay {'color-at (fn [idx] (gay/color-at idx))}}}))
```

## When to Use Each

### Babashka
- Shell scripts
- Build automation
- CLI tools
- Data processing

### SCI
- Sandboxed evaluation
- Plugin systems
- Configuration DSLs
- Interactive REPLs

### Cherry
- Full CLJS features in browser
- Macro-heavy code
- CLJS library compat

### Squint
- Minimal JS output
- JS-first interop
- Small bundles

### Scittle
- Browser scripting
- No build step
- Quick prototypes

### nbb
- Node.js scripting
- npm library access
- Server scripts

## Example: Skill Propagation

```clojure
#!/usr/bin/env bb
;; .ruler/propagate.clj

(require '[babashka.fs :as fs]
         '[clojure.string :as str])

(defn propagate-skill! [skill-name]
  (let [source (str ".ruler/skills/" skill-name "/SKILL.md")
        content (slurp source)]
    (doseq [agent ["codex" "claude" "cursor"]]
      (let [target (str "." agent "/skills/" skill-name "/SKILL.md")]
        (fs/create-dirs (fs/parent target))
        (spit target content)))))

(propagate-skill! "unworld")
```

---

**Skill Name**: borkdude
**Type**: Runtime Selection / ClojureScript Tooling
**Trit**: 0 (ERGODIC)
**Runtimes**: Babashka, SCI, Cherry, Squint, Scittle, nbb

Files in this skill

  • SKILL.md4.3 KB
  • bb.edn763 B
  • propagate.clj7.5 KB
  • runtime_selector.clj9.6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.