Build your first app with Kai
Build and publish a Keboola app in about 10 minutes — describe it to Kai, preview the live draft, publish to production. Plus prompting tips, the approval model, and manual creation.
Kai builds a working app from a plain-language description — no coding and no Git account needed. From one chat it reads your governed data, writes the code, and opens a live draft you can preview, refine, and publish. This walkthrough takes you from nothing to a live, published app in about 10 minutes, and covers the details you’ll want next: how to prompt, what Kai asks before touching your project, how drafts become production, and the manual creation path on the same screen.
Apps go well beyond dashboards — the same steps produce internal tools, data narratives, or anything interactive. This page builds a simple dashboard so you can learn the flow.
What you’ll need
Section titled “What you’ll need”- A Keboola project with Kai available.
- At least one table in Storage — Kai reads your data directly, so it works with whatever you already have.
- A few minutes.
Step 1 — Open Apps and start a new app
Section titled “Step 1 — Open Apps and start a new app”In your project, open Apps from the left navigation, then click + Create App.

You land on the Build web apps from your Keboola data screen. It leads with a single prompt — “Describe what you want to build…” — and, below it, manual Streamlit and Python / JS options for when you’d rather set things up yourself. (The Kai Agent chat anywhere in your project works too.)

Step 2 — Describe the app you want
Section titled “Step 2 — Describe the app you want”Type what you want in plain language. The clearer your prompt, the closer Kai’s first version lands — name three things: the data, the audience, and the main action you want people to take. For example:
Build a simple dashboard from my Storage data: a title, three key metrics as big number tiles, and one bar chart. Keep it clean and easy to read.
The more specific you are — which tables, which charts, who it’s for — the less you’ll need to refine afterward.
Step 3 — Watch Kai read your data, verify it, and ask for your approval
Section titled “Step 3 — Watch Kai read your data, verify it, and ask for your approval”Kai gets to work. It explores your Storage on its own — listing buckets, reading table details, even sampling the data to verify its queries will work. Then, before creating anything in your project, it shows a Confirmation required card with the exact app configuration — name, description, and authentication type — and waits for your Approve (or Decline; Always allow skips this prompt for future builds).

After you approve, Kai creates the app, sets up a private draft, and writes the code — you see each step in the chat (File index.ts edited, Writing file…) while it deploys a development container.
In our run, Kai found the project’s Shopify tables and built a Toy Store Sales Dashboard: total orders, revenue, and customers as tiles, plus a “top products by orders” bar chart.

Step 4 — Preview the draft and refine it
Section titled “Step 4 — Preview the draft and refine it”The build runs in a split-screen builder: your chat with Kai on the left, and the app as a draft on the right — toggle between a live Preview and the Code view of its files. As the product puts it, this is “a private draft that updates live as Kai builds” — it hot-reloads as Kai edits and doesn’t touch anything you’ve shared.

Kai’s first version is a starting point, not the final word. Keep chatting to change it — a different chart, another metric, a new filter, a cleaner layout — in as many rounds as you need. Kai finishes each round with next-step suggestions: Publish to production, Make changes, or type your own.
Step 5 — Publish to production
Section titled “Step 5 — Publish to production”When you’re happy with the draft, click Publish to Production. Kai merges the draft into the app’s main branch, deploys the production app, and cleans the draft up. The app turns Active and is available at its own URL — and Kai’s final message hands you the App URL, the password, and an Open App button.

By default the app is protected with Basic (Password) authentication — the generated password also sits on the app’s configuration page, ready to copy. To change who can access it (public, a password, SSO, GitHub, and more), see Authentication.
Open the URL, enter the password, and your app is live — running on your governed data, served from its own address:

That’s it — you’ve built and published your first app, and you never picked a framework. The sections below cover the mechanics you’ll want as you build more.
What Kai does on its own — and what it asks first
Section titled “What Kai does on its own — and what it asks first”Kai explores your Storage without asking, so it can find the right tables and understand your data. But before it creates or modifies the app in your project, it shows the Confirmation required card and waits for your Approve — click Always allow to skip the prompt for future builds (Tool Permissions gives you the same control centrally). The draft itself is private: nothing is shared until you publish.
How drafts become production
Section titled “How drafts become production”A draft is your private working version with live preview — Kai keeps it on its own branch in the app’s managed Git repository, alongside the production app it created up front. Publish to Production merges the draft branch into main, deploys the production app, and cleans the draft up.
How Kai handles data access
Section titled “How Kai handles data access”Kai uses your data through the project’s access controls — the app can only reach data the project can reach. Read-only access is used by default, so the app can’t change your data unless you ask for write-back.
Create an app manually
Section titled “Create an app manually”Prefer to set the app up yourself, without the chat? Manual creation lives on the same Create App screen, under or create manually — pick a stack and Keboola sets the app up for you to configure.

- In your Keboola project, open Apps and click + Create App.
- Under or create manually, choose a stack — Python / JS (custom apps, production UIs; connect a Git repository) or Streamlit (existing Streamlit apps; basic Python).
- Name the app and click Create App. It opens on its own configuration page, marked Not Deployed.
- Set the Code Source — paste inline Code or connect a Git Repository — and pick the Authentication method.
- Configure the rest of the app’s settings — backend size, auto-sleep, and more; see Reference for the full list.

- Click Deploy App. A short wizard asks for the backend size and an inactivity timeout, then deploys the app. (The same wizard runs on Redeploy.)

- When the status turns Active, click Open App to open it at its public URL. Use Redeploy to apply any later config change; see App actions.
Expose the app to other agents
Section titled “Expose the app to other agents”An app you build with Kai can expose an API — or an MCP server — so another agent or service can call it, not just human visitors. The data-fetching logic stays server-side and your Storage token is never exposed to the browser. This is a Python/JS-app capability; for the scaffold and how to wire it up, see Build locally.
Next: Build an app locally →