{"id":13412104,"url":"https://github.com/extism/extism","last_synced_at":"2026-04-01T18:57:09.889Z","repository":{"id":58420749,"uuid":"524325124","full_name":"extism/extism","owner":"extism","description":"The framework for building with WebAssembly (wasm). Easily \u0026 securely load wasm modules, move data, call functions, and build extensible apps.","archived":false,"fork":false,"pushed_at":"2026-03-19T22:58:52.000Z","size":9513,"stargazers_count":5497,"open_issues_count":48,"forks_count":150,"subscribers_count":31,"default_branch":"main","last_synced_at":"2026-03-20T12:03:23.987Z","etag":null,"topics":["browser","c","cpp","csharp","dotnet","elixir","go","haskell","java","javascript","node","ocaml","plugin-system","python","ruby","rust","serverless","wasm","webassembly","zig"],"latest_commit_sha":null,"homepage":"https://extism.org","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/extism.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-13T06:55:30.000Z","updated_at":"2026-03-20T11:53:54.000Z","dependencies_parsed_at":"2023-11-10T07:17:38.999Z","dependency_job_id":"75dd7788-f694-438c-a57b-afd2ade6b965","html_url":"https://github.com/extism/extism","commit_stats":{"total_commits":608,"total_committers":30,"mean_commits":"20.266666666666666","dds":0.7944078947368421,"last_synced_commit":"fa81270a5ff9948e3a1e596cac50916605d26c24"},"previous_names":[],"tags_count":51,"template":false,"template_full_name":null,"purl":"pkg:github/extism/extism","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extism%2Fextism","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extism%2Fextism/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extism%2Fextism/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extism%2Fextism/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/extism","download_url":"https://codeload.github.com/extism/extism/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/extism%2Fextism/sbom","scorecard":{"id":388584,"data":{"date":"2025-08-11","repo":{"name":"github.com/extism/extism","commit":"b79e74d5160f11b8c7e38c631a667d3d1f7401ec"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Code-Review","score":4,"reason":"Found 10/23 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"16 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: runtime/src/extism-runtime.wasm:1","Warn: binary detected: wasm/allocations.wasm:1","Warn: binary detected: wasm/code-functions.wasm:1","Warn: binary detected: wasm/code.wasm:1","Warn: binary detected: wasm/consume.wasm:1","Warn: binary detected: wasm/echo.wasm:1","Warn: binary detected: wasm/empty.wasm:1","Warn: binary detected: wasm/globals.wasm:1","Warn: binary detected: wasm/http.wasm:1","Warn: binary detected: wasm/http_headers.wasm:1","Warn: binary detected: wasm/kitchensink.wasm:1","Warn: binary detected: wasm/loop.wasm:1","Warn: binary detected: wasm/read_write.wasm:1","Warn: binary detected: wasm/reflect.wasm:1","Warn: binary detected: wasm/unreachable.wasm:1","Warn: binary detected: wasm/upper.wasm:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/kernel.yml:1","Warn: no topLevel permission defined: .github/workflows/release-dotnet-native.yaml:1","Warn: no topLevel permission defined: .github/workflows/release-python.yaml:1","Warn: no topLevel permission defined: .github/workflows/release-rust.yaml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:70: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:80: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:104: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:111: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:114: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/kernel.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/kernel.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/kernel.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/kernel.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/kernel.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/kernel.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/kernel.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/kernel.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/kernel.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/kernel.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-dotnet-native.yaml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release-dotnet-native.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-dotnet-native.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release-dotnet-native.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-python.yaml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release-python.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-python.yaml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release-python.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-rust.yaml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release-rust.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-rust.yaml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release-rust.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:101: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:124: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:129: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:141: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:195: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:201: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:214: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:219: update your workflow using https://app.stepsecurity.io/secureworkflow/extism/extism/release.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/release-python.yaml:24","Info:   0 out of  18 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  17 third-party GitHubAction dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release-dotnet-native.yaml:9"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact latest not signed: https://api.github.com/repos/extism/extism/releases/235700773","Warn: release artifact v1.12.0 not signed: https://api.github.com/repos/extism/extism/releases/232304615","Warn: release artifact v1.11.1 not signed: https://api.github.com/repos/extism/extism/releases/221919438","Warn: release artifact v1.11.0 not signed: https://api.github.com/repos/extism/extism/releases/221394115","Warn: release artifact v1.10.0 not signed: https://api.github.com/repos/extism/extism/releases/199450729","Warn: release artifact latest does not have provenance: https://api.github.com/repos/extism/extism/releases/235700773","Warn: release artifact v1.12.0 does not have provenance: https://api.github.com/repos/extism/extism/releases/232304615","Warn: release artifact v1.11.1 does not have provenance: https://api.github.com/repos/extism/extism/releases/221919438","Warn: release artifact v1.11.0 does not have provenance: https://api.github.com/repos/extism/extism/releases/221394115","Warn: release artifact v1.10.0 does not have provenance: https://api.github.com/repos/extism/extism/releases/199450729"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T17:15:49.118Z","repository_id":58420749,"created_at":"2025-08-18T17:15:49.118Z","updated_at":"2025-08-18T17:15:49.118Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","c","cpp","csharp","dotnet","elixir","go","haskell","java","javascript","node","ocaml","plugin-system","python","ruby","rust","serverless","wasm","webassembly","zig"],"created_at":"2024-07-30T20:01:21.028Z","updated_at":"2026-04-01T18:57:09.863Z","avatar_url":"https://github.com/extism.png","language":"Rust","readme":"\u003cdiv align=\"center\"\u003e\n    \u003ca href=\"https://extism.org\"\u003e\n    \u003cpicture\u003e\n        \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\".github/assets/logo-horizontal-darkmode.png\"\u003e\n        \u003cimg alt=\"Extism - the WebAssembly framework\" width=\"75%\" style=\"max-width: 600px\" src=\".github/assets/logo-horizontal.png\"\u003e\n    \u003c/picture\u003e\n    \u003c/a\u003e\n\n[![Discord](https://img.shields.io/discord/1011124058408112148?color=%23404eed\u0026label=Community%20Chat\u0026logo=Discord\u0026logoColor=%23404eed)](https://extism.org/discord)\n![GitHub Org's stars](https://img.shields.io/github/stars/extism)\n![Downloads](https://img.shields.io/crates/d/extism-manifest)\n![GitHub License](https://img.shields.io/github/license/extism/extism)\n![GitHub release (with filter)](https://img.shields.io/github/v/release/extism/extism)\n\n\u003c/div\u003e\n\n# Overview\n\nExtism is a lightweight framework for building with WebAssembly (Wasm). It\nsupports running Wasm code on servers, the edge, CLIs, IoT, browsers and\neverything in between. Extism is designed to be \"universal\" in that it supports\na common interface, no matter where it runs.\n\n\u003e **Note:** One of the primary use cases for Extism is **building extensible\n\u003e software \u0026 plugins**. You want to be able to execute arbitrary, untrusted code\n\u003e from your users? Extism makes this safe and practical to do.\n\nAdditionally, Extism adds some extra utilities on top of standard Wasm runtimes.\nFor example, we support persistent memory/module-scope variables, secure \u0026\nhost-controlled HTTP without WASI, runtime limiters \u0026 timers, simpler host\nfunction linking, and more. Extism users build:\n\n- plug-in systems\n- FaaS platforms\n- code generators\n- web applications\n- \u0026 much more...\n\n# Supported Targets\n\nWe currently provide releases for the following targets:\n\n- aarch64-apple-darwin\n- aarch64-unknown-linux-gnu\n- aarch64-unknown-linux-musl\n- x86_64-apple-darwin\n- x86_64-pc-windows-gnu\n- x86_64-pc-windows-msvc\n- x86_64-unknown-linux-gnu\n- x86_64-unknown-linux-musl\n\nFor Android we suggest taking a look at the [Chicory SDK](https://github.com/extism/chicory-sdk) for a pure Java\nExtism runtime.\n\n# Run WebAssembly In Your App\n\nPick a SDK to import into your program, and refer to the documentation to get\nstarted:\n\n| Type        | Language                                                                                       | Source Code                                                             | Package                                                                 |\n| ----------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- |\n| Rust SDK    | \u003cimg alt=\"Rust SDK\" src=\"https://extism.org/img/sdk-languages/rust.svg\" width=\"50px\"/\u003e         | https://github.com/extism/extism/tree/main/runtime                      | [Crates.io](https://crates.io/crates/extism)                            |\n| JS SDK      | \u003cimg alt=\"JS SDK\" src=\"https://extism.org/img/sdk-languages/js.svg\" width=\"50px\"/\u003e             | https://github.com/extism/js-sdk \u003cbr/\u003e(supports Web, Node, Deno \u0026 Bun!) | [NPM](https://www.npmjs.com/package/@extism/extism)                     |\n| Elixir SDK  | \u003cimg alt=\"Elixir SDK\" src=\"https://extism.org/img/sdk-languages/elixir.svg\" width=\"50px\"/\u003e     | https://github.com/extism/elixir-sdk                                    | [Hex](https://hex.pm/packages/extism)                                   |\n| Go SDK      | \u003cimg alt=\"Go SDK\" src=\"https://extism.org/img/sdk-languages/go.svg\" width=\"50px\"/\u003e             | https://github.com/extism/go-sdk                                        | [Go mod](https://pkg.go.dev/github.com/extism/go-sdk)                   |\n| Haskell SDK | \u003cimg alt=\"Haskell SDK\" src=\"https://extism.org/img/sdk-languages/haskell.svg\" width=\"50px\"/\u003e   | https://github.com/extism/haskell-sdk                                   | [Hackage](https://hackage.haskell.org/package/extism)                   |\n| Java SDK    | \u003cimg alt=\"Java SDK\" src=\"https://extism.org/img/sdk-languages/java-android.svg\" width=\"50px\"/\u003e | https://github.com/extism/java-sdk                                      | [Sonatype](https://central.sonatype.com/artifact/org.extism.sdk/extism) |\n| .NET SDK    | \u003cimg alt=\".NET SDK\" src=\"https://extism.org/img/sdk-languages/dotnet.svg\" width=\"50px\"/\u003e       | https://github.com/extism/dotnet-sdk \u003cbr/\u003e(supports C# \u0026 F#!)           | [Nuget](https://www.nuget.org/packages/Extism.Sdk)                      |\n| OCaml SDK   | \u003cimg alt=\"OCaml SDK\" src=\"https://extism.org/img/sdk-languages/ocaml.svg\" width=\"50px\"/\u003e       | https://github.com/extism/ocaml-sdk                                     | [opam](https://opam.ocaml.org/packages/extism/)                         |\n| Perl SDK    | \u003cimg alt=\"Perl SDK\" src=\"https://extism.org/img/sdk-languages/perl.svg\" width=\"50px\"/\u003e         | https://github.com/extism/perl-sdk                                      | [CPAN](https://metacpan.org/pod/Extism)                                 |\n| PHP SDK     | \u003cimg alt=\"PHP SDK\" src=\"https://extism.org/img/sdk-languages/php.svg\" width=\"50px\"/\u003e           | https://github.com/extism/php-sdk                                       | [Packagist](https://packagist.org/packages/extism/extism)               |\n| Python SDK  | \u003cimg alt=\"Python SDK\" src=\"https://extism.org/img/sdk-languages/python.svg\" width=\"50px\"/\u003e     | https://github.com/extism/python-sdk                                    | [PyPi](https://pypi.org/project/extism/)                                |\n| Ruby SDK    | \u003cimg alt=\"Ruby SDK\" src=\"https://extism.org/img/sdk-languages/ruby.svg\" width=\"50px\"/\u003e         | https://github.com/extism/ruby-sdk                                      | [RubyGems](https://rubygems.org/gems/extism)                            |\n| Zig SDK     | \u003cimg alt=\"Zig SDK\" src=\"https://extism.org/img/sdk-languages/zig.svg\" width=\"50px\"/\u003e           | https://github.com/extism/zig-sdk                                       | N/A                                                                     |\n| C SDK       | \u003cimg alt=\"C SDK\" src=\"https://extism.org/img/sdk-languages/c.svg\" width=\"50px\"/\u003e               | https://github.com/extism/extism/tree/main/libextism                    | N/A                                                                     |\n| C++ SDK     | \u003cimg alt=\"C++ SDK\" src=\"https://extism.org/img/sdk-languages/cpp.svg\" width=\"50px\"/\u003e           | https://github.com/extism/cpp-sdk                                       | N/A                                                                     |\n\n# Compile WebAssembly to run in Extism Hosts\n\nExtism Hosts (running the SDK) must execute WebAssembly code that has a\n[PDK, or Plug-in Development Kit](https://extism.org/docs/concepts/pdk), library\ncompiled in to the `.wasm` binary. PDKs make it easy for plug-in / extension\ncode authors to read input from the host and return data back, read provided\nconfiguration, set/get variables, make outbound HTTP calls if allowed, and more.\n\nPick a PDK to import into your Wasm program, and refer to the documentation to\nget started:\n\n| Type               | Language                                                                                                   | Source Code                                                   | Package                                                   |\n| ------------------ | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------- |\n| Rust PDK           | \u003cimg alt=\"Rust PDK\" src=\"https://extism.org/img/sdk-languages/rust.svg\" width=\"50px\"/\u003e                     | https://github.com/extism/rust-pdk                            | [Crates.io](https://crates.io/crates/extism-pdk)          |\n| JS PDK             | \u003cimg alt=\"JS PDK\" src=\"https://extism.org/img/sdk-languages/js.svg\" width=\"50px\"/\u003e                         | https://github.com/extism/js-pdk                              | N/A                                                       |\n| Python PDK         | \u003cimg alt=\"Python PDK\" src=\"https://extism.org/img/sdk-languages/python.svg\" width=\"50px\"/\u003e                 | https://github.com/extism/python-pdk                          | N/A                                                       |\n| Go PDK             | \u003cimg alt=\"Go PDK\" src=\"https://extism.org/img/sdk-languages/go.svg\" width=\"50px\"/\u003e                         | https://github.com/extism/go-pdk                              | [Go mod](https://pkg.go.dev/github.com/extism/go-pdk)     |\n| Haskell PDK        | \u003cimg alt=\"Haskell PDK\" src=\"https://extism.org/img/sdk-languages/haskell.svg\" width=\"50px\"/\u003e               | https://github.com/extism/haskell-pdk                         | [Hackage](https://hackage.haskell.org/package/extism-pdk) |\n| AssemblyScript PDK | \u003cimg alt=\"AssemblyScript PDK\" src=\"https://extism.org/img/sdk-languages/assemblyscript.svg\" width=\"50px\"/\u003e | https://github.com/extism/assemblyscript-pdk                  | [NPM](https://www.npmjs.com/package/@extism/as-pdk)       |\n| .NET PDK           | \u003cimg alt=\".NET PDK\" src=\"https://extism.org/img/sdk-languages/dotnet.svg\" width=\"50px\"/\u003e                   | https://github.com/extism/dotnet-pdk \u003cbr/\u003e(supports C# \u0026 F#!) | [Nuget](https://www.nuget.org/packages/Extism.Pdk)        |\n| C PDK              | \u003cimg alt=\"C PDK\" src=\"https://extism.org/img/sdk-languages/c.svg\" width=\"50px\"/\u003e                           | https://github.com/extism/c-pdk                               | N/A                                                       |\n| C++ PDK            | \u003cimg alt=\"C++ PDK\" src=\"https://extism.org/img/sdk-languages/cpp.svg\" width=\"50px\"/\u003e                       | https://github.com/extism/cpp-pdk                             | N/A                                                       |\n| Zig PDK            | \u003cimg alt=\"Zig PDK\" src=\"https://extism.org/img/sdk-languages/zig.svg\" width=\"50px\"/\u003e                       | https://github.com/extism/zig-pdk                             | N/A                                                       |\n\n# Generating Bindings\n\nIt's often very useful to define a schema to describe the function signatures\nand types you want to use between Extism SDK and PDK languages.\n\n[XTP Bindgen](https://github.com/dylibso/xtp-bindgen) is an open source\nframework to generate PDK bindings for Extism plug-ins. It's used by the\n[XTP Platform](https://www.getxtp.com/), but can be used outside of the platform\nto define any Extism compatible plug-in system.\n\n## 1. Install the `xtp` CLI.\n\nSee installation instructions\n[here](https://docs.xtp.dylibso.com/docs/cli#installation).\n\n## 2. Create a schema using our OpenAPI-inspired IDL:\n\n```yaml\nversion: v1-draft\nexports: \n  CountVowels:\n      input: \n          type: string\n          contentType: text/plain; charset=utf-8\n      output:\n          $ref: \"#/components/schemas/VowelReport\"\n          contentType: application/json\n# components.schemas defined in example-schema.yaml...\n```\n\n\u003e See an example in [example-schema.yaml](./example-schema.yaml), or a full\n\u003e \"kitchen sink\" example on\n\u003e [the docs page](https://docs.xtp.dylibso.com/docs/concepts/xtp-schema/).\n\n## 3. Generate bindings to use from your plugins:\n\n```\nxtp plugin init --schema-file ./example-schema.yaml\n  \u003e 1. TypeScript                      \n    2. Go                              \n    3. Rust                            \n    4. Python                          \n    5. C#                              \n    6. Zig                             \n    7. C++                             \n    8. GitHub Template                 \n    9. Local Template\n```\n\nThis will create an entire boilerplate plugin project for you to get started\nwith. Implement the empty function(s), and run `xtp plugin build` to compile\nyour plugin.\n\n\u003e For more information about XTP Bindgen, see the\n\u003e [dylibso/xtp-bindgen](https://github.com/dylibso/xtp-bindgen) repository and\n\u003e the official\n\u003e [XTP Schema documentation](https://docs.xtp.dylibso.com/docs/concepts/xtp-schema).\n\n# Support\n\n## Discord\n\nIf you experience any problems or have any questions, please join our\n[Discord](https://extism.org/discord) and let us know. Our community is very\nresponsive and happy to help get you started.\n\n## Usage\n\nHead to the [project website](https://extism.org) for more information and docs.\nAlso, consider reading an [overview](https://extism.org/docs/overview) of Extism\nand its goals \u0026 approach.\n\n## Contribution\n\nThank you for considering a contribution to Extism, we are happy to help you\nmake a PR or find something to work on!\n\nThe easiest way to start would be to join the\n[Discord](https://extism.org/discord) or open an issue on the\n[`extism/proposals`](https://github.com/extism/proposals) issue tracker, which\ncan eventually become an Extism Improvement Proposal (EIP).\n\nFor more information, please read the\n[Contributing](https://extism.org/docs/concepts/contributing) guide.\n\n---\n\n## Who's behind this?\n\nExtism is an open-source product from the team at:\n\n\u003cp align=\"left\"\u003e\n  \u003ca href=\"https://dylibso.com\" _target=\"blanks\"\u003e\u003cimg width=\"200px\" src=\"https://user-images.githubusercontent.com/7517515/198204119-5afdebb9-a5d8-4322-bd2a-46179c8d7b24.svg\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n_Reach out and tell us what you're building! We'd love to help:_\n\u003ca href=\"mailto:hello@dylibso.com\"\u003ehello@dylibso.com\u003c/a\u003e\n","funding_links":[],"categories":["Rust","Non-Web Embeddings","c","优秀项目与工具","Repositories"],"sub_categories":["CNCF WASM Working Group"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextism%2Fextism","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fextism%2Fextism","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fextism%2Fextism/lists"}