TL;DR
Avo is Rails' answer to Django Admin — but dramatically more powerful. It auto-generates admin UI from your ActiveRecord models with filtering, search, custom actions, and dashboards. At $149-$399/year, it's a Rails SaaS component, not a full boilerplate. Combine Avo with a Rails SaaS foundation and you have one of the most productive admin panel setups available. Best for Rails teams who appreciate convention over configuration.
What Avo Is
Avo is a Rails engine (gem) that adds a powerful admin panel to any Rails app:
# Gemfile
gem 'avo'
# config/initializers/avo.rb
Avo.configure do |config|
config.root_path = '/avo'
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(:current_user)
config.authorization_client_class = "AvoAuthorization"
end
Resource-Based Architecture
Avo resources map to ActiveRecord models:
# app/avo/resources/user_resource.rb
class UserResource < Avo::BaseResource
self.title = :email
self.search_query = -> {
scope.ransack(email_cont: params[:q], name_cont: params[:q], m: 'or').result
}
field :id, as: :id
field :name, as: :text
field :email, as: :email
field :created_at, as: :date_time, sortable: true
field :subscription_status,
as: :select,
options: { active: 'Active', inactive: 'Inactive', trialing: 'Trialing' }
# Computed field
field :mrr, as: :money, currency: :usd, only_on: [:show, :index] do
record.subscription&.monthly_revenue || 0
end
filter Avo::Filters::SelectFilter, name: 'subscription_status'
action Avo::Actions::SendWelcomeEmail
action Avo::Actions::CancelSubscription
end
This generates a fully functional admin UI: list view with search/filter, detail view, create/edit forms.
Custom Actions
# app/avo/actions/cancel_subscription.rb
class Avo::Actions::CancelSubscription < Avo::BaseAction
self.name = 'Cancel Subscription'
self.confirm_button_label = 'Yes, cancel'
self.destructive = true
field :reason, as: :textarea, placeholder: 'Cancellation reason'
def handle(query:, fields:, current_user:, resource:)
query.each do |user|
if user.subscription&.active?
user.subscription.cancel!(
reason: fields[:reason],
canceled_by: current_user.email
)
# Log audit trail
AuditLog.create!(
actor: current_user,
target: user,
action: 'subscription.canceled',
metadata: { reason: fields[:reason] }
)
end
end
succeed 'Subscriptions canceled successfully.'
end
end
Dashboard and Metrics
# app/avo/dashboards/main_dashboard.rb
class MainDashboard < Avo::Dashboards::BaseDashboard
self.id = 'main'
self.name = 'Overview'
card Avo::Cards::MrrCard
card Avo::Cards::ActiveSubscribersCard
card Avo::Cards::ChurnRateCard
card Avo::Cards::RevenueChartCard, cols: 2
end
# A metric card
class Avo::Cards::MrrCard < Avo::Dashboards::MetricCard
self.name = 'Monthly Recurring Revenue'
self.prefix = '$'
self.refresh_every = 5.minutes
def value
Subscription.active.sum(:monthly_revenue) / 100.0
end
def previous_value
# MRR from same time last month for trend comparison
Subscription.where(
"created_at <= ?", 1.month.ago
).active_at(1.month.ago).sum(:monthly_revenue) / 100.0
end
end
Avo in a Rails SaaS Stack
A typical Rails SaaS setup with Avo:
Rails 7.1
├── Authentication: Devise + OmniAuth
├── Billing: pay gem (Stripe wrapper)
├── Admin: Avo
├── Background Jobs: Sidekiq
├── Email: ActionMailer + Postmark
├── Database: PostgreSQL + ActiveRecord
├── Frontend: Hotwire (Turbo + Stimulus) or React/Inertia.js
└── Deployment: Render, Fly.io, or Heroku
The pay gem provides Stripe integration that integrates cleanly with Avo:
# With the pay gem
class User < ApplicationRecord
pay_customer default_payment_processor: :stripe
def active_subscriber?
pay_subscriptions.active.exists?
end
end
Rails vs Node.js for SaaS in 2026
| Factor | Rails + Avo | Next.js + Makerkit |
|---|---|---|
| Admin panel | Avo (best in class) | Makerkit admin (good) |
| Convention | Very high | Moderate |
| Type safety | Ruby types (Sorbet optional) | TypeScript |
| Performance | Excellent | Excellent |
| Hiring | Rails devs (smaller pool) | JS devs (large pool) |
| Deployment | Server required | Vercel/serverless |
| Background jobs | Sidekiq (battle-tested) | Inngest/BullMQ |
| i18n | Built-in Rails i18n | External gems/packages |
Rails' secret weapon: convention. A Rails senior developer can navigate any Rails app. There's no "which state manager did they choose?" — it's always whatever the Rails convention is.
Limitations
- Avo cost: $149-399/year subscription model
- Rails niche: Smaller 2026 ecosystem vs JavaScript
- Serverless: Rails requires persistent server (no Vercel-style serverless)
- Not a complete SaaS boilerplate: Avo is a component, not a full starter
Who Should Use Avo + Rails
Good fit:
- Existing Rails shops building SaaS
- Teams that need a best-in-class admin panel
- SaaS products where the admin UI is complex (many custom actions, dashboards)
- Founders with Ruby/Rails backgrounds
Bad fit:
- New projects choosing a stack (Node.js ecosystem is larger)
- Teams needing serverless deployment
- Products where TypeScript end-to-end type safety is a priority
Final Verdict
Rating: 4/5 for Rails SaaS
Avo is the best admin framework in the Rails ecosystem — arguably the best in any ecosystem for convention-over-configuration admin UIs. Combined with a solid Rails SaaS foundation (Devise, pay gem, Sidekiq), it enables remarkably fast admin panel development. The trade-off is the annual cost and Rails' smaller 2026 ecosystem vs JavaScript alternatives.
Getting Started with Avo
# Add to Gemfile
gem 'avo', '>= 3.0'
gem 'pay' # Stripe wrapper
bundle install
rails avo:install # Generates initializer and routes
# Generate a resource for your User model
rails generate avo:resource User
rails generate avo:resource Subscription
The generated resource files are the primary customization point — add fields, filters, and actions to match your data model.
# Configure authorization (who can access admin)
# config/initializers/avo.rb
Avo.configure do |config|
config.authenticate_with do
warden.authenticate! scope: :user
warden.user.admin? # Only admins see the admin panel
end
config.current_user_method(:current_user)
config.root_path = '/admin'
end
Using Avo with the Pay Gem
The pay gem provides Stripe integration that integrates cleanly with Avo resources:
# Gemfile additions
gem 'pay'
gem 'stripe'
# models/user.rb
class User < ApplicationRecord
pay_customer default_payment_processor: :stripe
# Access billing directly on user
delegate :active_subscription?, :on_trial?, to: :payment_processor
end
# app/avo/resources/user_resource.rb — billing fields
class UserResource < Avo::BaseResource
field :id, as: :id
field :email, as: :email
field :subscription_status, as: :badge,
options: { active: :success, trialing: :info, canceled: :danger } do
record.payment_processor.subscription&.status || 'none'
end
field :mrr, as: :number, prefix: '$', suffix: '/mo' do
record.payment_processor.subscription&.plan&.amount&./ 100 || 0
end
action CancelSubscriptionAction
action ExtendTrialAction
end
Avo vs ActiveAdmin vs RailsAdmin
All three are Rails admin frameworks. The key differences in 2026:
| Avo | ActiveAdmin | RailsAdmin | |
|---|---|---|---|
| Pricing | $149-399/yr | Free | Free |
| DSL | Ruby classes | DSL blocks | Config hash |
| UI | Modern React | JQuery/old | Bootstrap |
| Charts | ✅ Built-in | ❌ | ❌ |
| Custom actions | ✅ | ✅ | Limited |
| Maintenance | Active | Maintained | Slow |
| Complexity | Medium | Low | Low |
Avo's modern UI and built-in dashboard cards justify the cost for products where the admin panel is actively used by non-technical team members (support staff, founders). For internal developer tools where UI polish doesn't matter, ActiveAdmin's free tier is sufficient.
Key Takeaways
- Avo is the best Rails admin panel framework — auto-generates CRUD UI from ActiveRecord models with custom fields, actions, and dashboards
- The resource-based architecture (one Ruby class per model) is clean and scales well to many models
- At $149-399/year, Avo is worth the cost for products where the admin panel is used daily by non-developers
- Combine Avo with the
paygem (Stripe) and Sidekiq (background jobs) for a complete Rails SaaS stack - Rails' convention means a Rails senior developer can navigate any Avo-based admin without reading docs
Avo's Licensing Model
Avo uses a subscription license ($149/year Community, $249/year Business, $399/year Enterprise). The license covers the gem and admin UI — it's per-project, not per-developer. A team of 10 building one SaaS pays $149-399/year, not $1,490/year.
The pricing tiers differ primarily in features:
- Community: Core CRUD, resources, basic dashboards, custom fields
- Business: Nested resources, custom tools, enhanced customization
- Enterprise: White-labeling, priority support, advanced RBAC
Most SaaS products need Community or Business tier. Enterprise is for platforms reselling Avo-powered admin interfaces to their clients.
Compared to building a custom admin from scratch (2-3 weeks of development time), even the $399/year Enterprise tier is cost-effective in the first year. The value calculation is clearer than most annual SaaS subscriptions.
Rails in 2026: The State of the Stack
Rails' market share has declined relative to Node.js and Python, but the developer community remains active and the framework itself continues improving rapidly. Rails 7.1 and 7.2 brought Importmap, Hotwire, and Propshaft — reducing the need for JavaScript bundlers while keeping the productivity advantages.
For new greenfield SaaS in 2026: if your team knows Rails, there's no compelling technical reason to switch to Node.js. Rails' convention advantage, the mature gems ecosystem (Devise, Pay, Sidekiq, Avo), and the active community support make it a valid choice for founder-led startups and small engineering teams.
The hiring constraint is real: there are fewer Rails developers than JavaScript developers in the 2026 job market. For teams that anticipate significant hiring, this is a legitimate consideration when choosing a stack.
When Avo Is Not the Right Tool
Avo's per-project annual subscription means the cost calculation changes depending on how many products you're building. A solo founder maintaining six side projects pays $900+/year at the Community tier. For most of those projects, a simpler admin approach — even a basic HTML/ERB admin page — is more practical. Avo earns its cost when the admin panel is actively used daily by non-technical team members.
Avo also has a learning curve that's steeper than ActiveAdmin. The resource-based DSL is clean once internalized, but the first week of customizing fields, adding computed columns, and wiring up custom actions takes real time. Teams that need a working admin panel in three days should evaluate whether the learning investment is worth it compared to the free alternatives.
For external-facing admin portals — where customers manage their own data in an Avo-powered interface — the Business or Enterprise tiers are required. That's $249-$399/year. Rails' Administrate gem (free) can cover similar territory for product teams willing to write more Ruby code.
Avo's Roadmap and Ecosystem
Avo 3.x introduced panels with a more component-based architecture and improved performance on large datasets. The development team has maintained consistent releases, with meaningful features added in each minor version. Unlike Wave in the PHP space, Avo has demonstrated the kind of active development trajectory that justifies a recurring subscription.
The plugin marketplace has grown to include calendar views, map widgets, kanban boards, and import/export tools. Most are open source, developed by the community. This ecosystem is dramatically smaller than Filament's plugin ecosystem for Laravel, but the quality of core Avo plugins is generally high.
For teams evaluating Rails vs JavaScript for a new SaaS in 2026, the admin panel question is one where Rails genuinely wins. Avo's combination of auto-generated CRUD, custom actions, and dashboard cards means a small Rails team can build admin functionality in hours that would take days in a Next.js + React Admin setup. If your business operations are admin-heavy, this matters.
Deploying Rails + Avo in 2026
Rails requires server infrastructure — no Vercel-equivalent for PHP-style deployment. The practical options:
Fly.io has become the most popular Rails deployment platform in 2026. fly launch in a Rails project detects the framework and configures a Dockerfile automatically. Fly handles scaling, certificates, and persistent storage. The free tier supports small Rails apps; paid starts at $3/month per VM.
Render offers a simpler setup for teams unfamiliar with Docker. Connect a GitHub repo, select the Ruby environment, and Render builds and deploys automatically. Background workers (Sidekiq) run as separate services on Render. Slightly more expensive than Fly.io at similar specs.
Kamal (formerly MRSK, developed by the Rails team) has emerged as the serious option for teams who want to own their server infrastructure. Kamal manages zero-downtime deployments to any Linux server via Docker. No platform dependency — your app runs on a $6/month Hetzner VPS with full control. If you're already comfortable with server administration, Kamal is the most cost-effective Rails deployment approach at scale.
Compare Rails and other framework boilerplates in the StarterPick directory.
Browse best SaaS boilerplates for 2026 for the full comparison across all languages and frameworks.
See the best boilerplate admin panel comparison for how Avo stacks up against Next.js admin solutions.
Review best FilamentPHP SaaS boilerplates for the equivalent PHP admin panel framework.