or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/npm-vitejs--plugin-react-swc

Speed up your Vite dev server with SWC for React projects with fast refresh and automatic JSX transformation

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
npmpkg:npm/@vitejs/plugin-react-swc@4.0.x

To install, run

npx @tessl/cli install tessl/npm-vitejs--plugin-react-swc@4.0.0

index.mddocs/

@vitejs/plugin-react-swc

@vitejs/plugin-react-swc is a high-performance Vite plugin that integrates SWC (Speedy Web Compiler) as the JavaScript/TypeScript transformer for React applications, providing significantly faster Fast Refresh (~20x faster than Babel) and automatic JSX runtime transformation.

Package Information

  • Package Name: @vitejs/plugin-react-swc
  • Package Type: npm (Vite plugin)
  • Language: TypeScript
  • Installation: npm install -D @vitejs/plugin-react-swc

Core Imports

import react from '@vitejs/plugin-react-swc';

For CommonJS environments:

const react = require('@vitejs/plugin-react-swc');

Basic Usage

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';

export default defineConfig({
  plugins: [react()],
});

With options:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react-swc';

export default defineConfig({
  plugins: [
    react({
      jsxImportSource: '@emotion/react',
      tsDecorators: true,
      devTarget: 'es2022',
    }),
  ],
});

Architecture

The plugin returns an array of specialized Vite plugins that handle different phases of the development and build process:

  • Runtime Resolver: Resolves React refresh runtime during development for HMR functionality
  • Development Transformer: Handles SWC-based transformation during development with Fast Refresh support
  • Production Transformer: Handles optimized transformation for production builds (conditionally applied based on SWC plugin usage)

The plugin automatically configures Vite to disable esbuild transformation and uses SWC for all React-related file processing, with intelligent file type detection and parsing based on file extensions.

Capabilities

Main Plugin Function

Creates a Vite plugin configuration for React with SWC transformation.

/**
 * Creates a Vite plugin configuration for React with SWC transformation
 * @param options - Configuration options for the plugin
 * @returns Array of Vite plugins for React development
 */
declare function react(options?: Options): Plugin[];

interface Options {
  /** Control where the JSX factory is imported from (default: "react") */
  jsxImportSource?: string;
  /** Enable TypeScript decorators. Requires experimentalDecorators in tsconfig (default: false) */
  tsDecorators?: boolean;
  /** Use SWC plugins. Enable SWC at build time */
  plugins?: [string, Record<string, any>][];
  /** Set the target for SWC in dev. This can avoid to down-transpile private class method (default: "es2020") */
  devTarget?: JscTarget;
  /** Override the default include list (.ts, .tsx, .mts, .jsx, .mdx) */
  parserConfig?: (id: string) => ParserConfig | undefined;
  /** React Fast Refresh runtime URL prefix for module federation context */
  reactRefreshHost?: string;
  /** Direct SWC options mutation - use at your own risk */
  useAtYourOwnRisk_mutateSwcOptions?: (options: SWCOptions) => void;
  /** If set, disables the recommendation to use @vitejs/plugin-react */
  disableOxcRecommendation?: boolean;
}

Usage Examples:

// Basic usage with no options
export default defineConfig({
  plugins: [react()],
});

// With JSX import source for Emotion
export default defineConfig({
  plugins: [
    react({
      jsxImportSource: '@emotion/react',
    }),
  ],
});

// With TypeScript decorators support
export default defineConfig({
  plugins: [
    react({
      tsDecorators: true,
    }),
  ],
});

// With SWC plugins for styled-components
export default defineConfig({
  plugins: [
    react({
      plugins: [['@swc/plugin-styled-components', {}]],
    }),
  ],
});

// With custom development target
export default defineConfig({
  plugins: [
    react({
      devTarget: 'es2022',
    }),
  ],
});

// Module federation setup
export default defineConfig({
  plugins: [
    react({
      reactRefreshHost: 'http://localhost:3000',
    }),
  ],
});

Custom Parser Configuration

Allows overriding the default file processing rules for advanced use cases.

/**
 * Custom parser configuration function
 * @param id - File path/identifier to check
 * @returns Parser configuration for the file, or undefined to skip processing
 */
type ParserConfigFunction = (id: string) => ParserConfig | undefined;

interface ParserConfig {
  /** Parser syntax type */
  syntax: 'typescript' | 'ecmascript';
  /** Enable JSX parsing */
  jsx?: boolean;
  /** Enable TSX parsing (TypeScript + JSX) */
  tsx?: boolean;
  /** Enable decorator support */
  decorators?: boolean;
}

Usage Examples:

// Custom file extension support
export default defineConfig({
  plugins: [
    react({
      parserConfig(id) {
        // Support ReScript files compiled to JSX
        if (id.endsWith('.res')) {
          return { syntax: 'ecmascript', jsx: true };
        }
        // Custom TypeScript configuration
        if (id.endsWith('.ts')) {
          return { syntax: 'typescript', tsx: false, decorators: true };
        }
      },
    }),
  ],
});

SWC Integration Options

Advanced SWC configuration for specialized build requirements.

/**
 * SWC target compilation options
 */
type JscTarget = 
  | 'es3' | 'es5' | 'es2015' | 'es2016' | 'es2017' | 'es2018' 
  | 'es2019' | 'es2020' | 'es2021' | 'es2022' | 'es2023' | 'es2024' | 'esnext';

/**
 * SWC plugin configuration tuple
 */
type SWCPlugin = [string, Record<string, any>];

/**
 * Complete SWC options interface (for advanced mutation)
 */
interface SWCOptions {
  /** The filename associated with the code being compiled */
  filename?: string;
  /** Enable searching for .swcrc configuration files */
  swcrc?: boolean;
  /** Enable searching for configuration files */
  configFile?: boolean;
  /** Enable source map generation */
  sourceMaps?: boolean;
  /** The working directory for resolving paths */
  cwd?: string;
  /** Module specifier for input source map */
  inputSourceMap?: boolean | string;
  /** JavaScript Compiler (JSC) configuration */
  jsc?: {
    /** Compilation target */
    target?: JscTarget;
    /** Parser configuration */
    parser?: ParserConfig;
    /** Experimental features */
    experimental?: {
      /** SWC plugins to apply */
      plugins?: SWCPlugin[];
    };
    /** Transform configuration */
    transform?: {
      /** Enable useDefineForClassFields */
      useDefineForClassFields?: boolean;
      /** React-specific transformations */
      react?: ReactConfig;
    };
  };
}

Usage Examples:

// Advanced SWC options mutation
export default defineConfig({
  plugins: [
    react({
      useAtYourOwnRisk_mutateSwcOptions(options) {
        // Enable experimental decorator version
        options.jsc.parser.decorators = true;
        options.jsc.transform.decoratorVersion = '2022-03';
        
        // Custom experimental features
        options.jsc.experimental = {
          ...options.jsc.experimental,
          plugins: [
            ['@swc/plugin-emotion', { autoLabel: true }],
          ],
        };
      },
    }),
  ],
});

Types

Core Plugin Types

/** Vite plugin interface from 'vite' package */
interface Plugin {
  name: string;
  apply?: 'build' | 'serve' | ((config: UserConfig, env: ConfigEnv) => boolean);
  enforce?: 'pre' | 'post';
  // ... additional Vite plugin properties
}

/** React configuration for SWC transformation */
interface ReactConfig {
  /** JSX runtime mode */
  runtime?: 'automatic' | 'classic' | 'preserve';
  /** Enable development mode features */
  development?: boolean;
  /** Enable React Fast Refresh */
  refresh?: boolean | {
    refreshReg?: string;
    refreshSig?: string;
    emitFullSignatures?: boolean;
  };
  /** Module specifier for importing jsx/jsxs factory functions */
  importSource?: string;
  /** Replace the function used when compiling JSX expressions */
  pragma?: string;
  /** Replace the component used when compiling JSX fragments */
  pragmaFrag?: string;
  /** Throw error if XML namespaced tag name is used */
  throwIfNamespace?: boolean;
}

File Processing Types

/** SWC transformation output */
interface Output {
  /** Transformed code */
  code: string;
  /** Source map (not base64 encoded) */
  map?: string;
}

Error Handling

The plugin includes enhanced error handling that:

  • Catches SWC transformation errors and extracts precise line/column information
  • Provides detailed error messages with file locations for debugging
  • Maintains source map accuracy for proper error reporting in development tools

Common error scenarios:

  • Syntax Errors: Invalid TypeScript/JSX syntax in source files
  • Decorator Errors: Using decorators without proper TypeScript configuration
  • Plugin Errors: Issues with SWC plugins or incompatible plugin configurations
  • Target Compatibility: Using language features not supported by the specified devTarget

Platform Requirements

  • Node.js: ^20.19.0 || >=22.12.0
  • Vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
  • Dependencies: @swc/core ^1.13.2, @rolldown/pluginutils 1.0.0-beta.32

Performance Characteristics

  • Fast Refresh: ~20x faster than Babel-based alternatives
  • File Processing: Supports .tsx, .ts, .mts, .jsx, .mdx files by default
  • Build Optimization: Conditional SWC usage in production based on plugin configuration
  • Memory Efficiency: Lazy evaluation and efficient transformation pipelines