The language AI gets right on the first try.

12 types. 40 keywords. One way to do everything.
Small enough for any model to master.

Alpha — macOS & Linux — all releases

Ctrl+Enter
Press Run to try it.

Correct by design

The entire language fits in a single context window. No ambiguous syntax. No ten ways to do the same thing. AI doesn't guess — it knows.

Fast by default

Compiles to native code via LLVM. Single binary, no runtime. Deploy anywhere.

Batteries included

HTTP server, JSON, TLS, concurrency, file I/O — all built in. No packages to install. No supply chain to audit.

Concise by design

Sans expresses the same logic in fewer tokens than any compiled language — less to write, less to read, less for AI to get wrong.

Fibonacci

fib(n:I) I = n <= 1 ? n : fib(n-1) + fib(n-2)
func fib(n int) int {
    if n <= 1 { return n }
    return fib(n-1) + fib(n-2)
}
fn fib(n: i64) -> i64 {
    if n <= 1 { n }
    else { fib(n-1) + fib(n-2) }
}
function fib(n) {
    return n <= 1 ? n : fib(n - 1) + fib(n - 2)
}
def fib(n):
    return n if n <= 1 else fib(n - 1) + fib(n - 2)

JSON Roundtrip

main() {
    j = jo()
    k := 0
    while k < 1000 {
        j.set(str(k), ji(k))
        k += 1
    }
    p(jp(jfy(j)).get("999").get_int())
}
func main() {
    m := make(map[string]int, 1000)
    for i := 0; i < 1000; i++ {
        m[fmt.Sprintf("key%d", i)] = i
    }
    data, _ := json.Marshal(m)
    var out map[string]int
    json.Unmarshal(data, &out)
}
fn main() {
    let mut obj = serde_json::Map::new();
    for i in 0..1000 {
        obj.insert(format!("key{}", i), json!(i));
    }
    let s = serde_json::to_string(&obj).unwrap();
    let p: Value = serde_json::from_str(&s).unwrap();
}
const obj = {}
for (let k = 0; k < 1000; k++) {
    obj[String(k)] = k
}
const parsed = JSON.parse(JSON.stringify(obj))
console.log(parsed["999"])
import json
obj = {str(k): k for k in range(1000)}
parsed = json.loads(json.dumps(obj))
print(parsed["999"])

HTTP Server

handle(req:HR) I = req.respond(200 "hello world")

main() { serve(8080 fptr("handle")) }
func main() {
    http.HandleFunc("/",
        func(w http.ResponseWriter,
             r *http.Request) {
            fmt.Fprint(w, "hello world")
    })
    http.ListenAndServe(":8080", nil)
}
async fn handler() -> impl Responder {
    "hello world"
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new()
        .route("/", web::get().to(handler)))
        .bind("0.0.0.0:8080")?.run().await
}
const http = require("http")
http.createServer((req, res) => {
    res.end("hello world")
}).listen(8080)
from flask import Flask
app = Flask(__name__)

@app.route("/")
def handler():
    return "hello world"

app.run(port=8080)
ExampleSansGoRustNodePythonSans advantage
Fibonacci14 tokens26 tokens27 tokens22 tokens16 tokens13-46%
JSON roundtrip36 tokens65 tokens72 tokens40 tokens34 tokens6-50%
HTTP server25 tokens42 tokens58 tokens32 tokens26 tokens22-57%