If you need help upgrading react-rails, webpacker to shakapacker, or JS packages, contact justin@shakacode.com. We can upgrade your project and improve your development and customer experiences, allowing you to focus on building new features or fixing bugs instead.
For an overview of working with us, see our Client Engagement Model article and how we bill for time.
We also specialize in helping development teams lower infrastructure and CI costs. Check out our project Control Plane Flow, which can allow you to get the ease of Heroku with the power of Kubernetes and big cost savings.
If you think ShakaCode can help your project, click here to book a call with Justin Gordon, the creator of React on Rails and Shakapacker.
You also might want to consider the react_on_rails gem.
Changes since the last non-beta release.
Please add entries here for your pull requests that have not yet been released. Include LINKS for PRs and committers.
- Preserve default controller layouts for
render component:after the Rails 8 render pipeline change. PR 1418 by justin808. Fixes #1356.
3.3.0 - 2026-03-31
- Support for Propshaft server rendering. PR 1345 by elektronaut
3.2.1 - 2024-05-16
-
Replaced call to ReactRailsUJS.unmountComponents that was erroneously removed by PR 1290 in 3.0.0 PR 1339.
-
Prevent roots from being re-created when using React 18 PR 1305 by diogobeda
3.2.0 - 2024-01-10
- Support other JS package managers using
package_jsongem PR #1306 by G-Rath. - Make es6 and ts usable at same time. #1299
3.1.1 - 2023-08-16
- Removed the replace-null functionality due a severe logic error added in 3.1.0 #1300
3.1.0 - 2023-08-15
- Added option to replace
nulls in props withundefinedviaconfig.react.null_to_undefined_propsinconfig/application.rb#1293
3.0.0 - 2023-08-14
- Requires separate compilations for server & client bundles if using Shakapacker (see Webpack config) #1274
- Replaces WebpackManifestContainer, which searched for assets in the webpack manifest, with SeparateServerBundleContainer, which expects a single server bundle file & does not use the webpack manifest at all. #1274
- Upgrades React-Rails' embedded react to v18.2.0. Uses node polyfill plugin & fast-text-encoder for SSR text encoding. #1290
- If using Webpacker/Shakapacker, requires upgrading to Shakapacker v7 #1274 and #1285
- The
react:componentgenerator now generates a function component by default #1271
2.7.1 - 2023-05-19
- Fix ReactDomClient initialization error during SSR. #1278
2.7.0 - 2023-05-06
- Camelizes keys with primitive values, in addition to hashes #946
- Expose alternative implementations for
ReactUJS.getConstructor#1050 - Include turbolinks in dev and update webdrivers #1174
- Add support for multiple
require.contextwith addition ofuseContexts#1144 - Update many dependencies
- Fix installation crash caused by absolute path for
source_entry_pathin defaultconfig/webpacker.ymlcoming fromshakapackerversion 6.x - #1216 - Fix warning for loading
react-domin React 18 - #1269
- React 16.14
- Support for ShakaPacker
- Preparation for React 18 #1151
- URI.open instead of open #1099
- No longer unmount components on Turbolinks navigation #1135
- React 16.9.0
- Sprockets users get React_UJS 2.6.1
- Removed tests for Rails 3, 4, 5.0
- Removed tests for Sprockets 2
- Removed tests for Webpacker 1.1, 2
- React_UJS 2.6.1 still complies with ES5 #1027 #1026 #1016
- Support RubyGems pattern for Alpha releases when detecting sprockets version #1047
- Typescript component generator #990
- Enhanced Turbolinks Support #978 #962
- assert_react_component will not pass tests where the case was different #979
- action_controller/test_case was accidentally
requiredin dev #996
- React 16.8.6 prebundled #977
- Added
assert_react_componenttest helper #957 - Supports Webpacker 4, Ruby 2.6 #934
- Supports camelize on ActionController::Parameters #932
- Linting fix to generated JS #941
- (Meta) Tests for react-rails updated #892 #894 #916
- React 16.4.2 prebundled #914
- React 16.4.1 prebundled #909
- React 16.3.2 prebundled #908
- Supports Webpacker 4.x #895
- Enhanced generator to create components in subdirectories #890
- Explicitly support Rails 5.2 #893
- Enhanced documentation for Turbolinks usage #900
- React 16.2 prebundled #856, #874
- Use Fragments instead of Divs by default #856
- Explicitly support Ruby 2.5 #857
- Add support for controller rendering using
camelize_props#869 - Many readme, doc and guide updates including Typescript #873, #865, #862, #854, #852, #849
- Drop explicit support for Ruby 2.1 #866
- Drop explicit support for Rails 3, 4.0, 4.1 #866
- If the gem continues to work on Ruby and Rails below what is in Travis, it is accidental.
- Correct behaviour of Turbolinks 5 mounting #868, 848
- Correct behaviour of JQuery3 removing "on" #867, 762
- Call ReactDOM.render() when react_component :prerender option is falsy, instead of ReactDOM.hydrate() #844, #842
- ReactDOM.hydrate() may not be defined for everyone, it will now use hydrate if it is defined or fallback to render #832
- Webpacker gets ES6 components by default #822
- ReactDOM.hydrate() #828
- Documentation updates #830
- Webpacker local manifest sometimes had double asset_hosts if the dev server was running #834 thanks @joeyparis
- (Sprockets) Prebundled React upgraded to 16 #792
- (Sprockets) Addons removed #792
- Coffeescript generator exports correctly #799, #800
- Running detector manually no longer breaks if Turbolinks is not preset #802
- React Deprecations for 15.4, 15.5, 15.6 in preparation for 16 handled in prebundled version #789, #798
- Generator now makes modern style
createReactClass(JS) orextends React.Component(ES6, CoffeeScript) code
- Next version will drop the addons option as they are not supported with React 16
- TheRubyRacer's newest version (0.12.3 at time of writing) only supports libV8 (3.16.14.15) which is too old for some new JS features, future versions of this gem will need more modern ExecJS runtimes such as mini_racer (currently on libV8 5.9.x)
- Webpacker and Webpack 3 support #777
- Update to React 15.6.2 #789
- Support
config.react.server_renderer_directoriesin initializers #729
- Fix Railtie watcher to update its timestamp when files change #722
- Don't use
yarnbinstub because webpacker doesn't provide it anymore #717
- Improve error handling when components aren't found #704
- Camelize filename when generating for webpack #703
- Include node module boilerplate when generating for webpack #710
- Don't look for non-existent
Turbolinks.EVENTS#708
- Support Rails 5.1 #697
- Fix UJS unmounting by selector #696
- Rerun events detection at any time with
ReactRailsUJS.detectEvents()#693 - Make the NPM version of
react_ujsmatch the Rubygem version
2.0.1 was skipped because a bad version of react_ujs was published to NPM.
-
Server rendering loads
server_rendering.jsby default #471 . Upgrade by adding a new file which requires the previous defaults:// app/assets/javascripts/server_rendering.js // = require react-server // = require components
- Webpacker support:
react_componentcan find components viarequire.context+ReactRailsUJS.useContext#678- Server rendering detects Webpacker and uses packs #683, #687
ReactRailsUJSis available fromnpmwithyarn add react_ujsornpm install react_ujs#678
per_request_react_rails_prerendererAllows you to check out a renderer for the whole request instead of once-per-react_component#559
- Improved watching of server-rendering JS files #687
- Fix console replay:
- Put the
<script>tag outside the React.js container to avoid React warnings #691 - Clear console history between renders #692
- Put the
- Use better Turbolinks events #690
- Support
prerender: falsewhen rendering in a controller #680 - Update React to
15.4.2#681
- Fix joining asset path in YamlManifestContainer #679
- Remove
coffee-script-sourcefrom dependencies. #667 If you have a version conflict, you should specify the proper version yourself.
- Alias
window = this;has been removed from the default server rendering JavaScript to improve detection of the server rendering environment. To get the old behavior, you can add the alias in your own server rendering code. #615
- Calling
setTimeoutorclearTimeoutin server rendering will raise an informative error because they aren't supported #618 prerender:options will be passed to server renderer methods #641react_component(..., camelize_props:)option will override the application default #642, #645- Ship with React.js 15.4.1 #646
- use
['default']accessor to support old JavaScript versions #619 react_componentwith a block will correctly render the content inside thediv
- Accept extra JS code in
code:option for SprocketsRenderer #604
- Use
asset_prefixfor YamlContainer #598 - Fix requiring
.jsfrom.es6.jsx#591
- Update to React 15.3.0 #583
- Fix
//= requireon Sprockets 3.7+ #582
- Update to React 15.2.1 #569
- Fix deprecation warnings on Sprockets 3.7+ #574
- Stop building broken addons files #576
- Sprockets 4 Support 🎉 #560
- Depend on Railties, not Rails #558
- Don't depend on
sprockets/railtie#558 - Expose
React.camelize_props(props_hash)#556 - Add
rails generate react:ujs --output=...for copying the UJS into your app #557 - Support Babel 6 module exports & extension point
ReactRailsUJS.getConstructor#503
- Improved error messages for missing components #538
- Fix
view_helper_implementationconfig #551 - Fallback to
EnvironmentContainerfor server rendering when manifest isn't available #545
- Update to React 15.0.2 #525
- Update
.to_preparefor Rails 5 #526 - Use
register_enginewith Sprockets 3 to avoid compiling all files #522
- Update to React 15.0.1 #512
- Support PJAX #518
- Static renders don't include
data-react-attributes #497
- Better unmounting on Turbolinks 5 #521
- Fix console replay #496
- Fix Server Rendering for Rails 3.2 #487
- UJS can mount and unmount a component by ID (not only the component's children) #466
- Support Turbolinks 5 #475
- Support nested arrays with
camelize_props#480 - Improve Sprockets 3 compatibility #453
- Fix install-generator
requirespacing #476
- Individual add-ons can be included in a bundle with sprockets require directives. #457
- Support
sprockets-rails3 #430 - Update to React 0.14.6
- Fix install generator when
//= requires are malformed #463 - Use
before_actionif available #456 - Add CHANGELOG to gem bundle #471
- Use
window.attachEventto support IE8 without jQuery 😬#446
- Update to React 0.14.3 #412
config.react.camelize_props = truewill camelizereact_componentprop keys #409
- Fix chained
.es6file names with JSX processor #411 - Don't insert
// =requires multiple times #398
- Component generator
--coffeeoption #387 - Support Sprockets 4 with a JSX processor #385
- Support custom attributes when rendering from controller #384
- Minify & optimize the production build of React.js #380
- Include React.js 0.14
- Also support React 0.14 in
unmountComponents#372 - Use a fallback view helper in case a Rails controller wasn't used #375
- The UJS can mount and unmount components within a given DOM node #358
- Support dropped-in React 0.14 in UJS #366
- Use controller lifecycle hooks for view helper (tests don't run middlewares) #356
- Render components directly from the controller with
render component: ...#329 - Provide a custom view helper with
config.react.view_helper_implementation#346
- Allow
react-railsconfigs to be set in initializers #347
- Support
--es6option in component generator #332 - Support Sprockets 3 #322
- Don't bother unmounting components
onBeforeUnload#318 - Include
React::Rails::VERSIONin the gem #335
-
Changed server rendering configuration names #253
Old New config.react.timeoutconfig.react.server_renderer_timeoutconfig.react.max_renderersconfig.react.server_renderer_pool_sizeconfig.react.react_jsconfig.react.server_renderer_options[:files]config.react.component_filenamesconfig.react.server_renderer_options[:files]config.react.replay_consoleconfig.react.server_renderer_options[:replay_console](none) config.react.server_renderer -
JSX is transformed by Babel, not JSTransform #295
- Allow custom renderers for server rendering #253
- Server render with
renderToStaticMarkupviaprerender: :static#253 - Accept
config.react.jsx_transform_options = {asset_path: "path/to/JSXTransformer.js"}#273 - Added
BabelTransformerfor transforming JSX #295 - Added
ExecJSRendererto server rendering tools - Accept
config.react.jsx_transformer_class#302
JSXTransformerwon't be updated
- Fix gem versions in tests #270
- Expire the Sprockets cache if you change React.js builds #257
- Instead of copying builds into local directires, add different React.js builds to the asset pipeline #254
- Camelize attribute names in the component generator #262
- Add
tiltdependency #248 - Default prerender pool size to 1 #302
- Vendor versions of React.js with
config.variant,config.addonsand//= require react - Component generator
- View helper and UJS for mounting components
- Server rendering with
prerender: true - Transform
.jsxin the asset pipeline