Getting started
Free edition
A downloadable twin you can run with nothing else: no license, no signup, no command-line tool, no config. The download is the whole setup.
Get it
One fixed link per simulator. Every release replaces the build behind it; there is no version to pick.
| Simulator | Link |
|---|---|
| Stripe | /dl/free/stripe-twin |
tar xzf stripe-twin-free-darwin-arm64.tar.gz
./stripe-twin
# expect: rystic: stripe-twin <ver> listening on [::]:8080 (model sha256:…) — free edition, world customer_with_card
curl -s localhost:8080/_rystic/version
# expect: {"contract":6,"edition":"free","product":"stripe-twin","world":"customer_with_card",...}
Point your SDK at http://localhost:8080 as usual. Any Authorization header works.
What it is
- The modeled API, reads and writes alike. Create a customer, confirm a payment intent, refund a charge — the world moves as the licensed twin’s does.
- One canonical world per simulator, loaded at start. Stripe’s is
customer_with_card. Restart the process to get it back; that is the only reset. GET /_rystic/versionandGET /_rystic/routes, so a client can tell what it is talking to.
What it is not
The control plane is compiled out, not switched off. Every one of these answers 404 with a body naming the paid unlock:
| Removed | What the licensed twin does with it |
|---|---|
POST /_rystic/seed, /_rystic/reset, /_rystic/scenario, /_rystic/clock, /_rystic/seed-rng | set the world, pin the clock, choose any of the pack’s scenarios |
GET /_rystic/inspect, /_rystic/egress, /_rystic/events, /_rystic/ui | dump state, read rendered webhooks, watch the twin live |
/_replay/*, --scenario, --seed, RYSTIC_SCENARIO, RYSTIC_SEED, --live | tapes, boot-time worlds, live feeds |
State is visible only through the modeled API’s own GETs. sweep, docker via the registry, and the rystic CLI’s run/pull are licensed too.
What it reports
The free edition phones home; the licensed twin never does. At start, once an hour, and on a clean stop it POSTs to www.rystic.ai/api/free-metrics:
- product, version, edition, world
- operating system and architecture
- a random install id, written to
.rystic-free-idbeside the binary on first run - the event (
start,heartbeat,stop) and seconds since start - request counts per API route
Nothing from request bodies, no hostnames, and the server stores no IP. There is no opt-out; an unreachable endpoint changes nothing about how the twin runs. The EULA in the archive (LICENSE.txt §13) says the same.
Upgrading
A license is the same binary plus the control plane, the scenario pack, seeds, tapes, --live, sweep, and docker via registry.rystic.ai. Request one, then rystic pull stripe-twin.