Deploy
Build and ship web, iOS, and Android targets from the workspace.
Deploying and inspecting are two halves of one loop, so they share the Production section. The Deploy pane builds your project and publishes it to a real target. The panes beside it point back at that live deployment so you can inspect the real running app, not a mock, from the same workspace.
The Deploy pane covers three targets, switched from the tab pill at its top left: Web, iOS, and Android. Open one to see its status, its primary action, and its build history.
Targets
| Target | What it ships | Status |
|---|---|---|
| Web | Your full-stack app at a production URL | Live for backend templates |
| iOS | Local, TestFlight, and App Store builds | Live |
| Android | A native project you build yourself | Export today, managed builds later |
See Deploy targets for the full support matrix and prerequisites.
Web deploy
Press Deploy in the Web section. It builds the current files on your main branch and publishes the result to a shareable URL. There is nothing to configure; Contrast owns the hosting.
- In the dev stack, deploys serve locally at
https://<slug>.deploy.localhost:<port>. There is no DNS setup, since*.localhostresolves to your machine. - In production, your app runs on managed Cloudflare Workers + Durable
Objects at
https://<slug>.contrast.run. The Durable Object hosts your Zero sync cache and database in-process, so there is no external Postgres for you to provision.
Your slug is the subdomain. It must be 3 to 30 characters of lowercase
letters, numbers, and hyphens. A handful of names such as www, api, app,
and admin are reserved.
Backend templates like App and Game publish to a live Worker. The frontend-only Website template stays on local previews until static hosting lands, and the Web section tells you when production hosting is unavailable for a template.
Walkthrough: Publish to the web.
Custom domains
Once a web deploy is live, attach your own domain from the Web section. Enter a
domain like www.example.com, add the single CNAME record Contrast shows you,
and Contrast issues the SSL certificate automatically. The section tracks status from
Pending DNS through Active, and Refresh re-checks it.
Walkthrough: Custom domains.
iOS and Android
The iOS section ships through three lanes: Local for simulator, device, and local builds, TestFlight for beta testers, and Production for the App Store. Local simulator and device builds need no Apple account, so use them to iterate before you ship; the signed TestFlight and App Store lanes require connecting your Apple account. Signed builds bake in a production backend, so deploy web first.
Android is export-first today. From Project Settings → Export project Contrast
generates a native Android project you build with Gradle or EAS, following the
included EJECT.md. Managed APK builds are on the roadmap.
Walkthrough: App Store.
Then inspect it
Every deploy has a matching view in the same section’s Production and Health panes, which iframe the real deployed app and read its status, stats, and logs. Deleting a deployment only clears its history from the pane. It does not unpublish a live URL.