Repository navigation
EN Clever Change Domain
Français · Type: how-to · Audience: admin · Context: hosted Studio · Status: ready · Applies from: 4.2.3
The Studio Server (hosted team Studio) · contract: experimental · verified by CI (support matrix of 4.4.0, 2026-10-23): Postgres, S3 and Keycloak in CI; Chromium and Firefox (job studio-hosted); WebKit on macOS, by hand only · automated checks: jobs
studio-hosted,studio-install-smoke; CI planstudioHosted; 3 test files · people's passes:studio-hostednot run (#149),studio-collabnot run (#150),studio-previewnot run (#166),studio-assets-hostednot run (#167),studio-mcp-remotenot run (#196),studio-oidc-genericnot run (#197) · known limits:history-keeps-old-names
Moving a running Studio to new names, or to another OpenID Connect provider. The game and its history do not move; what changes is how people reach it and who the Studio thinks they are.
The Studio served at its new publicUrl and playUrl (or logging people in through the new provider), every member
back with their role, and the old names or the old provider retired.
- A hosted Studio on Clever Cloud, from 4.2.3.
- Verified on: not verified on a live installation. Neither change was exercised; what follows is read from the code and the deployment guide.
- The new subdomains of your domain (Domains and TLS), or the new provider set up (Keycloak, Generic OIDC).
- A backup taken just before (Backups, step 3), and the list of members with their roles
(
GET /api/membersas an owner).
clever …: on your machine, in the engine repository where the apps are linked. invite: in a shell on the studio
app (clever ssh --alias my-game-studio). The provider's settings: in its admin console.
- Add the new names beside the old ones: both
studio.andplay.to the studio app, the worker's to the worker (Domains and TLS).
- At the provider, add the new URIs to the
studioclient, keeping the old ones for now: the redirect URI<new publicUrl>/auth/callback, the post-logout redirect<new publicUrl>, and set the back-channel logout URL to<new publicUrl>/auth/backchannel.
- Change
publicUrl,playUrl(andworker.urlif the worker moves) in the configuration, set it, and redeploy the studio (Configuration, step 5). The server accepts mutations only withOriginequal to the newpublicUrl: the old name stops working for writes at once.
- Tell the members:
-
Everyone logs in again on the new name: the session cookie (
__Host-ws_session) belongs to the host that set it, so the old name's cookie is never sent to the new one. - The CLI keeps its tokens per server:
npm run studio-server -- login --server https://<new studio name>; an MCP client configured with the old URL is pointed at the new one. - An invitation link printed before still works with its host changed to the new name: the token is the same.
- The published builds' URLs (
/play/<n>/on the game's origin) change withplayUrl.
-
Everyone logs in again on the new name: the session cookie (
- Once everyone is on the new name, remove the old URIs at the provider and the old names from the apps
(
clever domain rm <old name> --alias my-game-studio).
The Studio knows a person by the provider's (iss, sub). A new provider gives everyone a new identity: to the Studio
they are new users, members of nothing. The roles have to be given again, by invitation.
- Set the new provider's client secret and the configuration's
oidc(issuer,clientId,audience,cliClientId), and redeploy the studio. It reads the new issuer's discovery at start. Every session ends at its next check (the old provider's refresh tokens mean nothing to the new one), and the old provider's Bearer tokens are refused.
-
Re-invite each member, with their role, from the operator's side; each logs in through the new provider with the same verified email:
# in a shell on the studio app (clever ssh --alias my-game-studio) cd "$APP_HOME" && npm run studio-server -- invite --email lea@example.fr --role dev
- As an owner on the new provider, remove the old identities from the members list: they still appear (and the last owner of them cannot be removed until a new owner exists, step 7).
Limit ·
history-keeps-old-namesThe game's history, comments and audit log keep the authors as they were written, under the old identities. Nothing merges an old identity into a new one.
- Domain:
https://<new studio name>/readyzanswers 200, a member logs in there and writes, the game shows in the room view (the game's frame on the newplayUrl). - Provider:
GET /api/memberslists every member with a new identity and their role;GET /auth/clinames the new issuer.
| Symptom | Cause | Fix |
|---|---|---|
| The provider refuses the redirect | The new callback URI not added to the studio client |
Step 2 |
forbidden (403) on every save |
A tab still open on the old name | Reload on the new name |
| "not a member of this project" after the provider change | Not re-invited yet | Step 7 |
| The game's frames stay empty |
playUrl not on the same domain as publicUrl
|
Two subdomains of one domain |
STUDIO_CONFIG_JSON (and the client secret for a provider change); the apps' domains; the provider's client; new user
and member rows, invitations and audit entries. The game's files and history do not change.
- Domain: set the old URLs back and redeploy, as long as the old names and URIs were kept (step 5 not done yet).
- Provider: set the old provider back and redeploy; the old identities are still members unless step 8 removed them.
-
studio-server/src/server/config.ts(publicUrl,playUrl),studio-server/src/server/auth/store.ts(identities, invitations),studio-server/src/server/auth/routes.ts(cookies, callback). - Security, Recovering admin access.
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.4.0 r1, documentation revision · révision de la documentation 8dc717c69acb62c4742b69c54a7e7dfb620f75d8.
Earlier versions and permalinks · versions précédentes et liens permanents: https://wanoo.github.io/quest-n-click/docs/
An edit made in this wiki is overwritten at the next publication · une modification faite dans ce wiki est écrasée à la publication suivante.
Edit the source · Modifier la source · Report an error · Signaler une erreur
Index (6)
Start (6)
Play (9)
Install (17)
- Requirements
- Install from the release archive
- Install from npm, once published
- Install from the repository to work on the engine
- doctor: checking your machine
- Image toolchain
- Audio toolchain: ffmpeg, fluidsynth, Furnace, uv
- Upgrade
- Upgrade notes: 4.4
- Upgrade notes: 4.3
- Upgrade notes: 4.2
- Upgrade notes: 4.1
- Upgrade notes: v3
- Upgrade notes: v2 to v3
- Coming from web-scumm
- Package reference
- Install troubleshooting
Create a game (55)
- Your first game
- Layout of a created project and of the engine repository
- The working loop
- Content principles and the identity contract
- Rooms
- Geometry: placement, walk zones, masks, layers, camera
- Something is visible but unreachable
- Reactions
- Game commands
- Conditions
- Flags, variables and events: which to use
- Custom code
- Characters
- Items and inventory
- World map
- Dialogues
- Scripts and events
- Moving characters: patrols and walks
- Exits
- Chapters and objectives
- State and saves: persistent or temporary, renaming an id, migrations
- Staging: wide rooms and animations
- The stage: lights, particles, floors
- Skin and fonts
- Title and credits
- Heroes: several characters and hero choice
- Built-in minigames
- A custom minigame
- Translations
- Music in stems
- Sound effects
- Voices: per language and per hero
- Images: prompts, cutting sheets, transparency, scale
- Asset provenance
- The storyboard, source of truth
- Puzzle design
- Classic mechanics
- Review pages
- DSL reference
- Checking your game
- What the solver proves
- Solver options
- Playtests
- Remix
- Speedrun for authors
- The sealed ending
- Production template
- Example games
- Working with an AI
- Build and release a game
- Publish on GitHub Pages
- The static game on Clever Cloud
- Other static hosts
- Sub-path, cache and service worker, incomplete deploys, going back
- Testing on a phone over the LAN
Local Studio (24)
- The local Studio: overview and launch
- Edit a room
- Placement and stage
- Preview, apply, undo
- Storyboard
- Assets and cutting
- Check: validator, solver, critical path, heat, health, coverage
- Before and after captures
- Semantic diff
- Play and replay a session
- Rule explainer
- Language and objectives
- Voices and the heroes × languages matrix
- Map
- Notes
- Remix in the Studio
- Music
- The Assistant: bring your own key
- Demo mode and studio-apply
- Local and LAN security
- Studio API
- Local MCP: setting up each client
- MCP tools
- Studio troubleshooting
Team Studio (21)
- What runs where
- Concepts: revision, transaction, span, lease, preview, build
- Starting as an invited dev
- Working together day to day
- Roles and actions: the full matrix
- Invitations
- Managing members
- Write refused on the hosted Studio: stale base revision (409)
- Write refused on the hosted Studio: span locked (423)
- Recovering after a lost lease, a disconnection or a stale preview
- Comments
- Map and semantic diff
- Publishing builds
- Remote MCP
- The game in Git
- Upgrading the engine of a hosted game
- Hosted assets
- The server's command line
- Health and metrics routes
- Trying it locally with compose.yml
- Known limits
Clever Cloud (23)
- Clever Cloud: overview, cost and prerequisites
- Apps and add-ons
- Domains and TLS
- Keycloak
- Generic OIDC and GitLab
- Configuration
- First deployment
- Backups
- RPO and RTO
- Restore the Studio on a fresh installation
- Redeploys
- Upgrading the server and checking state after a migration
- Limits of going back
- Monitoring
- Security
- Rotating keys
- Recovering admin access
- Changing domain or OIDC provider
- Worker, PostgreSQL or Cellar down
- Exporting the game and leaving the installation
- Retention
- Clever Cloud troubleshooting
- Costs and teardown
Reality Bridge and connectors (16)
- The Reality Bridge: what it is
- Quick start
- Guarantees
- Install and run the Bridge
- Backup and restore
- Several tenants
- Signals and the manifest
- The Bridge's command line
- Connectors overview
- Email connector
- Telnet connector
- SSH connector
- Open Badges connector
- The connector SDK
- Security: Biscuit and signatures
- Bridge and connector troubleshooting
Contribute (25)
- Welcome
- Developer setup
- The dev loop
- Before a pull request
- Conventions
- Writing documentation
- Architecture
- Code tour
- Import boundaries
- Which tests run when
- Mutation testing
- The coverage ratchet
- The quality baseline
- CI explained
- Field passes
- Benchmarks
- Releasing
- npm packages
- Decisions and ADRs
- Governance
- Bot pull requests
- Contributing with AI agents
- Security policy
- Code of conduct
- Licences and credits