Today we're no longer deploying 1.0.0-rcX versions or versions from the stable branch. We're officially cutting 1.0.0 across all repos. This has been a massive undertaking and we have a few highlights we'd like to call out from the community:
Community Highlights
- Philippe Charrière @k33g has been instrumental in getting eyeballs on Extism. There is really too much to highlight. But here are a few things:
- Simplism is a really awesome FAAS wrapper around Extism. It's really incredible to see Extism turned into a full on FAAS!
- Phillipe also did some presentations where he talked about Extism
- Doğu Us @usdogu is pretty much single-handedly handling our Zig support!
- Chance Snow @chances created a new D SDK!
- Thomas Darimont @thomasdarimont is the primary driver of the Java SDK and has been crucial to
helping us break into the Java ecosystem - Etienne Anne @Zwiterrion from Otoroshi was also crucial on our Java SDK and has done some interesting work to get OPA to work in Extism.
- Egon Elbre @egonelbre has made some great improvements to the Go PDK including removing the C dependency
- Quinn Millican @syke99 has also made improvements to the Go PDK as well as providing lots feedback and ideas on our Go ecosystem
- Luke Paireepinart @lukevp has made a ton of contributions to our Dotnet and our JS ecosystem.
Migration Notes
Here are some notes about breaking changes if you're trying to migrate from 0.5.x:
Overview
- There is a new Extism CLI rewritten in Go: https://github.com/extism/cli
- The Rust SDK and C SDK are still in
extism/extism
- The other SDKs have been moved from
extism/extism
to their own repos (for example,extism/python-sdk
) - The Go SDK uses Wazero and the JS SDK uses the native WASM engine for the JS runtime being used (node, deno, bun, browser)
- The
Context
type has been removed and plugin creation no longer takes a context argument in any SDK. - The module namespace for Extism host function has been changed to
extism:host/env
and user-defined host functions are now inextism:host/user
by default.
Runtime/Rust SDK
extism-runtime
andextism
crates have been combined. Onlyextism
should be used now.Plugin::new_with_manifest
has been removed - manifests can be passed toPlugin::new
directlyPluginBuilder::new_with_module
has been removed, raw wasm can be passed toPluginBuilder::new
directlyFunction::new
now requires a user-data argument when before it was anOption
parameter,UserData::default()
can be used instead.- The
nn
feature has been removed, please reach out if this is an issue for you! - extism-convert is used to convert Rust types in and out of Extism memory
Plugin::call
and other places where data is copied into Extism memory, accept any type that implementsextism_convert::ToBytes
and returns any type that implementsextism_convert::FromBytes
- Maximum memory is no longer statically checked, an error will be raised when the allocated memory exceeds the configured limit
C SDK
ExtismContext
has been removed andExtismPlugin
is now a direct pointer to theextism::Plugin
typeextism_plugin_new
takes an additional out-argument to get the error message. Useextism_plugin_new_error_free
to free error messages.
Changelog since 0.5.x
- release: Bump the rest of the SDKs by @bhelx in #430
- release: Bump elixir nif to rust 0.5 by @bhelx in #431
- chore(deps): Update cbindgen requirement from 0.24 to 0.25 by @dependabot in #434
- chore(deps-dev): Bump ex_doc from 0.30.5 to 0.30.6 in /elixir by @dependabot in #440
- chore(deps-dev): Bump @types/node from 20.5.1 to 20.5.7 in /node by @dependabot in #437
- chore(deps-dev): Bump typedoc from 0.24.8 to 0.25.0 in /node by @dependabot in #439
- chore(deps-dev): Bump typescript from 5.1.6 to 5.2.2 in /node by @dependabot in #438
- chore(deps-dev): Bump jest and @types/jest in /node by @dependabot in #436
- refactor!: Remove context, unify
extism-runtime
andextism
crates by @zshipko in #421 - chore(deps-dev): Bump prettier from 3.0.2 to 3.0.3 in /node by @dependabot in #445
- chore(deps-dev): Bump @types/node from 20.5.7 to 20.5.9 in /node by @dependabot in #444
- fix: toml manifests load the extism runtime by @chrisdickinson in #447
- feat: Add
EXTISM_ENABLE_WASI_OUTPUT
to inherit stdout/stderr by @zshipko in #446 - chore(deps-dev): Update minitest requirement from ~> 5.19.0 to ~> 5.20.0 in /ruby by @dependabot in #450
- chore(deps-dev): Bump @types/node from 20.5.9 to 20.6.0 in /node by @dependabot in #449
- chore(deps-dev): Bump typedoc from 0.25.0 to 0.25.1 in /node by @dependabot in #448
- feat(ruby): Host functions and clean up FFI code by @bhelx in #442
- feat(ocaml): add missing flags to
extism-call
executable by @zshipko in #451 - feat(browser): Allow Initialization of Plugin from WebAssembly.Module by @wikiwong in #453
- chore(browser): bump package version by @wikiwong in #454
- feat: Add
extism-convert
crate and use it for input/output to plugin calls by @zshipko in #443 - feat(build): Add "latest" snapshot builds by @chrisdickinson in #457
- fix(kernel): avoid allocating 0-length blocks by @zshipko in #465
- fix(main): Fixes rounding issue in kernel num_pages by @zshipko in #468
- ci: automate PRs to build canonical version of extism-runtime.wasm by @zshipko in #473
- chore(deps-dev): Bump jest and @types/jest in /node by @dependabot in #463
- chore(deps-dev): Bump @types/ffi-napi from 4.0.7 to 4.0.8 in /node by @dependabot in #462
- chore(deps-dev): Bump @types/node from 20.6.0 to 20.6.2 in /node by @dependabot in #461
- chore(deps): Update cbindgen requirement from 0.25 to 0.26 by @dependabot in #460
- chore(deps): Update toml requirement from 0.7 to 0.8 by @dependabot in #459
- fix(main): improve the way the kernel calculates how many pages to allocate by @zshipko in #472
- docs: Add note about stable branch by @bhelx in #479
- feat(build): add extism-maturin wheel builds by @chrisdickinson in #480
- fix(build): remove windows gnu wheel builds by @chrisdickinson in #481
- cleanup(runtime): remove restrictions around
memory.max_pages
option, fix crash by @zshipko in #482 - chore: bump wasmtime lower bound to 13.0.0, remove wasi-nn support by @zshipko in #483
- chore(deps): Update ffi requirement from ~> 1.15.5 to ~> 1.16.1 in /ruby by @dependabot in #485
- chore(deps-dev): Bump @types/node from 20.6.2 to 20.6.5 in /node by @dependabot in #484
- chore: prepare
extism-convert
to be released by @zshipko in #494 - docs: Add readme, bump convert crate by @bhelx in #495
- feat(build): GHA release-python now releases extism_sys packages by @chrisdickinson in #498
- feat: kernel hardening by @zshipko in #499
- fix(rust): return
extism_error
message fromPlugin::call
if it is set by @zshipko in #508 - feat: add benchmarking, optimize bounds checking in the kernel by @zshipko in #505
- fix(kernel): update outdated implementation of
MemoryBlock::next_ptr
by @zshipko in #509 - fix: undo change to
extism_memory_bytes
left over from debugging by @zshipko in #519 - chore(deps-dev): Bump @babel/traverse from 7.20.13 to 7.23.2 in /browser by @dependabot in #518
- chore(deps): Bump @types/ref-array-di from 1.2.5 to 1.2.6 in /node by @dependabot in #491
- chore(deps-dev): Bump typedoc from 0.25.1 to 0.25.2 in /node by @dependabot in #502
- chore(deps-dev): Bump ex_doc from 0.30.6 to 0.30.7 in /elixir by @dependabot in #513
- chore(deps-dev): Bump @types/node from 20.6.5 to 20.8.6 in /node by @dependabot in #515
- chore(deps-dev): Bump @babel/traverse from 7.19.6 to 7.23.2 in /node by @dependabot in #517
- ci(dotnet): publish nuget packages for all supported environments by @mhmd-azeez in #523
- doc: add
runtime/README.md
andlibextism/README.md
by @zshipko in #526 - chore: support wasmtime 14.0.0 by @zshipko in #529
- chore(deps-dev): Bump ex_doc from 0.30.7 to 0.30.9 in /elixir by @dependabot in #536
- feat(dlang): Add a D host SDK by @chances in #412
- chore: fix docstring for Manifest/allowed_paths by @thomasdarimont in #531
- feat: add ability to dump extism kernel memory and generate coredumps, cleanup kernel memory layout by @zshipko in #539
- docs: Point to readmes by @bhelx in #541
- fix(release): bump maturin manylinux floor for ring 0.17 dep by @chrisdickinson in #548
- docs: Add some documentation for plugin.call by @bhelx in #546
- refactor!: Cleanup UserData implementation, update example in README by @zshipko in #550
- feat: build static libextism by @G4Vi in #552
- refactor!: Use
extism:host/env
namespace for extism functions andextism:host/user
for user-defined host functions by @zshipko in #511 - fix: set epoch deadline before each plugin call by @zshipko in #557
- cleanup: add PTR as an alias for ValType::I64 by @zshipko in #558
- feat: pkg-config by @G4Vi in #559
- cleanup: add PTR as an alias for I64 in C API by @zshipko in #560
- cleanup: update error message by @zshipko in #561
- test: add some http tests by @zshipko in #562
- fix: improve handling of custom error messages by @zshipko in #568
- chore: fix cargo resolver warning by @bhelx in #570
- refactor!: allow
Plugin::new
to take raw wasm orManifest
by @zshipko in #569 - feat: add x86_64-unknown-linux-musl target, specifying target to make by @G4Vi in #571
- fix: libextism - make fully static target no longer hardcoded to musl-gcc by @G4Vi in #572
- feat: add add_subdirectory compatible cmake config by @G4Vi in #574
- build: libextism/CMakeLists.txt add installing to support in-tree builds that use shared libraries by @G4Vi in #575
- cleanup: simplify logging, include plugin ID in log messages by @zshipko in #573
- fix: nuget packing in release-dotnet-native.yaml by @mhmd-azeez in #524
- docs: fix readme for runtime rust sdk by @bhelx in #577
- 1.0.0-beta.0 by @bhelx in #587
- chore: loosen dependency requirements for base64 by @wikiwong in #576
- release 1.0.0-rc2 by @bhelx in #588
- refactor!: use
tracing
crate for logging, addextism_log_callback
function by @zshipko in #578 - refactor(bench): Add throughput information to reflect function. by @chrisdickinson in #592
- build(bench): add "consume" and "echo" benchmarks by @chrisdickinson in #595
- Fix typo in README.md by @thomas-zahner in #593
- Update release-dotnet-native.yaml to be resilient against file name changes by @mhmd-azeez in #589
- ci: check formatting of all crates by @george-hopkins in #598
- Implement convenience traits for encoded types by @george-hopkins in #597
- chore: support wasmtime 15 by @zshipko in #601
- release: 1.0.0-rc3 by @bhelx in #603
- doc: add DEVELOPING.md with release workflow by @chrisdickinson in #602
- cleanup: remove old SDKs by @zshipko in #583
- build: drive crate versions from workspace; drive workspace version from ci by @chrisdickinson in #604
- build: drive cargo releases from git tag by @chrisdickinson in #610
- feat: enable wasmtime caching by @zshipko in #605
- cleanup: simplify main module resolution by @zshipko in #612
- cleanup: avoid matching meta.name twice by @zshipko in #613
- docs: Some readme changes on api status by @bhelx in #614
- doc: add example of linking modules in a plugin by @chrisdickinson in #616
- build: combine rust release workflows by @chrisdickinson in #611
- cleanup: implement Debug and PartialEq for manifest types by @zshipko in #618
- fix manifest link by @neuronicnobody in #617
- fix: improve handling of 0 length blocks by @zshipko in #622
- refactor!: better scoping of arguments in host_fn macro, allow visibility in macros to be specified by @zshipko in #621
- ci: bring back nuget packages for Extism runtime by @mhmd-azeez in #624
- build: add c++ compat to extism.h by @G4Vi in #625
- feat: Add
extism_convert::Raw
to allow direct encoding using bytemuck by @zshipko in #626 - fix(kernel): improve performance after large allocations, add
extism_plugin_reset
to give users more control when dealing with large allocations by @zshipko in #627 - ci: release extism.dll.lib and extism.dll.a by @mhmd-azeez in #633
- fix(kernel): length function should return 0 for invalid offsets by @zshipko in #635
- fix: give extism_log_drain's param a named type by @chrisdickinson in #638
- cleanup: remove default timeout by @zshipko in #641
- chore: update wasmtime bounds to include 16.0.0 by @zshipko in #642
- Toggle off default
clap
feature forcbindgen
by @CosmicHorrorDev in #644 - feat(kernel): add extism_length_unsafe by @zshipko in #648
- feat: add
Plugin::call_get_error_code
to get Extism error code along with the error by @zshipko in #649 - cleanup: improve wat detection by @zshipko in #650
- cleanup: improve wat detection (again) by @zshipko in #651
- feat: add rust-protobuf support to extism-convert by @nilslice in #653
Full Changelog: v0.5.0...v1.0.0