Volter World

Demo a workflow repeatedly

Start with a recognizable baseline, show a business result and a failure, then return to the same conditions for the next presentation. Use the customer onboarding application: its browser and command entries share the same Stripe, Resend and SQL code.

You need Node 22.6+, npm, registry access during preparation and a disposable local World. No platform sign-in or real vendor key is needed. Follow the application's install and init steps first, choosing --name onboarding-demo in an empty starter folder. Review Stripe, Resend and the declared application database before keeping them.

Prepare the baseline

$ ./node_modules/.bin/volter world up
$ ./node_modules/.bin/volter world run -- node demo.mjs baseline

demo.mjs restores the baseline clock to 2026-01-15T12:00:00Z, creates Grace through the application's real SDKs, and advances five seconds for welcome delivery. It refuses a baseline containing other signup work. Read Grace's customer, SQL row and delivered email; default twin records are separate from this application's signup rows.

The baseline entry is preparation for a presentation. It is not an automated browser test or a claim about every operation the twins support.

Present refusal and recovery

$ ./node_modules/.bin/volter world run -- node demo.mjs present
$ ./node_modules/.bin/volter world log
$ ./node_modules/.bin/volter world diff

The presentation uses 2026-01-15T12:00:10Z for Ada. It creates her customer and SQL row, tries an unverified email sender, and shows the partial result. It then retries the welcome on that same customer with a verified sender and advances five seconds to show delivery. Compare the stored identities before and after retry; the business result is one Ada customer with a completed welcome.

To show the application, prepare its UI assets once, then start world run -- node server.mjs and open the printed URL. To show the World dashboard, stop the app, run world down, then world view --no-open; restart the app through world run in a second terminal. Inspect a World owns dashboard navigation. Show declared vendor screens when available, alongside record readback and changes; the app's completion state also includes its SQL row.

Return to the starting conditions

Stop every app consumer before reset. In the disposable demo World:

$ ./node_modules/.bin/volter world reset
$ ./node_modules/.bin/volter world run -- node demo.mjs baseline

Reset discards this branch's state and reloads its defaults, including the declared application database's reset. The baseline entry recreates the SQL table if needed, restores the frozen clock and rebuilds Grace. Run demo.mjs present again for the next presentation.

Fresh synthetic keys and opaque IDs can differ after reset. Repeatability here means the same named customer data, clock instants, refusal, surviving partial state and successful retry. Full event history includes infrastructure and credential provisioning; dashboard business filters describe their count scope and keep the complete history available.

For retaining a failure instead of discarding it, use a failure branch. For independent worker runs, use CI workers; for combining worker changes, use integration Worlds. End a local presentation by stopping its app consumers and running ./node_modules/.bin/volter world down; compute stops while state remains.

View Markdown source

On this page