extism

C#源码 2025-08-12
extism /raw/main/.github/assets/logo-horizontal-darkmode.png“>

概述

extism是使用WebAssembly(WASM)构建的轻量级框架。它支持在服务器,边缘,内部,物联网,浏览器以及两者之间的所有内容上运行的WASM代码。 extism目的是“通用”,因为它支持通用界面,无论它在何处运行。

注意: extism的主要用例之一是构建可扩展的软件和插件。您希望能够从用户执行任意,不信任的代码吗? extism使这一安全和实用。

此外, extism还增加了标准的WASM运行时间。例如,我们支持持续的内存/模块范围变量,没有WASI,运行时限制器和计时器,更简单的主机函数链接等,安全和主机控制的HTTP等。 extism用户构建:

  • 插件系统
  • FAAS平台
  • 代码生成器
  • Web应用程序
  • &更多...

支持的目标

我们目前为以下目标提供版本:

  • Aarch64-Apple-darwin
  • AARCH64-INSWONN-LINUX-GNU
  • AARCH64-INSWONN-LINUX-MUSL
  • x86_64-apple-darwin
  • x86_64-pc-windows-gnu
  • X86_64-PC-WINDOWS-MSVC
  • x86_64-ninknown-linux-gnu
  • X86_64-Inning-Linux-Musl

对于Android,我们建议您查看纯Java extism运行时的Cocory SDK。

在您的应用中运行WebAssembly

选择一个SDK以导入您的程序,并参考文档开始:

类型 语言 源代码 包裹
Rust SDK https://github.co**m*/extism/ extism /tree/main/runtime Crates.io
JS SDK https://github.co**m*/extism/js-sdk
(支持Web,节点,Deno和Bun!)
NPM
elixir SDK https://github.co**m*/extism/elixir-sdk 十六进制
去SDK https://github.co**m*/extism/go-sdk 去mod
Haskell SDK https://github.co**m*/extism/haskell-sdk 骇客
Java SDK https://github.co**m*/extism/java-sdk Sonatype
.NET SDK https://github.co**m*/extism/dotnet-sdk
(支持C#&F#!)
nuget
OCAML SDK https://github.co**m*/extism/ocaml-sdk OPAM
Perl SDK https://github.co**m*/extism/perl-sdk CPAN
PHP SDK https://github.co**m*/extism/php-sdk Packagist
Python SDK https://github.co**m*/extism/python-sdk PYPI
红宝石SDK https://github.co**m*/extism/ruby-sdk 红宝石
Zig SDK https://github.co**m*/extism/zig-sdk N/A。
C SDK https://github.co**m*/extism/ extism /tree/main/lib extism N/A。
C ++ SDK https://github.co**m*/extism/cpp-sdk N/A。

编译WebAssembly以在extism主机中运行

extism主机(运行SDK)必须执行具有PDK或插件开发套件的WebAssembly代码,该库将库列入.wasm二进制文件。 PDK使插件 /扩展代码作者可以轻松地从主机读取输入并返回数据,读取提供的配置,设置 /获取变量,如果允许,请拨出http调用,等等。

选择一个PDK以导入您的WASM程序,并参考以开始的文档:

类型 语言 源代码 包裹
Rust PDK https://github.co**m*/extism/rust-pdk Crates.io
JS PDK https://github.co**m*/extism/js-pdk N/A。
Python PDK https://github.co**m*/extism/python-pdk N/A。
去PDK https://github.co**m*/extism/go-pdk 去mod
Haskell PDK https://github.co**m*/extism/haskell-pdk 骇客
汇编PDK https://github.co**m*/extism/assemblyscript-pdk NPM
.NET PDK https://github.co**m*/extism/dotnet-pdk
(支持C#&F#!)
nuget
C PDK https://github.co**m*/extism/c-pdk N/A。
C ++ PDK https://github.co**m*/extism/cpp-pdk N/A。
Zig PDK https://github.co**m*/extism/zig-pdk N/A。

产生绑定

定义模式以描述要extism SDK和PDK语言之间使用的功能签名和类型通常非常有用。

XTP bindgen是为extism插件生成PDK绑定的开源框架。它是由XTP平台使用的,但可以在平台之外使用来定义任何extism兼容插件系统。

1。安装xtp CLI。

请参阅此处的安装说明。

2。使用我们的OpenAPI启发的IDL创建模式:

 version : v1-draft
exports : 
  CountVowels :
      input : 
          type : string
          contentType : text/plain; charset=utf-8
      output :
          $ref : " #/components/schemas/VowelReport "
          contentType : application/json
# components.schemas defined in example-schema.yaml...

请参阅示例 - chema.yaml或文档页面上的完整“厨房水槽”示例。

3。生成绑定以从您的插件中使用:

 xtp plugin init --schema-file ./example-schema.yaml
  > 1. TypeScript                      
    2. Go                              
    3. Rust                            
    4. Python                          
    5. C#                              
    6. Zig                             
    7. C++                             
    8. GitHub Template                 
    9. Local Template

这将创建一个整个样板插件项目,供您开始。实现空功能,然后运行xtp plugin build以编译插件。

有关XTP bindgen的更多信息,请参见Dylibso/XTP-BINDGEN存储库和官方XTP模式文档。

支持

不和谐

如果您遇到任何问题或有任何疑问,请加入我们的不和谐并告诉我们。我们的社区反应迅速,很乐意帮助您入门。

用法

前往项目网站以获取更多信息和文档。另外,考虑阅读有关extism及其目标和方法的概述。

贡献

感谢您考虑对extism的贡献,我们很乐意帮助您制作公关或找到一些工作!

最简单的开始方法是加入不和谐或在extism /proposals问题追踪器上打开问题,最终可以成为extism改进建议(EIP)。

有关更多信息,请阅读贡献指南。


谁是背后的?

extism是该团队的开源产品:

伸出手告诉我们您正在建造什么!我们很想提供帮助: hello@dylibso.com

下载源码

通过命令行克隆项目:

git clone https://github.com/extism/extism.git