Tulpar Language
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.
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, /healthzFast 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.
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 →
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.
Try it right here in your browser
No install, no setup. Edit the code and hit Run — it executes in the page.
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.
Ready in one command
Section titled “Ready in one command”Install the toolchain, then compile and run your first program. macOS, Linux, and Windows.