Repository navigation
EN Clever Apps And Addons
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: none listed on this page
The first step of a hosted Studio on Clever Cloud: the two Node.js applications, the PostgreSQL and Cellar add-ons,
the bucket, and the links between them, made with clever-tools.
Two Node.js applications, my-game-studio and my-game-worker, both linked to the folder of your engine
repository under an alias; a PostgreSQL add-on and a Cellar add-on with one bucket, linked to the studio app only;
the studio app held at exactly one instance. Nothing is deployed yet.
- A hosted Studio (the Studio Server) on Clever Cloud, deployed from the engine repository. From 4.2.3 (the worker's build hook arrived in 4.2.2, the daily backup in 4.2.3).
- Verified on: not verified on a live installation for this page. The reference deployment of 19 October 2026 ran on applications and add-ons of the same kind (two Node.js apps of size XS, PostgreSQL DEV, Cellar S), but they had been created for spike S on 17 October 2026 and reused; nobody has replayed this page's commands from an empty organisation.
- A Clever Cloud organisation, and
clever-toolsinstalled and logged in (clever login). - The engine repository cloned on your machine, at the version you will deploy.
- The overview, to know what each part is for.
On your machine, in the folder of the engine repository: clever link writes .clever.json there, and
clever deploy later pushes that folder's commit. Keep .clever.json out of Git.
-
Create the two applications and the two add-ons, link the add-ons to the studio app only, and hold the studio at one instance:
# on your machine, in the engine repository clever create --type node my-game-studio clever create --type node my-game-worker clever addon create postgresql-addon my-game-pg --plan dev # 5 connections: tight (the server keeps 4); larger for a team clever addon create cellar-addon my-game-cellar clever service link-addon my-game-pg --app my-game-studio clever service link-addon my-game-cellar --app my-game-studio clever scale --min-instances 1 --max-instances 1 --app my-game-studio
Never link the add-ons to the worker. The worker holds no password, key or database access: it reads and writes only through the presigned URLs a job gives it (ADR 0028).
- Create the bucket in Cellar, with its console or any S3 tool (the Cellar add-on's credentials). Its name goes in
the configuration's
blobs.bucket(Configuration).
-
Both apps build from the repository's root: leave
APP_FOLDERunset. An app that held another project may still have one:# on your machine, in the engine repository clever env rm APP_FOLDER --app my-game-studio clever env rm APP_FOLDER --app my-game-worker
-
clever deployandclever sshact on an app linked in the folder you run them from (clever-tools 4 has no--appfordeploy). Link both once, each under an alias:# on your machine, in the engine repository clever link <studio-app-id> --alias my-game-studio clever link <worker-app-id> --alias my-game-worker
A redeploy starts the new instance while the old one still serves, for minutes (Redeploys). Both hold connections meanwhile: twice the usual count. The DEV plan allows 5 connections and the server keeps a pool of 4, so a redeploy exceeds it.
Measure ·
dev-plan-connectionsOn the DEV plan, every redeploy made the instances' background work fail with "too many connections" (leases-read-failed,reconcile-failed,ship-failed), and one write served by the old instance got a 500 ("too many connections for role …") before it went through on a retry. The background work recovered by itself.
- date: 2026-10-19
- version: 4.2.2
- volume: three redeploys of the studio app, a probe writing a note every 3 s
- conditions: Clever Cloud test organisation, region par; studio app XS, one instance; PostgreSQL plan DEV (5 connections); engine at commits c66fbf56 then dd66b38d on main before the 4.2.3 tag (package.json said 4.2.2)
- source: QUALIF-4.2.3-REFERENCE.md §5 and §5 bis
For a deployment people use, take a PostgreSQL plan with more connections than DEV. This project has not measured
which plan is enough: count about 4 connections per instance, two instances during a redeploy, plus the ones you open
yourself (psql, a restore drill uses its own add-on).
-
clever applications(in the repository folder) lists both aliases. -
clever addonlists the two add-ons;clever service --app my-game-studioshows them linked to the studio app, and the same command for the worker shows none. -
clever env --app my-game-studioholdsPOSTGRESQL_ADDON_URIandCELLAR_ADDON_KEY_ID. It prints values, multi-line ones included: filter it to names before you show or paste it anywhere. This keeps only what comes before the first=of lines that start with a variable name:# on your machine, in the engine repository clever env --app my-game-studio | grep -oE '^[A-Z][A-Z0-9_]*='
| Symptom | Cause | Fix |
|---|---|---|
clever deploy deploys the wrong app, or asks which one |
Several apps linked, no alias given | clever deploy --alias my-game-studio |
The build looks for a package.json in a subfolder |
APP_FOLDER left from another project |
clever env rm APP_FOLDER on that app |
The worker has POSTGRESQL_ADDON_URI
|
An add-on linked to the worker | clever service unlink-addon <addon-id> --app my-game-worker |
| "too many connections" in the logs during a deploy | PostgreSQL DEV plan | A larger plan (above) |
-
.clever.jsonin the repository folder (the links and aliases): keep it out of Git. - In Clever Cloud: two applications, two add-ons, one bucket. They are billed from their creation.
Nothing holds data yet. Delete what you created with clever addon delete and clever delete
(Costs and teardown).
- The variables the add-ons inject:
POSTGRESQL_ADDON_URI,CELLAR_ADDON_KEY_ID,CELLAR_ADDON_KEY_SECRET,APP_FOLDER. - Next: Domains and TLS, then Configuration.
- The measures:
docs/dev/QUALIF-4.2.3-REFERENCE.md; the runtime:docs/dev/SPIKE-4.2.1-CLEVER.md.
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