this looks like one of those things where it completely breaks apart if you want to do anything custom or out of line to what is intended by the framework. Causing way more headaches down the line then if you just did it yourself from the start.
Actually, how it behaves with special cases was one of the initial requirements when it was built. A design goal has always been that there should be escape hatches. For example almost all settings can be a call-back if the value is not known up front.
From my experience with similar things built around Rails (ActiveAdmin and others) being based in a dynamic language helps and allows to accomodate a lot of customizations.
It can. But it doesn't necessarily mean that. Or maybe it means you CAN work around it, but it's cumbersome/bad to do so. Imo the Django Admin is like that: lots of ad-hoc and random customization options and lots of missing options, and it's a pain to override etc.
I understand that gut feeling. I've worked with many such systems. iommi is not like that though, because we HATE systems that have a nice two line demo but then immediately falls apart.
We consider any failure to scale up customization a high priority bug.
How do we handle this in practice? Nice defaults, easy to do deep customization with zero boilerplate, AND escape hatches of various forms. So if you need to just render your own template for an entire table row of form input field or whatever, you can do that. Always.
Please add more examples or a demo page or something. The gif and picture in the github repo is the single most descriptive part of your documentation, but a gif is terrible UX and a picture doesn't show off interactivity. This should be front and center on your landing page.
This may be useful for me, but I'm not going to bother setting up a test Django environment to test this just to find out that it isn't what I expected.
In the docs, if you click on the links "forms" or "tables", that will lead to the docs for those parts with a few example, and that in turn links to the cookbooks.
Thanks, looks interesting. I may play around with it.
I think what happened was that I landed on your page. Read the landing page, which only contained code. Scrolled to the top and clicked "install in minutes" and was unexpectedly redirected down the page. Then I clicked into github and didn't click on the forms/tables hyperlinks there.
I think what I'm saying is primarily that I'm lazy.
Secondly, your landing page is too code oriented and does not show off any UI and your anchor link (which typically links into documentation) short-circuited my search for a docs page.
I think you would have gotten considerably more upvotes on this post if you show the product off more on the landing page. Despite the obvious lack of effort I put into learning your product, most people who clicked on this link today did even less.
No shade or anything. Again, the product looks nice now that I've seen it in the docs.
I've had mixed success with Claude. It keeps adding too much display_names to everything for example which is annoying.
In theory we could put that up, but I don't particularly want to maintain such a live example app and pay for hosting and all that, only to have it instantly crash under the load of HN :P
I've thought about extracting it, but I think it's a lot of work unless you want to support only Django and rST which is what we're using. At least the iframe part is very specific to the web framework.
That is impressive. It feels like an entire framework with a lot more functionality and has a lot of things I have been wishomg Django had.
Very few dependencies outside testing. I like that. I was surprised flask is one though.
I am thinking about using it for some sections (a management/dashboard bit, and probably the admin) of a site, the rest of which is plain Django. Are there likely to be any problems doing that?
Hmm.. flask shouldn't be a dependency. I tried to get iommi to work on flask/sqlalchemy many years ago, but that's somewhat abondoned...
> I am thinking about using it for some sections (a management/dashboard bit, and probably the admin) of a site, the rest of which is plain Django. Are there likely to be any problems doing that?
Incremental adoption and mix-and-match is also a fundamental design goal so that should work fine.
The HTTP parts are super easy, it's the ORM mapping support that is the big issue. When I made an attempt first time SQLAlchemy was in the middle of a huge API change too, which meant the docs were rather bad and incomplete. Maybe it's better now.
Supporting both Django Templates and Jinja2 is a bit annoying too, but doable.
Tony Iommi almost quit playing when he lost two of his fingertips in a workplace accident, but was convinced that he could learn to play with the remaining stumps after listening to Django Reinhardt who also lost the use of two of his fingers, but adapted his playing style.
I didn't say it's trademark violation. A person's name is not a trademark. It's about using someone's name to promote a product that the person is not associated with in any way.
Iommi is not the name of a band. The band's name is Black Sabbath. Tony Iommi is the name of a person, the guitar player of Black Sabbath.
> You already admitted publicy that it was about Tony Iommi the guitarist of Black Sabbath and not anyone else with the name.
So that means that the only way that you can absolutely associate the project with Tony Iommi is the post in which the author says that it has nothing to do with Tony Iommi other than he's a guitarist like Django Reinhardt? Seems like the opposite of a slam dunk.
It's also 1) a very obvious and cute joke for people who are familiar with both guitarists, and 2) you don't own your last name - although if you put "Iommi" on a guitar (or a studded leather jacket), you're going to have a problem. But if you call your casserole recipe Iommi's Casserole, only a moron in a hurry is going to be confused.
> So that means that the only way that you can absolutely associate the project with Tony Iommi is the post in which the author says that it has nothing to do with Tony Iommi other than he's a guitarist like Django Reinhardt?
No, everything on https://iommi.rocks screams Tony Iommi, who was himself famously inspired by Django Reinhardt, because they both suffered severe finger injuries.
"Your first pick"... guitar pick.
"for a Django power chord"... Tony Iommi was famous for using power chords (in part due to his loss of fingers).
The sample code uses "Album" and "Artist".
Even the "rocks" in the domain name is suggestive.
> Seems like the opposite of a slam dunk.
> It's also 1) a very obvious and cute joke for people who are familiar with both guitarists
These consecutive sentences are strangely contradictory. Not a slam dunk, yet very obvious?
> you don't own your last name - although if you put "Iommi" on a guitar (or a studded leather jacket), you're going to have a problem.
As I said in another comment, this is not a trademark issue. It's good that you admit, though, that there are limits to using a person's name on a product. https://news.ycombinator.com/item?id=45758717
Of course nobody is going to confuse a casserole or a Python package with a guitarist. But that's not the issue. Again, Tony Iommi is a person and not a product. If you market your casserole by giving the impression that Tony Iommi may have invented the recipe for the casserole, or at least knows of and endorses the casserole, that would be problematic.
Maybe I'm confused. Which law would you presume was violated? Did Django violate the same law when it was named Django? Did Python violate that same law?
The issue is that Tony Iommi is a live person, so using his name can give the impression that he endorses or is in some way associated with the product. Django Reinhardt died in 1953 and thus cannot endorse a product 50 years later. Monty Python is not a person.
this looks like one of those things where it completely breaks apart if you want to do anything custom or out of line to what is intended by the framework. Causing way more headaches down the line then if you just did it yourself from the start.
Actually, how it behaves with special cases was one of the initial requirements when it was built. A design goal has always been that there should be escape hatches. For example almost all settings can be a call-back if the value is not known up front.
From my experience with similar things built around Rails (ActiveAdmin and others) being based in a dynamic language helps and allows to accomodate a lot of customizations.
It can. But it doesn't necessarily mean that. Or maybe it means you CAN work around it, but it's cumbersome/bad to do so. Imo the Django Admin is like that: lots of ad-hoc and random customization options and lots of missing options, and it's a pain to override etc.
I understand that gut feeling. I've worked with many such systems. iommi is not like that though, because we HATE systems that have a nice two line demo but then immediately falls apart.
We consider any failure to scale up customization a high priority bug.
How do we handle this in practice? Nice defaults, easy to do deep customization with zero boilerplate, AND escape hatches of various forms. So if you need to just render your own template for an entire table row of form input field or whatever, you can do that. Always.
Please add more examples or a demo page or something. The gif and picture in the github repo is the single most descriptive part of your documentation, but a gif is terrible UX and a picture doesn't show off interactivity. This should be front and center on your landing page.
This may be useful for me, but I'm not going to bother setting up a test Django environment to test this just to find out that it isn't what I expected.
The docs has a lot of examples, especially the cookbook. For example: https://docs.iommi.rocks/cookbook_tables.html
In the docs, if you click on the links "forms" or "tables", that will lead to the docs for those parts with a few example, and that in turn links to the cookbooks.
There's also my talk from Django Days: https://www.youtube.com/watch?v=ydRdbA_tXdw&pp=ygUXYW5kZXJzI...
Thanks, looks interesting. I may play around with it.
I think what happened was that I landed on your page. Read the landing page, which only contained code. Scrolled to the top and clicked "install in minutes" and was unexpectedly redirected down the page. Then I clicked into github and didn't click on the forms/tables hyperlinks there.
I think what I'm saying is primarily that I'm lazy.
Secondly, your landing page is too code oriented and does not show off any UI and your anchor link (which typically links into documentation) short-circuited my search for a docs page.
I think you would have gotten considerably more upvotes on this post if you show the product off more on the landing page. Despite the obvious lack of effort I put into learning your product, most people who clicked on this link today did even less.
No shade or anything. Again, the product looks nice now that I've seen it in the docs.
All good feedback. Thanks.
Same. But I have now a new secret weapon, this claude code prompt:
Read the doc of https://iommi.rocks/, make a demo project showing of the capability of this tool.
(I have a claude.md with more info, but that's the prompt)
Came back with a fully functional demo with everything installed and working. runserver, and a glance at the code, and I get it.
TL;DR: it's like the django admin, except you can use it in any endpoint in your side. Pretty nice.
There's an example app too: https://github.com/iommirocks/iommi/tree/master/examples
I've had mixed success with Claude. It keeps adding too much display_names to everything for example which is annoying.
In theory we could put that up, but I don't particularly want to maintain such a live example app and pay for hosting and all that, only to have it instantly crash under the load of HN :P
BTW, your "https://kodare.net/2025/08/08/documentation-that-is-never-wr..." is fantastic, I always liked the idea of docstest, only the implementation sucked.
But this is much better. Any plan on open sourcing this infra for sphinx or mkdocs?
Thanks.
I've thought about extracting it, but I think it's a lot of work unless you want to support only Django and rST which is what we're using. At least the iframe part is very specific to the web framework.
More information and back story can be found on my blog: https://kodare.net/tags.html#iommi
We've worked on this since 2014.
That is impressive. It feels like an entire framework with a lot more functionality and has a lot of things I have been wishomg Django had.
Very few dependencies outside testing. I like that. I was surprised flask is one though.
I am thinking about using it for some sections (a management/dashboard bit, and probably the admin) of a site, the rest of which is plain Django. Are there likely to be any problems doing that?
tangent: "wishomg" typo for "wishing" is kind of poetic
Hmm.. flask shouldn't be a dependency. I tried to get iommi to work on flask/sqlalchemy many years ago, but that's somewhat abondoned...
> I am thinking about using it for some sections (a management/dashboard bit, and probably the admin) of a site, the rest of which is plain Django. Are there likely to be any problems doing that?
Incremental adoption and mix-and-match is also a fundamental design goal so that should work fine.
> Incremental adoption and mix-and-match is also a fundamental design goal so that should work fine.
Thanks, going to try it out on my project then, probably today.
> flask shouldn't be a dependency.
Its in the rest requirements: https://github.com/iommirocks/iommi/blob/master/test_require...
> I tried to get iommi to work on flask/sqlalchemy many years ago, but that's somewhat abondoned
I was wondering whether something like that was possible.
> [flask] in the test requirements
Good point. I've removed it. Thanks.
> [iommi for flask possible]
The HTTP parts are super easy, it's the ORM mapping support that is the big issue. When I made an attempt first time SQLAlchemy was in the middle of a huge API change too, which meant the docs were rather bad and incomplete. Maybe it's better now.
Supporting both Django Templates and Jinja2 is a bit annoying too, but doable.
Thanks, that was quick!
I noticed you are the developer of one of the other dependencies, django-fastdev which fixes a lot of Django annoyances itself. Very nice.
TBH I would probably use iommi with Django even if you supported Flask or similar because the Django ecosystem is huge and I am familiar with it.
The idea would be to support both transparently.
what's the techstack for Iommi? Bootstrap with XHR?
Django backend. By default bootstrap as CSS framework but we ship with finished implementations for many more.
Dynamic behavior is mostly limited to pagination and filtering on tables, which is just some plain JS with fetch().
Oh, and foreign key/m2m backed fields in forms/filtering is backed by select2 in ajax mode.
I don't know what this is but I am 100% here for the name.
guitar pick, (Tony) Iommi... I get it.
Tony Iommi almost quit playing when he lost two of his fingertips in a workplace accident, but was convinced that he could learn to play with the remaining stumps after listening to Django Reinhardt who also lost the use of two of his fingers, but adapted his playing style.
Plus most of iommi is written while listening to Heaven & Hell and Mob Rules on repeat :P
It seems of questionable legality to blatantly use his name for your product.
Trademarks only apply within an industry.
I didn't say it's trademark violation. A person's name is not a trademark. It's about using someone's name to promote a product that the person is not associated with in any way.
Iommi is not the name of a band. The band's name is Black Sabbath. Tony Iommi is the name of a person, the guitar player of Black Sabbath.
The project isn’t named tonyiommi, though. Iommi is the name of Tony Iommi’s solo music project, though.
Hmm, I don't think that's correct. The single "Gone" has written "IOMMI" on it, but I think that's a design flourish mostly. There is an artist named "IOMMI" on Spotify though: https://open.spotify.com/artist/7H9kxQfhfZ0kJ7IOD3CTAP?si=l9...
https://en.wikipedia.org/wiki/Iommi_(album)
That's the name of an album though.
Yes, it is. It was also a project.
You mean like Django?
Already addressed in another comment: https://news.ycombinator.com/item?id=45758830
I mean.. there are a lot of people with that name, and it's an homage.
> I mean.. there are a lot of people with that name
What are you saying here? You already admitted publicy that it was about Tony Iommi the guitarist of Black Sabbath and not anyone else with the name.
> it's an homage
Which of course directly contradicts the first clause of your sentence.
> You already admitted publicy that it was about Tony Iommi the guitarist of Black Sabbath and not anyone else with the name.
So that means that the only way that you can absolutely associate the project with Tony Iommi is the post in which the author says that it has nothing to do with Tony Iommi other than he's a guitarist like Django Reinhardt? Seems like the opposite of a slam dunk.
It's also 1) a very obvious and cute joke for people who are familiar with both guitarists, and 2) you don't own your last name - although if you put "Iommi" on a guitar (or a studded leather jacket), you're going to have a problem. But if you call your casserole recipe Iommi's Casserole, only a moron in a hurry is going to be confused.
https://en.wikipedia.org/wiki/A_moron_in_a_hurry
> So that means that the only way that you can absolutely associate the project with Tony Iommi is the post in which the author says that it has nothing to do with Tony Iommi other than he's a guitarist like Django Reinhardt?
No, everything on https://iommi.rocks screams Tony Iommi, who was himself famously inspired by Django Reinhardt, because they both suffered severe finger injuries.
"Your first pick"... guitar pick.
"for a Django power chord"... Tony Iommi was famous for using power chords (in part due to his loss of fingers).
The sample code uses "Album" and "Artist".
Even the "rocks" in the domain name is suggestive.
> Seems like the opposite of a slam dunk.
> It's also 1) a very obvious and cute joke for people who are familiar with both guitarists
These consecutive sentences are strangely contradictory. Not a slam dunk, yet very obvious?
> you don't own your last name - although if you put "Iommi" on a guitar (or a studded leather jacket), you're going to have a problem.
As I said in another comment, this is not a trademark issue. It's good that you admit, though, that there are limits to using a person's name on a product. https://news.ycombinator.com/item?id=45758717
> But if you call your casserole recipe Iommi's Casserole, only a moron in a hurry is going to be confused. https://en.wikipedia.org/wiki/A_moron_in_a_hurry
Of course nobody is going to confuse a casserole or a Python package with a guitarist. But that's not the issue. Again, Tony Iommi is a person and not a product. If you market your casserole by giving the impression that Tony Iommi may have invented the recipe for the casserole, or at least knows of and endorses the casserole, that would be problematic.
> "for a Django power chord"
That's also a pun on "batteries included". We don't have batteries included: we supply a power cord.
I never got around to implementing my idea of randomizing "chord"/"cord" on each page load though :P
Maybe I'm confused. Which law would you presume was violated? Did Django violate the same law when it was named Django? Did Python violate that same law?
The ultimate test of this would be to name the next thing Kardashian.
The issue is that Tony Iommi is a live person, so using his name can give the impression that he endorses or is in some way associated with the product. Django Reinhardt died in 1953 and thus cannot endorse a product 50 years later. Monty Python is not a person.
I don't think anyone is under the impression that Tony Iommi is promoting a web framework.
Why not? After all, he's promoting a perfume: https://www.nordstrom.com/s/tony-iommi-monkey-special-parfum...
Having spent a lifetime around hessians, I can't imagine a product I want less.
I honestly doubt he's promoting it after seeing it :P Sounds more like his record company could smell money.
Monty Python was at the time a group of people (seems worse than a single person), and afaik also a trademark (also seems worse).
But yea, maybe Python made a legal gamble that just happened to work out. I am not a lawyer :shrug: