Server-driven admin for the Ash framework

Your resource in.
A whole admin out.

Mishka Gervaz reads an Ash resource and generates the Phoenix LiveView admin (tables, forms and everything around them) from a short DSL. No hand-written UI.

input
△ Ash resource
generates
gervaz
live admin
Ash-native Swappable UI Multi-tenant 3,600+ tests
Live generator

Set the DSL. Watch the admin build.

Flip a knob and the DSL on the left and the admin on the right update together.

form layout
pagination
my_app/accounts/user.ex
mishka_gervaz do
  table do # + identity: name, route
    columns do
      
    end
    pagination type: 
  end
  form do # + uploads: upload :avatar
    fields do
      field :name, :text, required: true
      field :role, :select
      field :avatar, :upload
    end
    layout do
      mode 
    end
  end
end
generated · /admin/users
Name * · :text
Ada Lovelace
Role · :select
Admin ▾
Avatar · :upload
⬆ Click to upload or drag and drop
Name StatusBalance
A. Lovelace active 4,820
C. Babbage pending 920
G. Boole archived 38
Load More
How it works

From resource to admin in three moves.

01

Point at a resource

Add the DSL to any Ash resource. Gervaz reads your attributes, actions and relationships.

02

Declare tables & forms

A few lines describe columns, filters, fields and layout. Field types and options are inferred from Ash.

03

Get a live admin

Mount its LiveComponent in a LiveView: sortable, filterable, validated, uploads and real-time.

Tables

Columns, sort, filters, pagination, bulk & row actions, archive, all declarative.

Forms

22 field types: text, select, upload, relation, nested maps, combobox and more.

Wizards & tabs

Split a form into steps, wizard or tabs mode, with one layout block.

Validation

Driven by your Ash actions. Field-level errors surface automatically on change.

Real-time

Wire pubsub and rows update live. No manual subscriptions, no polling.

Uploads

Drop-zone or button, multi-file, auto-namespaced, existing-file management.

URL state

Filters, sort, page and search load from the URL; set mode :bidirectional and copy-link just works.

Overrides

Change one callback, wire a module, or swap a whole subsystem. No fork.

Pluggable UI

Same DSL, any design system.

The render layer is a swappable adapter. Tailwind ships in, Mishka Chelekom drops in, your own kit slots in. Mix them per resource or per component.

Multi-tenant

One DSL, two actors.

The same admin drives a different Ash action depending on who's signed in. Master users act across every tenant with restore & soft-archive rights; tenant users see only their own scope. Toggle the actor →

↳ resolved actions ·
:read
:update
:archive
:restore
Honest comparison

Why Mishka Gervaz for Ash admin panels.

Mishka Gervaz turns an Ash resource into a Phoenix LiveView admin: tables, filters and forms from one DSL. Here is how it compares with LiveAdmin, Backpex and Cinder.

Feature Gervaz LiveAdmin Backpex Cinder
Native Ash support ✓ ✕ ~ ✓
DSL on the resource ✓ ✕ ~ ✕
Tables + create/edit forms ✓ ✓ ✓ ✕
Filters beyond search ✓ ✕ ✓ ✓
Bulk actions ✓ ✓ ✓ ✓
Wizard / tabbed forms ✓ ✕ ✕ ✕
Multi-tenancy ✓ ✓ ~ ✓
Live updates (PubSub) ✓ ~ ✓ ~
Swappable UI components ✓ ~ ~ ~

✓ built in · ~ partial, or you wire it yourself · ✕ not provided. Checked in October 2026 against the READMEs and docs of LiveAdmin, Backpex (Ash through the community ash_backpex package) and Cinder. None of the four has a stable 1.0 release yet.

Set your first admin page.

+ {:mishka_gervaz, "~> 0.0.1"}
v0.0.0 · API may shift before 1.0 · not yet recommended for production
Mishka newsletter

New patterns & releases, once a month.

Release notes, DSL recipes and product updates from the team building Mishka. No spam, unsubscribe anytime.

✓ once a month✓ no spam