Skip to content

feat: embed providers as wasm modules#120

Merged
jeroenrinzema merged 11 commits intomainfrom
feat/wasm
Jan 24, 2026
Merged

feat: embed providers as wasm modules#120
jeroenrinzema merged 11 commits intomainfrom
feat/wasm

Conversation

@jeroenrinzema
Copy link
Copy Markdown
Contributor

This PR changes the way on how providers are defined by embedding them as WASM modules. The WASM modules are right now in a early alpha stage and are under active development. The vision with these WASM modules is that at some point it will be possible to embed third party WASM modules by simply uploading your compiled WASM module.

@jeroenrinzema jeroenrinzema requested a review from Copilot January 24, 2026 12:30
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a plugin architecture for providers by implementing them as WASM (WebAssembly) modules using Extism. This enables sandboxed execution of provider integrations and lays the groundwork for third-party provider modules via WASM uploads.

Changes:

  • Implemented WASM module registry and runtime infrastructure for loading and executing provider plugins
  • Renamed database columns type/group to module/channel to align with the new provider architecture
  • Refactored pub/sub subject naming for consistency (e.g., events.projects.*events.process.*)

Reviewed changes

Copilot reviewed 78 out of 95 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
services/nexus/internal/wasm/registry.go Generic WASM module registry with thread-safe operations
services/nexus/internal/wasm/module.go WASM module loader using Extism plugin system
services/nexus/internal/wasm/providers/provider.go Provider-specific WASM wrapper with send functionality
services/nexus/internal/providers/registry.go Provider registry initialization with embedded FS loader
services/nexus/internal/providers/channels/*.go Channel-specific request composers (email, SMS, push)
services/nexus/internal/store/providers.go Database layer updated with module/channel terminology and new CRUD operations
services/nexus/internal/pubsub/schemas/events.go Refactored subject naming for consistency across streams
services/nexus/internal/pubsub/consumer/campaigns.go Campaign send handler using provider registry
services/nexus/internal/journeys/action.go Journey action handler for campaign triggers
services/console/src/types.ts Updated TypeScript types to use module/channel naming
services/console/src/api.ts API client updated to use channel/module parameters
modules/providers/*/main.go Example WASM provider implementations (logger, resend, twilio)
pkg/modules/providers/*.go Shared provider types for WASM modules
go.mod Added Extism SDK and dependencies
Makefile Added WASM module build targets
Comments suppressed due to low confidence (1)

modules/providers/logger/README.md:1

  • The heading incorrectly says 'Resend' but this is the Logger provider. It should say '# Logger'.

Comment thread services/nexus/internal/pubsub/consumer/router.go
Comment thread services/nexus/internal/pubsub/pubsub_test.go Outdated
Comment thread services/nexus/internal/pubsub/pubsub_test.go Outdated
Comment thread services/nexus/internal/pubsub/consumer/users_test.go Outdated
Comment thread services/nexus/internal/pubsub/consumer/users_test.go Outdated
Comment thread services/nexus/internal/pubsub/consumer/recompute_test.go Outdated
Comment thread services/nexus/internal/pubsub/consumer/bootstrap.go
Comment thread services/nexus/internal/pubsub/consumer/bootstrap.go
@jeroenrinzema jeroenrinzema requested a review from Copilot January 24, 2026 20:28
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 93 out of 111 changed files in this pull request and generated no new comments.

@jeroenrinzema jeroenrinzema merged commit 2543a78 into main Jan 24, 2026
4 checks passed
@jeroenrinzema jeroenrinzema deleted the feat/wasm branch January 24, 2026 20:37
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

Successfully merging this pull request may close these issues.

2 participants