MCPcopy Index your code
hub / github.com/extism/extism

github.com/extism/extism @v1.30.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.30.0 ↗ · + Follow
435 symbols 1,091 edges 42 files 139 documented · 32% 1 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<a href="https://extism.org">






    <img alt="Extism - the WebAssembly framework" width="75%" style="max-width: 600px" src="https://github.com/extism/extism/raw/v1.30.0/github/assets/logo-horizontal.png">



</a>

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

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

Extension points exported contracts — how you extend this code

ToBytes (Interface)
`ToBytes` is used to define how a type should be encoded when working with Extism memory. It is used for plugin input an [19 …
convert/src/to_bytes.rs
Internal (Interface)
InternalExt provides a unified way of acessing `memory`, `store` and `internal` values [2 implementers]
runtime/src/internal.rs
FromBytes (Interface)
`FromBytes` is used to define how a type should be decoded when working with Extism memory. It is used for plugin output [6 …
convert/src/from_bytes.rs
FromBytesOwned (Interface)
`FromBytesOwned` is similar to [`FromBytes`] but it doesn't borrow from the input slice. [`FromBytes`] is automatically [16 …
convert/src/from_bytes.rs

Core symbols most depended-on inside this repo

clone
called by 45
runtime/src/function.rs
call
called by 43
runtime/src/pool.rs
len
called by 37
convert/src/memory_handle.rs
build
called by 36
runtime/src/pool.rs
get
called by 28
runtime/src/pool.rs
with_wasi
called by 26
runtime/src/plugin_builder.rs
get_func
called by 19
runtime/src/plugin.rs
as_ptr
called by 18
runtime/src/function.rs

Shape

Function 188
Method 182
Class 52
Enum 9
Interface 4

Languages

Rust98%
C++1%
C1%

Modules by API surface

runtime/src/sdk.rs44 symbols
runtime/src/plugin.rs38 symbols
manifest/src/lib.rs37 symbols
runtime/src/current_plugin.rs36 symbols
kernel/src/lib.rs35 symbols
runtime/src/tests/runtime.rs34 symbols
runtime/src/tests/kernel.rs21 symbols
runtime/src/plugin_builder.rs21 symbols
runtime/src/function.rs20 symbols
runtime/src/pool.rs19 symbols
runtime/src/readonly_dir.rs15 symbols
runtime/src/pdk.rs14 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add extism \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact