Creates an app from source files, or commits and builds a change to one: every call is a commit and a build, about two minutes. For an edit to an existing app on any preset with a draft runtime, use sync_files first, then publish_draft for one commit. Drafts support Copy/Empty data; startup can answer starting and delivers start notes once. Draft visibility starts at default_public and the owner can change it on the draft row; Google-login apps keep their login. dev_url is private unless the draft is public; do not suggest sharing it unless the owner made it public. Chat-native deploy: publish app source directly, no external git repo needed. Five presets cover almost everything: static (plain HTML/CSS/JS, no install, no build — the default for a page or prototype), vite (front-end needing a build), astro (content sites), fastapi (Python — the default as soon as there is an API, a database or file uploads; also serves your HTML), go (same range as fastapi for a fraction of the memory). The first three run no process and therefore cannot use Postgres or object storage, so start on fastapi or go when the app is likely to need either. Other presets (nextjs, nuxt, remix, sveltekit, flask, django, rust, spring-boot, react, vue, svelte, angular, gatsby, dockerfile) are honored when named but are heavier or harder to edit; node runs a Node server. A payload carrying a server entrypoint (server.js, main.go, …) on the static preset is refused rather than published as inert files; pass framework on the same call to switch preset. get_settings shows whether a database or file storage already exists; kad provisions managed Postgres (DATABASE_URL) and S3-compatible object storage (S3_ENDPOINT/S3_BUCKET/S3_ACCESS_KEY/S3_SECRET_KEY/S3_REGION/S3_FORCE_PATH_STYLE) and injects them into the app's environment, so the app needs no external database or storage provider; uploaded files belong in the object storage, not in Postgres columns. Pass files[] (path+content) to create or update an app; kad commits them to a managed repo and builds+deploys. Omit app_id to create a NEW app (app_name required); pass app_id to update an existing one (send only changed files, plus delete_paths[] to remove files). Write intent as a Conventional Commits subject — it is the commit message shown in the app's timeline. Every call is a commit and a build: iterate with sync_files (a draft) and call this once with the final files, not once per small edit; a running draft keeps running afterwards. Returns project_id, commit_sha, job_id, build_log_stream_url, the deploy_url and canonical_host the platform assigned (hostnames are not derivable from the app name), whether the commit shipped public, and the managed backends already wired in. A new app is created as a temporary 72h project when the plan has no free permanent slot; for a temporary project the reply also carries expires_at and a notice stating the deadline and how the project is kept. Each file accepts an optional sha256 (hex) to verify against; on any mismatch the whole call fails before anything is committed, naming the offending file(s), and the response echoes each file's actual sha256 in files[]. Requires a read-write token.