랭킹으로 돌아가기

extism/extism

Rustextism.org

The framework for building with WebAssembly (wasm). Easily & securely load wasm modules, move data, call functions, and build extensible apps.

plugin-systemccppgoocamlpythonrubyrusthaskellwasmwebassemblynode
스타 성장
스타
5.7k
포크
165
주간 성장
이슈
40
2k4k
2022년 9월2023년 12월2025년 4월2026년 7월
아티팩트crates.iocargo add extism
README

Overview

Extism is a lightweight framework for building with WebAssembly (Wasm). It supports running Wasm code on servers, the edge, CLIs, IoT, browsers and everything in between. Extism is designed to be "universal" in that it supports a common interface, no matter where it runs.

Note: One of the primary use cases for Extism is building extensible software & plugins. You want to be able to execute arbitrary, untrusted code from your users? Extism makes this safe and practical to do.

Additionally, Extism adds some extra utilities on top of standard Wasm runtimes. For example, we support persistent memory/module-scope variables, secure & host-controlled HTTP without WASI, runtime limiters & timers, simpler host function linking, and more. Extism users build:

  • plug-in systems
  • FaaS platforms
  • code generators
  • web applications
  • & much more...

Supported Targets

We currently provide releases for the following targets:

  • aarch64-apple-darwin
  • aarch64-unknown-linux-gnu
  • aarch64-unknown-linux-musl
  • x86_64-apple-darwin
  • x86_64-pc-windows-gnu
  • x86_64-pc-windows-msvc
  • x86_64-unknown-linux-gnu
  • x86_64-unknown-linux-musl

For Android we suggest taking a look at the Chicory SDK for a pure Java Extism runtime.

Run WebAssembly In Your App

Pick a SDK to import into your program, and refer to the documentation to get started:

Type Language Source Code Package
Rust SDK Rust SDK https://github.com/extism/extism/tree/main/runtime Crates.io
JS SDK JS SDK https://github.com/extism/js-sdk
(supports Web, Node, Deno & Bun!)
NPM
Elixir SDK Elixir SDK https://github.com/extism/elixir-sdk Hex
Go SDK Go SDK https://github.com/extism/go-sdk Go mod
Haskell SDK Haskell SDK https://github.com/extism/haskell-sdk Hackage
Java SDK Java SDK https://github.com/extism/java-sdk Sonatype
.NET SDK .NET SDK https://github.com/extism/dotnet-sdk
(supports C# & F#!)
Nuget
OCaml SDK OCaml SDK https://github.com/extism/ocaml-sdk opam
Perl SDK Perl SDK https://github.com/extism/perl-sdk CPAN
PHP SDK PHP SDK https://github.com/extism/php-sdk Packagist
Python SDK Python SDK https://github.com/extism/python-sdk PyPi
Ruby SDK Ruby SDK https://github.com/extism/ruby-sdk RubyGems
Zig SDK Zig SDK https://github.com/extism/zig-sdk N/A
C SDK C SDK https://github.com/extism/extism/tree/main/libextism N/A
C++ SDK C++ SDK https://github.com/extism/cpp-sdk N/A

Compile WebAssembly to run in Extism Hosts

Extism Hosts (running the SDK) must execute WebAssembly code that has a PDK, or Plug-in Development Kit, library compiled in to the .wasm binary. PDKs make it easy for plug-in / extension code authors to read input from the host and return data back, read provided configuration, set/get variables, make outbound HTTP calls if allowed, and more.

Pick a PDK to import into your Wasm program, and refer to the documentation to get started:

Type Language Source Code Package
Rust PDK Rust PDK https://github.com/extism/rust-pdk Crates.io
JS PDK JS PDK https://github.com/extism/js-pdk N/A
Python PDK Python PDK https://github.com/extism/python-pdk N/A
Go PDK Go PDK https://github.com/extism/go-pdk Go mod
Haskell PDK Haskell PDK https://github.com/extism/haskell-pdk Hackage
AssemblyScript PDK AssemblyScript PDK https://github.com/extism/assemblyscript-pdk NPM
.NET PDK .NET PDK https://github.com/extism/dotnet-pdk
(supports C# & F#!)
Nuget
C PDK C PDK https://github.com/extism/c-pdk N/A
C++ PDK C++ PDK https://github.com/extism/cpp-pdk N/A
Zig PDK Zig PDK https://github.com/extism/zig-pdk N/A

Generating Bindings

It's often very useful to define a schema to describe the function signatures and types you want to use between Extism SDK and PDK languages.

XTP Bindgen is an open source framework to generate PDK bindings for Extism plug-ins. It's used by the XTP Platform, but can be used outside of the platform to define any Extism compatible plug-in system.

1. Install the xtp CLI.

See installation instructions here.

2. Create a schema using our OpenAPI-inspired 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...

See an example in example-schema.yaml, or a full "kitchen sink" example on the docs page.

3. Generate bindings to use from your plugins:

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

This will create an entire boilerplate plugin project for you to get started with. Implement the empty function(s), and run xtp plugin build to compile your plugin.

For more information about XTP Bindgen, see the dylibso/xtp-bindgen repository and the official XTP Schema documentation.

Support

Discord

If you experience any problems or have any questions, please join our Discord and let us know. Our community is very responsive and happy to help get you started.

Usage

Head to the project website for more information and docs. Also, consider reading an overview of Extism and its goals & approach.

Contribution

Thank you for considering a contribution to Extism, we are happy to help you make a PR or find something to work on!

The easiest way to start would be to join the Discord or open an issue on the extism/proposals issue tracker, which can eventually become an Extism Improvement Proposal (EIP).

For more information, please read the Contributing guide.


Who's behind this?

Extism is an open-source product from the team at:

Reach out and tell us what you're building! We'd love to help: hello@dylibso.com

관련 저장소
barbajs/barba

Create badass, fluid and smooth transitions between your website’s pages

TypeScriptnpmMIT Licensetransitionprefetch
barba.js.org
13k497
zumerlab/snapdom

High-performance engine for capturing, modifying, and converting DOM elements into any format.

JavaScriptnpmMIT Licensescreenshotdom
snapdom.dev
8k294
bjarneo/cliamp

cliamp - Terminal music player inspired by winamp

GoGo ModulesMIT Licensem3umusic
cliamp.stream
2.7k145
jeremylongshore/claude-code-plugins-plus-skills

425 plugins, 2,810 skills, 200 agents for Claude Code. Open-source marketplace at tonsofskills.com with the ccpi CLI package manager.

PythonPyPIMIT Licenseaiautomation
tonsofskills.com
2.5k365
lioensky/VCPToolBox

VCP 部署在 AI 模型 API 与前端应用之间,是面向AGI OS开发和探索的工业级基建示范项目。通过统一指令协议、多层级持久化记忆、分布式插件引擎及多 Agent 协作框架,将原本“无状态、无记忆、无工具调用能力”的大语言模型,彻底改造成拥有永久自我意识、物理世界操作权及群体协作智能的完整智能体系统。

JavaScriptnpmOtheragent-frameworkai-agent
vcptoolbox.com
2.2k358
ModelEngine-Group/fit-framework

FIT: 企业级AI开发框架,提供多语言函数引擎(FIT)、流式编排引擎(WaterFlow)及Java生态的LangChain替代方案(FEL)。原生/Spring双模运行,支持插件热插拔与智能聚散部署,无缝统一大模型与业务系统。

JavaMavenMIT Licenseaijava
modelengine-ai.net
2.1k335
gronxb/hot-updater

A self-hostable OTA update solution for React Native (Alternative to CodePush)

TypeScriptnpmOtherreact-nativereact-native-ota
hot-updater.dev
1.6k163
ManbangGroup/Phantom

Phantom — 唯一零 Hook 稳定占坑类 Android 热更新插件化方案

JavaMavenApache License 2.0androidandroid-library
1.4k193
RyensX/MediaBox

全能媒体容器,插件化网罗天下媒体,畅快浏览视频、漫画和任何你想要的媒体数据。A universal media container, aggregating media through plugins to browse videos, comics and any media data you want.

KotlinGNU General Public License v3.0androidkotlin
ryensx.github.io/MediaBoxPluginRepository
1.2k56