Blazing Fast. Fearless
Concurrency.

Unleash the power of Rust with the simplicity of TypeScript. Build robust, type-safe, and highly concurrent applications with ease.

Get Started
npm i kitojs

Unmatched Performance

Kito leads the pack with unmatched performance across all tested and modern web frameworks, demonstrating exceptional speed.

Requests/sec (Higher is better)
70k
Kito
33k
Fastify
31k
Hono
27k
Koa
9k
Express

Run Anywhere

Kito works seamlessly across all major JavaScript runtimes.

Same API, same experience, everywhere

Confidence Through Type-Safety

Eliminate Runtime Errors

Catch bugs at compile time with Rust's strict type system. Sleep soundly knowing your code won't fail in production.

Simplify API Contracts

Automatically validated types mean documented classes and interfaces, ensuring your API is always in sync.

Effortless Refactoring

Change code confidently knowing the compiler has your back. Large refactors become trivial with type safety.

basic.ts
import { server } from "kitojs";

const app = server();

app.get("/", ({ res }) => {
  res.send("hello world!");
});

app.listen(3000);
validation.ts
import { server, schema, t } from "kitojs";

const userSchema = schema({
  params: t.object({ id: t.str().uuid() }),
  query: t.object({ limit: t.num().max(100) }),
  body: t.object({ name: t.str().min(1) }),
});

app.post("/users/:id", ({ req, res }) => {
  res.json({
    id: req.params.id,
    limit: req.query.limit,
    name: req.body.name
  });
}, userSchema);

app.listen(3000);

High-Performance Validation

Blazing Speed

Validate data at the speed of Rust. Orders of magnitude faster than JavaScript-based validation libraries.

Detailed Validation

Get precise error messages with path information. Know exactly what's wrong and where.

Seamless Integration

Works with any TypeScript codebase. Drop it in and start validating immediately.

Extendable, but always secure

Extensible context

Thanks to the context approach, you can extend it and add any properties you want.

Always secure

Get autocomplete and typing when extending, avoiding future problems and always knowing what you're adding.

extend.ts
import { server } from "kitojs";

interface Extends {
  user: { id: string; name: string };
}

const app = server().extend<Extends>(ctx => {
  ctx.user = { id: "1", name: "Neo" };
});

app.get("/", ({ res, user }) => {
  res.json({ user });
});

app.listen(3000);

Ready to build faster?

Go from documentation to starting your first project in Kito. Discover the next generation of web development, powered by Rust.

Get Started with Kito Explore on GitHub