DeployX

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.

  1. Create an account and confirm your email.
  2. Open New project and pick a starter, paste a Claude artifact, drop in a folder, or import a GitHub repository.
  3. For a server app, connect a Vercel token in Settings → Providers. Add a GitHub token too if your repositories are private.
  4. 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.

StackLanguageRoutesHow it ships
HTML and CSSHTMLDeployX Sites, Run anywhereServed as it is on DeployX Sites; export to GitHub Pages, Netlify or nginx.
Claude artifactsReact, HTML, SVGDeployX Sites, AgentsCompiled at deploy time with shadcn/ui, lucide and Tailwind, then served on DeployX Sites.
ViteTypeScriptDeployX Sites, Built on Vercel, Run anywherePublish dist/ on DeployX Sites, build in CI for Sites, or build on Vercel.
ReactTypeScriptDeployX Sites, Built on Vercel, Run anywhereA Vite or Create React App build goes to DeployX Sites; Next.js and Remix build on Vercel.
VueTypeScriptDeployX Sites, Run anywhereThe Vite build in dist/ goes to DeployX Sites or GitHub Pages.
SvelteTypeScriptDeployX Sites, Run anywhereThe Vite build in dist/ goes to DeployX Sites; SvelteKit builds on Vercel.
SolidTypeScriptDeployX Sites, Run anywhereThe Vite build in dist/ goes to DeployX Sites.
AngularTypeScriptDeployX Sites, Built on Vercel, Run anywhereDetected from package.json; the dist/ build goes to Sites or builds on Vercel.
AstroTypeScriptDeployX Sites, Built on Vercel, Run anywhereDetected; static dist/ to DeployX Sites, server output built on Vercel.
GatsbyTypeScriptDeployX Sites, Built on Vercel, Run anywhereDetected; the public/ build serves from DeployX Sites.
DocusaurusTypeScriptDeployX Sites, Built on Vercel, Run anywhereDetected; the build/ folder serves from DeployX Sites.
VitePressMarkdownDeployX Sites, Built on Vercel, Run anywhereDetected; the .vitepress/dist build serves from DeployX Sites.
ParcelJavaScriptDeployX Sites, Built on Vercel, Run anywhereDetected; the dist/ build serves from DeployX Sites.
HugoGo templatesDeployX Sites, Run anywherePublish the public/ folder Hugo writes; DeployX Sites finds it.
JekyllRubyDeployX Sites, Run anywherePublish the _site/ folder; DeployX Sites finds it.
EleventyJavaScriptDeployX Sites, Run anywherePublish the _site/ folder; DeployX Sites finds it.
MkDocsPythonDeployX Sites, Run anywherePublish the site/ folder MkDocs writes.
Flutter webDartDeployX Sites, Run anywherePublish build/web; DeployX serves it cross-origin isolated automatically. Android: export as a Trusted Web Activity.
Rust to WebAssemblyRustDeployX Sites, Run anywherePublish the wasm-pack or Trunk output; .wasm is served with its own type.
C and C++ with EmscriptenC, C++DeployX Sites, Run anywherePublish the Emscripten output; threaded builds are served cross-origin isolated.
Godot web exportGDScriptDeployX SitesPublish the web export; threaded exports are served cross-origin isolated.
Next.jsTypeScriptBuilt on Vercel, Run anywhereImported from GitHub, built on Vercel, redeployed on every push; Docker export runs it anywhere.
NuxtTypeScriptBuilt on Vercel, Run anywhereDetected and built on Vercel; Docker export runs the Nitro server.
SvelteKitTypeScriptBuilt on Vercel, Run anywhereDetected and built on Vercel; Docker export runs the Node build.
RemixTypeScriptBuilt on Vercel, Run anywhereDetected and built on Vercel.
React RouterTypeScriptBuilt on Vercel, Run anywhereFramework mode detected and built on Vercel.
TanStack StartTypeScriptBuilt on Vercel, Run anywhereDetected and built on Vercel.
ExpressJavaScriptBuilt on Vercel, Run anywhereBuilt on Vercel, or exported to Docker, Fly.io, Render or systemd.
HonoTypeScriptBuilt on Vercel, Run anywhereBuilt on Vercel, or exported as a container.
FastifyTypeScriptBuilt on Vercel, Run anywhereBuilt on Vercel, or exported as a container.
NestJSTypeScriptBuilt on Vercel, Run anywhereBuilt on Vercel, or exported to Docker and Kubernetes.
KoaJavaScriptRun anywhereDetected; exported to Docker, Compose, Fly.io, Render or systemd.
FastAPIPythonRun anywhereDetected; exported to Docker, Compose, Kubernetes, Fly.io, Render or systemd with uvicorn.
DjangoPythonRun anywhereDetected; exported with gunicorn to Docker, Kubernetes, Fly.io, Render or systemd.
FlaskPythonRun anywhereDetected; exported with gunicorn to any container host.
GoGoRun anywherego.mod detected; a distroless container, Kubernetes, Fly.io, Render or systemd.
Any Node.js serverJavaScriptRun anywhereA start script is enough: exported to a container, Compose, Fly.io, Render or systemd.
Windows desktop appsMSI, EXERun anywhereA GitHub release installer packaged with PSAppDeployToolkit for Intune or ConfigMgr.
Android apps from a PWAKotlin, via BubblewrapRun anywhereAny project with a web manifest becomes a Trusted Web Activity you build into an .aab for Google Play.
Claude CodeMCPAgentsOne command adds DeployX; the agent deploys, reads errors and rolls back.
Claude DesktopMCPAgentsAdd DeployX as a custom connector.
CursorMCPAgentsAdd DeployX to ~/.cursor/mcp.json.
VS CodeMCPAgentsAdd DeployX to .vscode/mcp.json for Copilot agent mode.
Any MCP clientJSON-RPCAgentsStreamable 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/meYou and your workspaces
GET/api/v1/projectsProjects with latest and production deployments (?workspace=)
POST/api/v1/projectsImport a repository: { repo, name?, branch?, rootDirectory?, framework?, env?, deploy? }
POST/api/v1/deployDeploy 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/hostingWhether this DeployX hosts projects without keys
POST/api/v1/github/inspectDetect how a repository builds without creating anything: { repo, branch?, rootDirectory? }
GET, PATCH, DELETE/api/v1/projects/:slugRead, change settings, delete
GET, POST/api/v1/projects/:slug/deploymentsList, or deploy { branch?, target? }
GET/api/v1/deployments/:id?sync=1One deployment, refreshed from the provider
GET/api/v1/deployments/:id/logsBuild log lines
GET/api/v1/deployments/:id/source[/file]List deployed files (?glob=), or read one (?path=)
POST/api/v1/deployments/:id/:actioncancel, promote, rollback or redeploy
GET, POST/api/v1/projects/:slug/envList names, or set { key, value, targets }
GET, DELETE/api/v1/projects/:slug/env/:idReveal a value, or delete
GET, POST/api/v1/projects/:slug/domainsList, 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/checksUptime, latency and schedule runs
GET/api/v1/projects/:slug/runtimeVisitor 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/filesList (?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/activityWorkspace 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"
whoamiThe account this token belongs to and the workspaces it can reach.
list_projectsProjects in a workspace with their latest and current production deployment.
get_projectFull settings for one project.
inspect_repositoryRead a repository and report the framework, runtime and build settings DeployX would use. Creates nothing.
create_projectImport a GitHub repository as a project and, unless deploy is false, start its first production deployment.
update_project_settingsChange build settings, the production branch, automatic deploys or monitoring. Applies from the next deployment.
deployDeploy the latest commit of a branch. The production branch goes to production unless target says otherwise.
deploy_filesDeploy 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_templateCreate 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_artifactPublish 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_pageA 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_subdomainCheck 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_stacksEvery 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_hostingWhere 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_errorsWhat 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_filesFiles that went into a deployment, optionally filtered by a glob such as **/*.tsx.
read_source_fileThe contents of one file exactly as it was deployed.
list_deploymentsRecent deployments of a project, newest first.
get_deploymentStatus 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_logsBuild output for a deployment.
deployment_actioncancel a running build; promote a ready deployment to production; rollback production to an earlier ready deployment; redeploy the same branch.
list_envVariable names and targets. Values are not returned.
set_envCreate or replace a variable. It is stored encrypted and applies from the next deployment.
delete_envRemove a variable by name.
list_domainsCustom domains with verification state and the DNS records still needed.
add_domainAttach a custom domain. Returns the DNS records to create at the registrar.
check_domainRe-check DNS and ownership for a domain.
data_list_collectionsCollections in the project document store, with document counts.
data_queryDocuments in a collection. where matches fields exactly, e.g. {"status":"open"}.
data_insertAdd a JSON document to a collection. Collections are created on first insert.
data_updateMerge fields into a document. A field set to null is removed.
data_deleteRemove one document.
create_scheduleCall a path on the production URL on a cron schedule (five fields, UTC).
list_schedulesSchedules with their next and last run.
get_monitoringUptime over 24 hours and 7 days, latency percentiles and recent checks of the production URL.
create_webhookSend deployment and uptime events to an HTTPS URL, as JSON or as Slack or Discord messages. Returns the signing secret once.
export_projectGenerate 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_activityWho 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.