Deploy
Choose the right runtime shape for production.
Embedded
Use embedded mode when the Laravel host can run Chrome locally and you want the shortest path from install to first successful render.
CANIO_RUNTIME_MODE=embedded
CANIO_RUNTIME_AUTO_INSTALL=true
CANIO_RUNTIME_AUTO_START=true
CANIO_RENDERER_DRIVER=rod-cdp
CANIO_BROWSER_PRODUCT=chrome
CANIO_BROWSER_INSTALL_PATH=/var/lib/canio/browsers
CANIO_RUNTIME_STATE_PATH=/var/lib/canio
CANIO_RUNTIME_LOG_PATH=/var/log/canio/stagehand.log
Remote
Use remote mode when you want Stagehand isolated, shared, or independently scaled from the Laravel app.
CANIO_RUNTIME_MODE=remote
CANIO_RUNTIME_BASE_URL=http://stagehand.internal:9514
CANIO_RUNTIME_STARTUP_TIMEOUT=30
Remote browser endpoint
Use remote CDP when Laravel should keep Stagehand local but Chrome should run in a container, render farm, or browserless-style service.
CANIO_RENDERER_DRIVER=remote-cdp
CANIO_REMOTE_CDP_ENDPOINT=ws://chrome-renderer.internal:9222/devtools/browser/<id>
Direct CDP fallback
Rod is the default local renderer in v1.0.6. Use direct CDP only as an explicit fallback after validating your documents.
CANIO_RENDERER_DRIVER=local-cdp
Operational checks
- Make Chrome availability explicit on the runtime host.
- Run
php artisan canio:browser:installor setCANIO_CHROMIUM_PATH. - Persist runtime state if artifacts, jobs, and replay matter.
- Route Stagehand logs into your normal logging pipeline.
- Only set
CANIO_CHROMIUM_NO_SANDBOX=truewhen the environment requires it.
Full guide
Read the complete production guide in docs/deployment.md.