Simple. Explicit. Fast.

The data-oriented language for sane software development.

Tools for Windows, Linux, macOS, and BSD.

Find the community.

Ask questions, share work, and follow development on Discord and the forum.

Real features, shown in code.

Important systems concepts stay visible in the source instead of disappearing behind boilerplate.

Draw pixels quickly with official bindings.

Use packages like raylib to get from source code to a running native window with very little boilerplate.

import rl "vendor:raylib"

main :: proc() {
    rl.InitWindow(900, 600, "raylib triangle")
    defer rl.CloseWindow()

    for !rl.WindowShouldClose() {
        rl.BeginDrawing()
        rl.ClearBackground({18, 22, 29, 255})
        rl.DrawTriangle({450, 120}, {220, 480}, {680, 480}, rl.ORANGE)
        rl.EndDrawing()
    }
}

Work with vectors and fixed arrays directly.

Common numeric and SIMD-shaped code stays concise without giving up explicit types.

import "core:fmt"
import "core:math/linalg"

main :: proc() {
    // Vectors in Odin are just fixed arrays.
    a := [3]f32{0, 1, 2}
    b := [3]f32{0, 0, 1}

    // Scale 'b' by 2 and do element-wise addition.
    c := a + b * 2
    fmt.println(c) // [0, 1, 4]

    // Vectors can be swizzled (fields reordered)
    // just like in shader languages.
    fmt.println(c.zyx) // [4, 1, 0]

    // Many operators are built-in, and the linalg
    // package contains everything else you need.
    fmt.println(linalg.length(c)) // 4.123...

    // Matrix math is also built-in!
    scale_z := matrix[3, 3]f32{
        1, 0, 0,
        0, 1, 0,
        0, 0, 10,
    }

    d := scale_z * c
    fmt.println(d) // [0, 1, 40]
}

Keep the shape of your data in the type.

Use compact flags and enumerated arrays to make valid state clear at a glance.

Player :: struct {
    position:   [3]f32,
    flags:      bit_set[Player_Flag],
    hand_items: [Hand]Item,
}

Player_Flag :: enum { Grounded, Stunned }
Hand        :: enum { Left, Right }
Item        :: enum { None, Pickaxe }

player := Player{
    position   = {1, 10, 0},
    flags      = {.Grounded},
    hand_items = {.Right = .Pickaxe},
}

Batteries Included

Ships with a practical core library and official vendor bindings for graphics APIs, windowing, audio, UI, and more.

Real-time tools, made with Odin.

JangaFX builds production tools for fire, terrain, liquids, and procedural imagery entirely with Odin. The language also powers games, utilities, libraries, and experiments from the community.