THINKINGLANGUAGE · OPEN SOURCE

The language built for
data and AI

Python made data accessible. ThinkingLanguage makes it fast, safe, and intelligent, in one compiled language. Tables, streams, tensors, models, and agents are native types, not libraries.

1,322
tests passing
34
build phases
LLVM + WASM
native backends
Apache 2.0
open source
tl.thinkingdbx.com / intro

Prefer video? Watch the walkthrough ↗

The language

Typed sources in, native programs out

Data enters as native types, the compiler checks it like code, and one toolchain ships it as a native binary or a WASM module.

«file» pipeline.tl «datasource» postgres · kafka · files «library» Python (FFI) «compile» «schema» «bind» «component» tlc · ThinkingLanguage toolchain VS Code · LSP «parse» source → typed AST «check» table · stream · tensor · model · agent «plan» lazy evaluation · Apache DataFusion «codegen» LLVM IR → native ∣ WASM LSP · formatter · linter · type checker · debugger package manager · MCP client + server «emit» «emit» «train» «serve» «artifact» native binary · LLVM «artifact» module.wasm «artifact» churn.model «service» agent · MCP tools
Inputs
postgres(...) sources
streams · Kafka
files · CSV / Parquet
Python via FFI
>_ThinkingLanguage
typetable, stream, tensor, model, agent
checkthe compiler catches data bugs
planlazy evaluation on DataFusion
compileLLVM native or WASM
MCP client + server · Python FFI · Apache 2.0
Outputs
Native binary
WASM module
Trained models
Running agents · MCP
How it reads

Data in, model out, in one file

A source is typed. A transform is a function over a table<T>. Training a model is a keyword, not an import. The pipe |> moves ownership down the pipeline, so the compiler catches data bugs before anything runs.

  pipeline.tl
source users = postgres("db").table("users") -> User

transform active_users(src: table<User>) -> table<User> {
    src
    |> filter(is_active == true)
    |> clean(nulls: { name: "unknown" })
    |> with { tenure = today() - signup_date }
}

model churn = train xgboost {
    data:     active_users(users)
    target:   "is_active"
    features: [tenure, monthly_spend]
}
The idea

Seven principles, one language

TL is opinionated about the things data and AI work actually needs.

data is a type

Native data types

Tables, streams, and tensors are first-class types in the language, not library objects.

pipelines are programs

Composable flows

ETL and ELT flows are first-class constructs you compose, not scripts you glue together.

ai is a verb

Models and agents built in

train, predict, embed, and agent are keywords, not imports.

parallel by default

No GIL

Automatic partitioning across cores. Concurrency you get for free, not fight for.

fail loud, recover smart

Errors are designed in

Built-in error handling for the unreliable data sources you actually deal with.

readable beats clever

Python feel, Rust safety

Python-like readability with Rust-like static guarantees the compiler enforces.

fast without trying

Compiled and lazy

Native code with lazy evaluation. Performance is the default, not an optimization pass.

Batteries included

Native types, and the tooling to ship them

Five native types power the language, on a DataFusion engine, with the full developer toolchain in the box.

table<T> stream<T> tensor<dtype, shape> model agent
Apache DataFusion engineMCP client + serverPython FFI LLVM + WASM backendsgenerics + pattern matchingpackage manager full LSP + VS Codeformatter, linter, type checkerstep debugger
Design partner program

Build on ThinkingLanguage. Help shape what we build.

We are onboarding a small group of design partners: teams who ship real workloads on TL, meet with the founders monthly, and get lifetime free access to ThinkingLanguage Cloud. Limited seats.

Get started

Open source. Run it anywhere.

Apache-2.0, compiled to native or WASM. Open the web workspace and write your first pipeline, or clone the repo.