Why jQuery shouldn't be in the admin

This summer as a part of the Google Summer of Code program Zain Memon worked on improving the UI for Django’s admin, specifically he integrated jQuery for various interface improvements. I am opposed to including jQuery in Django’s admin, as far as I know I’m the only one. I should note that on a personal level I love jQuery, however I don’t think that means it should be included in Django proper. I’m going to try to explain why I think it’s a bad idea and possibly even convince you.

The primary reason I’m opposed is because it lowers the pool of people who can contribute to developing Django’s admin. I can hear the shouts from the audience, “jQuery makes Javascript easy, how can it LOWER the pool”. By using jQuery we prevent people who know Javascript, but not jQuery from contributing to Django’s admin. If we use more “raw” Javascript then anyone who knows jQuery should be able to contribute, as well as anyone who knows Mootools, or Dojo, or just vanilla Javascript. I’m sure there are some people who will say, “but it’s possible to use jQuery without knowing Javascript”, I submit to you that this is a bad thing and certainly shouldn’t be encouraged. We need to look no further than Jacob Kaplan-Moss’s talks on Django where he speaks of his concern at job postings that look for Django experience with no mention of Python.

The other reason I’m opposed is because selecting jQuery for the admin gives the impression that Django has a blessed Javascript toolkit. I’m normally one to say, “if people make incorrect inferences that’s their own damned problem,” however in this case I think they would be 100% correct, Django would have blessed a Javascript toolkit. Once again I can hear the calls, “But, it’s in contrib, not Django core”, and again I disagree, Django’s contrib isn’t like other projects’ contrib directories that are just a dumping ground for random user contributed scripts and other half working features. Django’s contrib is every bit as official as parts of Django that live elsewhere in the source tree. Jacob Kaplan-Moss has described what django.contrib is, no part of that description involves it being less official, quite the opposite in fact.

For these reasons I believe Django’s admin should avoid selecting a Javascript toolkit, and instead maintain it’s own handrolled code. Though this brings an increase burden on developers I believe it is more important to these philosophies than to take small development wins. People saying this stymies the admin’s development should note that Django’s admin’s UI has changed only minimally over the past years, and only a small fraction of that can be attributed to difficulties in Javascript development.