Skip to content

How it works

01 · Developer
  1. WriteRust logic on the SDK, and a frontend
  2. Bundle & signcargo mero bundle --key
  3. Publishto the app registry, private to your org or public
  4. Deployfrom the Cloud console: shared or dedicated cluster
02 · Cluster · attested Intel TDX nodes

Every node checks the package signature before it runs it.

Org · acmenotesown state · init {"title": "Acme"}
Org · globexnotesown state · init {"title": "Globex"}

Each instance is replicated by its own Raft log across three nodes.

mero-kmsreleases a node's storage key only after its quote matches the signed release
Governance · fixed at genesis, attested
  • Node images approved by the app's owner or the operator
  • App upgrades approved by the app's owner or the operator
  • Outbound hosts the manifest declares, approved before any call leaves
03 · People & agents
  1. Verifythe node's quote against the signed release
  2. Sealopen an encrypted channel to the key the quote binds
  3. Sign ina passkey for people, a scoped API key for agents
  4. Calltheir org's instance; every answer carries a receipt

mero-js · Python · Rust · meroctl · the Calimero MCP

One signed bundle, any number of organizations. Nobody operating the nodes, Calimero included, can read an instance's data, and every client can check that before it sends anything.
  1. Build. You write the app’s logic in Rust and bundle it with its frontend into one signed package (cargo mero bundle). The signature covers the UI too. See Build an app.
  2. Publish. You publish the package to the app registry, private to your Cloud organization or public. The registry checks the signature on upload. See Package & publish.
  3. Deploy. From the Cloud console you make a version available on a shared cluster (pay per request) or a dedicated one (a flat fee). Every node that installs it checks the publisher’s signature. See Deploy & instances.
  4. An instance per organization. Each organization that uses the app gets its own instance, with its own state and its own init arguments, replicated by its own Raft log across three attested nodes. Your frontend can create them as customers sign up.
  5. Keys only after proof. A node gets its storage key from mero-kms only after its quote matches the signed release. Everything it writes to disk is sealed under that key.
  6. Verify, then talk. People and agents verify a node’s quote against the signed release before sending anything, open a sealed channel to the key the quote binds, and sign in: a passkey for a person, a scoped API key for an agent. Every answer carries a receipt. See Verify a cluster.
  7. Decisions with a name on them. Who approves new node images, app upgrades and outbound hosts is fixed when the cluster is created, and attested with every receipt: the app’s owner, or the operator.
WhoRead app dataChange the app’s codeManage membersVerify the build
Network, host, cloud providerbetween the client and the VM○ NoSees sizes and timing○ No○ No● YesLike anyone
Calimero, as operatorruns the nodes○ NoCounts and status only◐ DependsOnly where the cluster’s rules make it the upgrade approver○ No● YesLike anyone
App developerpublishes the package◐ DependsOnly in instances they are a member of◐ DependsPublishes versions; each instance’s approver applies them◐ DependsOnly in orgs they administer● Yes
Org owner or adminof the instance’s organization◐ DependsWhat the access rule and the app allow◐ DependsThe owner approves upgrades where the rules say owner● YesRoles below owner, teams, invites● Yes
Memberreaches the instance◐ DependsWhat the access rule and the app allow○ No○ No● Yes
Publicnot signed in◐ DependsOnly an instance whose access is public○ No○ No● Yes
● yes · ◐ depends on the cluster's rules or the instance's access rule · ○ no. Everything on disk and on the wire is sealed; the app's own code decides finer rules with env::caller_org().

The full table, and what stops each attack, is on the security model page.

01 · Use case

An on-prem edition without the on-prem work

Your largest customers want the product on their own premises.

The same signed bundle runs on Calimero Cloud and on your customer’s own cluster of the same attested nodes.

02 · Use case

Internal tools for regulated teams

Self-hosting means admins who can read everything; SaaS means a vendor who can.

Organizations, teams and access rules are enforced by every node, and auditors can check which build has access.

03 · Use case

Shared apps between companies

Whoever hosts shared live data can see all of it.

An attested app instance no single party controls; each company sees only what its group is granted.

04 · Use case

Confidential AI agents

Useful agents need your most sensitive data.

Agents act on app data through the Calimero MCP, with their own scoped API key, under the app’s own rules.

More on each in the use cases on calimero.network.