Build production-ready Rails apps in minutes, not days. Convention-driven, fully customizable, and AI-ready. Plutonium picks up where Rails left off, adding application-level concepts that make building complex apps faster.
rails new myapp -a propshaft -j esbuild -c tailwind \
-m https://radioactive-labs.github.io/plutonium-core/templates/plutonium.rbThen create your first resource:
cd myapp
rails g pu:res:scaffold Post title:string body:text --dest=main_app
rails db:migrate
bin/devVisit http://localhost:3000 - you have a complete CRUD interface.
Resource-oriented architecture - Models, policies, definitions, and controllers that work together:
# Policy controls WHO can do WHAT
class PostPolicy < ResourcePolicy
def create? = user.present?
def update? = record.author == user || user.admin?
def permitted_attributes_for_create
%i[title body]
end
end
# Definition controls HOW it renders
class PostDefinition < ResourceDefinition
input :body, as: :markdown
search { |scope, q| scope.where("title ILIKE ?", "%#{q}%") }
scope :published
scope :drafts
endPackages for organization - Split your app into feature packages and portals:
rails g pu:pkg:package blogging # Business logic
rails g pu:pkg:portal admin # Web interface
rails g pu:res:conn Post --dest=admin_portalBuilt-in authentication via Rodauth:
rails g pu:rodauth:install
rails g pu:rodauth:account userMulti-tenancy with entity scoping:
# In portal engine
scope_to_entity Organization, strategy: :path
# Routes become /organizations/:organization_id/postsCustom actions with interactions:
class PublishInteraction < ResourceInteraction
attribute :resource
attribute :publish_at, :datetime
def execute
resource.update!(published_at: publish_at)
succeed(resource).with_message("Published!")
rescue ActiveRecord::RecordInvalid => e
failed(e.record.errors)
end
endFull documentation at radioactive-labs.github.io/plutonium-core
- Ruby 3.2+
- Rails 7.1+ (Rails 8 recommended)
- Node.js 18+
See CONTRIBUTING.md for development setup and guidelines.
Plutonium is used in production but still evolving. APIs may change between minor versions. Pin your version in Gemfile.
MIT License - see LICENSE.