﻿# Digital twins and the growth path

Why the same Cyoda app runs on any storage tier, and when to pick each tier.

A Cyoda application is **tier-agnostic**. The entity model, the workflows, the
REST and gRPC surfaces, and the query semantics are the same on every
deployment tier. What changes as you move between tiers is non-functional:
durability, consistency guarantees, scale, and operational cost. We call this
the **digital twin** property — the same logic, running at a different point
on the cost/scale curve.

## The growth path

<GrowthPathDiagram />

## When to use each tier

- **In-Memory** — a single-process, zero-dependency runtime. Data is lost on
  restart. Use it for functional tests, fast AI iteration loops, and
  **digital-twin scenario runs** where you want to drive the same app logic
  at volumes and rates that would be prohibitively expensive against a
  durable backend.
- **SQLite** — durable, single-file, zero-ops. Use it for edge and IoT
  deployments, small-team self-hosting, and local development where you want
  data to survive restarts but do not want to operate a separate database.
- **PostgreSQL** — durable storage with `SERIALIZABLE` isolation for
  production workloads. Run 3–10 stateless cyoda-go nodes behind a load
  balancer for active-active HA, with PostgreSQL as the only external
  dependency. This is the recommended production path for teams self-hosting.
- **Cassandra (via Cyoda Cloud)** — a distributed, horizontally scalable
  backend available today as a managed service. Use Cyoda Cloud when you need
  enterprise-grade identity, multi-tenancy, and provisioning, and do not
  want to run the infrastructure yourself.

## Choosing

Most teams make this choice along four axes:

- **Durability** — can the data disappear on a restart? If yes, In-Memory is
  fine. Otherwise you need SQLite or up.
- **Write volume and HA** — a single process can go a long way on SQLite, but
  active-active HA with concurrent write safety wants PostgreSQL or cloud.
- **Ops appetite** — PostgreSQL is one dependency; SQLite is zero; Cyoda Cloud
  is "someone else's problem".
- **Scale ceiling** — in-process stores have limits Cassandra does not.

You do not have to pick forever. The whole point of the growth path is that
the application does not change when you move. A test suite can run on
In-Memory today, the early product on SQLite, the growing service on
PostgreSQL, and the enterprise fleet on Cyoda Cloud — with the same code.

## Where to go next

- [Run → overview](/run/) — practical deployment guidance for each tier.
- [Build → testing with digital twins](/build/testing-with-digital-twins/) —
  using In-Memory mode for scenario tests.