From 3fbb6558d0f2edfb317d77b93d60bddb4048a16d Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Wed, 12 Aug 2026 19:11:21 -0400 Subject: [PATCH 1/3] Fix inaccurate items across seven v4 doc pages - cache.md: correct the Homebrew plugin and template paths, which include an `etc` segment - http-outbound.md: service chaining enforces the request scheme rather than ignoring it - install.md: add the `wasm32-wasip2` target, drop the unused `wasm32-unknown-unknown`, and correct the minimum Rust version to 1.94 - javascript-components.md: the JS/TS template install provides four templates, not two - manifest-reference.md: `key_value_stores` accepts any label mapped in the runtime configuration, not only `default` - quickstart.md: list all four JS/TS templates, and correct the Rust SDK minimum to 1.93 - rust-components.md: make the Redis manifest parse by adding `[application]` Signed-off-by: Zhiwei Liang --- content/v4/cache.md | 4 ++-- content/v4/http-outbound.md | 2 +- content/v4/install.md | 4 ++-- content/v4/javascript-components.md | 22 +++++++++++++--------- content/v4/manifest-reference.md | 2 +- content/v4/quickstart.md | 16 +++++++++++----- content/v4/rust-components.md | 2 ++ 7 files changed, 32 insertions(+), 20 deletions(-) diff --git a/content/v4/cache.md b/content/v4/cache.md index 49c66891..faf546fb 100644 --- a/content/v4/cache.md +++ b/content/v4/cache.md @@ -38,7 +38,7 @@ These directories are based on the [XDG specification](https://specifications.fr Installed plugins are stored in `(DATA_DIR)/spin/plugins`. A snapshot of the plugins registry is also stored under that directory at `(DATA_DIR)/spin/plugins/.spin-plugins`; this is structured as a Git repository. -> Note: If you [install Spin](./install) using Homebrew, the plugins are stored at `$HOMEBREW_PREFIX/spinframework-spin/plugins` (previously `$HOMEBREW_PREFIX/fermyon-spin/plugins`). +> Note: If you [install Spin](./install) using Homebrew, the plugins are stored at `$HOMEBREW_PREFIX/etc/spinframework-spin/plugins` (previously `$HOMEBREW_PREFIX/etc/fermyon-spin/plugins`). If you delete the plugins directory, you will no longer be able to run your plugins (until you reinstall them), but other Spin operations will be unaffected. @@ -46,7 +46,7 @@ If you delete the plugins directory, you will no longer be able to run your plug Installed templates are stored in `(DATA_DIR)/spin/templates`. -> Note: If you [install Spin](install) using Homebrew, the templates are stored at at `$HOMEBREW_PREFIX/spinframework-spin/templates` (previously `$HOMEBREW_PREFIX/fermyon-spin/templates`). +> Note: If you [install Spin](install) using Homebrew, the templates are stored at `$HOMEBREW_PREFIX/etc/spinframework-spin/templates` (previously `$HOMEBREW_PREFIX/etc/fermyon-spin/templates`). If you delete the templates directory, you will lose access to your installed templates (until you reinstall them), but other Spin operations will be unaffected. diff --git a/content/v4/http-outbound.md b/content/v4/http-outbound.md index 997d2263..981884ac 100644 --- a/content/v4/http-outbound.md +++ b/content/v4/http-outbound.md @@ -290,7 +290,7 @@ You must still grant permission by including the relevant `spin.internal` hosts allowed_outbound_hosts = ["http://authz.spin.internal", "https://reporting.spin.internal"] ``` -You may use either the `http` or `https` scheme, and the scheme in the service chaining request is ignored: only the special host name matters. +You may use either the `http` or `https` scheme, but `allowed_outbound_hosts` must allow the chosen scheme. For example, if `allowed_outbound_hosts` contains only `https://authz.spin.internal`, then a request to `http://authz.spin.internal` will be disallowed. To allow local chaining to _any_ component in your application, you can use a subdomain wildcard: diff --git a/content/v4/install.md b/content/v4/install.md index 67033df0..5bf91915 100644 --- a/content/v4/install.md +++ b/content/v4/install.md @@ -192,6 +192,7 @@ You can now move the Spin binary to the path knowing that it was indeed built by ```bash $ git clone https://github.com/spinframework/spin +$ rustup target add wasm32-wasip2 $ cd spin && make build $ ./target/release/spin --help ``` @@ -220,12 +221,11 @@ $ cd spin $ # Check out the latest tagged release $ # git checkout $ rustup target add wasm32-wasip2 -$ rustup target add wasm32-unknown-unknown $ cargo install --locked --path . $ spin --help ``` -> Please note: Installing Spin from source requires Rust 1.79 or newer. You can update Rust using the following command: +> Please note: Installing Spin from source requires Rust 1.94 or newer. You can update Rust using the following command: diff --git a/content/v4/javascript-components.md b/content/v4/javascript-components.md index f6fd4134..4594bea3 100644 --- a/content/v4/javascript-components.md +++ b/content/v4/javascript-components.md @@ -43,7 +43,7 @@ The JavaScript/TypeScript templates can be installed from [spin-js-sdk repositor $ spin templates install --git https://github.com/spinframework/spin-js-sdk --update ``` -which will install the `http-js` and `http-ts` templates: +which will install the `http-js`, `http-ts`, `redis-js` and `redis-ts` templates: @@ -51,14 +51,18 @@ which will install the `http-js` and `http-ts` templates: Copying remote template source Installing template http-ts... Installing template http-js... -Installed 2 template(s) - -+-------------------------------------------------+ -| Name Description | -+=================================================+ -| http-js HTTP request handler using Javascript | -| http-ts HTTP request handler using Typescript | -+-------------------------------------------------+ +Installing template redis-ts... +Installing template redis-js... +Installed 4 template(s) + ++---------------------------------------------------+ +| Name Description | ++===================================================+ +| http-js HTTP request handler using JavaScript | +| http-ts HTTP request handler using TypeScript | +| redis-js Redis message handler using JavaScript | +| redis-ts Redis message handler using TypeScript | ++---------------------------------------------------+ ``` ## Structure of a JS/TS Component diff --git a/content/v4/manifest-reference.md b/content/v4/manifest-reference.md index 81b93322..e5b4eb55 100644 --- a/content/v4/manifest-reference.md +++ b/content/v4/manifest-reference.md @@ -179,7 +179,7 @@ The value of each key is a table with the following fields. | `exclude_files` | Optional | Array of strings | Any files or glob patterns that should _not_ be available to the Wasm module at runtime, even though they match a `files` entry. | `[assets/images/test/**/*.*]` | | `allowed_http_hosts` | Optional | Array of strings | The host names or addresses to which the Wasm component is allowed to send HTTP requests. This is retained to simplify transition from the [Version 1 manifest](../v3/manifest-reference-v1.md); new applications should use `allow_outbound_hosts` instead. | `["example.com", "localhost:8081"]` | | `allowed_outbound_hosts` | Optional | Array of strings | The addresses to which the Wasm component is allowed to send network requests. This applies to the outbound HTTP, outbound Redis, MySQL and PostgreSQL APIs. (It does not apply to built-in storage services such as key-value and SQLite.) Each entry must contain both a scheme, a name (or IP address) and a port in `scheme://name:port` format. For known schemes, you may omit the port if it is the default for the scheme. Use `*` for wildcards. If this field is omitted or an empty list, no outbound access is permitted. | `["mysql://db.example.com", "*://example.com:4567", "http://127.0.0.1:*"]` | -| `key_value_stores` | Optional | Array of strings | An array of key-value stores that the Wasm module is allowed to read or write. A store named `default` is provided by the Spin runtime, though modules must still be permitted to access it. In current versions of Spin, `"default"` is the only store allowed. | `["default"]` | +| `key_value_stores` | Optional | Array of strings | An array of key-value stores that the Wasm module is allowed to read or write. A store named `default` is provided by the Spin runtime, though modules must still be permitted to access it. Stores other than `default` must be mapped to a backing store in the [runtime configuration](./dynamic-configuration#key-value-store-runtime-configuration). | `["default"]` | | `environment` | Optional | Table | Environment variables to be set for the Wasm module. This is a table. The table keys are user-defined; the values must be strings. | `{ DB_URL = "mysql://spin:spin@localhost/dev" }` | | `build` | Optional | Table | The command that `spin build` uses to build this component. See [The `component.(id).build` Table](#the-componentidbuild-table) below. | `[component.cart.build]`
`command = "npm run build"` | | `variables` | Optional | Table | Application configuration values to be made available to this component. The table keys are user-defined; the values must be strings, and may use template notation as described under [Application Variables](variables#adding-variables-to-your-applications). | `[component.cart.variables]`
`api_base_url = "https://{{ api_host }}/v1"` | diff --git a/content/v4/quickstart.md b/content/v4/quickstart.md index 13dff4d8..658b307c 100644 --- a/content/v4/quickstart.md +++ b/content/v4/quickstart.md @@ -117,11 +117,15 @@ $ spin templates install --git https://github.com/spinframework/spin-js-sdk --up Copying remote template source Installing template http-js... Installing template http-ts... +Installing template redis-js... +Installing template redis-ts... +------------------------------------------------------------------------+ | Name Description | +========================================================================+ -| http-js HTTP request handler using Javascript | -| http-ts HTTP request handler using Typescript | +| http-js HTTP request handler using JavaScript | +| http-ts HTTP request handler using TypeScript | +| redis-js Redis message handler using JavaScript | +| redis-ts Redis message handler using TypeScript | +------------------------------------------------------------------------+ ``` @@ -340,8 +344,10 @@ Use the `spin new` command and the `http-ts` template to scaffold a new Spin app ```bash $ spin new Pick a template to start your application with: - http-js (HTTP request handler using Javascript) -> http-ts (HTTP request handler using Typescript) + http-js (HTTP request handler using JavaScript) +> http-ts (HTTP request handler using TypeScript) + redis-js (Redis message handler using JavaScript) + redis-ts (Redis message handler using TypeScript) Enter a name for your new application: hello_typescript Project description: My first TypeScript Spin application HTTP path: /... @@ -696,7 +702,7 @@ If the build fails, check: * Are you in the `hello_rust` directory? * Did you successfully [install the `wasm32-wasip2` target](#install-the-tools)? -* Is your version of Rust up to date (`cargo --version`)? The Spin SDK needs Rust 1.91 or above. +* Is your version of Rust up to date (`cargo --version`)? The Spin SDK needs Rust 1.93 or above. If you would like to know what build command Spin runs for a component, you can find it in the manifest, in the `component.(id).build` section: diff --git a/content/v4/rust-components.md b/content/v4/rust-components.md index aa6cc000..43b12f9f 100644 --- a/content/v4/rust-components.md +++ b/content/v4/rust-components.md @@ -166,6 +166,8 @@ instance the trigger must connect to: ```toml spin_manifest_version = 2 + +[application] name = "spin-redis" version = "0.1.0" From dbf3238ea9700aee3712658d9c76a52c2ae98512 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Wed, 12 Aug 2026 20:41:16 -0400 Subject: [PATCH 2/3] Exclude the broken inviter invitation link in the check-broken-links script Signed-off-by: Zhiwei Liang --- .build/check-broken-links.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.build/check-broken-links.sh b/.build/check-broken-links.sh index 9ba75a69..2a30315a 100755 --- a/.build/check-broken-links.sh +++ b/.build/check-broken-links.sh @@ -79,6 +79,8 @@ if ! blc -rv --exclude 'https://openai.com/' \ --exclude 'https://platform.openai.com/' \ --exclude 'https://www.akamai.com/why-akamai/global-infrastructure' \ + `## returns 403` \ + --exclude 'https://inviter.co/cncf' \ `## returns 429` \ --exclude 'developer.hashicorp.com' \ --exclude 'https://cursor.com/docs/context/mcp' \ From eb01cf3889e3d9083a2e12599378a8df4b30f054 Mon Sep 17 00:00:00 2001 From: Zhiwei Liang Date: Wed, 12 Aug 2026 20:41:28 -0400 Subject: [PATCH 3/3] Update GitHub Actions workflows to use latest action versions and Ubuntu environment - Changed `runs-on` from `ubuntu-24.04` to `ubuntu-latest` in build, deploy-preview, and deploy workflows. - Updated `actions/checkout` from version `v4` to `v7` in all workflows. - Updated `actions/setup-node` from version `v4` to `v7` in the build workflow. - Updated `actions/upload-artifact` from version `v4` to `v7` in the build workflow. - Updated `actions/download-artifact` from version `v4` to `v8` in the deploy workflow. - Updated `crazy-max/ghaction-import-gpg` from version `v6` to `v7` in the update-cli-reference workflow. - Updated `peter-evans/create-pull-request` from version `v7` to `v8` in the update-cli-reference workflow. Signed-off-by: Zhiwei Liang --- .github/workflows/build.yaml | 8 ++++---- .github/workflows/deploy-preview.yaml | 4 ++-- .github/workflows/deploy.yaml | 4 ++-- .github/workflows/update-cli-reference.yml | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index c8c9cb1a..7ca1d6bc 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -9,12 +9,12 @@ env: jobs: build: - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: node-version: 20 @@ -56,7 +56,7 @@ jobs: npm test - name: Archive app artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: app # These are all of the paths referenced in spin.toml diff --git a/.github/workflows/deploy-preview.yaml b/.github/workflows/deploy-preview.yaml index 8688c05b..20344e0a 100644 --- a/.github/workflows/deploy-preview.yaml +++ b/.github/workflows/deploy-preview.yaml @@ -6,11 +6,11 @@ on: jobs: deploy-preview: - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest if: ${{ !github.event.pull_request.head.repo.fork }} name: Build and deploy steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Setup `spin` uses: fermyon/actions/spin/setup@v1 diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 83c5242f..e4e39245 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -20,11 +20,11 @@ jobs: uses: ./.github/workflows/build.yaml deploy: - runs-on: ubuntu-24.04 + runs-on: ubuntu-latest needs: build steps: - name: Download build artifacts - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v8 with: name: app path: "${{ github.workspace }}" diff --git a/.github/workflows/update-cli-reference.yml b/.github/workflows/update-cli-reference.yml index 1478f537..61919b88 100644 --- a/.github/workflows/update-cli-reference.yml +++ b/.github/workflows/update-cli-reference.yml @@ -11,7 +11,7 @@ jobs: name: Create PR with CLI reference bumped runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Download Spin uses: fermyon/actions/spin/setup@v1 @@ -34,7 +34,7 @@ jobs: run: spin maintenance generate-reference >>./content/v3/cli-reference.md - name: Import GPG key - uses: crazy-max/ghaction-import-gpg@v6 + uses: crazy-max/ghaction-import-gpg@v7 with: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.PASSPHRASE }} @@ -42,7 +42,7 @@ jobs: git_commit_gpgsign: true - name: Create pull request - uses: peter-evans/create-pull-request@v7 + uses: peter-evans/create-pull-request@v8 with: commit-message: "Update Spin CLI reference to latest" title: "Update Spin CLI reference to latest"