Skip to content

Generators Reference

Complete reference for Plutonium CLI generators.

Overview

Plutonium provides generators for scaffolding:

  • Resources (model, controller, definition, policy)
  • Packages (feature and portal)
  • Authentication (Rodauth)
  • Assets and configuration

Resource Generators

pu:res:scaffold

Generate a complete resource with model, controller, definition, and policy.

bash
rails generate pu:res:scaffold Post title:string body:text published:boolean

Options

OptionDescription
--dest NAMEDestination package (prompted if not provided)
--no-modelSkip model generation (use for existing models)

Examples

bash
# Basic resource (prompts for destination)
rails generate pu:res:scaffold Post title:string body:text

# Import existing model (no attributes needed)
rails generate pu:res:scaffold Post

# With associations
rails generate pu:res:scaffold Comment body:text user:belongs_to post:belongs_to

# Skip model generation for existing models
rails generate pu:res:scaffold Post title:string --no-model

Field Types

TypeExampleDatabase Type
stringtitle:stringstring
textbody:texttext
integercount:integerinteger
floatrating:floatfloat
decimalprice:decimaldecimal
booleanactive:booleanboolean
datepublished_on:datedate
datetimepublished_at:datetimedatetime
timestarts_at:timetime
jsonmetadata:jsonjson
belongs_touser:belongs_toreferences
referencesuser:referencesreferences
rich_textcontent:rich_textAction Text

Nullable Fields

Append ? to make a field nullable:

bash
rails generate pu:res:scaffold Post title:string description:text?

Money Fields (has_cents)

Integer fields ending in _cents are treated as money fields:

bash
rails generate pu:res:scaffold Product name:string price_cents:integer

pu:res:conn

Connect a resource to a portal.

bash
rails generate pu:res:conn Post --dest=admin_portal

Creates portal-specific controller, definition, and policy (if needed) and registers the resource in the portal routes.

Examples

bash
# Connect a resource to a portal
rails generate pu:res:conn Post --dest=admin_portal

# Connect multiple resources
rails generate pu:res:conn Post Comment --dest=admin_portal

# Interactive mode (prompts for resource and portal)
rails generate pu:res:conn

Nested Resources

Nesting is automatic based on belongs_to associations. If Comment belongs to Post, nested routes are created automatically when both are registered in the same portal.

pu:res:model

Generate just a model with migration.

bash
rails generate pu:res:model Post title:string body:text

Package Generators

pu:pkg:package

Generate a feature package for organizing domain code.

bash
rails generate pu:pkg:package blogging

Generated Structure

packages/blogging/
├── app/
│   ├── controllers/blogging/
│   ├── definitions/blogging/
│   ├── interactions/blogging/
│   ├── models/blogging/
│   ├── policies/blogging/
│   └── views/blogging/
└── lib/
    └── engine.rb

pu:pkg:portal

Generate a portal package (web interface).

bash
rails generate pu:pkg:portal admin

Options

OptionDescription
--auth NAMERodauth account to authenticate with (e.g., --auth=user)
--publicGrant public access (no authentication)
--byoBring your own authentication

Examples

bash
# Interactive mode (prompts for auth choice)
rails generate pu:pkg:portal admin

# Non-interactive with Rodauth account
rails generate pu:pkg:portal admin --auth=admin

# Public access portal
rails generate pu:pkg:portal api --public

# Bring your own authentication
rails generate pu:pkg:portal custom --byo

Without flags, the generator prompts for authentication configuration:

  • Select a Rodauth account (if Rodauth is installed)
  • Grant public access (no authentication)
  • Bring your own auth (configure manually)

Generated Structure

packages/admin_portal/
├── app/
│   ├── controllers/admin_portal/
│   │   ├── concerns/controller.rb
│   │   ├── plutonium_controller.rb
│   │   └── dashboard_controller.rb
│   ├── definitions/admin_portal/
│   ├── policies/admin_portal/
│   └── views/admin_portal/
├── config/
│   └── routes.rb
└── lib/
    └── engine.rb

Authentication Generators

pu:rodauth:install

Install Rodauth authentication framework.

bash
rails generate pu:rodauth:install

This creates:

  • app/rodauth/rodauth_app.rb - Main Roda app
  • app/rodauth/rodauth_plugin.rb - Base plugin
  • app/controllers/rodauth_controller.rb - Base controller
  • config/initializers/rodauth.rb - Configuration
  • PostgreSQL extension migration (if using PostgreSQL)

pu:rodauth:account

Generate a user account with configurable features.

bash
rails generate pu:rodauth:account user

Options

OptionDescription
--primaryMark as primary account (no URL prefix)
--no-mailsSkip mailer setup
--argon2Use Argon2 for password hashing
--api_onlyConfigure for JSON API only
--defaultsEnable default features (default: true)
--kitchen_sinkEnable ALL features

Feature Options

Default features (enabled with --defaults):

FeatureDescription
--loginLogin functionality
--logoutLogout functionality
--remember"Remember me" cookies
--create_accountUser registration
--verify_accountEmail verification
--verify_account_grace_periodGrace period for verification
--reset_passwordPassword reset via email
--reset_password_notifyNotify on password reset
--change_loginChange email address
--verify_login_changeVerify email changes
--change_passwordChange password
--change_password_notifyNotify on password change
--case_insensitive_loginCase insensitive email
--internal_requestInternal request support

Additional features:

FeatureDescription
--otpTOTP two-factor auth
--recovery_codesRecovery codes for 2FA
--sms_codesSMS-based 2FA
--webauthnWebAuthn/passkeys
--lockoutAccount lockout
--active_sessionsTrack active sessions
--audit_loggingLog auth events
--close_accountAllow account deletion
--email_authPasswordless email login
--jwtJWT authentication
--jwt_refreshJWT refresh tokens
--password_expirationForce password changes
--disallow_password_reusePrevent password reuse

Examples

bash
# Basic account with defaults
rails generate pu:rodauth:account user

# Primary account (no /users prefix)
rails generate pu:rodauth:account user --primary

# With 2FA features
rails generate pu:rodauth:account user --otp --recovery_codes

# API-only with JWT
rails generate pu:rodauth:account api_user --api_only --jwt --jwt_refresh

# Everything enabled
rails generate pu:rodauth:account user --kitchen_sink

pu:rodauth:admin

Generate an admin account with enhanced security.

bash
rails generate pu:rodauth:admin admin

Pre-configured with:

  • Multi-phase login (email first, then password)
  • TOTP two-factor authentication (required)
  • Recovery codes
  • Account lockout
  • Active sessions tracking
  • Audit logging
  • No public signup

Creates a rake task for account creation:

bash
rails rodauth_admin:create[admin@example.com,password123]

pu:rodauth:customer

Generate a customer account with entity (organization) association.

bash
rails generate pu:rodauth:customer customer
rails generate pu:rodauth:customer customer --entity=Organization

Creates:

  • Customer account model
  • Entity model (default: "Entity")
  • Membership join model
  • Has-many-through associations

Core Generators

pu:core:install

Install Plutonium in an existing Rails app.

bash
rails generate pu:core:install

Creates:

  • config/initializers/plutonium.rb - Configuration
  • Base classes (ResourceRecord, ResourcePolicy, etc.)
  • Package loading configuration

pu:core:assets

Setup custom TailwindCSS and Stimulus assets.

bash
rails generate pu:core:assets

This:

  1. Installs npm packages (@radioactive-labs/plutonium, TailwindCSS plugins)
  2. Creates tailwind.config.js extending Plutonium's config
  3. Imports Plutonium CSS into your stylesheet
  4. Registers Plutonium's Stimulus controllers
  5. Updates Plutonium config to use your assets

Eject Generators

pu:eject:layout

Eject layout views for customization.

bash
rails generate pu:eject:layout

Copies layout files to your portal for customization.

pu:eject:shell

Eject shell components (sidebar, header).

bash
rails generate pu:eject:shell

Common Patterns

Full Application Setup

bash
# Create Rails app with Plutonium template
rails new myapp -a propshaft -j esbuild -c tailwind \
  -m https://radioactive-labs.github.io/plutonium-core/templates/plutonium.rb

# Or add to existing app
rails generate pu:core:install
rails generate pu:rodauth:install

# Create admin account type
rails generate pu:rodauth:admin admin

# Create resources
rails generate pu:res:scaffold Post title:string body:text
rails generate pu:res:scaffold Comment body:text post:belongs_to

# Create portal (prompts for auth)
rails generate pu:pkg:portal admin

# Connect resources
rails generate pu:res:conn Post Comment --dest=admin_portal

# Run migrations
rails db:migrate

# Create admin account
rails rodauth_admin:create[admin@example.com,password123]

Adding a New Resource

bash
# Generate the resource
rails generate pu:res:scaffold Product name:string price_cents:integer

# Connect to portal
rails generate pu:res:conn Product --dest=admin_portal

# Run migration
rails db:migrate

Adding a New Portal

bash
# Create customer account type
rails generate pu:rodauth:customer customer

# Create portal
rails generate pu:pkg:portal customer

# Connect resources
rails generate pu:res:conn Order --dest=customer_portal

# Run migrations
rails db:migrate

Undoing Generators

bash
rails destroy pu:res:scaffold Post
rails destroy pu:pkg:portal admin

Troubleshooting

Generator Not Found

Ensure Plutonium is installed:

ruby
# Gemfile
gem "plutonium"

Package Not Found

Generators run from Rails root. Package names are case-sensitive.

Migration Already Exists

If a migration with the same timestamp exists, wait a second and retry.

Released under the MIT License.