Skip to content

Docs: expand Pro docs and add Pro badges to OSS docs#2789

Merged
justin808 merged 7 commits intomainfrom
jg/2783-pro-docs-badges
Mar 22, 2026
Merged

Docs: expand Pro docs and add Pro badges to OSS docs#2789
justin808 merged 7 commits intomainfrom
jg/2783-pro-docs-badges

Conversation

@justin808
Copy link
Copy Markdown
Member

@justin808 justin808 commented Mar 21, 2026

Summary

  • Add 3 dedicated Pro feature overview pages: docs/pro/node-renderer.md, docs/pro/streaming-ssr.md, docs/pro/fragment-caching.md
  • Add Docusaurus :::tip admonition callouts to 6 OSS docs that have Pro upgrade paths (server rendering, streaming SSR, caching, configuration, deployment tips, quick start)
  • Update docs/pro/home-pro.md to link to the new dedicated feature pages

Closes #2783

Test plan

  • Verify all Pro doc links resolve correctly (node-renderer.md, streaming-ssr.md, fragment-caching.md)
  • Verify :::tip admonitions render correctly in Docusaurus
  • Check that cross-references between OSS and Pro docs are valid
  • CI passes

🤖 Generated with Claude Code


Note

Low Risk
Documentation-only changes that add new Pro guides and adjust cross-links/callouts; low risk beyond potential broken links or Docusaurus admonition rendering issues.

Overview
Adds three new React on Rails Pro overview guides for Node Renderer, Streaming SSR, and Fragment Caching, and reorganizes Pro docs (home-pro.md, release notes, troubleshooting, RSC SSR doc) to link to these dedicated pages.

Updates several OSS docs to use consistent :::tip Pro admonitions and to cross-link/redirect detailed Pro content (notably trimming streaming-server-rendering.md down to a short overview that points to the new Pro streaming guide), plus minor link fixes (e.g., compression middleware troubleshooting now points to docs/pro/streaming-ssr.md).

Written by Cursor Bugbot for commit dd6d9cc. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

  • Documentation
    • Replaced plain OSS/Pro callouts with unified Pro tip/admonition blocks and added internal cross-links to Pro content.
    • Simplified OSS streaming SSR guide and redirected detailed guidance to a new Pro Streaming SSR guide.
    • Added Pro documentation: Node Renderer, Streaming SSR, and Fragment Caching with examples, comparisons, and prerequisites.
    • Updated Pro home, configuration, and troubleshooting pages to reference the new Pro feature pages.

Add dedicated Pro feature overview pages:
- docs/pro/node-renderer.md — Node Renderer benefits, setup, performance
- docs/pro/streaming-ssr.md — Streaming SSR overview and quick example
- docs/pro/fragment-caching.md — Fragment caching overview and usage

Add Docusaurus admonition callouts (:::tip) to OSS docs:
- core-concepts/react-server-rendering.md — Pro Node renderer callout
- building-features/streaming-server-rendering.md — Convert blockquote to :::tip
- building-features/caching.md — Convert blockquote to :::tip
- deployment/server-rendering-tips.md — Pro performance features callout
- configuration/README.md — Link to Pro config options
- getting-started/quick-start.md — Pro upgrade callout in Go Pro section

Update docs/pro/home-pro.md to link to new dedicated feature pages.

Closes #2783

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 21, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds three new Pro documentation pages (Node Renderer, Streaming SSR, Fragment Caching), converts plain OSS Pro notes to Docusaurus :::tip admonitions across OSS docs, updates internal links and wording, and modifies the OSS configuration README. All changes are documentation-only.

Changes

Cohort / File(s) Summary
OSS Pro callouts
docs/oss/building-features/caching.md, docs/oss/building-features/streaming-server-rendering.md, docs/oss/core-concepts/react-server-rendering.md, docs/oss/deployment/server-rendering-tips.md, docs/oss/getting-started/quick-start.md
Replaced plain Pro notes with :::tip/:::tip Pro Upgrade admonitions, adjusted wording (OSS vs Pro mentions, ExecJS→ExecJS/Node distinctions), and updated links to internal Pro pages (Node Renderer, Streaming SSR, Fragment Caching, upgrade guide).
OSS configuration README
docs/oss/configuration/README.md
Removed emoji from top callout and added a Pro configuration admonition listing Node renderer, fragment/prerender caching, and streaming SSR with link to the Pro configuration reference.
New Pro pages
docs/pro/fragment-caching.md, docs/pro/node-renderer.md, docs/pro/streaming-ssr.md
Added three Pro documentation pages: Fragment Caching (behavior, helpers, cache-warming), Node Renderer (architecture, request flow, initializer example), and Streaming SSR (streaming flow, prerequisites, implementation guidance and middleware/metadata/script compatibility notes).
Pro home & references
docs/pro/home-pro.md
Restructured Pro home: introduced/renamed sections (Node Renderer, Streaming SSR, Fragment Caching, RSC, Prerender Caching), updated feature list and reference links, and removed older embedded content.
Pro docs link updates
docs/pro/react-server-components/server-side-rendering.md, docs/pro/release-notes/4.0.md, docs/pro/troubleshooting.md
Updated links to point to the new Pro Streaming SSR guide (docs/pro/streaming-ssr.md) and adjusted troubleshooting link anchors accordingly.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I hopped through docs with nimble feet,

Spun Node, Stream, and Cache into a neat sheet.
Links in place, the paths align,
Pro pages bloom — a carrot sign.
A happy hop — docs look fine!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main changes: expanding Pro documentation and adding Pro callout badges to OSS docs, which is the primary focus across all modified files.
Linked Issues check ✅ Passed All major coding objectives from issue #2783 are met: three new Pro pages (node-renderer, streaming-ssr, fragment-caching), Pro callouts added to six OSS docs using :::tip admonitions, related cross-references updated, and pro/home-pro.md restructured to link new docs.
Out of Scope Changes check ✅ Passed All changes are within scope: new Pro documentation, OSS Pro callouts, updated internal cross-references, and minor callout replacements. No unrelated modifications detected outside issue #2783 objectives.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch jg/2783-pro-docs-badges

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Comment thread docs/pro/home-pro.md Outdated
Comment thread docs/pro/node-renderer.md Outdated
Comment thread docs/pro/streaming-ssr.md
@greptile-apps
Copy link
Copy Markdown

greptile-apps Bot commented Mar 21, 2026

Greptile Summary

This PR expands the React on Rails Pro documentation by adding three new dedicated feature overview pages (node-renderer.md, streaming-ssr.md, fragment-caching.md) and upgrading six OSS docs from plain Markdown blockquotes to Docusaurus :::tip admonitions that link to the new Pro pages. It also updates home-pro.md's Features section with concise, up-to-date descriptions.

Key changes and findings:

  • New Pro overview pages are well-written, accurate, and all cross-references resolve to existing files — including deep-linked anchors like #cache-warming and #level-1-prerender-caching.
  • docs/pro/home-pro.md has a leftover duplicate section: the old # Features block (lines 71–171) was not removed when the new ## Features section was added, leaving two competing features sections with overlapping and partially outdated content.
  • Minor factual inaccuracy in docs/oss/core-concepts/react-server-rendering.md: the new tip attributes renderToPipeableStream to React 19, but it was introduced in React 18 (the sibling files correctly say "React 18/19").
  • docs/oss/deployment/server-rendering-tips.md had a pre-existing broken/incomplete sentence that this PR correctly fixes with the new admonition.

Confidence Score: 3/5

  • Safe to merge after removing the duplicate # Features section in home-pro.md and fixing the React version attribution.
  • The new Pro docs pages are accurate and well-linked. However, home-pro.md retains a large old # Features section (lines 71–171) that duplicates and conflicts with the new ## Features section added in this PR — readers hitting the page will see two Features sections covering the same topics with different (and partly contradictory) levels of detail. This is a concrete content correctness issue on the main Pro landing page, warranting a fix before merging.
  • docs/pro/home-pro.md — duplicate Features section must be cleaned up before merge.

Important Files Changed

Filename Overview
docs/pro/home-pro.md Updated Features section with new concise descriptions and links to dedicated pages, but left the old duplicate # Features section (lines 71–171) intact — creating two competing Features sections with overlapping, partly outdated content.
docs/pro/node-renderer.md New dedicated Node Renderer overview page with accurate performance data, architecture explanation, and links to all technical sub-docs. All referenced links resolve correctly.
docs/pro/streaming-ssr.md New dedicated Streaming SSR overview page with clear examples and prerequisites. All cross-references resolve correctly.
docs/pro/fragment-caching.md New dedicated Fragment Caching overview page. Content is accurate and the comparison table is helpful. All links resolve correctly.
docs/oss/core-concepts/react-server-rendering.md Added Pro Upgrade tip admonition; contains a minor inaccuracy attributing renderToPipeableStream to React 19 (it was introduced in React 18).
docs/oss/building-features/caching.md Replaced plain blockquote Pro badge with Docusaurus :::tip admonition and added a link to the new fragment-caching.md page. Link resolves correctly.
docs/oss/building-features/streaming-server-rendering.md Replaced plain blockquote Pro badge with Docusaurus :::tip admonition. All links resolve correctly.
docs/oss/configuration/README.md Added Pro Configuration tip admonition pointing to configuration-pro.md; also removed the emoji from the existing Good News blockquote. All links resolve correctly.
docs/oss/deployment/server-rendering-tips.md Replaced a broken incomplete sentence ("consider using [React on Rails Pro]") with a proper Docusaurus tip admonition linking to all three Pro performance features. Fixes a pre-existing broken link.
docs/oss/getting-started/quick-start.md Added Pro Upgrade tip admonition in the "Go Pro" section. All links resolve correctly.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[OSS Docs] -->|:::tip admonition| B[Pro Upgrade CTA]

    subgraph OSS ["OSS Docs (6 files updated)"]
        O1[core-concepts/react-server-rendering.md]
        O2[building-features/streaming-server-rendering.md]
        O3[building-features/caching.md]
        O4[configuration/README.md]
        O5[deployment/server-rendering-tips.md]
        O6[getting-started/quick-start.md]
    end

    subgraph Pro ["Pro Docs"]
        P0[home-pro.md]
        P1[node-renderer.md NEW]
        P2[streaming-ssr.md NEW]
        P3[fragment-caching.md NEW]
        P4[upgrading-to-pro.md]
    end

    O1 -->|links to| P1
    O1 -->|links to| P2
    O1 -->|links to| P4
    O2 -->|links to| P2
    O2 -->|links to| P4
    O3 -->|links to| P3
    O5 -->|links to| P1
    O5 -->|links to| P2
    O5 -->|links to| P3
    O6 -->|links to| P1
    O6 -->|links to| P2
    O6 -->|links to| P3
    P0 -->|links to| P1
    P0 -->|links to| P2
    P0 -->|links to| P3
Loading

Last reviewed commit: "Docs: expand Pro doc..."

Comment thread docs/pro/home-pro.md Outdated
Comment thread docs/oss/core-concepts/react-server-rendering.md Outdated
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 21, 2026

Review: Docs — Pro badges and new Pro overview pages

Overall this is a clean, well-structured docs PR. Cross-links were verified and all target files exist. A few issues to address before merging:

Bug — duplicate # Features section in home-pro.md

The old legacy # Features H1 block (line 71 onward) was not removed when the new ## Features section was added above it. The file now contains two separate Features sections with overlapping content (Code Splitting, Caching, Fragment Caching, Clearing of Global State appear in both). Everything from line 71 through the end of the old block should be deleted.

Security antipattern in node-renderer.md config example

Using "changeme" as a Ruby fallback means anyone who forgets to set the env var will silently run with a trivially-guessable shared secret. Prefer ENV.fetch("RENDERER_PASSWORD") (no default) so startup fails loudly if the secret is unset. See inline comment for a suggested fix.

React version inconsistency in streaming-ssr.md

The opening paragraph says "React 18/19's renderToPipeableStream" but the Prerequisites block (line 86) lists React 19 as the minimum requirement. These are contradictory. If React 19 is genuinely required, the intro should say so unambiguously.

Stale React 18 reference in home-pro.md intro

The intro paragraph (line 3) still says "Now supports React 18" while the new Streaming SSR feature entry says "React 19's renderToPipeableStream". The intro should be updated to reflect the React 19 baseline.


The new :::tip admonitions in OSS docs are a nice touch — they are correctly scoped to the Pro upgrade path and do not clutter the main content. The three new overview pages (node-renderer, streaming-ssr, fragment-caching) are accurate, well-linked, and fill a real gap in the Pro docs.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 44bcb99211

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/pro/node-renderer.md Outdated
Comment thread docs/pro/streaming-ssr.md Outdated
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Autofix Details

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Duplicate feature sections left in restructured doc
    • Removed the duplicated legacy # Features and duplicate references blocks so the page now has a single consistent features section and heading hierarchy.

Create PR

Or push these changes by commenting:

@cursor push 70bd7b5f81
Preview (70bd7b5f81)
diff --git a/docs/pro/home-pro.md b/docs/pro/home-pro.md
--- a/docs/pro/home-pro.md
+++ b/docs/pro/home-pro.md
@@ -68,71 +68,6 @@
 - [Rails Configuration](../oss/configuration/configuration-pro.md)
 - [Node Renderer technical docs](../oss/building-features/node-renderer/basics.md)
 
-# Features
-
-## Code Splitting
-
-From [The Cost of JavaScript in 2018](https://medium.com/@addyosmani/the-cost-of-javascript-in-2018-7d8950fbb5d4):
-
-> To stay fast, only load JavaScript needed for the current page. Prioritize what a user will need and lazy-load the rest with code-splitting. This gives you the best chance at loading and getting interactive fast. Stacks with route-based code-splitting by default are game-changers.
-
-## Caching
-
-### Server Rendering
-
-Server rendering of JavaScript evaluation is cached if `prerender_caching` is turned on in your Rails config. This applies to all JavaScript evaluation methods, including ExecJS and the Node VM Renderer.
-
-### Pro: Fragment Caching
-
-Fragment caching is a [React on Rails Pro](https://pro.reactonrails.com/) feature. Fragment caching is a **HUGE** performance booster for your apps. Use the `cached_react_component` and `cached_react_component_hash`. The API is the same as `react_component` and `react_component_hash`, but for 2 differences:
-
-1. The `cache_key` takes the same parameters as any Rails `cache` view helper.
-1. The **props** are passed via a block so that evaluation of the props is not done unless the cache is broken. Suppose you put your props calculation into some method called `some_slow_method_that_returns_props`:
-
-```ruby
-<%= cached_react_component("App", cache_key: [@user, @post], prerender: true) do
-  some_slow_method_that_returns_props
-end %>
-```
-
-Such fragment caching saves CPU work for your web server and greatly reduces the request time. It completely skips the evaluation costs of:
-
-1. Database calls to compute the props.
-2. Serialization the props values hash into a JSON string for evaluating JavaScript to server render.
-3. Costs associated with evaluating JavaScript from your Ruby code.
-4. Creating the HTML string containing the props and the server-rendered JavaScript code.
-
-Note, even without server rendering (without step 3 above), fragment caching is still effective.
-See [Caching](../oss/building-features/caching.md) for more additional details.
-
-## React On Rails Pro Node React Render
-
-The "React on Rails Pro Node React Renderer" provides more efficient React Server Side Rendering on a standalone Node JS server.
-
-### Overall Management Memory and CPU on both the Rendering and Ruby Servers
-
-A separate Node rendering server is easier to manage in terms of monitoring memory and CPU performance, allocating dynos, etc. This also makes it easier to manage the ruby servers, as you no longer have to consider the impact of starting an embedded V8. Thus, you can never hang your Ruby servers due to JavaScript memory leaks.
-
-### Proper Node Tooling
-
-A disadvantage of Ruby embedded JavaScript (ExecJS) is that it precludes the use of standard Node tooling for doing things like profiling and tracking down memory leaks. With the renderer on a separate Node.js server, we were able to use node-memwatch (https://github.com/marcominetti/node-memwatch) to find few memory leaks in the Egghead React code.
-
-### Caching of React Rendering
-
-To limit the load on the renderer server or embedded ExecJS, caching of React rendering requests can be enabled by a config setting. Because current React rendering requests are idempotent (same value regardless of calls), caching should be feasible for all server rendering calls. The current renderer does not allow any asynchronous calls to fetch data. The rendering request includes all data for rendering.
-
-### Rolling Restart of Node Workers
-
-Due to poor performance and crashes due to memory leaks, the rolling restart of node workers was thus added as an option to the core rendering product. This option is cheap insurance against the renderer getting too slow from a memory leak due to a bug in some newly deployed JavaScript code.
-
-### Docs
-
-See the [Node React Render Docs](../oss/building-features/node-renderer/basics.md).
-
-## Other Utility Methods
-
-See the [Ruby API](../oss/api-reference/ruby-api-pro.md).
-
 # Testimonials
 
 "Do you want your app to randomly crash sometimes in hard to predict ways? Then ExecJS is perfect for you"
@@ -164,7 +99,3 @@
 
 For more info, email [justin@shakacode.com](mailto:justin@shakacode.com).
 
-# References
-
-- [Caching](../oss/building-features/caching.md)
-- [Rails Configuration](../oss/configuration/configuration-pro.md)

Comment thread docs/pro/home-pro.md
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
docs/pro/streaming-ssr.md (1)

66-70: Drop redundant ActionController::Live include in controller snippet.

ReactOnRailsPro::Stream already mixes in ActionController::Live, so keeping both in the example adds noise.

Suggested cleanup
 class ProductsController < ApplicationController
-  include ActionController::Live
   include ReactOnRails::Controller
   include ReactOnRailsPro::Stream
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docs/pro/streaming-ssr.md` around lines 66 - 70, Remove the redundant include
of ActionController::Live from the ProductsController example: since
ReactOnRailsPro::Stream already mixes in ActionController::Live, delete the line
including ActionController::Live and keep include ReactOnRails::Controller and
include ReactOnRailsPro::Stream so the snippet remains accurate and concise.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/oss/building-features/streaming-server-rendering.md`:
- Around line 3-5: Update the Pro tip copy that currently claims "SSR works in
the OSS version via mini_racer" to avoid naming a specific runtime; change the
wording to state OSS SSR uses ExecJS (with the actual JS runtime chosen by the
environment) while Pro adds streaming SSR with renderToPipeableStream and
Suspense for progressive rendering. Edit the text referencing "mini_racer" in
the snippet so it mentions "ExecJS (runtime depends on environment)" and keep
the existing references to renderToPipeableStream and the upgrade link intact.

In `@docs/pro/streaming-ssr.md`:
- Around line 79-81: The example shows stream_react_component with an explicit
prerender: true option which is not configurable for streaming calls; remove the
prerender: true from the example invocation (update the snippet using
stream_react_component('ProductPage', props: { id: `@product.id` }) so the docs no
longer imply prerender is a supported/adjustable option for streaming).

---

Nitpick comments:
In `@docs/pro/streaming-ssr.md`:
- Around line 66-70: Remove the redundant include of ActionController::Live from
the ProductsController example: since ReactOnRailsPro::Stream already mixes in
ActionController::Live, delete the line including ActionController::Live and
keep include ReactOnRails::Controller and include ReactOnRailsPro::Stream so the
snippet remains accurate and concise.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: bfd82c1b-7611-45b4-83ee-dce68a9acf7b

📥 Commits

Reviewing files that changed from the base of the PR and between 5e61260 and 44bcb99.

📒 Files selected for processing (10)
  • docs/oss/building-features/caching.md
  • docs/oss/building-features/streaming-server-rendering.md
  • docs/oss/configuration/README.md
  • docs/oss/core-concepts/react-server-rendering.md
  • docs/oss/deployment/server-rendering-tips.md
  • docs/oss/getting-started/quick-start.md
  • docs/pro/fragment-caching.md
  • docs/pro/home-pro.md
  • docs/pro/node-renderer.md
  • docs/pro/streaming-ssr.md

Comment thread docs/oss/building-features/streaming-server-rendering.md
Comment thread docs/pro/streaming-ssr.md
- Remove duplicate legacy `# Features` section (lines 71-171) from
  home-pro.md that conflicted with the new `## Features` section
- Fix "mini_racer" → "ExecJS" in streaming-server-rendering.md tip
- Fix "React 19's" → "React 18/19's" for renderToPipeableStream in
  react-server-rendering.md (API was introduced in React 18)
- Remove misleading `prerender: true` from stream_react_component
  example in streaming-ssr.md (forced internally, not user-configurable)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 21, 2026

Overall this is a solid docs improvement — the new dedicated Pro feature pages are well-structured and the Docusaurus :::tip admonitions are much cleaner than the old blockquote style. A few issues worth addressing.

1. React version inconsistency (streaming-ssr.md)
The intro correctly says 'React 18/19s renderToPipeableStream', but the Prerequisites section (line 86) requires 'React 19' specifically. renderToPipeableStream was introduced in React 18, so the prerequisite is overly restrictive and will confuse users on React 18. The same inconsistency appears in home-pro.md line 29 ('React 19s renderToPipeableStream') — the second commit fixed react-server-rendering.md but missed these two locations.

2. Async component example is RSC-specific, not standard streaming SSR
In docs/pro/streaming-ssr.md, ProductDetails and ProductReviews are written as async arrow functions. Async function components are a React Server Components pattern — they do not work in standard streaming SSR with renderToPipeableStream alone. Without RSC infrastructure, React throws an error when it encounters them. The example should use the use() hook with a pre-fetched promise, a data-fetching library (SWR/React Query), or add a clear note that this pattern requires RSC to be enabled.

3. Security anti-pattern in configuration example (node-renderer.md)
config.renderer_password = ENV['RENDERER_PASSWORD'] || 'changeme' — the fallback is dangerous in production. If RENDERER_PASSWORD is unset, the auth secret silently becomes 'changeme'. Prefer ENV.fetch('RENDERER_PASSWORD') which raises on a missing var, and add a comment warning that this value must not be left as-is.

Minor nit: docs/oss/configuration/README.md removes the emoji from the 'Good News!' callout — this appears to be an unintentional side-effect of the surrounding edit rather than a deliberate change.

Comment thread docs/pro/streaming-ssr.md Outdated
Comment thread docs/pro/home-pro.md Outdated
Comment thread docs/pro/streaming-ssr.md Outdated
Comment thread docs/pro/node-renderer.md Outdated
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 169a8b8baa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/pro/streaming-ssr.md Outdated
Comment thread docs/pro/fragment-caching.md Outdated
The tip callout should be a generic Pro CTA, not single out one feature.
Moved the Fragment Caching overview link to the Level 2 section intro
where it's contextually relevant.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 22, 2026

PR Review: Docs — Expand Pro Docs and Add Pro Badges to OSS Docs

Overall this is a well-structured documentation PR. The new pages are clear, well-organized, and the migration from inline blockquotes to Docusaurus :::tip admonitions is a nice improvement. All cross-referenced files and links resolve correctly.

A few issues worth addressing before merge:

React 18 vs React 19 inconsistency (Medium)

docs/pro/streaming-ssr.md intro says 'React 18/19's renderToPipeableStream' but the Prerequisites section on the same page explicitly requires React 19. The async component pattern in the code example is a React Server Components feature — it requires RSC infrastructure and is not a standard renderToPipeableStream usage. This conflation of streaming SSR (React 18+) with RSC (React 19) may confuse readers.

Recommend either changing the intro to consistently say 'React 19' (since that's what's required), or using a React 18-compatible async data-fetching pattern in the example and calling out RSC as a separate React 19 feature.

Stale intro in home-pro.md (Low)

The opening paragraph of docs/pro/home-pro.md still says 'Now supports React 18 with updates to React on Rails!' but the Features section now lists React 19-specific capabilities (streaming SSR, RSC). This intro text should be updated to reflect React 19 support.

Removed editorial content (Low / Intentional?)

The PR removes the Testimonials, FAQ (including the 'why upgrade from ExecJS' section), and the GitHub Sponsors call-to-action from home-pro.md. These sections had user-facing value. If this content is being moved elsewhere, great — otherwise worth preserving or linking to.

Pre-existing: renderer_password weak default (Informational)

docs/pro/node-renderer.md replicates the ENV["RENDERER_PASSWORD"] || "changeme" pattern from installation.md. Not introduced by this PR, but adding a comment discouraging the fallback in production would be a helpful future improvement.


All file-level cross-links were verified and resolve correctly. No application code was changed so there is no regression risk.

Comment thread docs/pro/streaming-ssr.md
Comment thread docs/pro/streaming-ssr.md Outdated
The OSS building-features file now serves as a concise overview
(what, why, quick example, link to full guide) while the Pro file
absorbs all detailed implementation content: step-by-step setup,
compression middleware compatibility, metadata handling, script
loading strategies, immediate hydration, and best practices.

Updated anchor links in troubleshooting.md, server-rendering-tips.md,
server-side-rendering.md, and release-notes/4.0.md to point to the
new location of detailed content.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Comment thread docs/pro/node-renderer.md
Comment thread docs/pro/streaming-ssr.md
Comment on lines +70 to +73
const SlowDataComponent = async () => {
const data = await fetchData();
return <div>{data}</div>;
};
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Async function component is an RSC pattern, not standard streaming SSR

SlowDataComponent is written as an async arrow function:

const SlowDataComponent = async () => {
  const data = await fetchData();
  return <div>{data}</div>;
};

Async function components are a React Server Components feature. In standard streaming SSR with renderToPipeableStream (without RSC infrastructure), React will throw when it encounters an async component. The Suspense boundary won't catch it — it will surface as an unhandled promise rejection on the server.

For standard streaming SSR the data-fetching pattern is either:

  1. The use() hook with a pre-created promise (React 19):
const SlowDataComponent = () => {
  const data = use(fetchData());
  return <div>{data}</div>;
};
  1. A data-fetching library (SWR, React Query) that integrates with Suspense.

If this example requires RSC, that should be stated explicitly with a note that RSC setup is distinct from streaming SSR alone.

Comment thread docs/pro/streaming-ssr.md
Comment thread docs/pro/streaming-ssr.md
Comment on lines +104 to +107
class ExampleController < ApplicationController
include ActionController::Live
include ReactOnRails::Controller
include ReactOnRailsPro::Stream
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Redundant ActionController::Live include

ReactOnRailsPro::Stream already mixes in ActionController::Live, so including it explicitly adds noise and may mislead readers into thinking it's a separate required step.

Suggested change
class ExampleController < ApplicationController
include ActionController::Live
include ReactOnRails::Controller
include ReactOnRailsPro::Stream
class ExampleController < ApplicationController
include ReactOnRails::Controller
include ReactOnRailsPro::Stream
def show
stream_view_containing_react_components(template: 'example/show')
end
end

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/pro/streaming-ssr.md`:
- Line 131: Replace instances of the phrase "full page reload" with the
hyphenated compound adjective "full-page reload" in the streaming-ssr doc;
update both occurrences (the sentence currently reading "The browser renders
these updates without a full page reload" and the other occurrence later in the
file) to use "full-page" for consistent, readable compound-adjective usage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9d41a1fa-2f35-4d4f-b1e8-1bcd51adbce4

📥 Commits

Reviewing files that changed from the base of the PR and between 29f7f4f and 7b7e397.

📒 Files selected for processing (6)
  • docs/oss/building-features/streaming-server-rendering.md
  • docs/oss/deployment/server-rendering-tips.md
  • docs/pro/react-server-components/server-side-rendering.md
  • docs/pro/release-notes/4.0.md
  • docs/pro/streaming-ssr.md
  • docs/pro/troubleshooting.md
✅ Files skipped from review due to trivial changes (3)
  • docs/pro/react-server-components/server-side-rendering.md
  • docs/pro/troubleshooting.md
  • docs/pro/release-notes/4.0.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • docs/oss/deployment/server-rendering-tips.md

Comment thread docs/pro/streaming-ssr.md
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 22, 2026

Overall this is a well-structured documentation improvement. The new dedicated Pro feature pages are clearly written and the :::tip admonitions are a good UX upgrade over the old blockquote style. Three issues flagged via inline comments; one broader concern below.

Compression middleware guidance now gated behind Pro docs

The old OSS streaming-server-rendering.md had a detailed Compression Middleware Compatibility section explaining why Rack::Deflater / Rack::Brotli with a body.each :if condition deadlocks streaming responses. This is ActionController::Live behavior — it affects any Rails streaming response, not just Pro streaming SSR. Moving this content entirely into docs/pro/streaming-ssr.md means OSS users who hit the deadlock may not find the fix.

The OSS page does link to the Pro guide for this section, but users who assume the Pro guide does not apply to them may overlook it. Consider either keeping the Compression Middleware section in the OSS doc, or adding a note on the pointer that the fix applies regardless of whether you use Pro.

Other notes:

  • All cross-reference links validated: anchor targets (node-renderer-installation, cache-warming, compression-middleware-compatibility, level-1-prerender-caching) all resolve correctly against current headings.
  • The :::tip admonition on the OSS streaming page correctly updated mini_racer to ExecJS — good accuracy fix.
  • Three specific issues flagged inline: hardcoded fallback password in node-renderer.md, ruby code fence for ERB content in fragment-caching.md, and an RC version in streaming-ssr.md prerequisites.

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: Insecure hardcoded fallback password in documentation example
    • I replaced the hardcoded "changeme" fallback with ENV.fetch("RENDERER_PASSWORD") so the example requires an explicit secret instead of using a known default.

Create PR

Or push these changes by commenting:

@cursor push 9ecf6622c3
Preview (9ecf6622c3)
diff --git a/docs/pro/node-renderer.md b/docs/pro/node-renderer.md
--- a/docs/pro/node-renderer.md
+++ b/docs/pro/node-renderer.md
@@ -65,7 +65,7 @@
 ReactOnRailsPro.configure do |config|
   config.server_renderer = "NodeRenderer"
   config.renderer_url = ENV["REACT_RENDERER_URL"] || "http://localhost:3800"
-  config.renderer_password = ENV["RENDERER_PASSWORD"] || "changeme"
+  config.renderer_password = ENV.fetch("RENDERER_PASSWORD")
 end

</details>
<!-- BUGBOT_AUTOFIX_REVIEW_FOOTNOTE_END -->

Comment thread docs/pro/node-renderer.md Outdated
- node-renderer.md: Change `|| "changeme"` to `ENV.fetch` with
  "devPassword" default, matching the Pro generator template
- streaming-ssr.md: Remove outdated "v4.0.0.rc.5" minimum version
  (Pro is now at 16.x)
- fragment-caching.md: Qualify deploy cache invalidation — bundle
  digest is only included when prerender: true

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 22, 2026

CLAUDE.md

Tool-specific guidance for Claude Code in this repository.

Source of Truth

AGENTS.md is the canonical policy for:

  • Commands, tests, and lint workflow
  • Formatting and style requirements
  • Git/PR safety boundaries
  • Project directory boundaries

If this file conflicts with AGENTS.md, follow AGENTS.md.

Behavioral Defaults

  • When confident in your changes, commit and push without asking for permission. Always monitor CI after pushing.

Git Safety

  • NEVER force-push (--force, --force-with-lease) unless the user explicitly requests it. Force-pushing destroys commit history that may represent significant prior work.
  • NEVER git reset --hard on a branch that has existing commits (yours or others'). This destroys work.
  • When you need to start fresh or test something without affecting an existing branch, use a git worktree (git worktree add) or create a new branch instead of resetting the current one.
  • If a rebase has conflicts, abort and ask the user how to proceed rather than force-pushing a rewritten history.

Claude-Specific Workflow

Use these docs for Claude-oriented operational guidance:

  • .claude/docs/avoiding-ci-failure-cycles.md
  • .claude/docs/replicating-ci-failures.md
  • .claude/docs/playwright-e2e-testing.md
  • .claude/docs/merge-conflict-workflow.md
  • .claude/docs/pr-splitting-strategy.md
  • .claude/docs/changelog-guidelines.md
  • .claude/docs/project-architecture.md
  • .claude/docs/rails-engine-nuances.md
  • .claude/docs/debugging-webpack.md
  • .claude/docs/rbs-type-checking.md
  • .claude/docs/conductor-compatibility.md
  • .claude/docs/testing-build-scripts.md
  • .claude/docs/main-health-monitoring.md
  • .claude/docs/managing-file-paths.md

For Pro-package specifics, also read react_on_rails_pro/CLAUDE.md.

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 22, 2026

Deleting wrong comment - please ignore

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 22, 2026

PR Review: Docs — Expand Pro docs and add Pro badges to OSS docs

Good overall restructuring. The new dedicated Pro pages (Node Renderer, Streaming SSR, Fragment Caching) are well-written, and the move from raw blockquotes to Docusaurus tip admonitions is a clear improvement. A few issues worth addressing:

Security concern — hardcoded fallback password

docs/pro/node-renderer.md line 68 still uses a default password value. Cursor flagged the earlier changeme in a prior commit and it was updated to devPassword — but the problem remains: users who follow this snippet verbatim will deploy with a known default. ENV.fetch without a second argument raises a KeyError at boot, which forces the developer to explicitly configure the secret before the app starts. See inline comment.

Redundant ActionController::Live include

Both docs/pro/streaming-ssr.md and docs/oss/building-features/streaming-server-rendering.md include both ActionController::Live and ReactOnRailsPro::Stream in the controller example. CodeRabbit noted that ReactOnRailsPro::Stream already mixes in ActionController::Live, making the explicit include redundant and potentially confusing for users who wonder whether they need both. See inline comments.

OSS streaming page framing

docs/oss/building-features/streaming-server-rendering.md opens with the tip box, then immediately continues with React on Rails Pro supports streaming server rendering. A user arriving on the OSS page via search will see an intro that describes a Pro-only feature as the page subject. A brief framing sentence about what streaming SSR is before the Pro description would help orient OSS users.

Removed content from home-pro.md

The refactor removed the Testimonials, FAQ, and Support React on Rails development sections. This appears to be collateral removal when the duplicate Features block was cleaned up. The FAQ (Why should I use Pro if ExecJS seems to work?) was useful onboarding content. Was this intentional, or should it be preserved somewhere?

Minor — hyphenation inconsistency

docs/pro/streaming-ssr.md line 131 reads without a full page reload while line 19 of the same file says no full-page reload needed. The compound adjective should be hyphenated consistently.

Comment thread docs/pro/node-renderer.md
ReactOnRailsPro.configure do |config|
config.server_renderer = "NodeRenderer"
config.renderer_url = ENV["REACT_RENDERER_URL"] || "http://localhost:3800"
config.renderer_password = ENV.fetch("RENDERER_PASSWORD", "devPassword")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "devPassword" fallback was changed from "changeme" (flagged by Cursor) but still exposes the same risk: a user who copies this snippet without setting RENDERER_PASSWORD will deploy with a publicly-known default secret.

Using ENV.fetch without a second argument raises KeyError at startup, which is far safer — the app refuses to boot until the secret is explicitly configured:

Suggested change
config.renderer_password = ENV.fetch("RENDERER_PASSWORD", "devPassword")
config.renderer_password = ENV.fetch("RENDERER_PASSWORD")

If a dev-only fallback is genuinely wanted, add an explanatory comment:

# Set a strong secret in production. Falls back to a dev default only.
config.renderer_password = ENV.fetch("RENDERER_PASSWORD", "devPassword")

Comment thread docs/pro/streaming-ssr.md
Comment on lines +43 to 46
class ProductsController < ApplicationController
include ActionController::Live
include ReactOnRails::Controller
include ReactOnRailsPro::Stream
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same redundancy as in the Pro guide: if ReactOnRailsPro::Stream already includes ActionController::Live, showing both in the quick example creates confusion about what users actually need to add.

Suggested change
class ProductsController < ApplicationController
include ActionController::Live
include ReactOnRails::Controller
include ReactOnRailsPro::Stream
class ProductsController < ApplicationController
include ReactOnRails::Controller
include ReactOnRailsPro::Stream

Comment thread docs/pro/streaming-ssr.md
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6b9afe843f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/pro/streaming-ssr.md
Comment thread docs/pro/streaming-ssr.md
… hydration

- fragment-caching.md: Change code fence from `ruby` to `erb` for ERB template
- streaming-ssr.md: Add missing `import ReactOnRails` in registration example
- streaming-ssr.md: Clarify immediate_hydration is auto-enabled (no config
  needed), show opt-out instead of opt-in

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Comment thread docs/pro/streaming-ssr.md

const fetchData = async () => {
// Simulate API call
const response = await fetch('api/endpoint');
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: relative URL breaks in Node.js SSR context

fetch('api/endpoint') is a relative URL. When this code runs inside the Node Renderer during SSR, there is no base URL to resolve against — the fetch will fail or produce an error at runtime.

This example should either use an absolute URL or, better, illustrate the more realistic pattern of reading from a database/service:

Suggested change
const response = await fetch('api/endpoint');
const fetchData = async () => {
// In SSR, use absolute URLs or read from your data layer directly
const response = await fetch('https://your-api.example.com/api/endpoint');
return response.json();
};

Or replace the whole example with a DB/ORM access pattern (e.g., calling an ActiveRecord model via a custom API), which is the common real-world case.

Comment thread docs/pro/streaming-ssr.md
Comment on lines +34 to +38
```json
"dependencies": {
"react": "19.0.0",
"react-dom": "19.0.0"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exact version pin will block patch/security updates

Pinning to "react": "19.0.0" (exact) means developers who copy-paste this won't receive security patches or bug fixes unless they manually update. Standard practice is to use a caret range:

Suggested change
```json
"dependencies": {
"react": "19.0.0",
"react-dom": "19.0.0"
}
"dependencies": {
"react": "^19.0.0",
"react-dom": "^19.0.0"
}

Same issue exists in the original OSS streaming doc (carried over from the old content).

Comment on lines 42 to 52
```ruby
# app/controllers/example_controller.rb

class ExampleController < ApplicationController
class ProductsController < ApplicationController
include ActionController::Live
include ReactOnRails::Controller
include ReactOnRailsPro::Stream

def show
stream_view_containing_react_components(template: 'example/show')
stream_view_containing_react_components(template: 'products/show')
end
end
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pro-only code in OSS page quick example — no warning

The :::tip Pro Feature at the top of this page correctly signals that streaming SSR requires Pro. However, this "Quick Example" then shows a controller that includes ReactOnRailsPro::Stream without any further note that this module is Pro-only.

An OSS user who skims past the tip admonition and copies the example will hit a NameError: uninitialized constant ReactOnRailsPro at runtime.

Consider wrapping the Ruby and ERB snippets in a :::note callout like:

:::note
The following examples require a React on Rails Pro license. See the [full guide](../../pro/streaming-ssr.md) for setup.
:::

Or replace the examples with read-only pseudocode so readers understand the shape of the API without being tempted to copy-paste non-functional code.

Comment thread docs/pro/streaming-ssr.md
Comment on lines +285 to +293

**For Pages WITHOUT Streaming Components:**

With Shakapacker ≥ 8.2.0, `async: true` is recommended even for non-streaming pages to improve Time to Interactive (TTI):

```erb
<!-- ✅ RECOMMENDED: Use async with immediate_hydration for optimal performance -->
<%= javascript_pack_tag('client-bundle', 'data-turbo-track': 'reload', async: true) %>
```
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency: old OSS doc required explicit config; new Pro doc says automatic

The old streaming-server-rendering.md (OSS) showed:

ReactOnRails.configure do |config|
  config.immediate_hydration = true  # Enable early hydration
end

This new page says "React on Rails Pro automatically enables the immediate_hydration feature … no configuration needed." If it truly became automatic in Pro 4.x, this is a good clarification — but it should explicitly say since which version so users upgrading from older Pro releases know what to expect (and can remove the old explicit config line if they have it).

@claude
Copy link
Copy Markdown
Contributor

claude Bot commented Mar 22, 2026

Review: Docs — expand Pro docs and add Pro badges to OSS docs

Overall this is a well-structured documentation refactor. The three new dedicated Pro pages (node-renderer.md, streaming-ssr.md, fragment-caching.md) are clearly written, the :::tip admonitions are a good UX improvement over the old blockquote style, and the link updates are consistent. All cross-referenced files exist and resolve correctly.

Issues found

Bug — relative URL in SSR fetch example (docs/pro/streaming-ssr.md L53)
fetch('api/endpoint') is a relative URL. The Node Renderer runs in a standalone Node.js process with no base URL context, so this will fail at runtime. Needs an absolute URL or, preferably, a database/service call pattern that actually reflects how server components fetch data in practice. Inline comment added.

Pinned exact React version (docs/pro/streaming-ssr.md L34-38)
"react": "19.0.0" (no caret) blocks security and bug-fix patch releases for developers who copy-paste. Should be "^19.0.0". Inline comment added.

Pro-only code in OSS page without sufficient warning (docs/oss/building-features/streaming-server-rendering.md L42-52)
The :::tip Pro Feature at the top is correct, but the "Quick Example" that follows shows a controller include-ing ReactOnRailsPro::Stream with no additional callout. OSS-only users who skim past the admonition will hit NameError: uninitialized constant ReactOnRailsPro. Adding a small note inside the example section, or switching to pseudocode, would prevent confusion. Inline comment added.

immediate_hydration — automatic vs explicit, no version anchor (docs/pro/streaming-ssr.md L285-293)
The old OSS doc showed an explicit config.immediate_hydration = true. The new Pro page says it's enabled automatically with no configuration. If this changed in a specific Pro version, that version should be called out so users upgrading from older releases know they can remove the explicit config. Inline comment added.

Minor observations (no blocking)

  • docs/oss/building-features/streaming-server-rendering.md title was changed from "Streaming Server Rendering with React 18" to "Streaming Server Rendering" — good, since the content covers 18/19.
  • The tip wording in streaming-server-rendering.md changed "via mini_racer" → "via ExecJS" — correct, ExecJS is the abstraction layer (mini_racer is one runtime it can use).
  • docs/oss/configuration/README.md — the 💡 emoji was dropped from the "Good News!" callout. Intentional? Minor but worth confirming it still renders as intended in Docusaurus.
  • docs/pro/node-renderer.md references bundle exec rails generate react_on_rails:pro — confirmed pro_generator.rb exists in the codebase, so this is accurate. ✓
  • All new cross-links (upgrading-to-pro.md, configuration-pro.md, react-19-native-metadata.md, redux-store-api.md, etc.) were verified to exist.

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dd6d9cc0b5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread docs/pro/streaming-ssr.md

```jsx
// app/javascript/packs/registration.jsx
import ReactOnRails from 'react-on-rails';
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Use the Pro package in the streaming registration example

This example imports react-on-rails, but streaming SSR depends on Pro-only behavior. In the core package, streamServerRenderedReactComponent is just a stub that throws (packages/react-on-rails/src/createReactOnRails.ts:71-73), and the core client startup still waits until full page load (packages/react-on-rails/src/clientStartup.ts:28-30). The Pro installation guide and dummy app both import react-on-rails-pro instead (docs/pro/installation.md:177-185, react_on_rails_pro/spec/dummy/client/app/packs/client-bundle.js:3). If a reader copies this registration file into their client/server bundles, the server bundle cannot perform streaming SSR and the client loses the immediate/selective hydration behavior this page is promising.

Useful? React with 👍 / 👎.

Comment thread docs/pro/node-renderer.md
The fastest way to set up the Node Renderer is with the Pro generator:

```bash
bundle exec rails generate react_on_rails:pro
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Point fresh installs at the install --pro generator

react_on_rails:pro is only the upgrade path for apps that already have the base React on Rails install. The generator explicitly aborts when config/initializers/react_on_rails.rb is missing and tells users to run rails g react_on_rails:install first (react_on_rails/lib/generators/react_on_rails/pro_generator.rb:48-64, react_on_rails/lib/generators/react_on_rails/pro/USAGE:19-21). Presenting bundle exec rails generate react_on_rails:pro as the general “fastest” setup here means a fresh Pro install hits a prerequisite error on the first command instead of getting a working Node renderer setup.

Useful? React with 👍 / 👎.

@justin808 justin808 merged commit ea1a9af into main Mar 22, 2026
25 checks passed
@justin808 justin808 deleted the jg/2783-pro-docs-badges branch March 22, 2026 22:07
justin808 added a commit that referenced this pull request Mar 22, 2026
## Summary

Addresses remaining review feedback from #2789 as tracked in #2800:

- **React version consistency**: Changed "React 18/19's
`renderToPipeableStream`" to "React 19's" in intro to match
prerequisites; updated "React 18's Selective Hydration" → "React's
Selective Hydration"
- **Async component clarification**: Added note that `async () => {}`
function components require RSC infrastructure, with pointer to RSC
tutorial for non-RSC streaming alternatives
- **Fragment caching deploy note**: Rewrote to explicitly distinguish
`prerender: true` (auto-invalidated via bundle digest) from client-only
calls (manual cache key versioning required)
- **Style nits**: Fixed "full page reload" → "full-page reload"
hyphenation; simplified controller example to note
`ActionController::Live` is already included by
`ReactOnRailsPro::Stream`

Fixes #2800

## Test plan

- [ ] Verify docs render correctly on the docs site
- [ ] Confirm no broken links in the added RSC tutorial reference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk documentation-only updates; main risk is minor confusion if
guidance is incorrect, but no runtime code is changed.
> 
> **Overview**
> Updates `docs/pro/streaming-ssr.md` to clarify that `async` function
components are a *React Server Components* pattern and points non-RSC
streaming users to Suspense-friendly data fetching (and the RSC
tutorial).
> 
> Simplifies the Rails controller example by removing the requirement to
explicitly include `ActionController::Live` (noting it’s mixed in via
`ReactOnRailsPro::Stream`), and applies small wording/consistency edits
around Selective Hydration and “full-page reload” phrasing.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1ecdaa3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Enhanced streaming server-side rendering documentation with
comprehensive guidance on implementing React Server Components and
alternative patterns using data-fetching libraries with Suspense
* Simplified Rails setup requirements, clarifying controller
configuration needed for streaming functionality
  * Minor wording refinements for consistency and clarity
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
justin808 added a commit that referenced this pull request Mar 25, 2026
## Summary

- Stamp `### [16.5.0.rc.0]` version header with today's date
- Add 10 new changelog entries for PRs merged since v16.4.0
- Fix incomplete PR 2818 entry (missing author link)

### New entries added

**Added:**
- `create-react-on-rails-app --pro` support (PR 2818)
- Global prerender env override `REACT_ON_RAILS_PRERENDER_OVERRIDE` (PR
2816)
- `react_on_rails:sync_versions` rake task (PR 2797)
- Pro/RSC setup checks in `react_on_rails:doctor` (PR 2674)

**Changed:**
- [Pro] Canonical env var for worker count is now
`RENDERER_WORKERS_COUNT` (PR 2611)

**Improved:**
- Smoother `create-react-on-rails-app` and install generator flows (PR
2650)
- Pro upgrade hint after install (PR 2642)

**Fixed:**
- Preserve runtime env vars across `Bundler.with_unbundled_env` (PR
2836)
- Fix doctor prerender check and ExecJS display for Pro/RSC apps (PR
2773)
- Fix doctor false positives for custom layouts (PR 2612)

### Skipped PRs (not user-visible)

Docs-only: #2845, #2842, #2826, #2830, #2820, #2809, #2803, #2785,
#2801, #2791, #2789, #2788, #2772, #2778, #2780, #2784, #2671, #2676,
#2662, #2657, #2669
CI/internal tooling: #2825, #2817, #2819, #2812, #2815, #2810, #2808,
#2807, #2634, #2798, #2761, #2760, #2658, #2639, #2667, #2656

## Test plan

- [x] Verified version header and diff links are correct
- [x] Verified all entries follow changelog formatting conventions
- [x] Verified file ends with newline
- [ ] After merge, run `rake release` to publish 16.5.0.rc.0

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only change updating `CHANGELOG.md` with a new
`16.5.0.rc.0` section and compare links; no runtime code is modified.
> 
> **Overview**
> Adds a new `16.5.0.rc.0` (2026-03-25) section to `CHANGELOG.md`,
consolidating recent PR entries under **Added/Changed/Improved/Fixed**
and correcting the previously incomplete `--pro` CLI entry author
attribution.
> 
> Updates the bottom compare links so `[unreleased]` now compares from
`v16.5.0.rc.0` and adds a link definition for `[16.5.0.rc.0]`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
481a71c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes - v16.5.0.rc.0

* **New Features**
  * Added sync_versions task for streamlined version management
  * Expanded doctor checks for Pro and RSC support

* **Improvements**
  * Enhanced generator workflow and Pro upgrade guidance
  * Improved environment variable handling and preservation

* **Bug Fixes**
* Fixed detection issues with doctor tools and ExecJS/prerender
functionality

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
justin808 added a commit that referenced this pull request Mar 30, 2026
- Add 3 dedicated Pro feature overview pages:
`docs/pro/node-renderer.md`, `docs/pro/streaming-ssr.md`,
`docs/pro/fragment-caching.md`
- Add Docusaurus `:::tip` admonition callouts to 6 OSS docs that have
Pro upgrade paths (server rendering, streaming SSR, caching,
configuration, deployment tips, quick start)
- Update `docs/pro/home-pro.md` to link to the new dedicated feature
pages

Closes #2783

- [ ] Verify all Pro doc links resolve correctly (node-renderer.md,
streaming-ssr.md, fragment-caching.md)
- [ ] Verify `:::tip` admonitions render correctly in Docusaurus
- [ ] Check that cross-references between OSS and Pro docs are valid
- [ ] CI passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only changes that add new Pro guides and adjust
cross-links/callouts; low risk beyond potential broken links or
Docusaurus admonition rendering issues.
>
> **Overview**
> Adds three new React on Rails Pro overview guides for **`Node
Renderer`**, **`Streaming SSR`**, and **`Fragment Caching`**, and
reorganizes Pro docs (`home-pro.md`, release notes, troubleshooting, RSC
SSR doc) to link to these dedicated pages.
>
> Updates several OSS docs to use consistent `:::tip` Pro admonitions
and to **cross-link/redirect** detailed Pro content (notably trimming
`streaming-server-rendering.md` down to a short overview that points to
the new Pro streaming guide), plus minor link fixes (e.g., compression
middleware troubleshooting now points to `docs/pro/streaming-ssr.md`).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
dd6d9cc. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

* **Documentation**
* Replaced plain OSS/Pro callouts with unified Pro tip/admonition blocks
and added internal cross-links to Pro content.
* Simplified OSS streaming SSR guide and redirected detailed guidance to
a new Pro Streaming SSR guide.
* Added Pro documentation: Node Renderer, Streaming SSR, and Fragment
Caching with examples, comparisons, and prerequisites.
* Updated Pro home, configuration, and troubleshooting pages to
reference the new Pro feature pages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
justin808 added a commit that referenced this pull request Apr 6, 2026
- Add 3 dedicated Pro feature overview pages:
`docs/pro/node-renderer.md`, `docs/pro/streaming-ssr.md`,
`docs/pro/fragment-caching.md`
- Add Docusaurus `:::tip` admonition callouts to 6 OSS docs that have
Pro upgrade paths (server rendering, streaming SSR, caching,
configuration, deployment tips, quick start)
- Update `docs/pro/home-pro.md` to link to the new dedicated feature
pages

Closes #2783

- [ ] Verify all Pro doc links resolve correctly (node-renderer.md,
streaming-ssr.md, fragment-caching.md)
- [ ] Verify `:::tip` admonitions render correctly in Docusaurus
- [ ] Check that cross-references between OSS and Pro docs are valid
- [ ] CI passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation-only changes that add new Pro guides and adjust
cross-links/callouts; low risk beyond potential broken links or
Docusaurus admonition rendering issues.
>
> **Overview**
> Adds three new React on Rails Pro overview guides for **`Node
Renderer`**, **`Streaming SSR`**, and **`Fragment Caching`**, and
reorganizes Pro docs (`home-pro.md`, release notes, troubleshooting, RSC
SSR doc) to link to these dedicated pages.
>
> Updates several OSS docs to use consistent `:::tip` Pro admonitions
and to **cross-link/redirect** detailed Pro content (notably trimming
`streaming-server-rendering.md` down to a short overview that points to
the new Pro streaming guide), plus minor link fixes (e.g., compression
middleware troubleshooting now points to `docs/pro/streaming-ssr.md`).
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
dd6d9cc. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

* **Documentation**
* Replaced plain OSS/Pro callouts with unified Pro tip/admonition blocks
and added internal cross-links to Pro content.
* Simplified OSS streaming SSR guide and redirected detailed guidance to
a new Pro Streaming SSR guide.
* Added Pro documentation: Node Renderer, Streaming SSR, and Fragment
Caching with examples, comparisons, and prerequisites.
* Updated Pro home, configuration, and troubleshooting pages to
reference the new Pro feature pages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Expand Pro documentation and add Pro badges to OSS docs

1 participant