| published by | Thibaud Colas |
|---|---|
| in blog | The Wagtail CMS Blog |
| original entry | The 1000 most popular* Django packages |
Django’s package ecosystem is one of its biggest strengths as a web framework, and a key strength of Wagtail as well. Our users value the CMS user experience just as much as the Python / Django foundations that make it super flexible. But it’s hard to convey that ecosystem strength! We’ve made many attempts at quantifying it in the past, in addition to showcasing our Wagtail-specific package ecosystem. Here’s another attempt, with a format that supports a more ecosystem-wide quantitative assessment of packages’ popularity.
For the purpose of this analysis, we’re using two imperfect metrics that have the benefit of being widely available: PyPI download counts as a proxy for "usage" of a package, and GitHub stars as a proxy for the "mindshare" or "attention" the package receives. We can use those two metrics to then rank packages into four quadrants:

Since we only want the top 1000 or so packages, we’ll also filter to only show packages above a certain downloads threshold. Here’s what the data looks like in practice, after processing:

We can see a rough correlation between high downloads and high star counts, those there are plenty of outliers. Check it out in interactive mode on ObservableHQ with all packages plotted, as well as more info about the methodology.
Main caveats: it’s GitHub only (90+% of packages), and it’s pretty arbitrary how you divide into quadrants and order within those quadrants, depending on weight given to stars vs. downloads.
Unpacking the results a bit, here are the top results per quadrant.
Ordered by star count, those packages that proportionally have very high GitHub Stars for low download counts - they’ve captured developers’ attention / mindshare, but that’s not (yet?) translated into high downloads:
Now looking into packages that are in the top 50% by both downloads and star count. This time ordered by geometric mean, to factor in both metrics. Those packages are safe bets if you’re considering dependencies that are in heavy use across the Django ecosystem.
There are many interesting packages in this category but they don’t necessarily come through in the data-driven quantitative assessment, as they’re just not there yet in download numbers nor stars!
Last but certainly not least, we can take a look at packages that score in the top 50% on downloads but not so high on star counts. Those are the "unsung heroes" of the ecosystem, possibly getting usage as transitive dependencies in other packages rather than directly chosen by developers for their specific sites or apps:
This kind of data-driven representation definitely helps in navigating so many options, so you can understand which ones are seeing real-world use. Other directories of the ecosystem like Django Packages or Awesome Django can become unwieldy as the number of options adds up over the years.
It’s a tricky problem to convey this in marketing material when pitching the Django ecosystem - and perhaps a long-term web app could help here? To visualize "currently-maintained, popular packages" as well as trends in usage, mindshare, and maintenance over the years.