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 = TrueTurn 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.
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
.png)

