quill

Notebooks as markdown. No JSON mess. Beautiful output.


why quill?

markdown notebooks

Your notebooks are markdown files with OCaml code blocks. Git-friendly. No JSON. No merge conflicts.

beautiful output

Plots render inline. Arrays display as tables. Everything from Raven just works.

integrated with raven

First-class support for nx arrays, hugin plots, and rune models. Everything displays beautifully.

web editor

Browser-based interface with syntax highlighting and live output. Or use your favorite editor.


show me the code

Jupyter

# Cell 1
import numpy as np
import matplotlib.pyplot as plt

# Cell 2
data = np.random.randn(1000)
plt.hist(data, bins=30)
plt.show()

# Cell 3
print(f"Mean: {data.mean():.2f}")
print(f"Std: {data.std():.2f}")

QUILL

# Data Analysis

Let's generate some random data:

```ocaml
open Nx
open Hugin

let data = randn float32 [|1000|]
```

Now plot it:

```ocaml
let fig = figure ()
let ax = subplot fig
let _ = Plotting.hist ~values:data ~bins:30 ax
show fig
```

Statistics:

```ocaml
Printf.printf "Mean: %.2f\n" (mean data);
Printf.printf "Std: %.2f\n" (std data)
```

how it works

Write your notebook as a markdown file:

# My Analysis

Some introductory text about what we're doing.

## Load the data

```ocaml
open Nx

let data = Nx_io.load_npy "data.npy"
let () = Printf.printf "Loaded %d samples\n" (shape data).(0)
```

The data contains measurements from our experiment...

## Visualize

```ocaml
open Hugin

let fig = figure ()
let ax = subplot fig
let _ = Plotting.plot ~y:data ax
show fig
```
    

Then run it:

# Start the web interface
quill serve

# Or execute directly
quill exec notebook.md
    

what's implemented

Quill is under active development. Here's what works today:

working now

  • ✓ Markdown parsing with OCaml blocks
  • ✓ Web-based editor with syntax highlighting
  • ✓ Text and plot output
  • ✓ Array visualization

coming soon

  • ⏳ Interactive widgets
  • ⏳ Export to HTML/PDF
  • ⏳ LSP integration in editor
  • ⏳ Cell-by-cell execution
  • ⏳ Rich media output (images, tables)

design philosophy

Notebooks are documents. A notebook is a markdown file. You can edit it in any text editor, version it with git, and read it on GitHub.

Code is code. OCaml code blocks are real OCaml. Your editor understands them. Refactoring tools work.


get started

Quill isn't released yet. For now, check out the documentation to learn more.

When it's ready:

# Install
opam install quill

# Create a notebook
cat > example.md <<'EOF'
# My First Notebook

Let's do some math:

```ocaml
let x = 2 + 2
let () = Printf.printf "2 + 2 = %d\n" x
```
EOF

# Run it
quill exec example.md