Skip to content

plugin-formatjs: SWC plugin crashes with Next.js 16.2.1 + React Compiler + @swc/plugin-formatjs #604

@meltuhamy

Description

@meltuhamy

Describe the bug
Fresh next js + react compiler + @swc/plugin-formatjs build breaks with a build error.

URL to minimal reproduction
https://github.com/meltuhamy/next-swc-formatjs-reactcompiler-bug

  1. Start a fresh next app (npx create-next-app@latest) and when prompted turn on React Compiler (or just use this repo)
  2. npm install @swc/plugin-formatjs react-intl
  3. Add reactCompiler: true, output: 'export' and experimental: { swcPlugins: [["@swc/plugin-formatjs", { ast: true }]]} to the next config.
  4. Update page.tsx to use several translated messages (note: it will work with 1 or 2 translated strings, but starts breaking with more messages). I've included an example page.tsx below.
  5. Run npm run build

Example page.tsx:

"use client";
import { useIntl, IntlProvider } from "react-intl";

function Messages() {
  const intl = useIntl();
  return (
    <ul>
      <li>{intl.formatMessage({ id: "a", defaultMessage: "Message A" })}</li>
      <li>{intl.formatMessage({ id: "b", defaultMessage: "Message B" })}</li>
      <li>{intl.formatMessage({ id: "c", defaultMessage: "Message C" })}</li>
      <li>{intl.formatMessage({ id: "d", defaultMessage: "Message D" })}</li>
      <li>{intl.formatMessage({ id: "e", defaultMessage: "Message E" })}</li>
    </ul>
  );
}

export default function Page() {
  return (
    <IntlProvider locale="en" messages={{}}>
      <Messages />
    </IntlProvider>
  );
}

Expected behavior
The build should succeed without errors.

Actual behaviour
The build fails with the output below

npm run build

> next-swc-formatjs-reactcompiler-bug@0.1.0 build
> next build

▲ Next.js 16.2.1 (Turbopack)
- Experiments (use with caution):
  · swcPlugins

  Creating an optimized production build ...

thread '<unnamed>' panicked at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/swc_common-19.0.0/src/syntax_pos/hygiene.rs:425:14:
Should able to deserialize: failed to deserialize `swc_common::syntax_pos::hygiene::MutableMarkContext`

Caused by:
    Eof { name: "u32", expect: Small(1) }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

> Build error occurred
Error: Turbopack build failed with 1 errors:
./src/app/page.tsx
Failed to execute SWC plugin
An unexpected error occurred when executing an SWC EcmaScript transform plugin.
This might be due to a version mismatch between the plugin and Next.js. https://plugins.swc.rs/ can help you find the correct plugin version to use.

Failed to execute @swc/plugin-formatjs

Caused by:
    0: failed to run Wasm plugin transform. Please ensure the version of `swc_core` used by the plugin is compatible with the host runtime. See the documentation for compatibility information. If you are an author of the plugin, please update `swc_core` to the compatible version.

                Note that if you want to use the os features like filesystem, you need to use `wasi`. Wasm itself does not have concept of filesystem.

                https://swc.rs/docs/plugin/selecting-swc-core

                See https://plugins.swc.rs/versions/from-plugin-runner/24.0.0 for the list of the compatible versions.

                Build info:
                    Date: 2026-03-18
                    Timestamp: 2026-03-18T00:21:41.521826000Z

                Version info:
                    swc_plugin_runner: 24.0.0
                    Dependencies: anyhow 1.0.100,blake3 1.5.4,parking_lot 0.12.3,rustc-hash 2.1.1,serde 1.0.228,serde_json 1.0.140,swc_atoms 9.0.0,swc_common 18.0.1,swc_plugin_proxy 20.0.0,swc_transform_common 12.0.0,tracing 0.1.41,vergen 9.0.0
                
    1: RuntimeError: unreachable

Import traces:
  Client Component Browser:
    ./src/app/page.tsx [Client Component Browser]
    ./src/app/page.tsx [Server Component]

  Client Component SSR:
    ./src/app/page.tsx [Client Component SSR]
    ./src/app/page.tsx [Server Component]


    at ignore-listed frames

Additional context

None

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