Five languages, one binary
JavaScript, TypeScript, Python, Go, and Rust live inside the same Monaco-powered window. No project scaffold to test an idea.
Multi-language code runner · Desktop & web
Lingua is the playground senior developers reach for when they want to throw a 10-line script at five languages without spinning up a project. Desktop-first, source-available, and plain about what runs where.
No install — runs in your browserView on GitHub
const sizes = [512, 1024, 4096];
const kib = sizes.map((n) => n >> 10);
console.log(kib);type Lang = 'ts' | 'py' | 'go';
const active: Lang = 'ts';
console.log(active.toUpperCase());from pathlib import PurePosixPath
path = PurePosixPath("src/runner/python.py")
print(path.suffix)package main
import "fmt"
func main() { fmt.Println("hello from your local go toolchain") }fn main() {
println!("local rustc, no project required");
}Why Lingua
JavaScript, TypeScript, Python, Go, and Rust live inside the same Monaco-powered window. No project scaffold to test an idea.
Pyodide v0.29.4 ships inside the desktop binary. Open Lingua on a plane, write Python, hit run. The web build does the same after the first load.
Switch a JS or TS tab to the desktop Node runtime and you get the real thing: fs, path, http, and require() of every package already in your project node_modules. Lingua spawns Node directly — never through a shell — with an allow-listed environment.
Nothing leaves your machine until you opt in. We never transmit your code. Read the privacy page — it says exactly what we collect when you do turn it on.
Past runs stay close to the editor, so a quick scratchpad can still show what changed between attempts.
Shipped in Lingua
Every feature below is already available and works in the free tier. Full release history lives in the changelog.

Add one comment and every top-level statement shows its wall-clock duration inline — the slowest line of the run turns red. Perf hunting without leaving the editor, and timings survive errors.

Paste a JWT, UUID, color, Unix timestamp, cron expression, or Base64 into the editor and Lingua offers to open it pre-loaded in the matching developer utility. Conservative by design: code look-alikes stay silent.

One keystroke (Cmd+Alt+P) hides the chrome and enlarges the fonts for demos, pairing, and screen recordings. Toggle again and your exact layout comes back — it never touches your saved preferences.

The first Python or Ruby run no longer sits on a static loading line: the run button streams a live MB counter while the WASM runtime downloads, on any network.
A steady record of local-first progress. Expand any version for its highlights.
AI assistance · Pro
Opt-in, bring-your-own-key, and local-first. Point it at a local model (Ollama, LM Studio) and your code never leaves the machine — or use any OpenAI-compatible endpoint. Lingua ships no default key and makes no background calls; every request shows you the exact payload first.

When a run fails — a notebook cell, the console, a SQL query, an HTTP request — one click explains what went wrong and streams a fix, aware of where your code actually ran. Ask follow-up questions in the same thread.
When the answer proposes a fix, apply it behind a full diff preview — replacing your code never happens blind — and Lingua re-runs it. Error → explain → apply → green.
Describe a query in plain English and get DuckDB SQL back. Only the live schema is sent — never your rows — and you review the query before it runs.
A local model means code never leaves your device. Obvious secrets are redacted before the preview, and the key lives only in Settings — never in exports, capsules, share links, or telemetry.
Inside the app
No mockups below — every frame is the shipping app captured mid-task on the production web build.

Pyodide boots in a worker, stdout streams into the console, and each top-level statement shows its value inline next to the code. The wall-clock time of every run lands in the console too — timing is output, not a claim.

Cmd+K searches everything at once — commands, snippets, templates, and every developer utility. Type three letters, hit Enter, keep coding.

JSON formatter with a tree viewer, JWT debugger, mock data, hash and UUID generators — plus Utility Pipelines that chain them into one-click workflows. Each one runs locally in the same window, so quick tasks stop costing you a browser tab.

Drop a CSV, JSON, or Parquet file and it becomes a queryable table on the bundled DuckDB engine — results grid, one-keystroke query formatting, and per-column profiling included. Your local Run Ledger is queryable from here too.

Requests, query params, auth, environments, and response capture live in one workspace tab. Send and read the pretty-printed body with status, timing, and size right where you code.

Telemetry ships off and stays off until you flip it. The Run Ledger records locally, sensitive headers are redacted by name, and the redaction preview shows exactly what would leave your machine — nothing.
Language matrix
Five languages execute today. Seven more are useful for opening, reading, and lint-adjacent workflows, but they are not runnable yet.
Developer utilities
The browser tabs that usually orbit a code runner — JSON formatter, regex, JWT, diff, hash, cron, color, the lot — already live inside Lingua.
One install. Five languages. No project to spin up.