- Add stub implementations for resvpnproxy hostcalls.
- Add
fake_valid_fastly_keysconfig parameter to allow testingfastly_key_is_validhostcall with fake valid keys. (#599) - Add
healthconfig parameter for backends to mock backend health status in testing. (#605) - Use
cargo clippyto lint code in CI. (#603) - Rename
Error::InvalidAlpnRepsonseto correct a typo (#612) - Upgrade to Rust 1.95 (#604)
- Add options for experimenting with wasm gc and exceptions. (#601)
- Improve TLS certificate loading, handling and validation (#478)
- Remove most adapter-only interfaces from the Viceroy component adapter. (#583)
- Add support for "library" components which don't export
http_incoming. (#529) - Add non-shift adapter when user module is using wit-bindgen. (#582)
- Update to Wasmtime 39 (#584)
- Remove unused WIT files from the source tree. (#580)
- Refactor the CLI, with each subcommand in its own file. (#581)
- Make "viceroy adapt" add "produced-by" metadata to its output. (#586)
- Update to Rust 2024 Edition. (#588)
- Add stub implementations for bot detection hostcalls. (#592)
- Add no-op implementations for stale-if-error hostcalls (#591)
- Guest profiling support added for components. (#593)
- Add
manifest_versionvalidation to fastly.toml parsing. (#590)
- Update to the latest WITs (0.1.0—no more "prerelease") and adapter. (#574)
- Implement
fastly_compute_runtime::get_heap_mibhostcall (#572) - Update to latest
mokarelease to fix use-after-free bug (#569) - Fix manual framing headers logic to avoid falling back to automatic framing headers (#571)
-
Update to the latest WITs and adapter. (#564)
This applies version "0.0.0-prerelease.0" to wasm_abi/wit/deps/fastly/compute.wit. As a prerelease, this version is not guaranteed to be supported long-term, however from this point forward, changes will be described by version number bumps.
-
fix: use original static backend host (#549)
-
Return InvalidArgument for bad arguments to register_dynamic_backend (#563)
- Fix off-by-one error in reusable sandboxes limit (#561)
- Add stubs for new dynamic backend config options (#560)
- Fix yaml syntax in rust.yml (#559)
- Add a CI script to test different Rust versions (#556)
- Return
InvalidArgumentfor non-103 1xx status codes (#557) - Fix test for 103 Early Hints (#558)
- Add rudimentary support for 103 responses (#550)
- Add support for manual HTTP framing headers (#551)
- Core cache: Only return
FOUNDif the object is not expired (#552)
- fix: don't throw error when exit code is 0 (#537)
- Update adapter with the memory shift fix (#538)
- Enable relaxed-simd-deterministic for Viceroy. (#539)
- Return 5XX for requests that land in a reused session that crashes (#540)
- Update to the latest WITs and adapter. (#543)
- Allow components to have multiple memories. (#545)
- Enable loading Secret Store configuration through environment variables (#527)
- Remove deprecated
macos-13runners from CI matrix (#528) - Remove now-unneeded adapter profiles from the top-level Cargo.toml. (#530)
- Fix double borrows in
get_with_by_ref()calls (#532) - Fix warnings due to SDK deprecations (#532)
- Update references of
wasm32-wasitowasm32-wasip1in README (#533)
- Upgrade to wasmtime v35 (#513)
- Fix implementation of
downstream_compliance_regionhostcall (#519) - Fix warnings due to
mismatched_lifetime_syntaxeslint in Rust 1.89 (#522) - Enable tracing in WIT bindings (#521)
- Support overriding client IP with
inspecthostcall (#523) - Add stub for
downstream_client_tls_servernamehostcall (#524)
- Upgrade to wasmtime v28
- Fix Cargo.lock file to allow publication on crates.io
-
Fix for shielding support (#503)
Shielding support in 0.13.0 was, alas, slightly broken: the
tomlsettings were not passed through to the main library. -
Add support for integrating with a local Pushpin instance (#497)
Viceroy can be invoked with
--local-pushpin-proxy-port=<port>to cause requests that invoke thefastly_http_req.redirect_to_grip_proxyand_v2hostcalls to be proxied through a local Pushpin instance running on the specified port. This enables developers to locally test Fanout (real-time messaging) features like HTTP streaming or WebSockets-over-HTTP.Requests forwarded this way will be replayed:
- Method, headers, path, and query of the forwarded request will be based on
the request whose handle is passed to
redirect_to_grip_proxy_v2(or from the downstream request ifredirect_to_grip_proxywas called). - The request header
pushpin-routewill be added, its value set to the backend name. - Request body of the forwarded request will contain the full body of the downstream request.
This mechanism expects Pushpin to be configured with
accept_pushpin_routeto be set totrueand for its routes to be set up properly. This is configured automatically if Viceroy is called through the Fastly CLI'sfastly compute servecommand. - Method, headers, path, and query of the forwarded request will be based on
the request whose handle is passed to
-
Support the simple cache API (#487) and core cache API
The simple cache API is fully supported in Viceroy. The core cache API is also supported, with the exception of the "replace" family of calls (#495).
Both of these use an in-memory store for cached data; restarting Viceroy flushes the cache.
The HTTP cache layer (readthrough cache) is not supported at this time (#496).
-
Experimental support for reusable sessions
The default behavior for Viceroy (and Fastly Compute) is to launch a new WASM instance for each inbound HTTP request.
This default behavior remains unchanged. However, this release adds experimental hostcalls that allow a WASM instance to receive and respond to additional HTTP requests after the first.
This is an experimental feature (not yet available through any SDK), and requires an opt-in (using the new hostcalls). Fastly may modify or remove this feature in the future- don't rely on it (yet)!
-
Make
SecretStorepublic (#486)Make the
SecretStoretype public, so it can be configured in integration tests that useviceroy-lib.
-
Add support for shielding primitives in Viceroy (#455)
Shielding definitions can be creating inside
fastly.tomlusing thelocal-server.shielding_siteskey. These definitions are just a normal TOML dictionary mapping shield sites (e.g., "pdx-or-us", "bfi-wa-us", etc.) to either the string "Local" (meaning that Viceroy should pretend to be operating in that POP), or a dictionary mapping "unencrypted" and "encrypted" to target URLs (to mimic operating off the shield POP). For example:[local_server.shielding_sites] "pdx-or-us" = "Local" "bfi-wa-us".unencrypted = "http://localhost" "bfi-wa-us".encrypted = "https://localhost"This snippet defines two shield POPs: "pdx-or-us", which Viceroy should pretend to be running on, and "bfi-wa-us", which is remote. If the guest program asks for a backend to "bfi-wa-us", Viceroy will use
localhostas the target server, using HTTPS for encrypted traffic and HTTP for unencrypted traffic.
- Add support for
fileentries in KV Stores defined using "file"/"format" (#463)
- Add
downstream_client_ddos_detectedhostcall stub (#460) - Add support for metadata in local_server.kv_stores (#459)
- Add support for the Image Optimizer hostcalls (#458)
- Guest Profile sample period configuration support (#456)
- Fix cache key type in component interface (#453)
- Remove ubuntu-20.04 from CI (#451)
- Allow environment variable tests to pass based on validity, rather than their value (#450)
- Add
FASTLY_IS_STAGINGenvironment variable (#449) - Update KV Store key naming restrictions (#447)
- Fixes to CI (#448)
- Update to 0.11.1 of the Fastly Rust SDK (#445)
- Update CI to remove tests for macOS 12 and add tests for macOS 15 (#436)
- Add support for the
on_behalf_ofhostcalls (#440) - Add new
lookup_wait_v2to fix generation parsing bug (#439) - Add
fastly_aclhostcalls (#438)
- Stub new HTTP cache hostcalls (#433)
- Add support for reading secrets from a JSON file (#428)
- Added hostcalls for the new builder api hostcalls (#427)
- Add ReplaceHandle hostcall stubs for upcoming SDK release (#424)
- Add keepalive options for dynamic backends (#423)
- Fix bug in
inspectimplementation and add a test (#422) - Add the missing adapter calls for new cache operations (#419)
- Implement component traits on ComponentCtx (#421)
- Split info spans when logging request IDs (#420)
- Rename the kv-store interface to object-store in compute.wit (#415)
- Add support for JSON files in
local_server.kv_stores(#365) - Add
get_vcpu_mshostcall (#412) - Add
inspecthostcall (#417) - Add
downstream_compliance_regionhostcall (#403) - Emit the status code for responses, in addition to other stats (#416)
- Update
compute.witand the adapter for some api fixes (#414) - Use
mozilla-actions/sccache-actionfor caching builds (#411)
- Add support for supplying client certificates in fastly.toml, through the use of the
client_cert_infotable, which must have one of a "certificate" or "certificate_file" key, as well as one of a "key" and "key_file" key. The "_file" variants can be used to point to certificate/key files on disk, whereas the non-"_file" variants should be multi-line string constants in the toml. In all cases, they should be in PEM format. - Restore compatibility with older glibc versions in release artifacts
- Revert a CI configuration change that inadvertently prevented builds being created for amd64 macOS endpoints (#405)
- Add
get_addr_dest_{ip,port}hostcalls (#402) - Add
downstream_server_ip_addrhostcall (#401) - Support
watfiles when adapting core wasm (#399) - Add support for environment variables in the adapter (#400)
- Run tests as components (#396)
- Remove some unused memory management code in the adapter (#398)
- Allow capturing logging endpoint messages (#397)
- Support cli args in the adapter (#394)
- Rework component testing support to make test updates easier (#395)
- Populate the guest cli args (#393)
- Update to wasmtime 22.0.0 (#392)
- Populate
nwritten_outwhen errors occur in config-store::get or dictionary::get (#389) - Switch to using the on-demand allocator, instead of the pooling allocator (#391)
- Explicitly test the dictionary host calls in the dictionary fixture (#390)
- Enable the config-store-lookup tests (#387)
- Run the
requesttests as a component (#386) - Update Ubuntu and macOS runners to latest (and non-EOL) versions (#388)
- Fix trap handling when running components (#382)
- fix(wiggle_abi): write the result's length, not the guest buffer's (#385)
- Add adaptive buffer support for geo + device detection lookups (#383)
- Fix buffer-len handling in the component adapter (#381)
- Switch to reading dictionaries during the
fastly_dictionary_opencall (#379) - Support adapting core wasm to components (#374)
- Update to wasmtime-21.0.0 (#369)
- Initial WebAssembly component support (#367)
- Add stubs for new busy-handle hostcalls (#373)
- Return a ValueAbsent for all the downstream-tls related functions instead of a NotAvailable (#315)
-
Bug fix: Honor CA certificates when they are supplied, either as part of a dynamic backend definition or as part of a backend defined in fastly.toml. (In the latter case, CA certificates can be added using the "ca_certificate" key.) (#305)
-
Consistently use Error::NotAvailable instead of Unsupported (#349)
- Added
delete_asynchostcall for KV stores (#332) - Added
known_lengthhostcall for body handles (#344) - Added stubs for new functionality available in production Compute (#333, #337, #344)
- Fixed inconsistent behavior for not-found geolocation lookups compared to production Compute (#341)
- Renamed Compute@Edge to Compute. (#328)
- Added asynchronous versions of the KV store
lookupandinsertoperations. (#329) - Added support for device detection. (#330)
-
Warn instead of fail when certificates can't be loaded (#325)
-
Add support for trailers. Trailer modification calls should be considered experimental, as we finalize interfaces (#327)
- Match the number of memories to the number of core instances (#322)
- Add options to customize behavior of unknown Wasm imports (#313)
- Lower Hostcall error log level to DEBUG (#314)
- Add perfmap profiling strategy (#316)
- Update to wasmtime-13.0.0 (#317)
- Revamp profile handling CLI flags (#318)
- Fix a bug in which static backends were marked as GRPC by default (#311)
- Make
viceroy_lib::Errornon-exhaustive - Support the gRPC flag for dynamic backends (#308)
- Update ABI definitions and stub out some hostcalls (#307)
- Add --profile-guest support to serve mode. (#301)
- Use a ResourceLimiter for tracking allocations. (#300)
- Support the new mTLS features for dynamic backends, allowing two-way authentication for backend connections. (#297)
- Support the new config store hostcalls. (#296)
- Bump to wasmtime-11.0.1 (#295)
- Unblock Secret::from_bytes test by upgrading the fastly crate dependency. (#294)
- Map Error::UnknownBackend to FastlyStatus::Inval (#293)
- When an upstream body is unexpectedly closed, return Httpincomplete (#290)
- Error::ValueAbsent should map to FastlyStatus::None, not Inval (#291)
- Switch default log level to "error", add -v to run (#288)
- Update rustls and various dependencies (#278)
- Change default port from 7878 to 7676, which is what the Fastly CLI defaults to (#287)
- ⏱️ Add cross-platform ability to profile guest code in run mode (#280)
- pin to hyper 0.14.26 for the time being (#285)
- 😯 Add support for the new secret from_bytes extension. (#283)
- feat: Add a stub for downstream_client_h2_fingerprint (#277)
- Fill downstream_client_request_id in (#282)
- Bump to wasmtime-10.0.0 (#279)
- Add a stub for downstream_client_request_id (#276)
- Fix various warnings (#271)
- ⛽ -> ⏲️ Switch from fuel to epoch interruptions. (#273)
- Bump wasmtime dependencies to 9.0.1 (#272)
- ⏩ none should not be defined in cache_override_tag witx (#269)
- in single run mode, keep the response receiver alive during execution (#270)
- Return appropriate exit code in run-mode, rather than just 0 or 1 (#224)
- Update crates and add http_keepalive_mode_set (#266)
- 🚧 Add stubs for Cache API primitives (#260)
- Make is_healthy always return Unknown instead of an unsupporte…
- 🕷️ Rework integration tests to allow parallel test execution (#257)
- Add KVStore async lookup (#253)
- Update to Wasmtime 8 (#251)
- Add documentation explaining how to run rust unit tests w/ viceroy (#242)
- Remove validation on config store and dictionary names (#248)
- feat: Allow local KV Stores to be defined using
[local_server.kv_stores](#245)
- Add the
fastly_backendmodule to the wiggle abi (#243)
- Allow config-stores to be defined using
[local_server.config_stores](#240)
- Add
fastly_backendinterfaces for backend introspection (#236)
- Add a run-mode that executes the input program once and then exits (#211)
- Update to Wasmtime 6.0.0 (#226)
- Make object and secret store config names consistent (#206)
- Remove dictionary count limit (#227)
- Split out run-mode and serve mode into subcommands (#229)
- Add support for Secret Store (#210)
- Update to Wasmtime 4.0.0 (#217)
- Set fixed release build images to improve compatibility of precompiled release artifacts (#216)
- Support the streaming body
finish()method introduced in version 0.9.0 of the Rust SDK (#203) - Update to wasmtime 3.0.0 and enable experimental wasi-nn interface (#209)
- Add geolocation implementation to Viceroy (#165)
- Implement async select hostcalls for Viceroy (#188)
- Update wasmtime dependency to 2.0 (#194)
- Return a FastlyStatus::Inval when opening a non-existant object-store (#196)
- Add limit exceeded variant to fastly_status witx definition (#199)
- Add stubs for fastly purge (#184)
- Add stubs for mTLS information (#186)
- Allow to enable wasmtime's profiling support (#181)
- Add stubs for
redirect_to_(#187)
- Add support for
ObjectStore(#167) - Add support for dynamic backends (#163)
- Extend backend TLS configuration with cert host and SNI (#168)
- Add support for inline TOML dictionaries (#150)
- Add stubs for JA3 hashes and WebSocket upgrades (#153)
- Add stubs for framing header controls, now available on Compute (#139)
- Implement automatic decompression of gzip backend responses (#125)
- Remove excess logging for programs that exit with a zero exit code (#128)
- Do not panic when
auto_decompress_response_setis called (#116)
- Disable ALPN by using rustls more directly (#100)
- Catch interrupt signals (#85)
- Include aarch64 tarballs for Linux and macOS (#88)
- Align URI and Host header semantics with production Compute (#90)
- Replaced
hyper-tlswithhyper-rustls. (#75) - Unknown dictionary items are now logged at debug level. (#80)
- Windows releases are now built in CI. (#82)
- Improved error messages when a file could not be read. (#70)
- Fixed a bug for dictionary lookups that returned and error rather than
None. (#69)
- Added the close functionality for
RequestHandle,ResponseHandle,BodyHandle, andStreamingBodyHandlein the upcoming Rust Compute0.8.0SDK release (#65) - Added local dictionary support so that Compute programs that need dictionaries can work in Viceroy (#61)
- Added the ability to do host overrides from the TOML configuration (#48)
- Viceroy now tracks the latest stable Rust which as of this release is 1.54.0
- Renamed
viceroy-clipackage toviceroy, in preparation forcargo install viceroy(#41). - Improved UI for traces and errors (#37).
- Increase limit on functions per wasm module (#33).
- Be more flexible with wasm module input, allowing for WAT input as well (#32).
- Changed release artifacts naming format.
- Initial release.