Casals

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

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

Open the demo

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)
  • Conductorcasals-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 registrycasals-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 onlycasals 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
···