Overview
Deploy any React app, vanilla JS site, or static bundle to a Canvas app. Upload a.zip of your build output and Mixpeek handles hosting, CDN distribution, and versioning — no infrastructure needed.
Every deploy creates an immutable version record with a commit message, asset manifest, and content hashes. See Version History for the full version control system.
Quickstart
1
Build your frontend
Build your app to a static output directory.
2
Zip the output directory
index.html at the root (or inside a single top-level folder). Mixpeek auto-detects the entry point.3
Get a presigned upload URL
upload_url for the next step and bundle_s3_key for the deploy request.4
Upload the zip
5
Trigger the deploy
A commit Include
message is required — it describes what changed in this version.git_commit_sha / git_author for CI/CD traceability.https://{slug}.mxp.co within seconds of a successful build.
Environments
Each app supports two independent environments with separate URLs and asset prefixes:
Staging and production can serve different versions simultaneously. Deploy to staging first to test, then promote to production.
Deploying to staging
https://staging-{slug}.mxp.co.
Promoting staging to production
Once you’ve verified staging, promote it to production by deploying the same bundle to the production environment, or use the restore endpoint to point production at the staging version:Deploy lifecycle
Check deploy status
GET /v1/apps/{app_id}/deploys/{deploy_id} returns the current status of a deploy:
status field will be one of: queued, building, complete, or failed.
Stream build logs
GET /v1/apps/{app_id}/deploys/{deploy_id}/logs/stream returns a Server-Sent Events (SSE) stream of build logs in real time. Use this to monitor progress or debug failed deploys:
complete or failed.
Multi-file output
Your zip can contain any number of files — HTML, JS, CSS, images, fonts. The only requirement is anindex.html at the root. All files are uploaded to S3 and served with appropriate cache headers:
index.html— no-cache (always fresh)- Content-hashed files (e.g.,
app-a1b2c3.js) — immutable, permanent cache - Other assets — standard cache headers
Canvas SDK
Your app runs inside the Mixpeek canvas runtime. Call Mixpeek APIs through the built-in/api proxy — credentials are injected server-side, so your API key never reaches the browser:
Use
/api/v1/... (relative path) instead of https://api.mixpeek.com/v1/... — the canvas proxy injects Authorization and X-Namespace headers automatically, avoiding CORS and keeping API keys out of your bundle.Pre-deploy validation
Mixpeek runs automatic checks on every bundle before deploying:
If any check fails, the deploy is rejected with a descriptive error message.
Deploy via Studio
In the App details page, drag & drop your.zip file onto the Deploy panel and click Deploy. The build is queued immediately and status updates in real time.
Rollback
Every deploy is versioned. You have two rollback options: Quick rollback — restore the previous config:Source files
When you includesource_files in your deploy request, those files are stored alongside the version record. This enables:
- Source-level diffs — compare actual source code between versions, not just built output
- Download and re-deploy — download a version’s source files and deploy modified code

