runsporegithub ↗
01 · inside

A spore is a small package of work.

A workflow, reusable actions, or both — versioned and portable. Tap a part.

an embedded durable workflow runtime

Small spore.
Big job.

Runspore runs work that takes more than one step — and remembers every one of them.

SCROLL TO PLANT IT ↓
02 · landing

A workflow describes the steps.

A run carries them out. The moment it lands, it knows exactly where to begin.

03 · growth

Every step gets written down.

Done, waiting, failed. The record is the thing — not a hope that nothing goes wrong.

04 · waiting

Some steps need a person.

The run holds its place — glowing politely — until someone says go.

05 · interruption

The lights go out. Nothing is lost.

Progress is on record, so the run picks up where it stopped — not from the start. It retries what's safe, and asks when it isn't sure.

06 · results

What grows above is the result.

What runs beneath is the work. Anything already produced stays useful, even if a later step doesn't make it.

07 · reuse

One spore. Many runs.

Share the workflow, not the progress. Every landing grows its own record.

08 · open source

Plant one yourself.

github.com/Web-tree/runspore ↗
Rust · WebAssembly · SQLite · MIT
a WebTree project · roots and mycelium, growing together
so, literally

The spore was the workflow. The threads were the run. The mushrooms were the results.

Runspore is a small runtime you run locally or embed. Tools, scripts and people do the actual work; Runspore decides what comes next and writes down what happened — so nothing has to start over.

workflow
A graph of steps.

Written as DOT, built into an immutable artifact. One definition can be run any number of times.

run
One execution of it.

Its own ID, inputs and recorded state: running, waiting for a signal, parked for a person, or finished — always on record.

result
What the work produced.

An archive, a report, an import — made by the tool or person a step calls. Runspore coordinates and records; it doesn't do the work itself.

watch a run

Pick a workflow. Start a run. Be the person it waits for.

The graph on the right is the DOT on the left. Click any node or line for what it means.

A photographer prepares previews, waits for the client, then prepares the final archive. "Changes requested" loops back to previews; approval moves on. The client's decision arrives as a signal.

ok
changes-requested
approved
ok
Prepare previews
await-signal
Await client approval
Prepare final archive
complete
Delivery prepared
photo_delivery.dotrunspore/0.2
1digraph photo_delivery {
2 dialect="runspore/0.2";
3 start="previews";
4
5 previews [label="Prepare previews"];
6 approval [kind="await-signal", label="Await client approval"];
7 archive [label="Prepare final archive"];
8 done [kind="complete", label="Delivery prepared"];
9
10 previews -> approval [on="ok", label="Previews ready"];
11 approval -> previews [on="changes-requested", label="Changes requested"];
12 approval -> archive [on="approved", label="Approved"];
13 archive -> done [on="ok", label="Archive ready"];
14}
status idleposition —
$ spore events —
install

One binary, one SQLite file.

The spore command embeds the kernel, host and store. It's an MVP: timers, fork/join, child workflows and other hosts are still on the list. MIT licensed, a WebTree project.

$ curl -fsSL https://raw.githubusercontent.com/Web-tree/runspore/main/install.sh | sh
$ git clone --depth 1 https://github.com/Web-tree/runspore $ cp -R runspore/examples/hello . && spore run hello --key hello-1 status completed revision 3 result {"output":{"message":"hello"}}
Quickstart, examples and specs on GitHub ↗