Repository navigation
EN Install From Archive
Français · Type: how-to · Audience: author · Context: created project · Status: ready · Applies from: 4.2.5
The engine is not on npm yet (Install from npm, once published). Each GitHub release attaches
it as an archive, quest-n-click-<version>.tgz, and that archive is how you create and run a game today.
A game project of your own, outside the engine repository: one room, a hero and placeholder art, the engine installed
from the release archive under node_modules/quest-n-click, playing in your browser with npm run dev.
- A created project, on your machine. Nothing here needs a clone of the engine repository.
- From 4.2.5, the release files are named
quest-n-click-…. Before 4.2.5 they wereweb-scumm-…(Coming from web-scumm). - The commands below are the README's quick start. Each release candidate runs them as a reader copies them, in an
empty folder outside the repository, against its own archive (
scripts/readme-quickstart.mjs); after the tag,--publishedchecks that the URL answers and that its bytes match the release'sSHA256SUMS.
- Node.js 22.12 or newer; 22.13 if you will use the local Studio (Requirements).
- Python 3, to prepare the art with
npm run assets(Requirements). - ffmpeg is optional: it converts sounds and videos (Requirements).
- A release version. The latest is on https://github.com/wanoo/quest-n-click/releases/latest; this page uses 4.4.0.
On your machine, in a terminal, from the folder that will contain the new project (create makes the project's
folder itself). Every command after cd my-game runs inside the created project. On Windows, use Git Bash.
-
Name the archive of the release you want. The URL pattern is
https://github.com/wanoo/quest-n-click/releases/download/v<version>/quest-n-click-<version>.tgz:# in the folder that will contain the project T=https://github.com/wanoo/quest-n-click/releases/download/v4.4.0/quest-n-click-4.4.0.tgz
-
Create the project from that archive.
--package=$Truns thequest-n-clickcommand of the archive;--engine=$Twrites the same archive as the project's dependency:# in the folder that will contain the project npx --package=$T quest-n-click create my-game "My Game" --engine=$T
create <folder> ["Title"]refuses a folder that exists and is not empty. The game's id is the folder's name in lowercase kebab case; the title defaults to that name.
-
Install the engine into the project:
cd my-game npm install
-
Install the Python modules the art tools need, from the file the engine package carries:
# in the created project python3 -m pip install -r node_modules/quest-n-click/requirements.txt
-
Prepare the art, then play:
# in the created project npm run assets && npm run dev
Open the URL
devprints. In landscape on a phone it plays as it will for players (the dev server listens on your machine only; Test on a phone on your network opens it to the LAN).?edit=startin the URL opens the placement editor on the roomstart.
-
When you have changed something, check the game and build it:
# in the created project npm run verify npm run buildnpm run buildwritesdist/, a static site any host serves (Build and release).
To check the archive before you run it, download it with the release's sums and install from the file:
# in the folder that will contain the project
gh release download v4.4.0 --repo wanoo/quest-n-click -p 'quest-n-click-4.4.0.tgz' -p 'quest-n-click-v4.4.0-SHA256SUMS'
shasum -a 256 -c --ignore-missing quest-n-click-v4.4.0-SHA256SUMS
npx --package=./quest-n-click-4.4.0.tgz quest-n-click create my-game "My Game" --engine=file:../quest-n-click-4.4.0.tgzThe file: path is read from the project's folder, hence the ../. shasum prints
quest-n-click-4.4.0.tgz: OK when the bytes are those the release lists (checked on 23 Oct 2026 with v4.4.0).
Limit ·
sums-are-not-provenanceA matching sum says the file is the one the release lists, not who made the release. The release's attestations andship verifyanswer that; they are described in Releasing.
create ends with:
my-game: "My Game" created (quest-n-click https://github.com/wanoo/quest-n-click/releases/download/v4.4.0/quest-n-click-4.4.0.tgz).
Next:
cd my-game
npm install
npm run assets && npm run dev
npx quest-n-click help in the project prints quest-n-click 4.4.0: an engine for point-and-click games in the browser and the list of commands. npm run dev shows the template's room with its hero; npm run verify ends
without an error (validate, solve, translations status, lint, playtests).
| Symptom | Cause | Fix |
|---|---|---|
npm error 404 Not Found - GET https://registry.npmjs.org/quest-n-click at npm install
|
The project was created without --engine=$T: its dependency is ^<version>, looked up on npm, where the engine is not published |
Create it again with --engine=$T, or run npm install $T in the project |
my-game exists and is not empty |
create never writes into a folder that holds files |
Pick another folder name, or empty it |
npm warn EBADENGINE Unsupported engine |
Node older than 22.12 | Install Node 22.12 or newer (Requirements) |
npm run assets fails on import PIL
|
The Python modules are missing | Step 4 |
warning: missing images: … after assets
|
The content names an image whose file is not in game/art
|
Add the file, or fix the name (Images) |
npx quest-n-click doctor stops with Cannot find package 'playwright'
|
doctor imports Playwright, which the engine package does not carry |
Install troubleshooting |
create writes only the new folder:
| Path | What |
|---|---|
game/ |
the game: game.ts, rooms/, cast.ts, items.ts, rules.ts, layout/, locales/, art/, audio/, provenance.json
|
public/ |
the page's icons, its preview image, the full font; public/assets is written by npm run assets (not committed) |
dist/ |
the build, with licenses/ (npm run build) |
package.json |
the scripts dev, studio, assets, verify, build, release, preview, each calling quest-n-click, and the engine as its one dependency |
tsconfig.json |
@engine/* points into node_modules/quest-n-click/src/engine, quest-n-click/* into its public API |
.gitignore, README.md
|
node_modules, dist, .cache, public/assets ignored; the commands above |
The template's art is a placeholder drawn from shapes (tools/placeholder-art.py): game/provenance.json says so, and
npm run release refuses it until each file is replaced and reviewed (npx quest-n-click provenance --lock). The
whole layout of a project is on Project layout.
npm install adds node_modules/ and package-lock.json; npm run assets writes public/assets/ and .cache/,
and updates game/assets.gen.json (the pixel sizes of the prepared images). The commands run with the project as their working folder
(WEB_SCUMM_PROJECT): the engine in node_modules/quest-n-click
is read, never written. Outside the project, only npm's cache and the Python modules of step 4 change.
Delete the project's folder: nothing else was written for it. To change the engine version later, see Upgrade.
Applies from 4.2.5 · feature since 4.2.1
A release attaches five npm archives, all at the same version (v4.4.0's list, read on 23 Oct 2026):
quest-n-click-<version>.tgz (the engine), create-quest-n-click-<version>.tgz (npx create-quest-n-click, once
on npm), quest-n-click-bridge-<version>.tgz (the reference Reality Bridge, Install and run the Bridge), quest-n-click-connectors-<version>.tgz (the connectors, an operator's, never a
game's) and, from 4.2.1, quest-n-click-studio-server-<version>.tgz. What each holds is on
Package reference.
The Studio Server archive holds the two commands quest-n-click-studio-server and quest-n-click-studio-worker, the
Studio's page already built, and its own dependencies (OpenID Connect, JWT, Postgres). Their versions are locked in its
npm-shrinkwrap.json and its SBOM; npm reads that lock when it installs from the registry, not from an archive file,
where pg takes the latest 8.x its range allows (quest-n-click-studio-server deps says which). It runs the server of
the engine installed beside it, which must be the same version:
# on the server's machine, in an empty folder for the installation
npm install quest-n-click-<version>.tgz quest-n-click-studio-server-<version>.tgz
npx quest-n-click-studio-server import ./my-game --config studio.config.json
npx quest-n-click-studio-server serve --config studio.config.json
npx quest-n-click-studio-worker # on the worker's machine, with WORKER_PUBLIC_KEY and WORKER_INSTANCEA worker installed from the archives prepares assets too (since 4.2.3): its build hook installs the lock the engine's
package carries, from the worker's folder, where the worker looks for the packages
(WORKER_PYTHON_PATH to put them elsewhere):
CC_POST_BUILD_HOOK=python3 -m pip install --target .python --require-hashes --only-binary=:all: -r node_modules/quest-n-click/ops/studio/worker-requirements.lock. The lock is for CPython 3.13 on Linux x86_64 with
glibc 2.28 or newer (Clever Cloud's native runtime); another platform makes it again (its header says how). In 4.2.2
this needed a worker deployed from the repository.
The engine's archive brings Vite and tsx, which the worker needs to run the game's code and build its previews (the
Studio itself no longer runs Vite, since 4.2.2). Set publicDir to your game's prepared assets (public/ of your
game's repository): the engine's own holds only its icons and font. Each release's candidate installs these two
archives in an empty folder and serves a game from them, its dependencies found whether npm hoists or nests them
(scripts/studio-install-smoke.mjs). Deploying it is First deployment on Clever Cloud.
- Requirements, Package reference, Upgrade
- Your first game, Play online
-
cli/create.mjs(whatcreatewrites),scripts/readme-quickstart.mjs(the quick start replayed by each candidate)
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