Baseado em componentes · Zig puro · MPL 2

Crie jogos em Zig puro.

Sem garbage collector SDL3 GPU · Vulkan/Metal/D3D12 Binário nativo único
spinner.zig — assets/
const engine = @import("engine");

pub const Spinner = struct {
    pub const is_component = true;

    speed: f32 = 90.0, // editable in inspector
    pub fn update(self: *Spinner, time: engine.Time) void { _ =
        self.speed * time.delta;
};
terminal
$ turian-cli new-project ./my-game "My Game"
$ turian-cli build ./my-game
→ cooked 12 assets · compiled game · 1 standalone binary ✓
0garbage collectors
1linguagem, de ponta a ponta
3GPUs suportadas
1 binarypacote autônomo
MPL 2sem taxas, sem licenças
Tudo em uma janela

Um editor de verdade, sem o custo da runtime

O Turian combina um fluxo de trabalho visual no estilo Unity com a previsibilidade de uma linguagem de sistemas. Sem VM, sem ponte de script, sem alocações ocultas.

Visual editor

Scene hierarchy, inspector, asset browser and a live 3D viewport — all in a single window powered by SDL3 GPU.

Component system

Declare pub const is_component = true; in any struct and it appears in the Add Component menu with full field inspection.

Live script discovery

Drop a .zig file into assets/ and your component shows up immediately — fields introspected at edit-time.

Asset pipeline

Loads OBJ, glTF 2.0 / GLB, PNG, JPG and more, with GUID-stable references that survive moves and renames.

Headless CLI

turian-cli build compiles your game without opening the GUI — the same artifact your editor produces, ideal for CI.

Pure Zig

No garbage collector, no hidden allocations, no runtime surprises. Compiles to a single executable on every Zig-supported platform.

Scripts

Componentes são apenas structs em Zig

Um marcador transforma uma struct em um componente do editor. Campos públicos viram controles no inspetor; hooks de ciclo de vida são métodos simples que você implementa só quando precisar.

  • Descoberta por código — o editor analisa Zig de verdade, não regex, então comentários e compilação condicional nunca quebram.
  • Campos tipados no inspetor — f32, i32, bool, Vec3 e referências a objetos/assets são renderizados automaticamente.
  • Ciclo de vida familiar — awake, enable, start, update, disable, destroy.

Leia o tutorial →

follower.zig
const std = @import("std");
const engine = @import("engine");

pub const Follower = struct {
    pub const is_component = true;

    // Drag a GameObject from the Hierarchy here.
    target: engine.GameObjectRef = .{},
    speed: f32 = 4.0,
    pub fn start(self: *Follower) void {
        const name = self.target.slice();
        if (name.len > 0) std.debug.print("following '{s}'\n", .{name});
    }
    pub fn update(self: *Follower, time: engine.Time) void {
        _ = self.speed * time.delta;
    };
};
Do zero a um build pronto

Três comandos. Um binário.

Estruturar

turian-cli new-project cria um projeto com uma pasta de assets e uma cena inicial.

Scripts & arranjo

Abra o Turian Studio, adicione componentes, monte a cena e ajuste campos ao vivo no inspetor.

Compilar & compartilhar

turian-cli build processa assets e gera um executável autônomo que você pode entregar a qualquer um.

Código aberto · portas abertas

Junte-se à comunidade

Faça perguntas, compartilhe seu trabalho e ajude a moldar o engine — todos são bem-vindos.

Mantenha as luzes acesas

Apoie o desenvolvimento do Turian

O Turian é construído por voluntários. Seu apoio financia o trabalho contínuo e mantém o engine livre e aberta.

Pronto para construir algo?

Baixe o SDK, instale o Zig 0.16.0 e publique sua primeira cena em minutos.