Alpha · open source · MIT

Casals

Run the same app for many owners on the Internet Computer. Casals creates each owner's canisters, rolls out your upgrades and keeps them funded, while each owner decides when to upgrade.

> pip install ic-casals
> casals up tests/e2e/orchestras/minimal/casals.json --yes --local

Open the demo Read the docs

Casals

General-purpose canister lifecycle orchestrator for the Internet Computer — built for managed multi-tenant IC deployments with shared upgrade governance

What Casals is built for

Many instances of the same application, for many owners — and one team that has to keep every one of them upgraded, funded and safe.

Multi-tenant SaaS

One backend and frontend per customer. The customer owns the instance; the vendor ships the updates.

White-label apps

The same code under many brands. Each brand decides when it takes the next version.

Per-DAO deployments

Treasury, voting, forum — a set of canisters per DAO, operated by a shared team, governed by that DAO.

Agencies and studios

One team maintaining canisters for many clients under a single multisig, with scoped access per client.

Architecture design rationale

Why Casals — in eight steps

SNS
Token · swap · public DAO
Multisig
N of M signers · IC controller of every canister
↓
Multisig signs every install · upgrade · top-up… for every canister of every user… and for the shared infrastructurecontrols Casals only · highest authorityhighest authority · backstopfunds the treasury · signs nothing else
↓
casals-backend
conductor · IC controller of the orchestra
cycles treasury
casals-frontend
the team's console
casals-wasms
WASM registry · sha256
commanders
scoped permissions
↓controls
more users →
Orchestra
Infra
your application
backend frontend index assets
shared · one for all users
registry installer ledger
Users
user1 · user decides
baton backend frontend ···
user2 · user decides
baton backend frontend ···
…
···
more canisters →

The result: four layers of authority

Who can change what — and who must agree. Numbers refer to the step that introduced each layer.

2
Multisig
Highest authority · IC controller of Casals and of every baton · rarely used
↓
6
casals-backend · casals-frontend
Conductor and console · day-to-day create / upgrade / cycles · commanders with scoped permissions
↓
7
Baton — one per stand
Team proposes and advises · user decides · upgrades the whole stand as one unit
↓
1
Stand canisters
backend · frontend · … — per user, plus the shared infrastructure

Casals never embeds voting. It executes approved actions.

Vocabulary

  • Canister — one deployed canister. Only its IC controllers can install code, upgrade, top up, stop or delete it (step 1)
  • Multisig — N-of-M committee. Highest authority; IC controller of Casals and of every baton (step 2)
  • Stand — one instance: the shared infrastructure, user1, user2, … (step 6)
  • Section — a group of stands with a shared role: Infra, Users, … (step 6)
  • Orchestra — the whole grid of sections and stands one Casals conducts (step 6)
  • Conductor — casals-backend. IC controller of the orchestra; runs day-to-day lifecycle on-chain. casals-frontend is its console (step 6)
  • Commander — a team principal with scoped permissions on a section or stand (step 6)
  • Baton — per-stand governor. The team proposes and advises, the user decides; upgrades the stand as one unit (step 7)
  • WASM registry — casals-wasms. Certified file store every install streams from; sha256 on-chain, authorized list, module_hash verified (step 8)
  • Treasury — cycles held by the conductor, funded by the multisig, spent by policy per section, stand or canister (step 8)

The sheet is a genesis document, not a control loop

  • Day one only — casals up reads the sheet once, builds the orchestra, hands the conductor to the multisig. After that the document is history, not instruction.
  • Reconcilers assume complete authority, reachable convergence, and that every difference is drift. Terraform and Kubernetes get all three; a governed orchestra gets none.
  • Authority is on-chain and shared — a file has none. A signer added by proposal, a redeemed access code, a baton that ran an upgrade: all legitimate, none of it in your document.
  • Convergence needs other people — an N-of-M approval may never come. A loop that reads waiting as failure nags forever; it should file a proposal and stop.
  • The orchestra is an actor too — stands minted at runtime, a tenant growing a canister. Not drift, the system working — true with a single controller too.
  • Therefore — the chain is the truth, casals export regenerates the sheet, a diff is a report (plan, oracle), never an enforcer. Never assert the file over the chain.

Running today: gos.earth

Many governance operating systems on one shared machine — conducted by Casals.

GOS — Governance Operating System

The operating system of a society, rewritten as software: who belongs, who decides, what the treasury may spend, which rules execute without asking anyone. One realm is one such system, on its own canisters.

GOS-as-a-Service — gos.earth

The control plane that hosts many of them side by side. A community deploys a GOS; gos.earth registers it as a realm, provisions the canisters, keeps them funded and current. The community remains sovereign over its own system.

How it uses Casals
  • The registry accepts a deploy; the installer asks the Casals conductor.
  • The conductor creates the realm as a new stand in Deployments, streams the GOS build from casals-wasms and funds it from the treasury.
  • A new GOS release rolls out realm by realm; each realm's baton (Casals and the realm itself) must agree before the upgrade lands.
Multisig
↓
casals-backend
conductor · treasury
casals-wasms
GOS builds
↓controls
gos.earth orchestra
Infra
installer
realm-installer
realm-registry
backendfrontend
Deployments
realm alice
batonbackendfrontendtoken
realm bob
batonbackendfrontendtoken
…
···