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
