コンポーネント指向 · 純粋な Zig · MPL 2

純粋な Zig でゲームを作る。

ガベージコレクタ (GC) なし SDL3 GPU · Vulkan/Metal/D3D12 単一のネイティブバイナリ
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 ✓
0ガベージコレクタなし
1全レイヤーで一貫したプログラミング言語
3対応 GPU バックエンド
1 binary単一の自己完結型パッケージ
MPL 2シート料・ロイヤリティ無料
すべてを一つのウィンドウで

ランタイムのオーバーヘッドがない、本物のエディター

Turian は、Unity スタイルのビジュアルなワークフローと、システム言語の予測可能性を両立します。VM も、スクリプティングブリッジも、隠れたメモリ割り当て(アロケーション)もありません。

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.

スクリプティング

コンポーネントは単なる Zig の構造体

目印となる定数を一行書くだけで、構造体がエディターコンポーネントに変わります。パブリックフィールドは自動的にインスペクター上の操作コントロールになり、ライフサイクルフックは必要なときにだけ実装する単純なメソッドです。

  • コード駆動型の検出 — エディターは正規表現ではなく本物の Zig コードを解析するため、コメントや条件付きコンパイルによって検出が壊れることはありません。
  • 型定義されたインスペクターフィールド — f32、i32、bool、Vec3、オブジェクト/アセットへの参照が自動的にレンダリングされます。
  • おなじみのライフサイクル — awake, enable, start, update, disable, destroy。

チュートリアルを読む →

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;
    };
};
ゼロからビルド・配布まで

3 つのコマンド。1 つのバイナリ。

プロジェクトの作成

turian-cli new-project を実行して、アセットフォルダと初期シーンを含むプロジェクトを生成します。

スクリプトと配置

Turian Studio を開き、コンポーネントを追加し、シーンを構成し、インスペクターでフィールドの値をリアルタイムに調整します。

ビルドと共有

turian-cli build がアセットをクックし、誰にでもそのまま配布できる自己完結型の実行ファイルを生成します。

オープンソース · オープンドア

コミュニティに参加する

質問の投稿、作品の共有、エンジンの方向性への提案など、どなたでも大歓迎です。

開発を継続するために

Turian の開発を支援する

Turian は有志のボランティアによって開発されています。皆様のご支援は、継続的な活動と、エンジンを無料でオープンに保つために役立てられます。

何か作ってみませんか?

SDK をダウンロードし、Zig 0.16.0 をインストールして、数分で最初のシーンをパブリッシュしましょう。