Extism é uma estrutura leve para construção com WebAssembly (Wasm). Ele suporta a execução de código Wasm em servidores, borda, CLIs, IoT, navegadores e tudo mais. O Extism foi projetado para ser “universal”, pois oferece suporte a uma interface comum, não importa onde seja executado.
Observação: um dos principais casos de uso do Extism é a construção de software e plug-ins extensíveis . Você deseja executar código arbitrário e não confiável de seus usuários? O extismo torna isso seguro e prático.
Além disso, o Extism adiciona alguns utilitários extras além dos tempos de execução padrão do Wasm. Por exemplo, oferecemos suporte a variáveis persistentes de memória/escopo de módulo, HTTP seguro e controlado por host sem WASI, limitadores e temporizadores de tempo de execução, vinculação de função de host mais simples e muito mais. Os usuários do Extismo constroem:
Escolha um SDK para importar para o seu programa e consulte a documentação para começar:
Tipo | Linguagem | Código Fonte | Pacote |
---|---|---|---|
SDK de ferrugem | https://github.com/extism/extism/tree/main/runtime | Crates.io | |
SDK JS | https://github.com/extism/js-sdk (suporta Web, Node, Deno e Bun!) | NPM | |
Elixir SDK | https://github.com/extism/elixir-sdk | Feitiço | |
Ir SDK | https://github.com/extism/go-sdk | Vai mod | |
SDK Haskell | https://github.com/extism/haskell-sdk | Hackeamento | |
SDK Java | https://github.com/extism/java-sdk | Sonatipo | |
SDK do .NET | https://github.com/extism/dotnet-sdk (suporta C# e F#!) | Nuget | |
SDK do OCaml | https://github.com/extism/ocaml-sdk | opam | |
SDK Perl | https://github.com/extism/perl-sdk | CPAN | |
SDK PHP | https://github.com/extism/php-sdk | Empacotador | |
SDK Python | https://github.com/extism/python-sdk | PyPi | |
SDK Ruby | https://github.com/extism/ruby-sdk | Ruby Gems | |
SDK Zig | https://github.com/extism/zig-sdk | N / D | |
CSDK | https://github.com/extism/extism/tree/main/libextism | N / D | |
SDK C++ | https://github.com/extism/cpp-sdk | N / D |
Extism Hosts (executando o SDK) devem executar o código WebAssembly que possui uma biblioteca PDK, ou Plug-in Development Kit, compilada no binário .wasm
. Os PDKs facilitam aos autores de plug-ins/códigos de extensão a leitura de entradas do host e o retorno de dados, a leitura da configuração fornecida, a definição/obtenção de variáveis, a realização de chamadas HTTP de saída, se permitido, e muito mais.
Escolha um PDK para importar para seu programa Wasm e consulte a documentação para começar:
Tipo | Linguagem | Código Fonte | Pacote |
---|---|---|---|
Ferrugem PDK | https://github.com/extism/rust-pdk | Crates.io | |
JSPDK | https://github.com/extism/js-pdk | N / D | |
PDK Python | https://github.com/extism/python-pdk | N / D | |
Vá para PDK | https://github.com/extism/go-pdk | Vai mod | |
Haskell PDK | https://github.com/extism/haskell-pdk | Hackeamento | |
PDK AssemblyScript | https://github.com/extism/assemblyscript-pdk | NPM | |
.NET PDK | https://github.com/extism/dotnet-pdk (suporta C# e F#!) | Nuget | |
CPDK | https://github.com/extism/c-pdk | N / D | |
PDK C++ | https://github.com/extism/cpp-pdk | N / D | |
Zig PDK | https://github.com/extism/zig-pdk | N / D |
Muitas vezes é muito útil definir um esquema para descrever as assinaturas de função e os tipos que você deseja usar entre as linguagens Extism SDK e PDK.
XTP Bindgen é uma estrutura de código aberto para gerar ligações PDK para plug-ins Extism. É usado pela plataforma XTP, mas pode ser usado fora da plataforma para definir qualquer sistema de plug-in compatível com Extism.
xtp
.Veja as instruções de instalação aqui.
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...
Veja um exemplo em example-schema.yaml ou um exemplo completo de "pia de cozinha" na página de documentos.
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
Isso criará um projeto de plug-in padrão completo para você começar. Implemente as funções vazias e execute xtp plugin build
para compilar seu plugin.
Para obter mais informações sobre o XTP Bindgen, consulte o repositório dylibso/xtp-bindgen e a documentação oficial do esquema XTP.
Se você tiver algum problema ou tiver alguma dúvida, entre em nosso Discord e nos informe. Nossa comunidade é muito receptiva e feliz em ajudar você a começar.
Acesse o site do projeto para obter mais informações e documentos. Além disso, considere ler uma visão geral do Extismo e seus objetivos e abordagem.
Obrigado por considerar uma contribuição para o Extism, ficaremos felizes em ajudá-lo a fazer um PR ou encontrar algo em que trabalhar!
A maneira mais fácil de começar seria ingressar no Discord ou abrir um problema no rastreador de problemas extism/proposals
, que pode eventualmente se tornar uma Proposta de Melhoria de Extismo (EIP).
Para obter mais informações, leia o guia de contribuição.
Extism é um produto de código aberto da equipe em:
Entre em contato e conte-nos o que você está construindo! Adoraríamos ajudar: [email protected]