Skip to content
Playground Tests llms.txt
Docs in progress TKO docs are in progress. Examples, API details, and migration notes are still being revised.

Deploy in Seconds

A TKO app can be as simple as a single HTML file. No bundler, no server runtime, no build step — just upload to any static hosting provider and you’re live.

Save one of these as index.html:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Hello, TKO</title>
<script type="importmap">
{ "imports": { "@tko/build.reference": "https://esm.sh/@tko/build.reference" } }
</script>
</head>
<body>
<!-- Reusable markup. Native ko- bindings; no data-bind needed. -->
<template id="ko-greeting-template">
<input ko-textInput="name" />
<p>Hello, <strong ko-text="name"></strong>.</p>
</template>
<!-- Mount one or many — each instance gets its own state. -->
<ko-greeting></ko-greeting>
<script type="module">
import ko from '@tko/build.reference'
// Component class — extends ko.Component, auto-registers as <ko-greeting>
// (kebab-case derived from class name).
class KoGreeting extends ko.Component {
// Where TKO finds the markup for this component.
static get template () { return { element: 'ko-greeting-template' } }
name = ko.observable('TKO')
}
KoGreeting.register()
ko.applyBindings({}, document.body)
</script>
</body>
</html>

Native ko- bindings. Reusable component with a <template> for markup and a viewModel for state. Drop <ko-greeting></ko-greeting> anywhere, any number of times — each instance gets its own observable. No compile step. Ship it.

Try it first in the ESM playground — same code, live editor. Use the arrow icon on the code block to open either variant.

Free, deploys from a git push.

  1. Create a repo and add your index.html
  2. Go to Settings → Pages → Source and select your branch
  3. Your site is live at https://username.github.io/repo/

Or use the gh CLI:

Terminal window
gh repo create my-app --public --clone
# add index.html
git add index.html && git commit -m "init" && git push
gh browse --settings # enable Pages under Settings → Pages

Free tier, global CDN, automatic HTTPS.

  1. Push your files to a GitHub or GitLab repo
  2. Connect the repo at dash.cloudflare.comPages → Create
  3. No build command needed — just set the output directory to / (or wherever your HTML lives)

Or deploy directly from the CLI:

Terminal window
npx wrangler pages deploy . --project-name my-app

Good for projects already on GCP.

Terminal window
gcloud storage buckets create gs://my-app.example.com
gcloud storage buckets update gs://my-app.example.com --web-main-page-suffix=index.html
gcloud storage cp index.html gs://my-app.example.com/

Add a load balancer or use Firebase Hosting for automatic HTTPS and CDN.

Free tier, automatic HTTPS, global CDN.

Terminal window
npm install -g firebase-tools
firebase init hosting # select your project, set public dir to "."
firebase deploy

Free tier, drag-and-drop or git-based deploys.

  1. Go to app.netlify.com/drop
  2. Drag your project folder onto the page
  3. Live in seconds

Or via CLI:

Terminal window
npx netlify-cli deploy --dir . --prod

TKO loads over the browser’s native ES module loader via an import map. No server-side rendering, no Node.js, no build artifacts. The entire deploy is one file.

As your app grows you can add a bundler, but you don’t have to. Many production TKO apps are a handful of HTML files and a CSS stylesheet.