Skip to content

YanmaJS

YanmaJS は Zig で書かれた JavaScript エンジンです。Zig アプリケーションへの組み込み(embedding)を主な用途として設計されています。

🚀 ブラウザで試す → — インストール不要。WebAssembly 版の YanmaJS をブラウザ上で実行できるサンドボックスです。

特徴

  • ECMAScript 2026 世代の主要機能をサポート — test262 準拠率 100%(48,536 件中 48,419 合格 / 0 失敗、非目標の 117 件は skip)。一部制限あり(詳細は制約と上限を参照)
  • NaN-boxed な Value 表現u64 1 語に値を詰め込む NaN-boxing により、コンパクトかつ高速な値表現を実現
  • GC(ガベージコレクション) — オブジェクトのライフサイクルを自動管理。手動 GC トリガーや GC モードの切り替えも可能
  • Promise / async・await — 非同期処理をサポート。ホスト側のイベントループと連携するためのフックを提供
  • モジュール(ES Modules)import/export に対応し、ホスト側でモジュールローダーを差し込み可能
  • サンドボックス実行 — メモリ上限の指定や実行の割り込み(interrupt)により、信頼できない JavaScript コードを安全に実行

注意事項

このプロジェクトは主に AI によって実装されており、学習・実験目的のプロジェクトです。プロダクション環境での利用は推奨しません。

クイックスタート

Context を初期化し、JavaScript コードを評価して結果を取り出す最小の例です。

const std = @import("std");
const yanmajs = @import("yanmajs");
const Context = yanmajs.Context;

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();

    const ctx = try Context.init(gpa.allocator());
    defer ctx.deinit();

    const result = try ctx.eval("1 + 2");
    const n = yanmajs.toFloat(result);
    std.debug.print("Result: {d}\n", .{n}); // 3
}

より詳しい手順は はじめに を参照してください。

構成

YanmaJS リポジトリはエンジン本体(yanmajs)・ランタイムライブラリ(yanmajs_runtime)・CLI(yanmajs_cli)・WASM ビルド(yanmajs_wasm)・C ABI(yanmajs_capi)などのコンポーネントで構成されています。一覧と役割はコンポーネント構成を参照してください。

ガイド

API リファレンス

  • Context — Context の全メソッド
  • Value — 値の作成・変換・型チェック関数
  • 型定義 — 公開型・構造体・列挙型
  • エラー — EvalError・例外処理
  • 制約と上限 — 未サポート機能・既知の制約

命名について

Yanmaは日本語でトンボの一種であるヤンマを意味します。ヤンマは小さい昆虫ながら力強く速く飛ぶことから本プロジェクトの名前として命名しました。