Iommi – your first pick for a Django power chord

20 hours ago 1

iommi is a productivity toolkit for Django that lets you ship complex UIs fast: forms, tables, pages, and an admin - without the boilerplate. Compose powerful parts, keep your code tiny, and stay in Python.

From zero to CRUD in ~10 lines

from iommi import Table, Form, Page from .models import Album class AlbumPage(Page): class Meta: title = 'Albums' create_album = Form.create(auto__model=Album) albums = Table(auto__model=Album)

Auto forms + powerful tables on one page. No handwritten templates needed. No namespace conflicts, iommi handles it automagically.

Production‑ready tables

Composable building blocks

Batteries‑included widgets

Full admin in your app

Forms that scale

Familiar API with smarter defaults than Django forms. Great HTML by default, integrates with your design system, and handles complexity without glue code.

Auto‑generate from models with include/exclude

Foreign key widgets with async search

Cross‑object field paths (double‑underscore style)

Tables you won't outgrow

Sorting, filtering, pagination, bulk actions - configured in Python. Deliver fast without drowning in template code.

Server‑side filters from simple Python

Column formatting & actions per row

Easily add CSV/Excel export

Pages & admin, your way

Compose pages declaratively and ship a polished admin that lives inside your app - no separate project, no styling mismatch.

Drop‑in admin using your models

Override anything with clean hooks

Sensible, accessible defaults

Ship features, not plumbing

iommi removes repetitive glue code so you can think in "what" not "how". Declare intent in Python and get great UX by default.

10x to 100x
Less code

<10
Lines to CRUD

Zero
Boilerplate

Zero boilerplate even for very deep customization

Example: Set the initial filter of a table, 5 levels of nesting deep. Just clean configuration, no need to create 5 classes.

Table( auto__model=Album, columns__artist__filter__include=True, query__form__fields__artist__initial= lambda **_: Artist.objects.get(name='Dio'), )

Use as‑is or customize with clean hooks. Everything is overrideable.

Feature highlight: powerful Table filters

class AlbumTable(Table): class Meta: auto__model = Album columns__artist__filter__include = True columns__year__filter__include = True bulk__delete__include = True

Turn on filters and bulk actions with a few lines. No template hacks needed.

What developers say

"I am now in love with iommi forms 😄"

"By the time I'm done with this project, it will be impossible for me not to use iommi in future projects"

"btw @boxed thanks for your amazing work! iommi is a wonderful framework 😄"

"Great lib, I use it on multiple projects already. This is the proper way to make forms, tables with pagination and filtering, and more."

Install in minutes

Add iommi to your project and start declaring UIs in Python. Works with your existing Django stack.

pip install iommi INSTALLED_APPS = [ ..., 'iommi', ] MIDDLEWARE = [ ..., 'iommi.middleware',, ] from iommi import Table, Form, Page class AlbumPage(Page): class Meta: title = 'Albums' create_album = Form.create(auto__model=Album) albums = Table(auto__model=Album) urlpatterns = [ path('album/', AlbumPage().as_view(), ]

Why teams choose iommi

  • Declare intent, get great UX by default
  • Powerful tables, forms, and pages without templates
  • Override anything: clean, well‑documented hooks
  • Built for Django, embraces your models and auth
Read Entire Article