Orchestra, sections, stands
An orchestra is everything one conductor runs. A section groups stands; a stand is one instance, like a customer's backend and frontend, upgraded and rolled back as a unit.
The canister lifecycle orchestrator for the Internet Computer.
> pip install ic-casals
> casals init hello-world
> casals up hello-world --yes --local
Installing hello-world locally… done
Open Casals
http://4zfnl-5t777-77775-aaadq-cai.localhost:8000/
Control your whole canister fleet with ease: create, start, stop, snapshot, upgrade, roll back and delete.
Give each member of your team (a commander) a scoped set of permissions on a section or stand.
Define your app's entire canister orchestra in one sheet, and stand it up with one command.
Let each tenant approve the upgrades to its own canisters.
Run an upgrade as one on-chain sequence (snapshot, install, verify) and roll the whole group of canisters back if any step fails.
Top up cycles automatically from a shared treasury, with optional email alerts.
Casals runs on-chain and consists of a few canisters. You can use the dashboard or the CLI to manage your app.
casals-backend · Python
Controls every canister it runs.
casals-frontend · SvelteKit
The team's web app.
casals-store · Rust
Every build, hashed on-chain.
optional · Motoko
N-of-M signers, the top authority.
one per stand, optional · Python
Multi-tenant multi-canister upgrades
casals-monitor · off-chain, optional
Takes care of cycle top-ups.
An orchestra is everything one conductor runs. A section groups stands; a stand is one instance, like a customer's backend and frontend, upgraded and rolled back as a unit.
Commanders are appointed over the orchestra, a section or a stand. They hold a chosen set of the permissions.
canister.create canister.deploy canister.delete canister.rename canister.tag canister.snapshot canister.revert canister.lifecycle canister.topup canister.call canister.shellstand.create stand.rename stand.deletearrangement.editcommander.assignwasm.upload wasm.authorize subnet.whitelist alias.manage settings.general settings.cycles settings.monitor notification.manageUploading and authorizing a WASM are separate keys, so who ships a build need not approve it.
The conductor and the baton are Python canisters, built with Basilisk. The casals CLI is Python too: pip install ic-casals.
Teams that look for a professional-grade tool to operate a fleet of canisters in production, from one large complex application to the same app run for many owners.
Not a fit if you run a single app with a handful of
canisters: icp-cli is enough. If you want
public, token-based governance, look at the
SNS.
One backend and frontend per customer. The customer owns its instance; you ship the updates.
The same code under many brands. Each brand decides when it takes the next version.
One organisation running a large fleet across environments, with scoped access, safe group upgrades and automatic top-ups.