Quick Start

Get a full admin panel running in 6 steps.


Prerequisites

IronAdmin uses Tailwind CSS for all styling and requires tailwindcss-rails >= 4.3. Ensure your application has a supported version installed:

bundle add tailwindcss-rails --version ">= 4.3"
rails tailwindcss:install

1. Install

bundle add iron_admin
rails generate iron_admin:install

2. Configure Authentication

# config/initializers/iron_admin.rb
IronAdmin.configure do |config|
  config.title = "My App Admin"

  config.authenticate do |controller|
    user = User.find_by(id: controller.session[:user_id])
    controller.redirect_to "/login" unless user&.admin?
  end

  config.current_user do |controller|
    User.find_by(id: controller.session[:user_id])
  end
end

3. Generate Resources

rails generate iron_admin:resource User
rails generate iron_admin:resource Product
rails generate iron_admin:resource Order

IronAdmin infers all fields from your database schema automatically. No configuration needed for basic CRUD.

4. Customize a Resource

# app/iron_admin/resources/user_resource.rb
module IronAdmin
  module Resources
    class UserResource < IronAdmin::Resource
      field :role, type: :badge, colors: { admin: :purple, user: :blue }
      field :email, type: :text

      searchable :name, :email
      filter :role, type: :select, options: User.roles.keys
      filter :created_at, type: :date_range

      scope :admins, -> { where(role: :admin) }
      scope :recent, -> { where("created_at > ?", 7.days.ago) }

      index_fields :id, :name, :email, :role, :created_at
      form_fields :name, :email, :role

      menu priority: 1, icon: "users", group: "People"

      action :lock, icon: "lock-closed", confirm: true do |record|
        record.update!(locked_at: Time.current)
      end
    end
  end
end

See the Resource DSL guide for the full set of options.

5. Create a Dashboard

# app/iron_admin/dashboards/admin_dashboard.rb
module IronAdmin
  module Dashboards
    class AdminDashboard < IronAdmin::Dashboard
      metric :total_users, format: :number do
        User.count
      end

      metric :monthly_revenue, format: :currency do
        Payment.where("created_at > ?", 30.days.ago).sum(:amount)
      end

      recent :users, limit: 5, scope: -> { order(created_at: :desc) }
      recent :payments, limit: 5
    end
  end
end

6. Build CSS and Start

rails tailwindcss:build
bin/rails server

Visit /admin and your admin panel is ready.