Run it locally.
The workbench runs as a Docker Compose project. There is nothing to sign in to and nothing leaves the machine.
The workbench
Clone github.com/Anymfah/paramrig, then from its root:
docker compose up -d
Open http://localhost:5174/. The port is fixed: if it is busy, find what is holding it instead of picking another, because the SDK’s default host origins name it.
Bundled rigs are registered in the application. This release does not scan arbitrary folders on disk.
One-off commands
Tests, linting and builds run in the same image, without leaving a watcher behind:
docker compose run --rm app npm test
docker compose run --rm app npm run lint
docker compose run --rm app npm run build
Connecting a project of your own
The connected workspace needs a second service, which reads and writes inside your project’s .paramrig directory and nothing else:
PARAMRIG_PROJECT_DIR=/absolute/path/to/project docker compose --profile web up -d
Then open /web and choose Open project. The project must contain .paramrig/manifest.json. Without one the workspace says so and names the absolute path it is waiting for.
Your project keeps its own development server. ParamRig does not start it, install anything into it, or touch its source.
On Linux, add PARAMRIG_UID=$(id -u) PARAMRIG_GID=$(id -g) so the files the service writes belong to whoever runs the project. They are written 0600, and that project’s agent has to be able to read them. Docker Desktop maps ownership itself and needs neither.
The bundled example
Without a directory of your own, the web profile serves Fieldnotes, a two-page project already instrumented:
docker compose --profile web up -d
It runs at 127.0.0.1:5174, a different browser origin from the workbench at localhost:5174, which is the arrangement a real project has. The example manifest is copied only into a directory that is empty, so forgetting the variable cannot put Fieldnotes into someone else’s repository.
Build only the domains you need
The full suite keeps the existing npm run build command and dist directory. For a smaller application, select domains at compilation:
docker compose run --rm app npm run build:modules -- --modules=audio
docker compose run --rm app npm run build:modules -- --modules=vector,scene
docker compose run --rm app npm run build:modules -- --matrix
The module IDs are audio, vector, scene and web. The matrix produces the full suite plus each single-domain distribution and their archives under .local/modularity/. Selection controls the generated entry points and copied resources. Opening a document for an omitted domain identifies the required module and leaves its data intact.
Direct routes are /audio, /vector, /3d and /web; saved /r/:rigId links still identify the same documents. Existing data belongs to its browser origin. Serving a selective distribution at a different origin does not transfer that data automatically.
Before starting a persistent stack, inspect docker compose ls and stop to coordinate if another development project is active. One-off builds do not require another development server.