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);