Skip to main content
Canvas Apps require an Enterprise plan. Contact us to upgrade.

Overview

Canvas is Mixpeek’s application hosting platform. Build a web app using any frontend framework — React, Vue, Svelte, vanilla JS, or plain HTML — and deploy it as a zip bundle. Mixpeek handles hosting, CDN, auth, versioning, and the entire backend. Your app is live at {slug}.mxp.co the moment you deploy. No servers to manage, no infrastructure to configure, no API keys in your frontend code.

How it works

You write frontend code. Mixpeek provides everything else:
  • Hosting — your built assets (HTML, JS, CSS, images) are stored on S3 and served via CDN with immutable caching
  • Backend proxy — all /api/* requests are forwarded to api.mixpeek.com with your org’s API key and namespace injected server-side. Your credentials never reach the browser.
  • Runtime injection — the Canvas runtime injects window.__MIXPEEK__ into your HTML at serve time with auth config, environment variables, and monitoring hooks
  • Auth — optionally enable Clerk-powered sign-in (Google, GitHub, email) with per-app user management. The auth SDK is auto-injected — no libraries to install.
  • Environments — deploy to staging (staging-{slug}.mxp.co) or production ({slug}.mxp.co) independently
  • Versioning — every deploy creates an immutable version with content hash, commit message, and source files. Rollback instantly.
  • Monitoring — error boundaries, Sentry, and PostHog are auto-injected for crash detection and usage analytics
You bring the UI, Mixpeek brings search, retrieval, ingestion, and multimodal AI.

Deploy from code

Upload any React, vanilla JS, or static site. Mixpeek serves it from S3 with CDN caching.

Custom domains

Default domain at {slug}.mxp.co. Add your own subdomain via CNAME with auto TLS.

Built-in auth

Clerk-powered sign-in (Google, GitHub, email) — auto-injected into your app with zero config.

User management

Invite members, assign roles, and control per-app access — powered by Clerk organizations.

Git-like version control

Every publish and deploy creates an immutable version with a content hash, message, and diffable snapshot.

Architecture

When a user visits {slug}.mxp.co, here’s the request lifecycle:
  1. DNS — resolves to the Canvas runtime (Cloudflare-proxied, DDoS protected)
  2. Routing — the Express server maps the hostname to your app_id (cached in Redis). Supports {slug}.mxp.co, staging-{slug}.mxp.co, and custom domains.
  3. HTMLindex.html is fetched from S3 and dynamically injected with window.__MIXPEEK__ (runtime config, auth, monitoring)
  4. Assets — JS, CSS, and images are served from S3 via CDN with immutable cache headers (content-hashed filenames → permanent caching)
  5. SPA routing — non-asset paths fall through to index.html so client-side routing (React Router, etc.) works out of the box
  6. API proxy/api/* requests are forwarded to api.mixpeek.com with Authorization and X-Namespace headers injected server-side
Your API key is never sent to the browser. The /api proxy runs server-side and injects credentials on every request. Your frontend code only calls relative paths like /api/v1/retrievers/execute.

Runtime config injection

The canvas runtime injects a window.__MIXPEEK__ object into your app’s HTML at serve time:
Access these values in your app code:
Do not use process.env in your app — it will crash in the browser. Use window.__MIXPEEK__ for runtime config or import.meta.env for Vite build-time variables.

Quickstart

1

Create an App in Studio

Go to AppsCreate App. Give it a name and a globally-unique slug — this becomes your default URL at https://{slug}.mxp.co.
2

Build your frontend

Write a React app (or any static site) that calls Mixpeek APIs via the canvas proxy. See the example below.
3

Deploy the bundle

In the App details page, drag & drop your .zip onto the Deploy panel and click Deploy. Your build is queued immediately.Or via API:
4

Visit your App

Your app is live at https://{slug}.mxp.co within seconds of a successful build. Add a custom domain to use your own URL.

Canvas SDK

The canvas runtime injects credentials server-side — your API key never reaches the browser. Call any Mixpeek API through the /api proxy:

What /api supports

The proxy forwards all Mixpeek API methods with your org’s credentials injected:
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.

Using the Mixpeek JS SDK

You can also use the mixpeek npm package pointed at /api:

Billing

All API calls through /api are billed to the organization that owns the canvas app. End-users don’t need their own Mixpeek API keys or accounts — usage is attributed to your org automatically.

Environments

Each app supports two independent environments: Each environment has its own S3 asset prefix, so staging and production can serve different versions simultaneously. Deploy to either environment from Studio or via the API.

Deploying to staging

Set "environment": "staging" in the deploy request. Your staging build is live at https://staging-{slug}.mxp.co.

Promoting to production

Deploy the same bundle to production, or use the restore endpoint to point production at a staging version’s assets:

Creating an App

Via Studio

Go to AppsCreate App. The wizard collects:
  1. Name + Slug — the name is display-only; the slug becomes your URL ({slug}.mxp.co) and must be globally unique
  2. Access Control — choose how end-users authenticate (public, password, API key, JWT, or SSO)

Via API

Only slug and meta are required. After creation, deploy your code via the deploy pipeline.

Deploy lifecycle

Every deploy creates a new versioned build. The lifecycle is:

Operations

Each deploy requires a commit message describing what changed. See Version History for the full version control system.

Authentication modes

Auth enforcement activates when the canvas runtime is deployed. Config is stored now and takes effect automatically.

Custom domains

Every app gets a default URL at https://{slug}.mxp.co. You can also add your own subdomain:
  1. Enter your subdomain (e.g., search.yourdomain.com) in the Domains panel
  2. Add a DNS CNAME record pointing to the target shown in the response
  3. Click Verify — Mixpeek provisions a TLS certificate automatically via Cloudflare
See Custom Domains for the full setup guide.

Example apps

E-commerce product search

React app with multimodal search — text queries, image upload, and faceted filters backed by a Mixpeek retriever.

Internal knowledge base

Password-protected semantic search over company documents, PDFs, and meeting transcripts.

Media library

Video + image search portal with scene-level results, thumbnails, and timestamp previews.

Content moderation dashboard

Real-time moderation queue pulling from alert webhooks and showing flagged content with similarity scores.