Skip to content

iroh-relay 400 Bad Request from fedimint-client-wasm-bundler@0.1.1 in browser — protocol mismatch with iroh 0.91+ #288

@jesuspirate

Description

@jesuspirate

Summary

Browser Fedimint clients using @fedimint/fedimint-client-wasm-bundler@0.1.1 and @fedimint/transport-web@0.1.2 (the latest published releases) fail to upgrade the WebSocket connection to iroh-relay servers, receiving HTTP/1.1 400 Bad Request.

Repro

  1. Create a browser Fedimint client using the latest published SDK
  2. Attempt to join any federation that uses iroh-relay (e.g. via use1-1.relay.n0.iroh-canary.iroh.link)
  3. Observe browser console:
GET wss://use1-1.relay.n0.iroh-canary.iroh.link/relay [HTTP/1.1 400 Bad Request]
Firefox can't establish a connection to wss://use1-1.relay.n0.iroh-canary.iroh.link/relay

The HTTPS GET to https://use1-1.relay.n0.iroh-canary.iroh.link/ returns 200 with "This is an Iroh Relay server" — the server is alive, only the WebSocket upgrade fails.

Hypothesis

iroh 0.91.0 (August 2025) shipped wire-level breaking changes to the relay handshake protocol:
https://www.iroh.computer/blog/iroh-0-91-0-the-last-relay-break

Quoting the release notes:

"made changes to the handshake protocol to tighten up security and potentially remove a round-trip, and made changes to the messaging protocol"

It looks like use1-1.relay.n0.iroh-canary.iroh.link has been upgraded to iroh ≥0.91, but @fedimint/fedimint-client-wasm-bundler@0.1.1 still bundles a pre-0.91 iroh client. The two can't handshake.

Environment

  • @fedimint/fedimint-client-wasm-bundler@0.1.1
  • @fedimint/transport-web@0.1.2
  • Firefox 134 (Chrome behaves identically per spot-check)
  • Vite 5.4.21 bundler
  • Multiple federations attempted (Bitcoin Principles, Bitcoin Life Federation, Afribit)
  • Fedi mobile WORKS against the same federations (native iroh transport, not WebSocket relay)

Asks

  1. Is there a planned SDK release that targets iroh ≥0.91?
  2. Are there canary builds I should try that include the iroh bump?
  3. Is there a workaround we can apply on our side (custom transport, alternative relay endpoint, etc.) while waiting for the SDK update?

Context

I'm building Chama (https://github.com/jesuspirate/chama), a Bitcoin-native non-custodial P2P commerce platform using NIP-44 + Fedimint ecash. Deploy at chama.satoshimarket.app. Browser support is critical for our June 2026 Nairobi launch.

Happy to test fixes, file detailed repros, or contribute. cc @alexlwn123 since you maintain the SDK.

Thanks for all the work on Fedimint.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions