Introduction
Rails 8.x has arrived, bringing exciting new features and enhancements to improve productivity, performance, and ease of development. From built-in authentication to real-time WebSocket updates, this latest version of Rails continues its commitment to being a powerful and developer-friendly framework.
Let’s dive into some of the most significant features and improvements introduced in Rails 8.
Rails 8 Features & Enhancements
1. Modern JavaScript with Importmaps & Hotwire
Rails 8 eliminates the need for Webpack and Node.js, allowing developers to manage JavaScript dependencies more efficiently. Importmaps simplify dependency management by fetching JavaScript packages directly and caching them locally, removing runtime dependencies.
Key Benefits:
- Faster page loads and reduced complexity
- No need for Node.js or Webpack
- Dependencies are cached locally and loaded efficiently
Example: Pinning a Package
bin/importmap pin local-time
This command fetches the package from npm and stores it locally for future use.
Hotwire Integration
Hotwire enables dynamic page updates without requiring heavy JavaScript frameworks. Rails 8 fully integrates Turbo and Stimulus, making frontend interactivity more seamless.
Importing Dependencies in application.js:
import "trix";
With this setup, developers can create reactive UI elements with minimal JavaScript.
2. Real-Time WebSockets with Action Cable & Turbo Streams
Rails 8 enhances real-time functionality with Action Cable and Turbo Streams, allowing WebSocket-based updates across multiple pages without additional JavaScript libraries.
Setting Up Turbo Streams in Views:
<%= turbo_stream_from @object %>
This creates a WebSocket channel tied to the object.
Broadcasting Updates from Models:
broadcast_to :object, render(partial: "objects/object", locals: { object: self })
Any changes to the object will be instantly reflected across all connected clients.
Why This Matters:
- No need for third-party WebSocket npm packages
- Real-time updates are built into Rails
- Simplifies building interactive applications
3. Rich Text with ActionText
Rails 8 continues to support ActionText, making it easy to handle rich text content within models and views.
Model Level Implementation:
has_rich_text :body
This enables rich text storage and formatting for the body attribute of a model.
View Implementation:
<%= form.rich_text_area :body %>
This adds a full-featured WYSIWYG text editor to the form, allowing users to create and edit rich text content seamlessly.
Displaying Updated Timestamps:
<%= time_tag post.updated_at %>
This helper formats timestamps cleanly, improving date and time representation in views.
4. Deployment with Kamal – Simpler & Faster
Rails 8 introduces Kamal, a modern deployment tool that simplifies remote deployment by leveraging Docker containers.
Deployment Steps:
- Setup Remote Server
kamal setup- Installs Docker (if missing) and configures the server.
- Deploy the Application
kamal deploy- Builds and ships a Docker container using Rails’ default Dockerfile.
File Uploads with Active Storage
By default, Kamal stores uploaded files in Docker volumes, but this can be customized based on specific deployment needs.
5. Built-in Authentication – No Devise Needed
Rails 8 introduces native authentication, reducing reliance on third-party gems like Devise. This built-in system manages password encryption, user sessions, and password resets while keeping signup flows flexible.
Generating Authentication:
rails g authentication
rails db:migrate
Creating a User for Testing:
User.create(email: "user@example.com", password: "securepass")
Managing Authentication:
- Uses bcrypt for password encryption
- Provides a pre-built
sessions_controllerfor handling authentication - Allows remote database changes via:
kamal console
6. Turning a Rails App into a PWA
Rails 8 makes it incredibly simple to transform any app into a Progressive Web App (PWA), enabling offline support and installability.
Steps to Enable PWA:
- Modify
application.html.erb:<%= tag.link pwa_manifest_path %> - Ensure manifest and service-worker routes are enabled.
- Verify PWA files:
pwa/manifest.json.erbandpwa/service-worker.js. - Deploy and restart the application to see the Install button in the browser.
Final Thoughts
Rails 8 is packed with developer-friendly features that improve security, real-time updates, and deployment workflows. With Hotwire, Kamal, and native authentication, it’s clear that Rails is evolving to reduce dependencies while enhancing performance.
Are you excited about Rails 8? Let me know your thoughts and experiences in the comments below!