Symfony adoption, a year later

Over a year ago I looked into Symfony2 adoption for the first time. By gathering statistics from packages found on packagist.org, I tried to provide a less subjective view of framework's popularity.

Results of all kinds of polls organised by various portals are only subjective views of their readers. Organising a poll on a site mostly read by WordPress users will yield different results than a poll popular among Laravel artisans. Voting is also limited to readers who actually decided to participate in a poll, so it's hardly a representative view.

Although statistics I gathered here reflect actual choices people made when working on open source projects, they need to be put in a context just as well as the poll results.

These statistics are by no means an indicator of popularity among the end users.

We can't learn from them how popular a framework is on commercial projects. What we can learn, however, is how popular it is among developers who create libraries or other frameworks. Especially now, when composer is the de facto standard for PHP package management (a year ago there were voices it's still not well adopted by some).

Recently I dusted off the old scripts and repeated the experiment. This time I also included Doctrine and Laravel (Illuminate) next to Symfony and Zend Framework. Just out of curiosity and to put it in a wider context.

As a reminder, I looked for dependencies defined in the require, require-dev and suggest sections.

Symfony

There's over 53000 packages registered on packagist at the moment of writing. This number is over twice as big as last year.

Number of packages depending on Symfony has almost doubled too. Out of 9265 packages that depend on Symfony, there's 2942 that depend on the symfony/framework-bundle and 1857 that depend on symfony/symfony. These are most likely bundles or applications.

The chart on the right and the table below present Symfony in a context of other popular libraries and frameworks.

However, since a single package might depend on multiple vendors these numbers are not exclusive. For example, out of 3751 packages depending on Doctrine, 2299 depends on Symfony, 431 depends on Zend Framework, and 68 on Illuminate.

In other words packages depending on both Doctrine and Symfony are included in these numbers twice, so summing them up wouldn't make much sense.

Feb 2014Mar 2015
Total number of packages on packagist.org2431753101
Depends on Symfony49949265
Depends on Illuminate13554160
Depends on Doctrine-3751
Depends on Zend Framework13562289

Symfony Components

Looking at components alone is less biased.

The chart below shows component adoption alone. These are only direct dependencies as given in composer.json. Numbers don't include indirect dependencies. For example, since Laravel depends on Symfony, a package which depends on Laravel won't be included in numbers below. Unless it also indicates a dependency on one of the Symfony components.

As you can see the console component has outrun yaml in the past year. I'm not surprised, as it saves a lot of effort while building command line tools and applications.

Detailed numbers can be found in the table below and here are the results of crawling: results.csv.

Feb 2014Mar 2015
ComponentBundlesOtherTotalBundlesOtherTotal
console17661579130313471650
yaml28551980443511411576
finder156317473263633896
config129281410296511807
http-foundation83292375133615748
form27696372462201663
process4626631272587659
dependency-injection136146282342301643
http-kernel118150268298305603
validator176132308299274573
event-dispatcher4023327378468546
filesystem2518721244422466
browser-kit11995214189183372
class-loader122144266159197356
css-selector579214975206281
translation1110311422205227
security586712580144224
security-csrf---213
security-core---52429
security-http---31619
routing288611445163208
options-resolver19527138134172
dom-crawler12587023139162
property-access17537036125161
expression-language1526416685151
serializer1347602677103
debug0262618586
templating161733235376
var-dumper---44852
stopwatch4222684351
locale7222973845
intl2111363036
icu---21820
asset---235

Symfony Bridges

These are numbers of packages depending on bridges from the Symfony organisation.

twig-bridge217
monolog-bridge90
doctrine-bridge72
phpunit-bridge44
proxy-manager-bridge24
swiftmailer-bridge7
propel1-bridge1

Symfony Bundles

Here are numbers of packages depending on bundles from the Symfony organisation.

framework-bundle2942
monolog-bundle535
assetic-bundle439
swiftmailer-bundle385
twig-bundle313
security-bundle219
web-profiler-bundle24
debug-bundle3

Bonus: Testing Tools

As a bonus, I also included some popular testing tools.

Bare in mind that these are very often not specified in composer.json, as many projects rely on them being installed globally (especially PHPUnit users).

Mar 2015
Total number of packages on packagist.org53101
PHPUnit 12259
PhpSpec990
Behat452
Codeception293
Mink149
SimpleTest22
Jakub Zalas

Jakub Zalas

Agile PHP Developer, addicted to BDD and Symfony