Spin v3.0.0
We're excited to announce the next major version of Spin! Welcome to Spin 3.0. 🚀
This release includes:
- Component dependency support
- Selective application deployments
- Integration with the latest upstream WASI standards
- A refactored runtime capability framework
- And many other improvements, fixes and updates
Read on for more details below...
Breaking Changes ⚠️
Note that there are breaking changes included in this release that may affect some applications.
Please see our dedicated migration doc for more information.
Features ✨
Component Dependencies
Spin v3 ships with first-class support for declaring and using cross-language component dependencies in your Spin application.
Say you've authored an AWS S3 client in Rust and would like to use it in your Javascript-based Spin app -
you can now express the S3 component as a dependency and harness its functionality in your application code.
In a similar manner, components distributed by other developers can be added as dependencies, no matter the original language.
As long as they are available via a compatible registry reference or http url, you'll be able to declare them as dependencies in your app.
- The Writing Apps doc has been updated with details around this new feature
Selective Deployments
To support real-world production deployments, Spin app developers can take the same app that they've run locally
and alter its deployment configuration when shipping to production infrastructure. For example, the API and frontends
might be deployed to edge nodes closer to end users while the database component might be deployed to a dedicated
VM in a certain cloud region.
- For more information and some examples, please see the Running Apps doc
Spin Factors
For platform engineers who want to host and customize Spin, the runtime capability code has been fully refactored
into what we call Spin Factors. These Factors allow for runtime implementations to select the capabilities they wish to provide,
without being tightly coupled to other capabilities or aspects of the Spin codebase they may not require.
- Here is the Spin Factors SIP (Spin Improvement Proposal)
Upstream WASI standards
Spin continues to incorporate the latest upstream WASI standards. A few notable updates in v3 include:
- wasi-config added in #2869
- wasi-keyvalue added in #2895 (Big thank you to @devigned!)
Other notable features
- Postgres date-time types
- Spin CLI Docker images (ref: Spintainer support in SpinKube)
- Multiple commands for component build
- Run spin commands from project sub-directories
spin plugins inspect
As always, thanks to contributors old and new for helping improve Spin on a daily basis! 🎉
Verifying the Release Signature
After downloading the v3.0.0 release of Spin, either via the artifact attached to this release corresponding to your OS/architecture combination or via the installation method of your choice, you are ready to verify the release signature.
First, install cosign. This is the tool we'll use to perform signature verification. Then run the following command:
cosign verify-blob \
--signature spin.sig --certificate crt.pem \
--certificate-identity https://github.com/fermyon/spin/.github/workflows/release.yml@refs/tags/v3.0.0 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-github-workflow-sha 737778e9d7dc1a7f590a398d2734ff0cc91002f0 \
--certificate-github-workflow-repository fermyon/spin \
spin
If the verification passed, you should see:
Verified OK
Full Changelog
- Eliminate use of unsafe in factors by @rylev in #2611
- factors: Make instance state fields again by @lann in #2620
- factors: Add spin-factors-test crate by @lann in #2621
- factors: Improve tests by @lann in #2626
- factors: Add TestEnvironment::default_manifest_extend by @lann in #2628
- Add a llm-factors by @rylev in #2630
- factors: Add Error type by @lann in #2639
- Add some more documentation to factors by @rylev in #2636
- Llm factor host impl test by @rylev in #2635
- Remove Factor::runtime_config_json_schema by @lann in #2641
- factor: Add key value Redis factor by @kate-goldenring in #2646
- factors: Enhance Factor doc comments by @lann in #2647
- factors: Break up the Error::RuntimeFactorError monopoly by @lann in #2645
- factors: Add RuntimeFactors::prepare by @lann in #2650
- Factor sqlite by @rylev in #2648
- factors: Enhance OutboundNetworkingFactor by @lann in #2653
- factors: Support old WASI -rc interfaces by @lann in #2631
- Add runtime config impl that Spin uses to factor-sqlite by @rylev in #2652
- factors: Manage single ResourceTable in RuntimeFactors InstanceState by @lann in #2654
- Outbound pg factor by @calebschoepp in #2632
- factors: Allow instance state to be nested in store data by @lann in #2659
- factors: handle default kv store resolution by @kate-goldenring in #2656
- Outbound redis factors by @me-diru in #2655
- fix: change the func impl to reflect trait by @me-diru in #2660
- Ensure allowed sqlite databases are configured by @rylev in #2658
- factors: Pare down spin-core and spin-app by @lann in #2661
- factors: Add basic CI by @lann in #2664
- Remove toml assumption by @rylev in #2665
- Add environment variables provider by @rylev in #2670
- factors: key value tests, doc comments, and Azure factor by @kate-goldenring in #2666
- Abstract pg client by @calebschoepp in #2651
- Runtime Config Independent of Serialization by @rylev in #2685
- factors: Update runtime config and tests by @lann in #2686
- Make
VariablesFactor
non-generic by @rylev in #2688 - Non generic
KeyValueFactor
by @rylev in #2687 - Add
spin-factors-executor
by @lann in #2692 - Factors: Vault variable provider by @rylev in #2689
- update node version for integration test by @karthik2804 in #2698
- chore(*): post-v2.7.0 version bumps by @vdice in #2699
- Factors trigger by @lann in #2693
- factors: Split
HttpHandlerExecutor
intoSpinHttpExecutor
andWasiHttpExecutor
by @lann in #2701 - remove Fermyon specific plugins from scope of Spin project by @michelleN in #2702
- Update broken dep in example by @rylev in #2710
- No connection reuse in SQLite Factor by @rylev in #2709
- factor-outbound-networking: Add support for client TLS by @lann in #2703
- Run v0.1.0 of the conformance tests by @rylev in #2697
- add ROADMAP.md by @michelleN in #2706
- Update roadmap formatting by @michelleN in #2713
- simplify break condition for epoch ticker thread by @benbrandt in #2717
- remove *.md docs from gh build workflow by @michelleN in #2718
- Factors RuntimeConfig Support by @rylev in #2711
- [Factors] Key-Value in Trigger2 by @rylev in #2715
- Set initial key-values by @rylev in #2716
- Factors outbound http by @lann in #2704
- Enable environmental authentication for Azure Key Vault var provider by @devigned in #2678
- [Factors] Integrate sqlite into Trigger2 by @rylev in #2719
- factors: Get
spin up
working by @lann in #2725 - [Factors] Azure Key Vault Variables by @rylev in #2724
- set
max_core_instance_size
in pooling config by @dicej in #2721 - [Factors] Integrate outbound Redis by @rylev in #2726
- [Factors] Change how
incoming-request.authority
is set. by @rylev in #2723 - Land the outbound-mysql factor by @calebschoepp in #2727
- Add outbound MQTT factor by @karthik2804 in #2722
- update maintainers file formatting by @michelleN in #2720
- feat(docker): add spin cli Dockerfiles; add build/push to release.yml by @vdice in #2700
- [Factors] Don't trap when outbound http request is not allowed by @rylev in #2733
- Allow multiple commands in a component build section by @itowlson in #2729
- [Factors] in-process runtime and conformance tests by @rylev in #2732
- Switch back to the old sync version of HostOutputStream. by @rylev in #2738
- factors: Update outbound networking by @lann in #2737
- [Factors] Integrate mqtt in trigger2 by @rylev in #2739
- factors: Implement spin outbound http by @lann in #2740
- [Factors] Integrate pg & mysql into trigger2 by @rylev in #2743
- [Factors] Integrate llm factor by @rylev in #2742
- Update GOVERNANCE.md by @michelleN in #2745
- factors: Reorganize some http trigger code by @lann in #2744
- Fix runtime tests by @rylev in #2746
- Also allow getting authority from the request URI's authority. by @rylev in #2747
- Get rid of old non-factors code by @rylev in #2749
- Put local llm behind feature flags like they used to be. by @rylev in #2748
- Factors redis trigger by @lann in #2750
- It's just trigger and http-trigger - no 2 for you by @rylev in #2751
- factors: Fix tests / CI by @lann in #2754
- Fix checking of cidr ranges by @rylev in #2752
- Handle State Directory by @rylev in #2757
- Build fixes by @rylev in #2759
- Replace tempdir with tempfile by @lann in #2760
- Fix more factors tests by @lann in #2764
- Initial key values by @calebschoepp in #2761
- factors: Fix toml key tracking by @lann in #2765
- [factors] More CI fixes by @rylev in #2768
- Turn llm feature on by default. by @rylev in #2769
- Fix LlmCompute::into_engine type inference by @lann in #2771
- [Factors] Fix logging by @rylev in #2770
- Relax buggy wasi-sdk heuristic by @lann in #2772
- Fix subtle runtime config issues by @rylev in #2773
- Update recommended extensions to point at the replacement for crates -- dependi by @calebschoepp in #2758
- Spin Factors by @lann in #2753
- Spin Factors SIP by @lann in #2518
- Implementation of Component Dependencies by @fibonacci1729 in #2673
- Component Dependencies SIP by @fibonacci1729 in #2543
- Add taplo.toml and format tomls by @lann in #2767
- A few fixes after yesterday's mergepalooza by @fibonacci1729 in #2782
- Sqlite Cleanup by @rylev in #2777
- Add KeyValueDefaultStoreSummaryHook by @lann in #2781
- Run sqlite statements by @rylev in #2780
- Remove unused dependencies by @rylev in #2785
- Add SqliteDefaultStoreSummaryHook by @lann in #2786
- Add summarize_runtime_config by @lann in #2788
- Update templates for mandatory componentization by @lann in #2789
- ci: Update toolchains to reflect template changes by @lann in #2793
- Fix the path for default key-value stores by @rylev in #2791
- Merge host component outbound networking implementation into new factor crate by @calebschoepp in #2795
- Merge host component key value implementations into new factor crates by @calebschoepp in #2794
- Make
Trigger
trait generic overRuntimeFactors
by @rylev in #2790 - Move kv and llm instrumentation up a level of abstraction by @calebschoepp in #2800
- Prevent needlessly opening the default store by @calebschoepp in #2798
- A collection of small changes by @rylev in #2807
- Delete some unused stuff on macOS runner to avoid out of storage errors by @rylev in #2812
- Give outbound http ability to ban private ips by @rylev in #2808
- Make OutboundHttpInterceptor async by @lann in #2809
- Move instruments up a level in factor-variables by @calebschoepp in #2810
- Reimplement unsafe-aot-compilation feature by @lann in #2818
- Support interceptor in spin outbound http by @lann in #2817
- Stop enforcing example Cargo.lock freshness by @lann in #2819
- Don't require a
SocketAddr
to make aSelfRequestOrigin
by @rylev in #2823 - Improve the logs and docs in outbound networking factor by @rylev in #2822
- Ensure key-value metadata key is exposed for usage by @rylev in #2825
- Updating static fileserver template to 0.3.0 by @mikkelhegn in #2824
- Get
rustls
features under control by @rylev in #2830 - Adding the
spin plugins inspect
command by @ThorstenHans in #2821 - Various Sqlite improvements by @calebschoepp in #2833
- Convert from old allowed_http_hosts locked app value. by @rylev in #2837
- Pass loader into TriggerAppBuilder by @rylev in #2839
- Fix issues with publishing or consuming registries on Windows by @itowlson in #2838
- Fix
watch
with workdir not working on Windows by @itowlson in #2836 - Upgrade OTel by @calebschoepp in #2834
- Simplify default database resolution in sqlite by @rylev in #2840
- chore(release.yml): bump artifact actions to v4; update usage by @vdice in #2801
- Fix warning from redis crate. by @rylev in #2841
- Key Value re-factoring by @rylev in #2843
- Remove non-ascii header values instead of failing by @lann in #2848
- Chore: Dependency Updates by @rylev in #2847
- manifest: fix serialization of component dependency section by @karthik2804 in #2842
- support
wasi:http/incoming-handler@0.2.1
exports by @dicej in #2853 - llm-factor: migrate to
candle
by @karthik2804 in #2755 - More dependency updates by @rylev in #2855
- allow satisfying component dependencies via http source by @karthik2804 in #2854
- Add experimental
spin up --component
flag to run a subset of app components by @kate-goldenring in #2826 - Enable running some commands from subdirectories by @itowlson in #2845
- Update to Wasmtime 25 by @alexcrichton in #2784
- Run
cargo update
by @rylev in #2858 - Remove unmaintained
atty
dependency by @rylev in #2859 - Expose the wasmtime/call-hook feature from spin-core by @rylev in #2860
- Unify tokio (and serde_json) under workspace dependencies by @rylev in #2861
- Move
HandlerType
tospin-http
by @rylev in #2863 - Rename table crate to spin-resource-table by @rylev in #2866
- Use official async-tar by @itowlson in #2862
- Move variables runtime config to a new crate by @rylev in #2867
- Bump tonic from 0.12.2 to 0.12.3 by @dependabot in #2876
- Telemetry fixes by @calebschoepp in #2857
- all: remove unused deps by @Mossaka in #2871
- Run build steps on docs-only PRs so that all maintainers can merge them by @itowlson in #2879
- archive nim sdk by @michelleN in #2849
- Fix for failing runtime tests not failing the test suite by @itowlson in #2872
- Bump wasmtime from 25.0.0 to 25.0.2 by @dependabot in #2881
- Spin 3 world by @itowlson in #2887
- reduce environment variable provider precedence by @kate-goldenring in #2886
- Include component dependencies in OCI artifact by @itowlson in #2893
- fix: move component filtering methods to crates by @kate-goldenring in #2892
- Implement wasi-config by @itowlson in #2869
- Fix WITs not playing nicely with wasm-tools etc. by @itowlson in #2894
- add ability for plugins to be fetched from authenticated URLs by @karthik2804 in #2896
- Unhide
spin up
selective deployment flag by @itowlson in #2897 - Postgres date-time types by @itowlson in #2890
- WASI Key Value 0.2.0-draft2 support by @devigned in #2895
- [Backport v3.0] Ignore MQTT test flake by @vdice in #2902
- chore(*): version bumps for v3.0.0-rc.1 by @vdice in #2900
- [Backport v3.0] fix(release.yml): skip docker job if ref isn't main or tag by @vdice in #2908
- [Backport v3.0] Bump wasmtime from 25.0.2 to 25.0.3 by @itowlson in #2912
- [Backport v3.0] Fix
@
in URL path confusing the parser by @itowlson in #2909 - chore(*): bump to 3.0.0 by @vdice in #2916
New Contributors
- @benbrandt made their first contribution in #2717
Full Changelog: v2.7.0...v3.0.0