Repository navigation
EN Install Package
Français · Reference · Published, partly reviewed by a person · Applies from: 4.3.0
What the engine's npm packages hold, the commands the @quest-n-click/engine package gives a game project, and how each
release checks them. scripts/pack.mjs makes them from the files git tracks; installing them is on
Install from the release archive.
Audience, context, and the statuses of what this page rests on
Audience: author, contributor · Context: engine repository, created project
Since 3.9 a game does not have to live in the engine repository. The engine is packed as @quest-n-click/engine (the
engine, its pages, its tools and the quest-n-click command, the game template), @quest-n-click/create
(npm init @quest-n-click) and, since 4.1.1, @quest-n-click/bridge (the reference Reality Bridge). Since 4.1.9 the
connectors are a fourth package, @quest-n-click/connectors, and since 4.2.1 the hosted Studio is a fifth,
@quest-n-click/studio-server.
From 4.5.2 the packages are named under the npm organisation's scope, @quest-n-click/…, so the organisation owns
them (D53). From 4.2.5 to 4.5.1 they were quest-n-click, create-quest-n-click, quest-n-click-bridge,
quest-n-click-connectors and quest-n-click-studio-server. The commands keep those names (quest-n-click dev,
npx quest-n-click-bridge serve), and so do the archives a release attaches (quest-n-click-<version>.tgz,
create-quest-n-click-<version>.tgz, …). npx quest-n-click migrate moves a game's imports
(quest-n-click/content becomes @quest-n-click/engine/content), its tsconfig.json and its dependencies
(Upgrade notes: 4.5).
Until 4.2.4 these were web-scumm, create-web-scumm, web-scumm-bridge, web-scumm-connectors and
web-scumm-studio-server (the project was called web-scumm, D47). Through 4.2.x each release also shipped them under
their old names, and the old commands and imports (web-scumm dev, web-scumm/content) still worked, after a one-line
notice. 4.3.0 removes them: npx quest-n-click migrate renames what a game still says
(Coming from web-scumm).
All five are on npm from 4.5.2, and each release also attaches them as archives (Install from npm).
The archive quest-n-click-<version>.tgz.
The tracked files under src/, tools/, studio-server/, cli/, games/_template/, public/icons/,
public/fonts/, public/og.png, the store and migration files the Studio's journal shares with the Bridge
(bridge/src/store*.ts, migrations.ts, allowlist.ts), index.html, studio.html, vite.config.ts,
tsconfig.json, requirements.txt and LICENSE. Never a game of the
repository, a test, a source documentation page or a build. Left out of tools/ as well: the asset audit, the Bridge's
cross-check and fixtures, the connectors' fuzz harness.
The command quest-n-click (cli/quest-n-click.mjs), and five public entries: @quest-n-click/engine/content, /player,
/minigames, /testing, /reality (Public API), plus @quest-n-click/engine/cli/*. Anything else is
internal.
The engine's runtime dependencies (earcut, howler, navmesh, zod) and what the tools need in a game project:
Vite and vite-plugin-pwa, tsx, @typescript/typescript6 (the compiler API the tools use), @types/node,
@types/howler, Tweakpane, the MCP SDK. Tests and Playwright stay out, which is why quest-n-click doctor needs a
workaround in a created project (doctor). The package carries no lock: npm
resolves these ranges at install.
feature since 4.5.0
From 4.5.0 the package carries the documentation of its version, written by npm run wiki -- bundle into the prepared
folder before npm pack (never committed): index.json, md/<lang>/<id>.md, legacy/<NAME>.md, assets/ and
bundle-manifest.json with each file's sha256. Two packs of one commit give the same bytes. The MCP server of a
created project reads it (read_doc, search_docs, list_docs).
The archive create-quest-n-click-<version>.tgz. One file, index.mjs, the command create-quest-n-click, which runs
quest-n-click create from the engine it depends on (@quest-n-click/engine at the same version):
npm init @quest-n-click my-game "My Game" once on npm (or npx @quest-n-click/create my-game "My Game").
npx create-quest-n-click my-game still works and runs the same thing: the unscoped create-quest-n-click is a relay,
published on a maintainer's account, whose command imports @quest-n-click/create/index.mjs. So this package keeps
index.mjs at its root and no exports map.
The archive quest-n-click-bridge-<version>.tgz. The reference Reality Bridge on its own: bridge/src bundled by esbuild into one module (src/cli.mjs, compiled since
4.1.2, so it runs on Node alone), its Datalog policies and its SQL migrations, the command quest-n-click-bridge
(init, serve, grant, rotate, revoke, doctor, compact, migrate, tenant, backup, restore). Biscuit's
WebAssembly and zod are dependencies; pg and OpenTelemetry are loaded by name only when used. It carries its
npm-shrinkwrap.json (since 4.1.19): an install resolves nothing. The Bridge's CLI.
The archive quest-n-click-connectors-<version>.tgz. The connector SDK, the command quest-n-click-connector <email|telnet|ssh|open-badge> --config <file.json> and the four
connectors bundled into one module, with the MIME reader's worker beside it; ssh2 is a dependency. An operator's
package, run beside a Bridge, never a game's. Install it without native code:
npm install --omit=optional --ignore-scripts quest-n-click-connectors-<version>.tgz. It carries its
npm-shrinkwrap.json. Experimental (4.1.9). Connectors.
The archive quest-n-click-studio-server-<version>.tgz. The commands quest-n-click-studio-server and
quest-n-click-studio-worker, which run the server and the processing worker of the engine installed beside it
(@quest-n-click/engine, an optional peer: the same version, or they stop with
… runs with @quest-n-click/engine <v>, not <w>),
and the Studio's page built once. Its own dependencies are locked in its npm-shrinkwrap.json; installed from the
archive file rather than the registry, npm resolves them from their ranges (quest-n-click-studio-server deps says
which). Install from the release archive.
npx quest-n-click help lists them. The project's package.json names the usual ones as npm scripts (dev,
studio, assets, verify, build, release, preview):
| Command | What |
|---|---|
quest-n-click dev / studio
|
the game, the Studio |
quest-n-click assets |
art and audio into public/assets
|
quest-n-click verify |
validate, solve, translations, lint, playtests |
quest-n-click doctor |
the prerequisites: Node and Chromium required; Python, ffmpeg and WebKit optional, said when missing (4.1.6); needs a workaround in a created project (doctor) |
quest-n-click mcp |
the MCP server of this game, on stdio, for an assistant (4.1.6) |
quest-n-click build |
assets, verify, the build, every file of dist/ accounted for |
quest-n-click release [--commercial] |
build, then the release gates: provenance lock, budgets, translations, voices, strict playtests, the proof |
quest-n-click validate, solve, lint, i18n, weight, provenance, playtests, voices, prompts, ids
|
each tool, with its options |
quest-n-click speedrun verify <run.wsrun> |
a speedrun replayed against the game: its verdict, code and reason |
quest-n-click bridge, solve-reality
|
a reference Bridge for the game; a game with reality.signals proved closed |
quest-n-click preview |
serve dist/ locally |
quest-n-click create <folder> ["Title"] [--engine=<spec>] |
a new game project from the template |
quest-n-click migrate |
bring the game's sources to the installed engine's format (Upgrade) |
They run with the project as their working folder
(WEB_SCUMM_PROJECT): the engine in
node_modules/@quest-n-click/engine is read, never written. Every option is on Command line.
-
npm run fresh-install(a CI job, when a package, template or authoring path changed): packs the engine (npm run pack), creates a game from the packed template in an empty folder outside the repository, installs the tarball, runsassets,verifyandbuild, and plays the game to its ending in Chromium. A file of the new project that names the repository fails it. -
npm run external-consumer(each release candidate, on Ubuntu, macOS and Windows): the candidate's own archives, never packed again, installed outside the repository: a game created on an older release and moved to them, an old save played to the ending, the documentation bundle checked against its manifest and read through a real MCP client,@quest-n-click/create, the Bridge and the connectors from their archives. -
npm run readme-quickstart: the README's quick start, run as a reader copies it. -
npm run upgrade-check -- --from=<version>: a game moved from an older release to this one. -
scripts/studio-install-smoke.mjs: the engine and Studio Server archives installed together, a game served.
Each release attaches the five archives with their SBOMs and sums. Publishing them to npm is the maintainers' (the
organisation quest-n-click owns the five scoped names; from 4.5.2 CI stages them, an owner approves with 2FA, and
4.5.2 was the first published):
npm packages.
-
npm run pack(node scripts/pack.mjs [--out=<dir>] [--publish-dry-run] [--build-id <id>] [--allow-dirty]), writing into.cache/packby default -
npm run locks(the Bridge's and connectors' locks,scripts/locks/; a lock that no longer fits stopspack) - Install from the release archive, Command line, npm packages
-
scripts/pack.mjs,scripts/fresh-install.mjs,scripts/external-consumer.mjs
Generated publication · publication générée — current documentation · documentation courante: quest'n'click 4.5.3 r1, documentation revision · révision de la documentation b061c4ae6fbeb0be47a11ba8a442ba7e23ecb0a1.
Latest documentation · dernière documentation: https://quest-n-click.cleverapps.io/docs · https://quest-n-click.cleverapps.io/fr/docs; earlier versions · versions précédentes: each release's quest-n-click-docs-<version>.tar.gz · l'archive quest-n-click-docs-<version>.tar.gz de chaque release, https://github.com/Quest-n-Click/quest-n-click/releases
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 (18)
- Requirements
- Install from the release archive
- Install from npm
- 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.5
- 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