Module: ReactOnRails::Generators::RscSetup

Included in:
InstallGenerator, RscGenerator
Defined in:
lib/generators/react_on_rails/rsc_setup.rb

Overview

Provides RSC (React Server Components) setup functionality for React on Rails generators.

This module extracts RSC-specific setup methods that can be shared between:

  • InstallGenerator (when –rsc flag is used)

  • RscGenerator (standalone generator for upgrading existing Pro apps)

Required Dependencies

Including classes must provide (typically via Rails::Generators::Base):

  • destination_root: Path to the target Rails application

  • template, copy_file, append_to_file, empty_directory, route: Thor file manipulation methods

  • options: Generator options hash (for options.typescript?)

Including classes must also include GeneratorHelper which provides:

  • use_rsc?: Feature flag helper

  • component_extension: Returns ‘jsx’ or ‘tsx’ based on TypeScript option

  • detect_react_version: Detects installed React version

Instance Method Summary collapse

Instance Method Details

#setup_rscObject

Note:

NPM dependencies are handled separately by JsDependencyManager

Main entry point for RSC setup. Orchestrates creation of all RSC-related files and configuration.

Creates:

  • config/webpack/rscWebpackConfig.js (config/rspack/ when using rspack)

  • Procfile.dev entry for RSC bundle watcher

  • HelloServer component (jsx or tsx based on –typescript flag)

  • HelloServerController

  • HelloServer view

  • RSC routes



37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/generators/react_on_rails/rsc_setup.rb', line 37

def setup_rsc
  print_rsc_setup_banner

  add_rsc_config_to_pro_initializer
  create_rsc_webpack_config
  update_webpack_configs_for_rsc
  add_rsc_to_procfile
  create_hello_server_component
  create_hello_server_controller
  create_hello_server_view
  add_rsc_routes

  print_rsc_complete_banner
end

#warn_about_react_version_for_rsc(force: false) ⇒ Object

Warn if React version is not compatible with RSC. RSC requires React 19.0.x specifically (not 19.1.x or later).

Parameters:

  • force (Boolean) (defaults to: false)

    When true, always performs the check. When false (default), only checks if RSC is enabled (use_rsc? returns true). Use force: true in standalone generators where RSC is always the purpose.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/generators/react_on_rails/rsc_setup.rb', line 58

def warn_about_react_version_for_rsc(force: false)
  return unless force || use_rsc?

  react_version = detect_react_version
  return if react_version.nil? # React not installed yet, will be installed by generator

  major, minor, patch = react_version.split(".").map(&:to_i)

  if major != 19 || minor != 0
    GeneratorMessages.add_warning(<<~MSG.strip)
      ⚠️  RSC requires React 19.0.x (detected: #{react_version})

      React Server Components in React on Rails Pro currently only supports
      React 19.0.x. React 19.1.x and later are not yet supported.

      To install a compatible React version:
        npm install react@~19.0.4 react-dom@~19.0.4
    MSG
  elsif patch < 4
    GeneratorMessages.add_warning(<<~MSG.strip)
      ⚠️  React #{react_version} is below the recommended minimum for RSC.

      Please upgrade to at least React 19.0.4:
        npm install react@19.0.4 react-dom@19.0.4

      react-server-dom-webpack 19.0.0–19.0.3 has known vulnerabilities
      (CVE-2025-55182, CVE-2025-67779, CVE-2026-23864) fixed in 19.0.4+.
    MSG
  end
end