Madmin alternative

Madmin alternative: Avo vs Madmin for your Rails admin

Madmin and Avo both put your admin in your Rails repo as Ruby classes. Here's where each one fits, and when you should keep Madmin.

Madmin is Chris Oliver's admin gem, the one that ships with Jumpstart Pro. It's free, it feels like Rails scaffolds, and it gets a lot right. If you're looking for a Madmin alternative, it's usually because your admin has turned into the place your team runs the business from, and you're now writing actions, permissions and dashboards by hand. That's the job Avo is built for.

credit where it's due

What Madmin gets right

Madmin is a well-made gem with an active maintainer. Before you replace it, here's what you'd be giving up.

It's free, all of it

Madmin is MIT-licensed with no paid tier. Search, scopes, column filters, nested forms, direct uploads and dark mode all come in the one gem.

It feels like Rails scaffolds

Its stated goal is "less DSL". Resources are short classes, and when a screen needs to change you generate its ERB views into your app and edit them like any other view. If your team thinks in scaffolds, there's very little to learn.

It's already in your Jumpstart Pro app

Jumpstart Pro builds its admin area on Madmin, with access limited to staff users, a Login As User button and a dashboard of revenue, users and active subscriptions. If you bought Jumpstart Pro, you have a working admin today, maintained by the same person who maintains your template.

It's light and it's moving fast

Madmin runs on Turbo, Stimulus and import maps with no Node or build step, on Propshaft or Sprockets. Version 3.0 shipped on September 30, 2026, and 3.4.1 followed on November 2, adding read-only resources and pagination that skips the row count on very large tables.

the real difference

Same repo, different amount already built

This isn't a hosted tool against a gem. Both are Rails engines, both are configured in Ruby you review in pull requests, and both read your own models. The difference is what happens after the CRUD screens: with Madmin you write the rest yourself, and with Avo your team starts from parts that are already built, documented and maintained.

Madmin

The CRUD screens, then your code

  • Member and collection actions are buttons that link to routes and controllers you write.
  • Authentication is a before_action you fill in. Authorization is yours to wire up.
  • The stock dashboard is a placeholder page for you to fill in. Jumpstart Pro fills it with revenue, users and active subscriptions.

Avo

The CRUD screens, plus what comes next

  • Actions are classes with their own form fields and a confirmation step, run on one record or many.
  • Pundit policies decide which records, fields and actions each person sees.
  • Dashboards with cards and charts, from the Dashboards add-on.

where the time goes

The scaffold is the easy part. Your team lives in what comes after it.

Refunds, approvals, the support person who should see accounts but not billing, the weekly numbers someone keeps asking for. On Madmin each of those is a controller, a view and a policy you write and maintain. On Avo it's a short Ruby class on a foundation already running in hundreds of apps.

where Avo comes in

What your team gets with Avo

You add the gem and write resources in app/avo, the same way you'd write them in app/madmin. Then the parts you'd otherwise build are a few lines each.

  1. 01

    Actions your team can run on their own

    Refund a charge, approve a batch of orders, resend an invite. An action asks for the inputs it needs, confirms before it runs, and works on one record or a selection. No extra route or controller.

  2. 02

    Permissions written once

    With the Authorization add-on, a Pundit policy decides which rows a person loads, which fields they see and which actions they can run. The same rule holds in the API and the MCP server, so your agents work inside the limits your team does.

  3. 03

    Finding the record in seconds

    Search and filters come with Avo. Dynamic Filters let support combine conditions on any column, and Global Search finds a customer from one box, across every resource.

  4. 04

    Agents that already know it

    More than 30 agent skills ship inside the gem, pinned to the version you run, and every feature is documented on a versioned docs site. Your coding agent writes a short resource instead of a stack of controllers you then have to review.

Here's a refund action. It's the whole thing: the form field, the confirmation and the bulk run come with it.

# app/avo/actions/refund_charge.rb
class Avo::Actions::RefundCharge < Avo::BaseAction
  self.name = "Refund charge"
  self.message = "Refund the selected charges?"

  def fields
    field :reason, as: :textarea
  end

  def handle(query:, fields:, **)
    query.each { |charge| charge.refund!(reason: fields[:reason]) }
    succeed "Refunded #{query.count} charges"
  end
end

side by side

Avo vs Madmin, in one view

Madmin as of version 3.4.1 (November 2026).
Madmin Avo
Price Free, MIT-licensed, every feature Community is free; paid plans priced per app with unlimited users
Where the admin is defined Ruby resource classes in your repo Ruby resource classes in your repo
Changing a screen Generate its ERB views into your app and edit them Options in the resource first, then eject a view or component when you need to
Fields 25 built-in types, including rich text, JSON, arrays and nested forms 30+ types, including badges, key-value, tags, files and rich text
Search and filters Search, scopes and column filters on index pages Search and filters built in; Dynamic Filters and Global Search add-ons
Actions Buttons linking to routes and controllers you write Action classes with form fields, confirmation and bulk runs
Authorization A before_action you fill in; wire up Pundit yourself Pundit policies for records, fields and actions, with the Authorization add-on
Dashboards A placeholder page you build (Jumpstart Pro ships one with revenue metrics) Cards and charts with the Dashboards add-on
API, MCP, CLI Not part of Madmin Add-ons that follow the same policies as the UI
Docs README and guides in the GitHub repo Versioned docs site, plus agent skills in the gem
Jumpstart Pro The built-in admin A ready-made blueprint of Avo resources

to be fair

When we'd point you to Madmin instead

Avo isn't the right call for every app. Keep Madmin, or pick it, when:

You're on Jumpstart Pro and the admin is mostly for you

If the admin is where you look up a user, log in as them and check revenue, the Madmin admin that came with your template already does that. Moving it buys you little.

The budget is zero and the needs are CRUD

Madmin gives you filters, scopes and nested forms for free. Avo Community is free too, but dashboards, dynamic filters and authorization are paid.

You want to own every view

If your plan is to generate the views and rewrite them in your own markup, Madmin's plain ERB gets out of your way. Avo's value is in the parts you don't have to write.

Your app is tiny and will stay that way

A handful of models that only developers touch doesn't need actions, policies or dashboards. Madmin is the smaller dependency.

Once support, ops or finance work in the admin every day, the trade flips. On Jumpstart Pro you don't have to choose all at once: start from the Jumpstart Pro blueprint, mount Avo beside Madmin, and move one resource at a time.

Frequently asked questions

Is Avo a good Madmin alternative?
Yes, when your admin is growing past CRUD. Both keep the admin in your Rails repo as Ruby classes. Avo adds what you'd otherwise write yourself on Madmin: actions with forms and confirmation, Pundit-based permissions on records, fields and actions, dashboards, and an API and MCP server that follow the same rules. For a small admin only developers use, Madmin is a fine choice.
Is Madmin free?
Yes. Madmin is MIT-licensed and has no paid tier. Avo Community is free and open source too; Avo's paid plans add features like dashboards, dynamic filters and authorization, and are priced per app with unlimited users. See what each plan includes.
I'm on Jumpstart Pro. Should I replace Madmin?
Not by default. Jumpstart Pro's admin is built on Madmin and works well for looking up and managing users. Switch when your team needs actions, permissions or reporting in the admin. The Jumpstart Pro blueprint gives you Avo resources for accounts, subscriptions and charges, plus a revenue dashboard, so you start from a working setup.
Can Madmin and Avo run in the same app?
Yes. Each lives under its own path in your routes, so you can add Avo next to Madmin, move one resource at a time, and remove Madmin when nothing uses it. We've written up that approach in how to rewrite your admin.
Does Madmin have authorization?
Madmin leaves it to you. Its docs show authentication through a before_action, a Devise authenticated route block or HTTP basic auth, and you can hook Pundit into its controllers yourself. Avo's Authorization add-on applies Pundit policies to records, fields and actions out of the box.
Is Madmin still maintained?
Yes, actively. Version 3.0 shipped on September 30, 2026 with filters, dark mode and built-in pagination, and 3.4.1 followed on November 2, 2026. Pace isn't a reason to leave Madmin; scope is.
How do I move from Madmin to Avo?
The shapes map closely. A Madmin resource becomes an Avo resource, each attribute becomes a field, and each member action becomes an Avo action class. Views you generated and edited are the part to redo: start with Avo's defaults and eject only what still needs to look different.

Give your team the admin after the scaffold.

Start free, write your first resource in Ruby, and add actions, permissions and dashboards when your team asks for them. Priced per app, with unlimited users.