Public beta · Get started

Deploy your first service in minutes.

Download one executable for your operating system, drop it next to your app folder, and run it — you get a live service. No Go toolchain, no Docker, no node_modules.

Windows · macOS · Linux no toolchain 9.8 ms cold start
Walkthrough

From download to a live API

1

Download the binary for your OS

No install, no Go. Grab the prebuilt executable from the releases page, put it in your project folder, and run it.

The binary runs whatever sits in its folder. Grab the starter two ways — clone it with git, or download the ZIP. It already ships app.kitwork.js, config and views.

Clone with git
git clone https://github.com/kitwork/starter.git
Download ZIP no git required

On macOS & Linux, make it runnable once with chmod +x kitwork. Then the runtime serves on http://localhost:8085.

2

Get the starter app

However you grabbed it above, the starter is ready to run — no build step. Here's what's inside: drop the binary you downloaded next to the config, your app.kitwork.js and the views.

# what's inside — drop the binary in here
starter/
├─ kitwork # the binary you downloaded
├─ config.kitwork.yml # settings
├─ app.kitwork.js # your routes & logic
└─ views/ # HTML templates
3

Configure the runtime

Set the port and, if you need data, point Kitwork at your PostgreSQL. hot_reload picks up changes as you save.

config.kitwork.yml
port: 8085
root: "."
hot_reload: true
database:
  type: "postgres"
  host: "localhost"
  port: 5432
  name: "postgres"
4

Write your first route

Routes resolve before any handler runs. Return JSON, text or a rendered view — the runtime does the rest.

app.kitwork.js
// your whole app lives here
import { router, database } from "kitwork";

const db = database.connection();

router.get("/api/hello").handle((req, res) => {
  return res.json({ status: "active", engine: "Kitwork" });
});

router.get("/api/users").handle((req, res) => {
  const users = db.table("user").list(10);
  return res.json({ success: true, users });
});
5

Cache & serve static files

Caching and static delivery are built into the router — chain them onto any route, no extra service.

// cache a response for 5 seconds
router.get("/api/gold").cache("5s").handle((req, res) => {
  return res.json({ price: 2300 });
});

// serve a file straight from disk
router.get("/favicon.ico").file("/assets/favicon.ico");
6

Talk to the database

A zero-allocation layer over PostgreSQL, with a small ORM. No driver setup, no connection boilerplate.

// query with the built-in ORM
const user  = db.table("user").find("username", "grace");
const users = db.table("user").list(5);
const count = db.table("user").count();