How racletteJS Works β
racletteJS uses a managed runtime architecture so application teams can focus on business logic first.
Core Idea β
- racletteJS ships opinionated backend and frontend runtime layers in
@raclettejs/core. - Your app extends that runtime primarily through plugins.
- During
yarn dev, racletteJS builds a virtualized runtime file tree (.raclette) and starts containers from it.
Mental Model β
- Think in layers: core files + app overlays + mounted plugin folders.
- The runtime inside containers is the result of VFS plus extra mounts.
- Plugins are additive by design; service overrides are an escape hatch.
Typical App Structure β
Below is a typical create-raclette-app style project structure:
my-raclettejs-app/
βββ package.json
βββ packages.json
βββ raclette.config.yaml
βββ plugins/
β βββ my-plugin/
β βββ raclette.plugin.ts
β βββ backend/
β βββ frontend/
βββ services/ # optional overrides
β βββ backend/
β βββ frontend/
βββ shared/ # optional shared app code
βββ i18n/ # optional app i18n
βββ .raclette/ # generated runtime outputStart Your Local Application β
From your project root, start development with:
yarn devThis is the main command you use day to day. The racletteJS CLI will:
- Print a lot of log output while it prepares the runtime
- Generate the
.raclettefolder (config, virtual file tree, Docker files) - Start the required Docker containers (app services, database, cache, and Workbench when enabled)
- Attach to service logs in the same terminal, so you keep seeing backend and frontend output
The first run can take noticeably longer, because dependencies are installed inside the containers.
Once startup completes, open the app in your browser:
| Service | URL |
|---|---|
| Main app (frontend) | http://localhost:8081 |
| Workbench (frontend, when enabled) | http://localhost:8083 |
Inspect running containers (optional) β
After yarn dev has finished starting, you can open a separate terminal window and list running containers:
docker psThe table below mirrors a typical docker ps result for a create-raclette-app project named my-test-app (Workbench enabled). Column NAMES matches what you see in the terminal.
| NAMES | IMAGE | STATUS | Host port(s) |
|---|---|---|---|
my-test-app-frontend | my-test-app-frontend | Up (healthy) | 8081 β container 8081 |
my-test-app-backend | my-test-app-backend | Up (healthy) | 8082 β container 3000 |
my-test-app-workbench-backend | my-test-app-workbench-backend | Up (healthy) | 8084 β container 3000 |
raclette-mongodb | mongo:8.2 | Up (healthy) | 27017 (localhost only) |
raclette-cache | valkey/valkey:9.0-alpine | Up (healthy) | 6379 (localhost only) |
App containers are prefixed with your project name from raclette.config (here: my-test-app). MongoDB and cache often keep shared names (raclette-mongodb, raclette-cache) so multiple racletteJS projects can reuse them.
Stop the app β
To stop your local racletteJS app:
- Press Ctrl+C in the terminal where
yarn devis running, or - Run
yarn downfrom the project root
Both stop the racletteJS Docker services started for your app.
Where to Start β
- Read Architecture Overview.
- Read File layering and VFS.
- Read Where to put your code.
- Continue with Getting Started.