Troupe Cloud
Troupe Cloud
Troupe Cloud is Troupe's runtime as a hosted service: your team starts simulators and emulators on Troupe's machines, builds apps from source, and watches and drives the devices from a browser, a script or a coding agent. This page says what the service adds to the open-source runtime, what is available today, and how to get in.
What it adds
Everything in the open-source packages works on your own Mac with no account. Troupe Cloud adds what a shared service needs.
| Part | What it is | Read |
|---|---|---|
| Accounts and organizations | A person signs in; an organization owns projects, members, keys and limits | Signing in, Organizations |
| Projects | What every device session, build and test run belongs to | Organizations |
| Hosted devices | Device sessions on Troupe's hosts, with the same procedures and the same live stream as a local runtime | Device sessions |
| Builds | An app built from a git ref or an uploaded tarball, kept as an artifact a device installs | Builds |
| Signing | App Store Connect keys and Android upload keystores for store builds | Signing credentials |
| Test runs | A troupe test suite split into shards, each with its own devices | Test runs |
| Access for machines | API keys, and token exchange for CI systems that have their own identity | API keys, CI without stored secrets |
| Metering and limits | What ran, per month, and how much may run at once | Usage and limits |
| MCP | The device tools at a hosted endpoint, with OAuth or an API key | MCP in the cloud |
What is available today
| Feature | Status |
|---|---|
| Accounts, organizations, projects, members and invitations | Available |
| API keys, trusted issuers for CI, sign-in connections | Available |
| Device sessions, in the web app, over the API and over MCP | Available |
Builds with the expo and xcode presets | Available |
| Usage and limits | Available |
| Signing with stored credentials | Not enabled yet |
| Test runs | Not available yet |
Addresses
| What | Address |
|---|---|
| The web app | https://troupe.ali.ve/cloud |
| The API | https://api.troupe.ali.ve |
The API address is what troupe login --cloud, API keys, the client and MCP clients use. Under it:
| Path | Serves |
|---|---|
/v1/<group>/<operation> | REST, with the operation in kebab case |
/rpc/v2/<group>/<operation> | RPC |
/mcp | MCP over Streamable HTTP |
/oauth/token | The token endpoint, for sign-ins and token exchange |
Getting in
- Create an account at
https://troupe.ali.ve/cloud/sign-upand follow the link in the verification mail. See Signing in. - Create an organization, or accept an invitation to one. See Organizations.
- Create a project in it.
- Open the project and choose Start a device. The device appears in the page and takes your clicks and keys. See Device sessions.
- For a script or CI, create an API key. For the command line, run
troupe login --cloud https://api.troupe.ali.ve.
One contract, two kinds of procedure
Troupe Cloud serves two contracts on the same address, in the same way.
- The runtime contract. The device procedures a local runtime serves:
sessions.create,input.tap,ui.snapshot,media.screenshotand the rest. The cloud serves 55 of the 64. It leaves out the ones that manage a local daemon (runtime.status,runtime.hostInfo,runtime.doctor,runtime.shutdown,runtime.sweep) and thepairingsgroup. The same client and the same MCP tools work against both. See the runtime reference. - The cloud contract. 63 procedures in 15 groups for accounts, organizations, projects, keys, builds,
artifacts, credentials, usage and limits. See the cloud reference. Every
one of them is marked
experimentalin contract 1.0: it may change in a minor version. None is an MCP tool.
A call looks the same for both:
curl https://api.troupe.ali.ve/v1/account/get \
--header "Authorization: Bearer $TROUPE_API_KEY" \
--header "Troupe-Contract: 1.0"A read with a flat input is a GET with query parameters. Everything else is a POST with a JSON body. Errors
have one shape on every surface: a code, a message, typed data, whether a retry can help, and a request id. See
calling the API directly and the error registry.
How a cloud device differs from a local one
| Local runtime | Troupe Cloud | |
|---|---|---|
| Who may call | The owner token on your machine | A signed-in person, an API key or an access token, within its scopes |
| Where a session lives | On your machine | In one project of one organization |
| No free device | sessions.create answers CAPACITY_UNAVAILABLE | The session is queued for up to 15 minutes |
| Installing an app | A path, a URL with its SHA-256 | A build's artifact, or a URL with its SHA-256; a path is refused |
| The live stream | The runtime's own listener | The listener streams.ticket names, on the host that runs the device |
Who is calling
Every call is made by one of three kinds of caller.
| Caller | Credential | Used by |
|---|---|---|
| A person | A session cookie from signing in | The web app |
| An API key | tr_key_… as a bearer token | CI, scripts, services |
| An access token | A short-lived token as a bearer token | troupe login, Troupe Studio, MCP clients, token exchange |
Each caller holds scopes, such as devices:acquire or builds:write, and a procedure lists the scopes it
needs. A person's scopes come from their role in the organization. Changes that grant access, such as creating
a key or inviting a member, take only a person who signed in or confirmed their password in the last 15
minutes, never a key or a token. See confirming changes.