Craneliftコードジェネレーターを基盤とするスタンドアロンのWebAssemblyランタイム。WASIに対応し、複数言語から組み込めます。
zion-sati/NetWasm
独自のCoreLib、ランタイム、SDKを備え、C#と.NET CILをコンパイルして小型のスタンドアロンWASI Preview 2コンポーネントを生成するコンパイラです。
- スター
- 233
- フォーク
- 7
- 未解決の Issue
- 6
- 最終コミット
- 2 時間前
これは何?
NetWasmは独自のコンパイラ、CoreLib、ランタイム、SDKを使って、C#と.NET CILをWebAssemblyに直接コンパイルします。デスクトップ版CLRやMono、アプリケーションDLLは同梱しません。コンパイラはプログラムから到達可能なコードを基に処理し、必要なランタイムサポートだけをリンクするため、出力は自己完結型のWASI Preview 2コンポーネントになります。WasmtimeなどのWasmホストで実行でき、ビルドには通常のdotnet CLIを使用します。
サーバーレス関数やブラウザモジュールなど、小型でサンドボックス化されたC#バイナリを求める開発者を対象としています。3種類のガベージコレクター方式(デフォルトのCompact、NetWasmGC、Bump)を利用でき、C#のエクスポートをWeb Workerでも実行できる型付きJavaScriptモジュールとして公開できます。また、WITからC#バインディングを生成できます。.NETの機能は定義済みのサブセットに限られており、ランタイムリフレクション、dynamic、実行時のアセンブリ読み込み、マネージドスレッドには対応していません。プロジェクトはまだ1.0未満です。
主な機能
- 01C#と.NET CILをスタンドアロンのWASI Preview 2コンポーネントに直接コンパイルします。
- 02到達可能なコードと必要なランタイムサポートだけをリンクし、バイナリを小型に保ちます。
- 03Compact、NetWasmGC、Bumpの各ガベージコレクター方式を利用できます。
- 04Web Workerでの利用も含め、C#のエクスポートを型付きJavaScriptモジュールとして公開します。
- 05WITからC#バインディングを生成し、静的な.aネイティブ相互運用にも対応します。
- 06標準のdotnet CLIでビルドとテストを実行できます。
ユースケース
- 小型のC#関数をWebAssemblyホストやサーバーレスランタイムにデプロイする。
- 型付きJavaScriptモジュールとして、ブラウザページやWeb Worker内でC#のロジックを実行する。
- NetWasmとデスクトップ版.NETの両方を対象とする、移植性の高いC#ライブラリを構築する。
- 大規模なBlazor WebAssemblyビルドに代わる、コンパクトなWasmの選択肢としてC#を検討する。
クイックスタート
- 1
.NET SDK 10.0.303 以降をインストールする
- 2
NetWasm プロジェクトテンプレートをインストールする
dotnet new install NetWasm.Templates - 3
新しい NetWasm アプリを作成して実行する
dotnet new netwasm-app -n HelloNetWasm - 4
アプリをスタンドアロンの WASI コンポーネントとして発行する
dotnet publish -c Release -o publish/local
使う前に知っておきたいこと
- NetWasm はまだ 1.0 未満のため、ソース、パッケージ、ABI の契約はマイナーリリース間で変更される場合があります。
- ランタイムリフレクション、dynamic、実行時のアセンブリ読み込み、マネージドスレッドはサポートされていません。
- 一般的なファイル、ディレクトリ、ソケット、サブプロセスの API はまだ実装されていません。
- 発行したコンポーネントの実行には、Wasmtime などの WebAssembly ホストが必要です。
トピック
よくある質問
- NetWasm とは?
- 独自のCoreLib、ランタイム、SDKを備え、C#と.NET CILをコンパイルして小型のスタンドアロンWASI Preview 2コンポーネントを生成するコンパイラです。 NetWasmは独自のコンパイラ、CoreLib、ランタイム、SDKを使って、C#と.NET CILをWebAssemblyに直接コンパイルします。デスクトップ版CLRやMono、アプリケーションDLLは同梱しません。コンパイラはプログラムから到達可能なコードを基に処理し、必要なランタイムサポートだけをリンクするため、出力は自己完結型のWASI Preview 2コンポーネントになります。WasmtimeなどのWasmホストで実行でき、ビルドには通常のdotnet CLIを使用します。
- NetWasm は無料で使えますか?ライセンスは?
- NetWasm は Other ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
- NetWasm は今もメンテナンスされていますか?
- 活発にメンテナンス中。NetWasm の最終コミットは 2026年10月22日 です。
- NetWasm は何に使えますか?
- 小型のC#関数をWebAssemblyホストやサーバーレスランタイムにデプロイする。 型付きJavaScriptモジュールとして、ブラウザページやWeb Worker内でC#のロジックを実行する。 NetWasmとデスクトップ版.NETの両方を対象とする、移植性の高いC#ライブラリを構築する。 大規模なBlazor WebAssemblyビルドに代わる、コンパクトなWasmの選択肢としてC#を検討する。
- NetWasm のインストール方法は?
- .NET SDK 10.0.303 以降をインストールする NetWasm プロジェクトテンプレートをインストールする: dotnet new install NetWasm.Templates 新しい NetWasm アプリを作成して実行する: dotnet new netwasm-app -n HelloNetWasm アプリをスタンドアロンの WASI コンポーネントとして発行する: dotnet publish -c Release -o publish/local
- NetWasm はどこで入手できますか?
- ソースコードとインストール手順は GitHub にあります:https://github.com/zion-sati/NetWasm
概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。
関連プロジェクト
LLVMを基盤とするGoコンパイラ。マイクロコントローラー、WebAssembly(WASM/WASI)、コマンドラインツール向けにビルドできます。
Node.jsなしで動作するネイティブ実行ファイルやWebAssemblyを生成する実験的なTypeScript/JavaScriptコンパイラ。
アプリやAIエージェントのコードを、高速で軽量なサンドボックス環境で実行するWebAssemblyランタイムとCLI。
C/C++コードをWebAssemblyに変換し、ブラウザーやNode.jsなどのWasmランタイムで実行できるコンパイラツールチェーン。
型付きTypeScriptのサブセットをWebAssemblyモジュールに変換する、TypeScript風の言語とコンパイラ。