DeployX docs
DeployX puts an app on a live URL and runs what it needs beside it: domains, variables, data, files, schedules and monitoring. Static sites, build output and Claude artifacts go live on DeployX Sites with no keys. Apps that need a server build, such as Next.js, run in the Vercel account you connect, so the code and bill stay yours.
- Create an account and confirm your email.
- Open New project and pick a starter, paste a Claude artifact, drop in a folder, or import a GitHub repository.
- For a server app, connect a Vercel token in Settings → Providers. Add a GitHub token too if your repositories are private.
- To deploy from an AI agent instead, open Agents and follow the three steps there.
What DeployX deploys
44 stacks, each with the route it takes. Agents read the same list with the MCP tool list_stacks, the CLI with deployx stacks [query], and scripts with GET /api/v1/stacks.
| Stack | Language | Routes | How it ships |
|---|---|---|---|
| HTML and CSS | HTML | DeployX Sites, Run anywhere | Served as it is on DeployX Sites; export to GitHub Pages, Netlify or nginx. |
| Claude artifacts | React, HTML, SVG | DeployX Sites, Agents | Compiled at deploy time with shadcn/ui, lucide and Tailwind, then served on DeployX Sites. |
| Vite | TypeScript | DeployX Sites, Built on Vercel, Run anywhere | Publish dist/ on DeployX Sites, build in CI for Sites, or build on Vercel. |
| React | TypeScript | DeployX Sites, Built on Vercel, Run anywhere | A Vite or Create React App build goes to DeployX Sites; Next.js and Remix build on Vercel. |
| Vue | TypeScript | DeployX Sites, Run anywhere | The Vite build in dist/ goes to DeployX Sites or GitHub Pages. |
| Svelte | TypeScript | DeployX Sites, Run anywhere | The Vite build in dist/ goes to DeployX Sites; SvelteKit builds on Vercel. |
| Solid | TypeScript | DeployX Sites, Run anywhere | The Vite build in dist/ goes to DeployX Sites. |
| Angular | TypeScript | DeployX Sites, Built on Vercel, Run anywhere | Detected from package.json; the dist/ build goes to Sites or builds on Vercel. |
| Astro | TypeScript | DeployX Sites, Built on Vercel, Run anywhere | Detected; static dist/ to DeployX Sites, server output built on Vercel. |
| Gatsby | TypeScript | DeployX Sites, Built on Vercel, Run anywhere | Detected; the public/ build serves from DeployX Sites. |
| Docusaurus | TypeScript | DeployX Sites, Built on Vercel, Run anywhere | Detected; the build/ folder serves from DeployX Sites. |
| VitePress | Markdown | DeployX Sites, Built on Vercel, Run anywhere | Detected; the .vitepress/dist build serves from DeployX Sites. |
| Parcel | JavaScript | DeployX Sites, Built on Vercel, Run anywhere | Detected; the dist/ build serves from DeployX Sites. |
| Hugo | Go templates | DeployX Sites, Run anywhere | Publish the public/ folder Hugo writes; DeployX Sites finds it. |
| Jekyll | Ruby | DeployX Sites, Run anywhere | Publish the _site/ folder; DeployX Sites finds it. |
| Eleventy | JavaScript | DeployX Sites, Run anywhere | Publish the _site/ folder; DeployX Sites finds it. |
| MkDocs | Python | DeployX Sites, Run anywhere | Publish the site/ folder MkDocs writes. |
| Flutter web | Dart | DeployX Sites, Run anywhere | Publish build/web; DeployX serves it cross-origin isolated automatically. Android: export as a Trusted Web Activity. |
| Rust to WebAssembly | Rust | DeployX Sites, Run anywhere | Publish the wasm-pack or Trunk output; .wasm is served with its own type. |
| C and C++ with Emscripten | C, C++ | DeployX Sites, Run anywhere | Publish the Emscripten output; threaded builds are served cross-origin isolated. |
| Godot web export | GDScript | DeployX Sites | Publish the web export; threaded exports are served cross-origin isolated. |
| Next.js | TypeScript | Built on Vercel, Run anywhere | Imported from GitHub, built on Vercel, redeployed on every push; Docker export runs it anywhere. |
| Nuxt | TypeScript | Built on Vercel, Run anywhere | Detected and built on Vercel; Docker export runs the Nitro server. |
| SvelteKit | TypeScript | Built on Vercel, Run anywhere | Detected and built on Vercel; Docker export runs the Node build. |
| Remix | TypeScript | Built on Vercel, Run anywhere | Detected and built on Vercel. |
| React Router | TypeScript | Built on Vercel, Run anywhere | Framework mode detected and built on Vercel. |
| TanStack Start | TypeScript | Built on Vercel, Run anywhere | Detected and built on Vercel. |
| Express | JavaScript | Built on Vercel, Run anywhere | Built on Vercel, or exported to Docker, Fly.io, Render or systemd. |
| Hono | TypeScript | Built on Vercel, Run anywhere | Built on Vercel, or exported as a container. |
| Fastify | TypeScript | Built on Vercel, Run anywhere | Built on Vercel, or exported as a container. |
| NestJS | TypeScript | Built on Vercel, Run anywhere | Built on Vercel, or exported to Docker and Kubernetes. |
| Koa | JavaScript | Run anywhere | Detected; exported to Docker, Compose, Fly.io, Render or systemd. |
| FastAPI | Python | Run anywhere | Detected; exported to Docker, Compose, Kubernetes, Fly.io, Render or systemd with uvicorn. |
| Django | Python | Run anywhere | Detected; exported with gunicorn to Docker, Kubernetes, Fly.io, Render or systemd. |
| Flask | Python | Run anywhere | Detected; exported with gunicorn to any container host. |
| Go | Go | Run anywhere | go.mod detected; a distroless container, Kubernetes, Fly.io, Render or systemd. |
| Any Node.js server | JavaScript | Run anywhere | A start script is enough: exported to a container, Compose, Fly.io, Render or systemd. |
| Windows desktop apps | MSI, EXE | Run anywhere | A GitHub release installer packaged with PSAppDeployToolkit for Intune or ConfigMgr. |
| Android apps from a PWA | Kotlin, via Bubblewrap | Run anywhere | Any project with a web manifest becomes a Trusted Web Activity you build into an .aab for Google Play. |
| Claude Code | MCP | Agents | One command adds DeployX; the agent deploys, reads errors and rolls back. |
| Claude Desktop | MCP | Agents | Add DeployX as a custom connector. |
| Cursor | MCP | Agents | Add DeployX to ~/.cursor/mcp.json. |
| VS Code | MCP | Agents | Add DeployX to .vscode/mcp.json for Copilot agent mode. |
| Any MCP client | JSON-RPC | Agents | Streamable HTTP, stateless JSON-RPC, a bearer token. |
Deploy without GitHub
Send the files themselves. Files that run as they are go to DeployX Sites with no key; source with a package.json that needs a build goes to Vercel. A new version is another upload to the same project. Uploads hold up to 4 MB, so push bigger apps to GitHub and import the repository.
curl -X POST https://deployx.verionx.org/api/v1/deploy \
-H "Authorization: Bearer $DEPLOYX_TOKEN" -H "Content-Type: application/json" \
-d '{"name": "menu", "files": [{"path": "index.html", "content": "<h1>Today: jollof and plantain</h1>"}]}'The console does the same from New project: drag a folder in, or start from a template (a static site, a React artifact, Vite + React or Next.js). Agents use the MCP tools deploy_files and deploy_template.
DeployX Sites
DeployX Sites is the built-in host. It needs no account, key or payment: files that run as they are (HTML, a build output such as dist/ or build/web, a Claude artifact) go live at <sites origin>/<project>/. Each deployment also keeps its own address, rollback is instant, and the files of the newest ten deployments are kept. Sites are served from a separate origin, so a hosted page can never read your console session.
Source that still needs a build is refused with the reason. Build it locally and upload the output, or export Build in CI for DeployX Sites: GitHub Actions builds on every push and publishes the result here. Flutter web and threaded WebAssembly builds are detected and served cross-origin isolated.
Claude artifacts
Paste an artifact in New project, or send it from an agent with deploy_artifact. DeployX compiles React artifacts at deploy time, with Tailwind, lucide icons, npm imports and the shadcn/ui components from claude-artifact-runner, and serves HTML and SVG as they are.
curl -X POST https://deployx.verionx.org/api/v1/artifacts \
-H "Authorization: Bearer $DEPLOYX_TOKEN" -H "Content-Type: application/json" \
-d '{"name": "menu", "code": "export default function App() { return <h1>Today: jollof</h1>; }"}'The other way round, get_status_page returns a self-contained status page for a project. Claude Code can publish it with its Artifact tool and refresh it later.
Free subdomains
Under Domains, DeployX checks a free name on is-a.dev or rweb.site and writes the exact record for your project, with a link that opens the registry on GitHub filled in. You submit the pull request yourself; is-a.dev closes AI-generated ones. Sites projects use an is-a.dev URL record. rweb.site takes CNAME records, so it suits projects on Vercel. Open Domains has moved to open-domains.com, where you register directly.
Deploys
A deploy downloads the commit from GitHub, transfers it to the build provider with your environment variables, and tracks the build until it is live or fails. The production branch deploys to production; any other branch gets a preview with its own URL.
Rollback switches production to an earlier ready build at once, with no rebuild. Promote takes a preview to production; it rebuilds so production variables apply. When a build fails, DeployX matches the log against known causes (a missing package, a type error, a lockfile mismatch, memory, the Node.js version, the output directory) and shows the line that proves it with the fix.
Deploy on push
Each project has a GitHub webhook URL and its own secret under Settings → Deploy on git push. Every request is verified against that secret before anything is read. With a GitHub token connected, DeployX installs the hook for you. Or deploy from GitHub Actions with the workflow from Export → GitHub Actions, which waits for the build and fails the check when it fails.
Data API
Each project has a JSON document store. Collections appear on first write. Your app authenticates with a project key from the Data tab. Keep the key on your server and out of browser code.
curl -X POST https://deployx.verionx.org/api/v1/data/orders \
-H "Authorization: Bearer $DEPLOYX_PROJECT_KEY" \
-H "Content-Type: application/json" \
-d '{"customer": "ada@example.com", "status": "open", "total": 42}'
curl "https://deployx.verionx.org/api/v1/data/orders?where=%7B%22status%22%3A%22open%22%7D&limit=20&order=newest" \
-H "Authorization: Bearer $DEPLOYX_PROJECT_KEY"
# PATCH merges fields (null removes one), PUT replaces, DELETE removes
curl -X PATCH https://deployx.verionx.org/api/v1/data/orders/<id> -H "Authorization: Bearer $DEPLOYX_PROJECT_KEY" \
-H "Content-Type: application/json" -d '{"status": "paid"}'Responses return documents flattened with id, _created_at and _updated_at. Updates are guarded against lost writes: if the document changed since it was read, the update is refused.
Runtime monitor
A 2 KB script reports uncaught errors, failed resources, failed requests and response times from the browsers of real visitors. DeployX adds it to uploaded pages; for a repository, paste the tag from the Monitoring tab into your root layout. Reports appear under Monitoring, grouped by message, and the MCP tool get_runtime_errors returns the same view.
<script src="https://deployx.verionx.org/rum.js" data-key="<your project's key>" defer></script>
Webhooks
Events: deployment.created, deployment.ready, deployment.error, deployment.canceled, deployment.promoted, uptime.down, uptime.up. JSON deliveries are signed: verify X-DeployX-Signature before trusting a payload.
import { createHmac, timingSafeEqual } from 'node:crypto';
export function verify(rawBody: string, header: string, secret: string) {
const expected = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex');
return header.length === expected.length && timingSafeEqual(Buffer.from(header), Buffer.from(expected));
}REST API
Authenticate with a personal API token from Settings → API tokens: Authorization: Bearer dxp_…. Errors come back as { "error": { "message": … } } with a meaningful status code.
| GET | /api/v1/me | You and your workspaces |
| GET | /api/v1/projects | Projects with latest and production deployments (?workspace=) |
| POST | /api/v1/projects | Import a repository: { repo, name?, branch?, rootDirectory?, framework?, env?, deploy? } |
| POST | /api/v1/deploy | Deploy files with no repository: { name? or project?, files: [{ path, content, encoding? }], framework? } |
| GET, POST | /api/v1/templates[/:id] | List the starters, or deploy one { name? } |
| GET | /api/v1/hosting | Whether this DeployX hosts projects without keys |
| POST | /api/v1/github/inspect | Detect how a repository builds without creating anything: { repo, branch?, rootDirectory? } |
| GET, PATCH, DELETE | /api/v1/projects/:slug | Read, change settings, delete |
| GET, POST | /api/v1/projects/:slug/deployments | List, or deploy { branch?, target? } |
| GET | /api/v1/deployments/:id?sync=1 | One deployment, refreshed from the provider |
| GET | /api/v1/deployments/:id/logs | Build log lines |
| GET | /api/v1/deployments/:id/source[/file] | List deployed files (?glob=), or read one (?path=) |
| POST | /api/v1/deployments/:id/:action | cancel, promote, rollback or redeploy |
| GET, POST | /api/v1/projects/:slug/env | List names, or set { key, value, targets } |
| GET, DELETE | /api/v1/projects/:slug/env/:id | Reveal a value, or delete |
| GET, POST | /api/v1/projects/:slug/domains | List, or add { name } |
| POST, DELETE | /api/v1/projects/:slug/domains/:name[/check] | Re-check DNS, or remove |
| GET, POST, PATCH, DELETE | /api/v1/projects/:slug/schedules[/:id] | Cron schedules { name, schedule, path, method } |
| GET | /api/v1/projects/:slug/checks | Uptime, latency and schedule runs |
| GET | /api/v1/projects/:slug/runtime | Visitor errors, failed requests and response times, last 24 hours |
| GET, POST, DELETE | /api/v1/projects/:slug/webhooks[/:id] | Outgoing webhooks { url, events, format } |
| GET, POST, DELETE | /api/v1/projects/:slug/files | List (?prefix=), upload (multipart file + path), delete (?path=) |
| GET | /api/v1/projects/:slug/files/url?path= | A signed download link |
| GET | /api/v1/projects/:slug/export?format= | Deploy Anywhere files: sites-ci, github-pages, netlify, docker, compose, kubernetes, github-actions, systemd, fly, render, psadt, android-twa |
| GET | /api/v1/stacks?q=&route= | What DeployX deploys, stack by stack, and the route each takes |
| GET | /api/v1/activity | Workspace audit trail |
MCP server
DeployX speaks the Model Context Protocol over Streamable HTTP at https://deployx.verionx.org/api/mcp. Agents authenticate with the same API tokens and can do what the token's owner can, and no more.
{
"mcpServers": {
"deployx": {
"type": "http",
"url": "https://deployx.verionx.org/api/mcp",
"headers": {
"Authorization": "Bearer dxp_your_token"
}
}
}
}claude mcp add --transport http deployx https://deployx.verionx.org/api/mcp --header "Authorization: Bearer dxp_your_token"
| whoami | The account this token belongs to and the workspaces it can reach. |
| list_projects | Projects in a workspace with their latest and current production deployment. |
| get_project | Full settings for one project. |
| inspect_repository | Read a repository and report the framework, runtime and build settings DeployX would use. Creates nothing. |
| create_project | Import a GitHub repository as a project and, unless deploy is false, start its first production deployment. |
| update_project_settings | Change build settings, the production branch, automatic deploys or monitoring. Applies from the next deployment. |
| deploy | Deploy the latest commit of a branch. The production branch goes to production unless target says otherwise. |
| deploy_files | Deploy an app from files, no GitHub needed. Send every file of the app; the framework is detected from package.json (static HTML works with no build). Omit project to create a new one named by name; pass project to ship a new version of an existing one. Up to 4 MB in total. |
| deploy_template | Create a new project from a built-in starter and deploy it, no repository needed. Templates: static (HTML · CSS), react-artifact (React 18 · shadcn/ui), vite-react (Vite · React 19), nextjs (Next.js 16 · React 19). |
| deploy_artifact | Publish a Claude artifact as a production site on DeployX Sites, with no build server and no key. kind is detected: a React component (default export; TSX/JSX; imports from react, lucide-react, recharts and other npm packages, plus shadcn/ui as @/components/ui/<name> with 48 components available), a full HTML page, or an SVG. Tailwind classes work. Pass project to publish a new version of an existing site. |
| get_status_page | A self-contained HTML status page for a project (live URL, recent deployments, visitor errors). Publish it with your own Artifact tool to keep a shareable, living status page; call again to refresh it. |
| prepare_free_subdomain | Check a free name on is-a.dev or rweb.site and write the exact record pointing at the project, plus a link that opens the registry on GitHub with it filled in. The user submits the pull request themselves; do not open it for them (is-a.dev closes AI-generated pull requests). open-domains has moved off GitHub and only gets a link. |
| list_stacks | Every framework and language DeployX ships, and the route each takes: sites (live on DeployX Sites, no key), build (built on Vercel), export (files to run elsewhere, including Android via android-twa), agent (MCP clients). Call this before deploying to pick the right tool. |
| get_hosting | Where projects can run on this server: DeployX Sites (always on, static, no key) and hosted Vercel builds (when the operator switched them on), with per-workspace limits. |
| get_runtime_errors | What real visitors hit in the last 24 hours: uncaught errors and failed requests grouped by message with counts, plus request latency. Needs the monitor script in the app (added automatically to uploaded HTML). |
| list_source_files | Files that went into a deployment, optionally filtered by a glob such as **/*.tsx. |
| read_source_file | The contents of one file exactly as it was deployed. |
| list_deployments | Recent deployments of a project, newest first. |
| get_deployment | Status of one deployment, refreshed from the build provider. On error it includes failure_analysis: the cause, the log line that proves it, and fixes. |
| get_build_logs | Build output for a deployment. |
| deployment_action | cancel a running build; promote a ready deployment to production; rollback production to an earlier ready deployment; redeploy the same branch. |
| list_env | Variable names and targets. Values are not returned. |
| set_env | Create or replace a variable. It is stored encrypted and applies from the next deployment. |
| delete_env | Remove a variable by name. |
| list_domains | Custom domains with verification state and the DNS records still needed. |
| add_domain | Attach a custom domain. Returns the DNS records to create at the registrar. |
| check_domain | Re-check DNS and ownership for a domain. |
| data_list_collections | Collections in the project document store, with document counts. |
| data_query | Documents in a collection. where matches fields exactly, e.g. {"status":"open"}. |
| data_insert | Add a JSON document to a collection. Collections are created on first insert. |
| data_update | Merge fields into a document. A field set to null is removed. |
| data_delete | Remove one document. |
| create_schedule | Call a path on the production URL on a cron schedule (five fields, UTC). |
| list_schedules | Schedules with their next and last run. |
| get_monitoring | Uptime over 24 hours and 7 days, latency percentiles and recent checks of the production URL. |
| create_webhook | Send deployment and uptime events to an HTTPS URL, as JSON or as Slack or Discord messages. Returns the signing secret once. |
| export_project | Generate the files to run this project elsewhere. Formats: sites-ci, github-pages, netlify, docker, compose, kubernetes, github-actions, systemd, fly, render, psadt, android-twa. |
| list_activity | Who changed what, newest first. |
CLI
One file, no dependencies, Node.js 18 or newer. The installers put it on your PATH.
# macOS and Linux curl -fsSL https://deployx.verionx.org/install.sh | sh # Windows (PowerShell) irm https://deployx.verionx.org/install.ps1 | iex
deployx login --token dxp_… # saved to ~/.deployx/config.json deployx projects # list projects deployx import acme/shop # import and deploy a repository deployx deploy shop [--branch b] [--preview] deployx status shop # current production and latest deploy deployx logs <deployment-id> deployx rollback <deployment-id> deployx env ls shop | set shop KEY=value | rm shop KEY | pull shop > .env deployx export shop docker -o ./deploy deployx open shop
Coding agents can install it themselves: point them at /llms.txt.
Deploy anywhere
The Export tab writes the files to run a project somewhere else, derived from its detected runtime and build settings:
- Build in CI for DeployX Sites (GitHub builds it free, DeployX Sites serves it)
- GitHub Pages (Free static hosting from the repository)
- Netlify (netlify.toml for a free Netlify site)
- Dockerfile (Any container host)
- Docker Compose (A single server)
- Kubernetes (Any cluster)
- GitHub Actions (Deploy through DeployX from CI)
- systemd (A Linux VM without containers)
- Fly.io (Fly Machines)
- Render (Render Blueprint)
- Windows (PSADT) (Intune, ConfigMgr and other endpoint tools)
- Android app (TWA) (Google Play, from the site you already deployed)
The Windows export targets desktop applications published as GitHub release assets. It produces a PSAppDeployToolkit v4 deployment script (MSI or EXE, with silent install, process closing and uninstall) ready for Intune or ConfigMgr. PSAppDeployToolkit is an open-source LGPL-3.0 project by its own authors; DeployX generates the script and the module comes from the PowerShell Gallery.
The Android export wraps a site that is already live into a Trusted Web Activity for Google Play. It writes a Bubblewrap manifest, a Digital Asset Links file and a GitHub Actions workflow that builds a signed app bundle from repository secrets. The app opens full screen only when the site owns its domain and serves /.well-known/assetlinks.json, so give the project a custom domain first; on a shared DeployX Sites path, Android shows a browser bar.
Security model
Every table is protected by Postgres row-level security. Policies resolve the caller from a session or an API token, so the dashboard, REST API, CLI and MCP server are held to the same rules. There is no service-role key in the application. Provider tokens, environment values and webhook secrets are stored in Supabase Vault and readable only by the DeployX server, which authenticates to the database with its own secret. API tokens and project keys are stored as SHA-256 hashes and shown once.
Limits
- Repositories up to 100 MB compressed and 15,000 files per deploy; single files up to 50 MB.
- Documents up to 256 KB; queries return up to 500 at a time.
- Files up to 50 MB each.
- Uptime checks every 5 minutes; schedules at one-minute resolution, in UTC.
- Uploads without a repository hold up to 4 MB and 2,000 files.
- DeployX Sites: up to 10 sites per workspace and 25 MB per deployment.
- Builds on your own account follow your Vercel plan's limits.