Skip to content

Tulpar Language

AOT · LLVM 18 · batteries included

Build production APIswithout the framework

As easy as Python, as fast as C. A statically-typed, AOT-compiled language with HTTP, JSON, SQLite, an ORM and OpenAPI built right into the runtime — no npm install, no pip, no dependencies.

~36kreq/s · Tulpar pool
~1.9× Cfib · native AOT
0external dependencies
api.tprrunning
import "wings";
import "orm";
orm_open("app.db");
define_model("users", { "name": "TEXT", "age": "INTEGER" });
func list_users(req) { return ok(orm_all("users")); }
func create_user(req) { return created(orm_create("users", req.json)); }
get("/users", "list_users");
post("/users", "create_user");
serve(8080); // + Swagger UI, /openapi.json, /metrics, /healthz
Benchmarks

Fast where it counts

Throughput on GET / → JSON {“hello”:“world”}, keep-alive, native load tester, one 14-vCPU box. Each runtime in its recommended single-process config.

Tulparpool · 14c
~36k req/s
Go net/http14c
~30k req/s
Node.js http1c
~8.7k req/s
FastAPIuvicorn · 1w
~3.5k req/s

And latency stays low: p50 0.32 ms (Tulpar) vs 3.3 ms (FastAPI). On CPU, fib lands at 1.37× C (Windows / MinGW) to ~1.9× C (Linux gcc -O2) — Rust/Go class either way. Full methodology →

Features

Everything you need is already in the box

🚀

An API on day one

import “wings”, register a route, serve(8080) — done. You get OpenAPI 3.0 + Swagger UI auto-generation, schema validation (invalid body → 422), dependency injection, structured logging, keep-alive, plus built-in /healthz and /metrics (JSON + Prometheus) for free.

C-class performance

AOT-compiled via LLVM 18 to a standalone native binary.

🗄️

SQLite + ORM

Embedded SQLite and an Active-Record ORM — no driver to wire up.

🧰

Editor tooling

Bundled LSP, tulpar fmt, and a VS Code extension.

📦

Package manager

tulpar pkg with a tulpar.toml manifest and lockfile.

🌍

UTF-8 · TR + EN

Unicode identifiers and bilingual compiler diagnostics.

Live playground

Try it right here in your browser

No install, no setup. Edit the code and hit Run — it executes in the page.

hello.tpr — recursion + the ternary operator
From zero to a REST API

A persistent CRUD service in one file

Model, routes and server in a single .tpr — boots with /healthz, /metrics, /openapi.json and a Swagger UI for free.

import "wings";
import "orm";
orm_open("app.db");
define_model("users", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"name": "TEXT NOT NULL",
"age": "INTEGER"
});
func list_users(req) { return ok(orm_all("users")); }
func create_user(req) {
int id = orm_create("users", req.json);
return created(orm_find("users", id));
}
get("/users", "list_users");
post("/users", "create_user");
body_schema({"name": "str", "age?": "int"}); // invalid body → 422, automatically
serve(8080);

Want the guided version? The Wings Tutorial builds three complete apps step by step — REST, token auth, and a SQLite-backed API.

Install the toolchain, then compile and run your first program. macOS, Linux, and Windows.