Troubleshooting - UpstandPlatform/OpenRive GitHub Wiki
The WASM runtime is copied to apps/web/public/rive/rive.wasm on bun install. Run bun scripts/copy-wasm.ts (or
bun install again) and reload. Behind a proxy, make sure /rive/rive.wasm is served with
Content-Type: application/wasm.
Browsers block module imports and fetch on file:// URLs, so opening index.html by double-clicking it cannot
work. Serve the unzipped folder instead: npx --yes serve . (or python3 -m http.server 8000), then open the
printed URL. A bundle exported with Runtime from CDN also needs internet — re-export it with the runtime included
to play offline. See preview bundles.
Rive deprecated inputs in favour of data binding properties, and warns when runtime code calls
stateMachineInputs. Open the file in OpenRive and run Convert inputs to data binding (the Data tab,
or right-click the canvas), then copy the new snippet from the Code panel — it sets
properties on rive.viewModelInstance and no longer warns. Details in data binding.
Use Bun 1.4+ (bun --version). On Windows, run the terminal as a normal user in a folder you own, not in
C:\Program Files.
bun run cli serve --port 4000, or set PORT=4000. With Docker Compose, set OPENRIVE_PORT=4000 in .env.
OPENRIVE_ACCESS_TOKEN is set. Enter any user name and the token as the password. To disable it, unset the variable
and restart.
-
Embedded mode: only one process may use a data folder at a time. Stop the web app before running the CLI against
it, or pass
--data/--dbto the CLI. - Check
DATABASE_URL(postgres://user:password@host:5432/db). Special characters in the password must be URL-encoded. - Managed databases usually need TLS: add
?sslmode=requireorOPENRIVE_DB_SSL=true; certificates are verified by default, so useOPENRIVE_DB_SSL_CAfor a private CA instead of disabling verification. - With Docker Compose, the app waits for the
dbhealth check. Look atdocker compose logs db. -
openrive storageshows what the CLI connects to.
Older versions stored projects as files in data/projects/. They are imported automatically into an empty database;
run it by hand with openrive db import. Nothing is deleted, so the folder is still there.
The bundled server did not answer in time. Run the app from a terminal to see its output, and make sure no other process is using the same data folder.
Click the canvas first: shortcuts are ignored while typing in a text field. If a shortcut was rebound, open ? and
choose Reset on it. Some browser shortcuts (like Ctrl W) can't be overridden.
Report it with the file attached (see the bug template). Features OpenRive can't edit yet are preserved and should
render identically, because the same runtime draws them. openrive validate file.riv tells you whether the file
round-trips.
.rev is Rive's private editor format. Export a .riv from rive.app (File › Export › For runtime) and import that.
vendor/rive-wasm and vendor/rive-runtime are git submodules, so a plain git clone leaves them empty. Run
bun run rive:init. Nothing else needs them — the editor renders with the npm runtime either way. See
Rive SDK submodules.
Some platforms (Dokploy among them) parse docker-compose.yml with a stricter schema than Docker itself and reject
the depends_on: { db: { condition: service_healthy } } spelling. OpenRive's compose file uses the plain list form
instead, and the app waits for PostgreSQL on its own — it retries for OPENRIVE_DB_WAIT_SECONDS (60 by default)
while the database finishes starting. Deploy a commit that includes that change.
The platform cloned with --recurse-submodules and reached Rive's own submodule, which uses an ssh:// URL that a
build server has no key for. OpenRive marks its vendor/ submodules update = none precisely so this is skipped —
make sure you are deploying a commit that includes that. If the platform forces submodules regardless, run this on
the build host:
git config --global url."https://github.com/".insteadOf "[email protected]:"Nothing in vendor/ is needed to run OpenRive; it is only for building the Rive runtime yourself.
Start Docker Desktop and wait until it says "Engine running", then retry docker compose up -d.
Stop the app and delete (or move) the data/ folder — that includes data/pgdata, the embedded database. The next
start creates a fresh Admin and the welcome project.
This page is generated from docs/troubleshooting.md. Suggest an edit.