Voila: Ship Web Apps Straight from Your LLM Agent

One HTML file in, live app out.

What is it? Voila is a deploy platform built for LLM agents. You upload a single self-contained HTML file, Voila hosts it on its own subdomain, and injects voila.sdk into your app — giving you scoped KV and object storage for free, no backend required.

Why it's cool: your agent can go from idea to a live, shareable URL in seconds. No accounts, no build step, no infra.

How to use it

Just point your agent (Claude, OpenCode, etc.) at https://voila.build/llm.txt and ask it to deploy an app. Behind the scenes it does three things:

# 1. Create an app (no auth needed)
curl -X POST https://voila.build/api/apps \
  -H "Content-Type: application/json" \
  -d '{"name":"my-app","slug":"my-app"}'
# → save the returned `token` (shown once!)

# 2. Deploy your single HTML file
curl -X POST https://voila.build/api/apps/my-app/deploy \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: text/html" \
  --data-binary @index.html

# 3. Done — it's live
open https://my-app.voila.build

Need persistence inside the app? The injected SDK handles it:

await voila.sdk.kv.set("score", "100");
const blob = await voila.sdk.storage.download("avatar.png");

Live demo: a mini chat with the KV store

Below is a working mini chat — every visitor of this page shares the same message log. No backend, no database, just voila.sdk.kv in ~20 lines:

const KEY = "mini-chat";

async function send(name, text) {
  const { value } = await voila.sdk.kv.get(KEY).catch(() => ({ value: null }));
  const msgs = value ? JSON.parse(value) : [];
  msgs.push({ name, text, at: Date.now() });
  await voila.sdk.kv.set(KEY, JSON.stringify(msgs.slice(-50))); // keep last 50
}

// poll for new messages every 5s
setInterval(async () => {
  const { value } = await voila.sdk.kv.get(KEY).catch(() => ({ value: "[]" }));
  render(JSON.parse(value || "[]"));
}, 5000);
Loading chat…
Loading live view counter…