Skip to main content

JavaScript Bundling for Rails

Shakapacker

Official docs for installing, configuring, deploying, and upgrading Shakapacker in Rails applications, with first-class Rspack support.

Quick Start

Install Files

bin/rails shakapacker:install

Open guide

New in v10.1

One Package, the Full Build Stack

Shakapacker 10.1 adds two supplemental packages — shakapacker-rspack and shakapacker-webpack — that carry the managed build stack as required peer dependencies. Install one package instead of wiring up four.

npm install --save-dev shakapacker-rspack

npm 7+ auto-installs the required peers: @rspack/core, @rspack/cli, and rspack-manifest-plugin.

Defaults to Rspack — it ships SWC, so there’s no separate transpiler to install. Unlike npm 7+, Yarn and pnpm can’t rely on the one-package install, so their commands list the bundler peers and shakapacker explicitly; the Rails installer (bin/rails shakapacker:install) writes them into your package.json for you either way.

Prefer webpack? Swap in shakapacker-webpack for the managed webpack stack.

Already on Shakapacker 10.0? Collapse four dependencies into one — your shakapacker.yml and build configs stay unchanged.

Rspack logo

Shakapacker + Rspack

2-4x Faster Builds, Same Rails Workflow

Shakapacker ships with first-class Rspack support — a Rust-powered bundler that’s wire-compatible with Webpack 5 but dramatically faster. Switch bundlers with a one-line config change; no migration rewrite needed.

Drop-in Webpack replacement

Rspack is wire-compatible with Webpack 5. Existing loaders, plugins, and config files work without rewriting your build pipeline.

2-4x faster builds

Written in Rust, Rspack delivers dramatically faster cold starts, warm-cache rebuilds, and incremental production builds compared to Webpack.

Rails-native integration

Unlike Vite, Rspack works with Shakapacker out of the box — no ejecting from the Rails asset pipeline, no custom server configuration.

Academia.eduCase Study

2-4x build speed increase. Warm-cache startup went from ~1m to ~20s, and incremental prod builds now take ~10s.

2-4xfaster builds
~20swarm-cache startup
~10sincremental deploys

Jon Rajavuori — ShakaCode helped Academia.edu migrate from Webpack to Rspack

How Shakapacker Compares

Sprockets and Propshaft are Rails’ asset-digesting layer — they fingerprint assets but don’t bundle JavaScript. importmap-rails, jsbundling-rails, Vite Ruby, and Shakapacker are how modern JS actually reaches the browser.

OptionBuild stepnpm + loadersJSX / TSHMRCode splittingRails manifest + helpersBest for
Sprocketsnone (concatenate)✓ (legacy)Legacy apps, CSS / images
Propshaftnone (digest only)Modern digesting; pair with a bundler
importmap-railsnone✓ (Propshaft)No-build Hotwire
jsbundling-railsesbuild / rollup / bunminimallimited✓ (Propshaft)Simple modern JS
Vite RubyViteVite ecosystemown pipelineTeams wanting Vite DX
Shakapacker + Rspackwebpack or Rspackfull ecosystem✓ SWC / Babel / esbuild✓ nativeComplex / React / TS at scale

Full comparison guide & benchmarks →

Why Teams Use It

Installation, configuration, and deployment guidance is sourced directly from the shakapacker/docs tree.

Docs from sourceAlways aligned with current releases

Keep webpack-style configuration and Rails conventions while switching the build engine to Rspack for major speed gains.

Rails-first migrationNo rewrite required

Docs Architecture

Canonical markdown stays in shakapacker/docs. This site syncs that content at build time, so docs stay co-located with the code while deployment remains independent.

Expert Help

Get direct guidance from the team behind Shakapacker

Planning a Webpack-to-Rspack migration or troubleshooting production builds? Book a complimentary 30-minute assessment with ShakaCode.