Crie jogos em Zig puro.
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;
};
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.
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.
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;
};
};
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.
Junte-se à comunidade
Faça perguntas, compartilhe seu trabalho e ajude a moldar o engine — todos são bem-vindos.
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.