Gitpedia

Extism

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

From extism·Updated May 30, 2026·View on GitHub·

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. The project is written primarily in Rust, distributed under the BSD 3-Clause "New" or "Revised" License license, first published in 2022. It has gained significant community traction with 5,624 stars and 160 forks on GitHub. Key topics include: browser, c, cpp, csharp, dotnet.

Latest release: latestDevelopment Build
May 20, 2026View Changelog →
<div align="center"> <a href="https://extism.org"> <picture> <source media="(prefers-color-scheme: dark)" srcset=".github/assets/logo-horizontal-darkmode.png"> <img alt="Extism - the WebAssembly framework" width="75%" style="max-width: 600px" src=".github/assets/logo-horizontal.png"> </picture> </a>

Discord
GitHub Org's stars
Downloads
GitHub License
GitHub release (with filter)

</div>

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:

TypeLanguageSource CodePackage
Rust SDK<img alt="Rust SDK" src="https://extism.org/img/sdk-languages/rust.svg" width="50px"/>https://github.com/extism/extism/tree/main/runtimeCrates.io
JS SDK<img alt="JS SDK" src="https://extism.org/img/sdk-languages/js.svg" width="50px"/>https://github.com/extism/js-sdk <br/>(supports Web, Node, Deno & Bun!)NPM
Elixir SDK<img alt="Elixir SDK" src="https://extism.org/img/sdk-languages/elixir.svg" width="50px"/>https://github.com/extism/elixir-sdkHex
Go SDK<img alt="Go SDK" src="https://extism.org/img/sdk-languages/go.svg" width="50px"/>https://github.com/extism/go-sdkGo mod
Haskell SDK<img alt="Haskell SDK" src="https://extism.org/img/sdk-languages/haskell.svg" width="50px"/>https://github.com/extism/haskell-sdkHackage
Java SDK<img alt="Java SDK" src="https://extism.org/img/sdk-languages/java-android.svg" width="50px"/>https://github.com/extism/java-sdkSonatype
.NET SDK<img alt=".NET SDK" src="https://extism.org/img/sdk-languages/dotnet.svg" width="50px"/>https://github.com/extism/dotnet-sdk <br/>(supports C# & F#!)Nuget
OCaml SDK<img alt="OCaml SDK" src="https://extism.org/img/sdk-languages/ocaml.svg" width="50px"/>https://github.com/extism/ocaml-sdkopam
Perl SDK<img alt="Perl SDK" src="https://extism.org/img/sdk-languages/perl.svg" width="50px"/>https://github.com/extism/perl-sdkCPAN
PHP SDK<img alt="PHP SDK" src="https://extism.org/img/sdk-languages/php.svg" width="50px"/>https://github.com/extism/php-sdkPackagist
Python SDK<img alt="Python SDK" src="https://extism.org/img/sdk-languages/python.svg" width="50px"/>https://github.com/extism/python-sdkPyPi
Ruby SDK<img alt="Ruby SDK" src="https://extism.org/img/sdk-languages/ruby.svg" width="50px"/>https://github.com/extism/ruby-sdkRubyGems
Zig SDK<img alt="Zig SDK" src="https://extism.org/img/sdk-languages/zig.svg" width="50px"/>https://github.com/extism/zig-sdkN/A
C SDK<img alt="C SDK" src="https://extism.org/img/sdk-languages/c.svg" width="50px"/>https://github.com/extism/extism/tree/main/libextismN/A
C++ SDK<img alt="C++ SDK" src="https://extism.org/img/sdk-languages/cpp.svg" width="50px"/>https://github.com/extism/cpp-sdkN/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:

TypeLanguageSource CodePackage
Rust PDK<img alt="Rust PDK" src="https://extism.org/img/sdk-languages/rust.svg" width="50px"/>https://github.com/extism/rust-pdkCrates.io
JS PDK<img alt="JS PDK" src="https://extism.org/img/sdk-languages/js.svg" width="50px"/>https://github.com/extism/js-pdkN/A
Python PDK<img alt="Python PDK" src="https://extism.org/img/sdk-languages/python.svg" width="50px"/>https://github.com/extism/python-pdkN/A
Go PDK<img alt="Go PDK" src="https://extism.org/img/sdk-languages/go.svg" width="50px"/>https://github.com/extism/go-pdkGo mod
Haskell PDK<img alt="Haskell PDK" src="https://extism.org/img/sdk-languages/haskell.svg" width="50px"/>https://github.com/extism/haskell-pdkHackage
AssemblyScript PDK<img alt="AssemblyScript PDK" src="https://extism.org/img/sdk-languages/assemblyscript.svg" width="50px"/>https://github.com/extism/assemblyscript-pdkNPM
.NET PDK<img alt=".NET PDK" src="https://extism.org/img/sdk-languages/dotnet.svg" width="50px"/>https://github.com/extism/dotnet-pdk <br/>(supports C# & F#!)Nuget
C PDK<img alt="C PDK" src="https://extism.org/img/sdk-languages/c.svg" width="50px"/>https://github.com/extism/c-pdkN/A
C++ PDK<img alt="C++ PDK" src="https://extism.org/img/sdk-languages/cpp.svg" width="50px"/>https://github.com/extism/cpp-pdkN/A
Zig PDK<img alt="Zig PDK" src="https://extism.org/img/sdk-languages/zig.svg" width="50px"/>https://github.com/extism/zig-pdkN/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:

yaml
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:

<p align="left"> <a href="https://dylibso.com" _target="blanks"><img width="200px" src="https://user-images.githubusercontent.com/7517515/198204119-5afdebb9-a5d8-4322-bd2a-46179c8d7b24.svg"/></a> </p>

Reach out and tell us what you're building! We'd love to help:
<a href="mailto:hello@dylibso.com">hello@dylibso.com</a>

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from extism/extism via the GitHub API.Last fetched: 5/30/2026