a notebook for code & prose

Write code like
it blooms.

Loopstack is the quiet page where your functions and your paragraphs live together — draft an essay, run the benchmark inside it, publish both. Type below; things blossom.

$ npx loopstack init garden
intent.compiled
# type above — the compiler is listeningbloom("morning")  returns morning, petal by petalbloom("loop")  compiles to a quiet field of loopbloom("garden")  waits under the soil of gardenbloom("light")  is pressed like a light between pages

every keystroke blooms · nothing is sent anywhere

features

Everything grows from one page

No tabs between your thinking and your running. A Loopstack page is prose, code, output, and publish button — rooted in the same soil.

:live-cells

Cells that stay warm

Code blocks re-run as you edit the prose around them, so your numbers never go stale mid-sentence. Change the input; watch the paragraph update itself.

:petal-diff

Diffs you can read aloud

Every revision is stored as a story, not a hash. Roll back to "the draft before I panicked" instead of a3f9c21.

:one-publish

Publish is a keystroke

Cmd-Enter ships the page — prose rendered, code executable by readers, outputs pinned. Your blog and your repo stop being different places.

snippets

A page that runs

Scroll and watch the cells type themselves — the way a page feels when it remembers being written.

morning-pages.loop
# The dawn benchmark

I keep claiming the new parser is
faster. Let the page decide:

cell bench(runs=200) {
  old = parse_v1("corpus.txt")
  new = parse_v2("corpus.txt")
  compare(old, new)
}

→ v2 is 3.1× faster (p < 0.01)

...and the sentence above updates
itself every time I save.
publish.loop
# ship prose + proof together
export page {
  title:  "The Dawn Benchmark"
  cells:  runnable
  theme:  "night-garden"
}

→ live at loop.st/dawn-benchmark
→ readers can re-run every cell
integrations

Plays well with your whole shed

Gitevery save is a commit with a sentence
VS Codeedit .loop files with full LSP
Obsidianyour vault becomes runnable
RSSpublished pages feed any reader
Python & JScells in either, same page
SQLitea database in every notebook
Vercel / Pagesone-command static export
CLIloopstack run, watch, publish
community

Gardeners, so far

"I wrote my thesis and its entire results pipeline in one Loopstack page. My advisor re-ran chapter four from her browser."

@mossline · computational linguistics

"The readable diffs converted me. 'Removed the apology from the intro, sped up the loop' is my favorite commit ever."

@fernandez.dev · platform engineer

"My blog posts now carry their own benchmarks. Readers argue with my code instead of my vibes. Huge upgrade."

@petalcore · performance blogger
garden

A garden of saved blooms

Every page you publish presses a bloom into the archive. Tap one to replay the burst it made the day it shipped.

get started

Your first page is already open

Free for personal gardens. One command, no account, and the tutorial is itself a runnable Loopstack page — of course it is.

MIT-licensed core · self-hostable · petals included

Designed by Gideon Awolesi