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.
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.
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
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.
Add to Gemfile
gem "railspress-engine"
Install & Migrate
$ bundle install
$ rails generate railspress:install
$ rails db:migrate
Mount the Engine
mount Railspress::Engine => "/railspress"
Start Creating
# 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.