Vite
Vite Integration
Ruby2JS provides first-class Vite support through vite-plugin-ruby2js. Transform Ruby files to JavaScript with hot module replacement, source maps, and framework-specific presets.
Table of Contents
Installation
npm install https://www.ruby2js.com/releases/vite-plugin-ruby2js-beta.tgz
The plugin depends on ruby2js which will be installed automatically.
Basic Usage
// vite.config.js
import { defineConfig } from 'vite';
import ruby2js from 'vite-plugin-ruby2js';
export default defineConfig({
plugins: [ruby2js()]
});
Now you can import .rb files directly:
// main.js
import { add, greet } from './math.rb';
console.log(add(2, 3)); // 5
console.log(greet('World')); // "Hello, World!"
# math.rb
export def add(a, b)
a + b
end
export def greet(name)
"Hello, #{name}!"
end
Options
ruby2js({
// Filters to apply (default: ['Functions', 'ESM', 'Return'])
filters: ['Functions', 'ESM', 'Return', 'CamelCase'],
// ES level target (default: 2022)
eslevel: 2022,
// Glob patterns to exclude
exclude: ['**/vendor/**']
})
See Options for the full list of Ruby2JS options.
Presets
Presets bundle common configurations for specific use cases.
Rails Preset
For Rails apps using Stimulus and ERB:
import { rails } from 'vite-plugin-ruby2js/presets/rails';
export default defineConfig({
plugins: [rails()]
});
Features:
- Stimulus controller transformation
- ERB template support
- Hot module replacement for controllers
- Path aliases (
@controllers,@models,@views)
rails({
eslevel: 2022, // ES level (default: 2022)
hmr: true, // Enable Stimulus HMR (default: true)
aliases: {} // Additional path aliases
})
Juntos Preset
For full Rails app transformation with Juntos:
import { juntos } from 'ruby2js-rails/vite';
export default juntos({
database: 'dexie',
target: 'browser'
});
This preset transforms entire Rails applications—models, controllers, views, routes—to run in browsers or JavaScript runtimes. See Juntos + Vite for details.
Framework Presets (Coming Soon)
Future versions will add presets for:
- Vue —
<script lang="ruby">in.vuefiles - Svelte —
<script lang="ruby">in.sveltefiles - Astro —
#!rubyfrontmatter in.astrofiles
Source Maps
Source maps are generated automatically, allowing you to debug Ruby code directly in browser DevTools. The original .rb file appears in the Sources panel with correct line numbers.
Hot Module Replacement
The Rails preset includes HMR for Stimulus controllers. When you edit a *_controller.rb file:
- The file is re-transpiled
- The controller is unregistered from Stimulus
- The updated controller is registered
- No full page reload required
JSX.rb Files (Ruby + JSX)
The Juntos preset supports .jsx.rb files—Ruby with embedded JSX:
# components/Counter.jsx.rb
export default
def Counter(initial: 0)
count, setCount = useState(initial)
%x{
<button onClick={() => setCount(count + 1)}>
Count: {count}
</button>
}
end
RBX files are processed with the React filter and support:
- JSX via
%x{}blocks - React hooks
- Component exports
Comparison with esbuild
| Feature | Vite | esbuild |
|---|---|---|
| Hot Module Replacement | Yes | No |
| Dev Server | Built-in | No |
| Source Maps | Yes | No |
| Framework Presets | Yes | No |
| Build Speed | Fast | Fastest |
Use Vite for: Web applications, SPAs, projects needing HMR and dev server.
Use esbuild for: CLI tools, Lambda functions, build scripts, backend services. See the esbuild integration for details.
Next Steps
- Juntos + Vite — Full Rails app transformation
- Filters — Available transformation filters
- Options — All configuration options