Wyn

1 language for everything

Ship CLI tools, web services, desktop apps, mobile apps, and games — from one language, on every platform.

v1.6.0 MIT License Cross-platform

— Install —

$ curl -fsSL https://wynlang.com/install.sh | sh
> irm https://wynlang.com/install.ps1 | iex
26
stdlib modules
260+
methods
2μs
spawn time
62ms
cached compile
5
platforms
Fast
Native binaries. No VM, no GC. 62ms cached compile. 2μs spawn. Cross-compile to Linux, macOS, Windows, iOS, Android.
Simple
Structs with inline methods, list comprehensions, string interpolation, closures, for-each, slices. Clean syntax, zero boilerplate.
Powerful
Traits with dynamic dispatch, spawn/await concurrency, pattern matching, Result/Option with ? operator, generics.
Complete
HTTP, JSON, CSV, SQLite, crypto, regex, GUI, audio — 26 modules and 260+ methods. No hunting for packages.
Tooled
REPL, benchmarks, doc gen, test runner, formatter, package manager. VS Code and Neovim with LSP.
— Wyn —
struct User {
    name: string
    age: int

    fn greeting(self) -> string {
        return "Hi, ${self.name}!"
    }

    fn is_adult(self) -> int {
        return self.age >= 18
    }
}

fn main() -> int {
    var users = [User{name: "Alice", age: 25}, User{name: "Bob", age: 17}]
    for u in users { println(u.greeting()) }
    return 0
}
fn main() -> int {
    // List comprehensions
    var squares = [x * x for x in 0..10]
    var evens = [x for x in 0..20 if x % 2 == 0]

    // Slice syntax
    var first3 = squares[0:3]          // [0, 1, 4]
    var hello = "hello world"[0:5]   // "hello"

    // Functional chains
    var data = [1, 2, 3, 4, 5]
    var result = data
        .filter(fn(x: int) -> int { return x > 2 })
        .map(fn(x: int) -> int { return x * 10 })
    println(result.join(", "))       // 30, 40, 50
    return 0
}
trait Drawable {
    fn draw(self) -> string
}

struct Circle { r: int }
struct Rect { w: int, h: int }

impl Drawable for Circle {
    fn draw(self) -> string { return "circle" }
}
impl Drawable for Rect {
    fn draw(self) -> string { return "rect" }
}

// Dynamic dispatch — any Drawable
fn render(shape: Drawable) { println(shape.draw()) }

fn safe_div(a: int, b: int) -> ResultInt {
    if b == 0 { return Err("divide by zero") }
    return Ok(a / b)
}
fn compute(n: int) -> int {
    var sum = 0
    for i in 0..n { sum = sum + i }
    return sum
}

fn main() -> int {
    // Spawn 3 parallel tasks — 2μs each
    var f1 = spawn compute(100000)
    var f2 = spawn compute(200000)
    var f3 = spawn compute(300000)

    var total = await f1 + await f2 + await f3

    // Channels for message passing
    var ch = Task.channel(10)
    Task.send(ch, total)
    println(Task.recv(ch).to_string())
    return 0
}
// Numbers
var answer = 42.to_string()          // "42"
var absolute = Math.abs(-5)          // 5
var power = Math.pow(2, 8)           // 256
var rounded = Math.round(3.7)        // 4

// Strings
var clean = "  hello world  "
    .trim().capitalize()              // "Hello world"

var shout = "hello"
    .upper().replace("L", "*").reverse()  // "O**EH"

// Arrow lambdas
var nums = [1, 2, 3, 4, 5]
var doubled = nums.map(fn(x) => x * 2)       // [2,4,6,8,10]
var big = nums.filter(fn(x) => x > 3)        // [4,5]

// Chain everything
var result = "HELLO"
    .lower().capitalize().len()
    .to_string()                          // "5"
fn main() -> int {
    // Fetch + parse + store in 10 lines
    var body = Http.get("https://api.example.com/users")
    var doc = Json.parse(body)
    var name = Json.get(doc, "name")

    var token = Encoding.base64_encode("user:secret")
    var hash = Crypto.sha256(body)

    var db = Db.open("app.db")
    Db.exec(db, "INSERT INTO users(name) VALUES('${name}')")

    var csv = Csv.parse(File.read("data.csv"))
    println("Saved ${name}")
    return 0
}
GitHub Documentation Sample Apps Downloads