xhostd is agent-first hosting. You — or your AI agent — push code, trigger a deploy, and get a live HTTPS URL. It works with any AI coding tool (Claude Code, Codex, Cursor, or a custom setup) through MCP tools and a plain HTTP API, and it hosts static sites and dynamic applications alike.
An AI agent can do the whole job here: create an app, push code, deploy, read logs, set environment variables, attach a custom domain. No step in that path needs a human at a dashboard, because nothing needs manual provisioning — the database, the file storage, and user sign-in already exist in every environment. The agent never stops to ask you to wire something up.
A channel is one live environment of an app — production, staging, a preview. Each channel is a standalone, always-on container with its own HTTPS URL, its own Postgres database, its own file storage, and its own custom domains. Your plan includes a number of channels, shared freely across your apps.
It behaves like one. A channel is a standalone container: its own filesystem, its own always-running process, its own database, storage, and domains. Nothing durable is shared between channels — not data, not files, not configuration. Only idle CPU headroom is pooled across containers, the same way any VPS provider pools it across virtual machines.
Yes. Every channel runs at all times, on every plan. There is no sleep mode, no scale-to-zero, and no cold start — a preview you deployed last month answers its first request as fast as production does.
Because we price the plan, not the machine. On platforms that bill per machine or per service, a second always-on environment with its own database costs about what the first one does — the meter runs per instance. xhostd prices your compute as a plan, and your channels share it. An idle staging channel consumes almost nothing, so there is no reason to charge for it: the free plan includes 5 channels, and paid plans include 10 to 75.
Yes. The database is created with the channel and its DATABASE_URL is already in the environment — no add-on to buy, no external account to create, no connection string to paste. A preview channel gets its own database too, so an experiment can never touch production data.
Every channel gets S3-compatible object storage, with the S3_* credentials already in its environment. Uploads, images, and save files work out of the box with any S3 client library. Storage counts against one account-wide quota.
Your app can offer "Sign in with Google" to its own users without wiring an auth provider: xhostd handles the OAuth flow per channel and hands your app the signed-in identity. See the guide at docs.xhostd.com/oauth.
Up to 5 per channel. Domains attach per environment, so a staging or preview channel can carry its own real domains next to production's.
Yes — every plan, including the free one, with no per-domain charge and no per-certificate charge.
xhostd does, automatically, and renews them. You add one DNS record at your registrar to verify the domain; you never delegate your DNS to us.
A serverless platform runs your code only while a request is in flight. It cannot hold a WebSocket open, run a background worker, or keep any process alive between requests — and its databases are separate, scale-to-zero services with cold starts. On xhostd every channel is an always-on container, so multiplayer games, live dashboards, bots, and workers are ordinary apps, not special cases.
Per-machine billing charges every always-on environment separately: the second environment with its own database costs about what the first did. On xhostd, channels are included in the plan — production, staging, and previews all run always-on, each with its own database, at one flat price.
Agents multiply environments. An agent-driven workflow throws off a preview per branch, per experiment, per iteration. Under per-machine billing that gets linearly expensive; on xhostd it stays flat, because a new channel is a quota entry, not a new bill.
Each app can have multiple channels — independent live URLs for the same project, like a production site and a preview. Every channel gets its own HTTPS URL and its own database. Your plan sets a single channel quota shared across all your apps: every app counts its production channel against it, and each extra channel counts too. So apps and channels draw from the same pool — five channels can be five apps, or one app with a production site and four previews.
Every channel gets its own database, and the storage figure is the total across all of them on your account — not a per-app cap. Use it however you like: one large database or many small ones.
File storage is also an account total, across every channel you own. It differs from database storage in one way: it is a hard limit. When you reach it, we refuse a new upload until you delete files. We measure it about once an hour, so the figure in your console can lag a recent upload or delete.
Once a day we snapshot each project's database and its files, except on a static project, which never uses its database. Your plan says how long we keep them: 24 hours on the free plan, 7 days on every paid plan. We always keep a project's newest nightly snapshot, however old it is, so there is always one to go back to. On top of that, every deploy takes its own snapshot first. We keep the last 3 of those at any age, on every plan, so a bad migration always has a rollback point. Restore either kind from your console.
The CPU figure is a soft allocation: it's the fair share your apps are guaranteed when the machine is busy. When there's headroom, your apps can burst up to 2× the soft allocation — and they're hard-capped there. Memory is a fixed per-app ceiling.
Visible cores is how many CPU cores your app sees — the number reported to
tools that size their thread pools or worker counts from the core count (for example
nproc). A higher plan exposes more cores, so parallel workloads and build
steps can spread across them. This is separate from the CPU soft allocation above, which
caps how much CPU time your apps get; visible cores shape how that time is spread.
For Docker projects, the plan limit applies to your image's charged size: its
total size minus the layers it shares with a platform warm base. Layers from
node:22-slim, node:24-slim, node:26-slim,
python:3.11-slim, python:3.12-slim,
python:3.13-slim, python:3.14-slim, and
debian:trixie-slim are exempt — start from one of those bases and
only what you add on top counts (and builds are instant).
Database storage and monthly bandwidth are soft limits: we measure usage, show it to you on your account page, and reach out if an account is consistently over so we can find the right plan together. Your apps keep running.
Upgrade from your console account page, or just ask your AI tool to upgrade when it hits a limit — it will hand you a link. Plans take effect immediately.
Payments are securely processed by a third-party payment provider. Prices are in US dollars; any applicable sales tax or VAT is added at checkout. Plans are billed monthly and you can cancel anytime — see our Terms and Privacy for details.
You can cancel anytime and keep access until the end of the month you've already paid for, after which the plan won't renew. Except where required by law, fees are non-refundable, including for unused time. If we ever close a paid account without cause, we refund the unused portion of the current period. Full details are in our Terms.