REPL-friendly data visualization and literate programming for Clojure with Kindly convention
View on GitHubhugoduncan/library-skills
clojure-libraries
January 23, 2026
Select agents to install to:
npx add-skill https://github.com/hugoduncan/library-skills/blob/main/plugins/clojure-libraries/skills/clay/SKILL.md -a claude-code --skill clayInstallation paths:
.claude/skills/clay/# Clay
REPL-friendly Clojure tool for data visualization and literate programming. Renders Clojure namespaces and forms as HTML pages, notebooks, and Quarto documents using the Kindly convention.
## Overview
Clay transforms Clojure code into visual documents by interpreting the Kindly convention for data visualization. It integrates with your REPL workflow and editor, rendering forms and namespaces as HTML with support for charts, tables, markdown, and interactive components.
**Key Features:**
- REPL-driven visualization workflow
- Kindly convention for visualization types
- HTML, Quarto markdown, and reveal.js output
- Live reload with file watching
- Editor integrations (Calva, CIDER, Cursive, Conjure)
- Vega-Lite, Plotly, ECharts, Highcharts support
- Dataset and table rendering
- Reagent component support
**Artifact:** `org.scicloj/clay`
**Latest Version:** 2.0.3
**License:** EPL-1.0
**Repository:** https://github.com/scicloj/clay
## Installation
Add to `deps.edn`:
```clojure
{:deps {org.scicloj/clay {:mvn/version "2.0.3"}}}
```
Or Leiningen `project.clj`:
```clojure
[org.scicloj/clay "2.0.3"]
```
Import in namespace:
```clojure
(ns my-notebook
(:require [scicloj.clay.v2.api :as clay]
[scicloj.kindly.v4.kind :as kind]))
```
## Core Concepts
### Kindly Convention
Kindly standardizes how values request visualization. Attach kind metadata to values:
```clojure
;; Using kind function
(kind/md "# Hello World")
;; Using metadata
^:kind/md ["# Hello World"]
```
### make! Function
The primary entry point. Renders forms, namespaces, or files:
```clojure
;; Render single form
(clay/make! {:single-form '(+ 1 2 3)})
;; Render current namespace
(clay/make! {:source-path "notebooks/my_notebook.clj"})
;; Render with options
(clay/make! {:source-path "src/analysis.clj"
:format [:html]
:show true})
```
### Output Formats
Clay produces:
- **HTML** - Standalone pages served at `http://localhost:1971/`
- **Quarto Markdown