Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extism 1.0 Roadmap - Community Review #420

Closed
bhelx opened this issue Aug 17, 2023 · 5 comments
Closed

Extism 1.0 Roadmap - Community Review #420

bhelx opened this issue Aug 17, 2023 · 5 comments

Comments

@bhelx
Copy link
Contributor

bhelx commented Aug 17, 2023

Issues

High-level Goals

  • Easier to install: the shared library should be bundled with the SDK if needed
  • More idiomatic SDKs with improved developer experience for each language
  • Easier, more flexible releases
    • One single JavaScript library for Web, Node, & Deno
    • All will use the native, included runtime and not wasmtime
  • Improved documentation that stays synced with the current code
  • Rebrand Extism as a “WebAssembly Framework”
    • We will still focus on making a good plug-in system, but Extism can be used as a friendly abstraction over wasm and we want to emphasize that
    • Documentation updates

Code Organization

  • Move Host SDKs to their own repos
    • We will also take this opportunity to decouple releases and changelogs

SDK and PDK Docs

Main Docs

  • The main docs should be scaled back to just be about the high-level concerns (e.g. concepts).
  • Provide use cases for Extism/WebAssembly w/ demos of each
    • Plug-in System, Serverless / FaaS, Web Applications, Webhook replacement
  • Enable the community to make PRs into the Extism Docs
  • Runnable (in browser) example on the front page (or early in the process)
  • Quickstart guide.
    • Show the simplest way to use a Host SDK
    • Show the simplest way to write a plugin (or download one)
    • Link to the actual repos / docs for the SDKs for deeper learning. The goal is to show the flexibility of choosing a host and guest language as well as get users to the “success” point as quickly as possible.
    • Click a tab to switch languages.
  • Errors / FAQ Page

Testing

  • Provide users with a Github Action to use the Extism CLI

Multi-Runtime SDKs

  • Go will use Wazero
  • JS libraries should use native Wasm
    • We should have a universal JS library that works for browser, node, bun, deno (only Node/Deno currently supported)
    • Bonus: Support async host functions
  • Convert Python SDK to use maturin
  • See if ruby would also benefit from tighter native integration

Runtime Cleanup

  • Remove Context type
    • Make Plugin thread safe
    • Unify extism and extism-runtime crates into a single crate
  • extism_manifest::Manifest and extism::Manifest shouldn’t be distinct types
  • Rework (or remove) caching for plugins loaded via HTTP
  • Redesign logging system:
    • cleanup current setup, make it more intuitive
    • implement logging as a configurable host function in each SDK
    • observe-sdk

CLI Improvements

  • Re-write CLI in Go or Rust with the goal of easier installation and use
  • Templates for creating a plugin in Rust/Go/JS etc.
  • Profiling/Observability
    • CLI host could have a stdout adapter and some cmdline flags could enable tracing etc

JS PDK

  • Add polyfills
  • Support async and pending tasks
  • Support ESM
  • Upgrade Quickjs dependencies
  • Support Host functions

Python PDK

  • Build and release one!

.NET PDK

  • Beta for the dotnet PDK

Host Function Support

  • Add support to Elixir SDK
  • Add support to Ruby

Java SDK

  • Look at bundling the native library in the jar.

Elixir SDK

  • Have plugin.call support bytes instead of string

Other

  • Support an official way to pass multiple parameters to a plugin
    • JSON doesn’t work for binary data, Protobuf is heavy-weight
@zshipko
Copy link
Contributor

zshipko commented Aug 18, 2023

Here's a PR I'm working on to remove the Context type: #421 - one side effect of this change is that there no longer needs to be a distinction between the extism-runtime and extism crates.

@ubiquitous-dev
Copy link

+1 to the rebranding of Extism to be a webassembly framework. I think focusing on the plug-in aspect is one specific use case, but it's helpful for so much more.

@ubiquitous-dev
Copy link

async and the event loop support through the JS PDK would be so awesome! Also supporting Javy's new dynamic-link mode, which lets you build a wasm module that depends on a runtime module also being linked into the runtime that actually has quickjs in it, so your wasm module is only like 5 kb and the rest of the quickjs runtime is static across all instances. It enables a bunch of more sophisticated runtime-specific use-cases. A similar concept would be amazing for the .NET PDK and possibly other languages as well, where it makes sense to bundle the runtime separately and just package up the bytecode.

@bhelx
Copy link
Contributor Author

bhelx commented Aug 24, 2023

Note: Ruby needs host function support

@bhelx
Copy link
Contributor Author

bhelx commented Aug 24, 2023

I believe there is a way to package the java jar with a native binary so i'm gonna explore that on the roadmap too.

@zshipko zshipko pinned this issue Sep 6, 2023
@neuronicnobody neuronicnobody changed the title Extism 1.0 Roadmap Extism 1.0 Roadmap - Community Review Nov 15, 2023
@bhelx bhelx unpinned this issue Dec 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants