Skip to content

Tabs / Steps / FileTree parse HTML at render time via Sätteri, breaking non-Node SSR runtimes (Cloudflare workerd) #4194

Open
anomalyco/opencode
#59845

Description

@314systems

What version of starlight are you using?

0.42.0

What version of astro are you using?

7.3.2

What package manager are you using?

pnpm

What operating system are you using?

Mac

What browser are you using?

Chrome

Describe the Bug

Tabs, Steps and FileTree call htmlToHast() from satteri at render time (dist/user-components/{tabs,steps,file-tree}-processor.js). Sätteri ships only a native .node binding and a WASI binding, and neither can run in Cloudflare's workerd runtime:

the native .node addon cannot be loaded at all;
the WASI binding (@bruits/satteri-wasm32-wasi) touches node:wasi at module evaluation, and workerd's stub throws The WASI method is not implemented.

So any page containing <Tabs> fails with the Cloudflare adapter, whose default prerenderEnvironment is 'workerd':

[ERROR] Error: The WASI method is not implemented
    at new WASI (node:wasi:27:15)
[ERROR] [build] Caught error rendering /example:
  Failed to prerender https://example.com/example/: The WASI method is not implemented

The WASI binding's browser entry (satteri_napi.wasi-browser.js) is not usable either — it needs top-level fetch() of the .wasm, new Worker() and a shared WebAssembly.Memory, none of which exist in workerd.

Link to Minimal Reproducible Example

https://github.com/314systems/starlight-bug

Participation

  • I am willing to submit a pull request for this issue.

Activity

  1. delucis commented on Sep 11, 2026

    @delucis
    Member

    Thanks for reporting @314systems and apologies for the inconvenience!

    There is work ongoing to make Sätteri compatible with workerd (see http://github.com/bruits/satteri/pull/248), but I’ll admit this was not something we tested or considered when switching to use it for those components in v0.42. I think for now unfortunately the best path is probably to stick to Starlight v0.41.11 where these components should still work and hopefully a compatible build of Sätteri will be available soon!

  2. added
    🐛 bugSomething isn't working
    upstreamIssues that need to be addressed upstream in Astro or another library
    on Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    upstreamIssues that need to be addressed upstream in Astro or another library🐛 bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions