Rails 8 Ready

Content management
the Rails way.

A Rails engine for blogging and content. Rich text editing, SEO metadata, categories, and tags out of the box. Plus an Entity System to manage any model with a simple DSL.

app/models/project.rb
class Project < ApplicationRecord
  include Railspress::Entity

  has_rich_text :body
  has_many_attached :gallery

  # That's it. Full CRUD admin at /admin/entities/projects
  railspress_fields :title, :client, :body, :gallery
end

Everything you need.
Nothing you don't.

Zero Config

Works out of the box. Run the install generator, mount the engine, and start writing. Enable features when you need them.

Publishing UI

A clean admin interface for managing content. Draft and publish workflows, scheduled posts, categories and tags. Everything organized, nothing cluttered.

Blogging Built In

Posts, categories, tags, and optional authors. Auto-generated slugs, filtering scopes, and a complete blog with one mount.

Header Images & Galleries

Featured images and multi-image galleries with ActiveStorage. Thumbnails, previews, and easy removal. Visual content made simple.

SEO Ready

Meta titles and descriptions per post. Clean URL slugs generated automatically. Everything search engines need to index your content.

Easy Custom Entities

Manage any model through the admin with a simple DSL. Projects, testimonials, team members. Declare your fields, get full CRUD.

Manage any model. Three lines of code.

Include the concern, declare your fields, register it. Full CRUD admin with automatic type detection and form generation.

app/models/team_member.rb
class TeamMember < ApplicationRecord
  include Railspress::Entity

  has_one_attached :headshot
  has_rich_text :bio

  # Declare your fields
  railspress_fields :name, :role, :email
  railspress_fields :bio
  railspress_fields :headshot, as: :attachment
  railspress_fields :featured, :display_order

  # Custom sidebar label
  railspress_label "Team"

  validates :name, presence: true
end
config/initializers/railspress.rb
Railspress.configure do |config|
  # Register your entities
  config.register_entity :team_member
  config.register_entity :project
  config.register_entity :testimonial
end

Automatic Type Detection

ActionText, ActiveStorage, and column types detected automatically. Override with explicit as: when needed.

Smart Form Layouts

Main column for content fields, sidebar for metadata. Attachments get their own sections with previews.

Full CRUD Generated

Index, show, new, edit, create, update, destroy. All routes, all views, all controllers. No scaffolding required.

Development Hot Reload

Edit your model, refresh the browser. Field changes appear instantly in development. No server restart needed.

Up and running
in four steps.

01

Add to Gemfile

Gemfile
gem "railspress-engine"
02

Install & Migrate

Terminal
$ bundle install
$ rails generate railspress:install
$ rails db:migrate
03

Mount the Engine

config/routes.rb
mount Railspress::Engine => "/railspress"
04

Start Creating

Browser
# Visit the Railspress Dashboard
http://localhost:3000/railspress/admin

Works without configuration.
Customize when needed.

With Rails 8 Authentication

Railspress.configure do |config|
  config.enable_authors
  config.enable_post_images

  # Works with Rails 8 auth, Devise, or custom
  config.current_author_method = :current_user
  config.author_display_method = :name
end

Scoped Authors by Role

Railspress.configure do |config|
  config.enable_authors
  config.author_class_name = "User"

  # Only show users with writer role
  config.author_scope = :writers

  # Or use a proc for complex logic
  config.author_scope = ->(klass) {
    klass.where(role: "writer")
  }
end

Ready to manage content in Rails?

RailsPress is free, open source, and built for Rails 8. Blog out of the box. Entity System for everything else.