We were all waiting for it and many of us have been working hard for the last four years to make it happen. Today, Symfony 2.3.0 is available and this is the first long-term support release for Symfony version 2.

I'm so happy that we were able to achieve this important milestone in the life of the framework. THANK YOU for making it possible.

What does it mean? Since the introduction of a more formal release process, a new standard version of Symfony is released every six month and it is maintained for eight months. But every two years, we mark a release as being a long term support release. The big difference is that it is maintained for a three years period.

That gives us the best of two different worlds: small teams and agile companies can benefit from the latest features by upgrading every six months (they have two months to upgrade); large teams and traditional companies can standardize on a release for three years and they have an additional year to migrate to the next long term support release.

And 2.3.0 is our first long term support release. We, the community, are going to maintain it for the next three years (until May 2016).

Numbers

Traditionally, I like to give some numbers about releases. Here are some facts for 2.3. The Symfony 2.3.0 release was a bit special as we only had three months instead of six. Anyway, 2.3 is made of 437 pull requests containing 1,260 commits submitted by 50 developers for the code; documentation enjoyed 839 commits by 44 authors.

1,260 commits on a 3 month period means that, on average, 14 commits were pushed every single day. 437 pull requests means almost 5 pull requests merged per day. That's a new record!

Features

What about the most interesting changes? Let's recap what I've written about in the Live on the edge section of this blog during the last couple of months:

Symfony 2.3 also comes with two new components and one new bridge:

Upgrading

Upgrading from 2.2 to 2.3 should be painless.

If you are using the Symfony Standard Edition, you should notice that some bundles were removed to avoid license issues. As of 2.3, all the code in the Standard Edition and its dependencies is under a MIT-like license. Here is the diff for the composer.json file:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
diff --git a/composer.json b/composer.json
index c2d7588..5705d76 100644
--- a/composer.json
+++ b/composer.json
@@ -1,32 +1,35 @@
 {
     "name": "symfony/framework-standard-edition",
+    "license": "MIT",
+    "type": "project",
     "description": "The \"Symfony Standard Edition\" distribution",
     "autoload": {
         "psr-0": { "": "src/" }
     },
     "require": {
         "php": ">=5.3.3",
-        "symfony/symfony": "2.2.*",
-        "doctrine/orm": "~2.2,>=2.2.3",
+        "symfony/symfony": "2.3.*",
+        "doctrine/orm": ">=2.2.3,<2.4-dev",
         "doctrine/doctrine-bundle": "1.2.*",
         "twig/extensions": "1.0.*",
-        "symfony/assetic-bundle": "2.1.*",
-        "symfony/swiftmailer-bundle": "2.2.*",
-        "symfony/monolog-bundle": "2.2.*",
-        "sensio/distribution-bundle": "2.2.*",
-        "sensio/framework-extra-bundle": "2.2.*",
-        "sensio/generator-bundle": "2.2.*",
-        "jms/security-extra-bundle": "1.4.*",
-        "jms/di-extra-bundle": "1.3.*"
+        "symfony/assetic-bundle": "2.3.*",
+        "symfony/swiftmailer-bundle": "2.3.*",
+        "symfony/monolog-bundle": "2.3.*",
+        "sensio/distribution-bundle": "2.3.*",
+        "sensio/framework-extra-bundle": "2.3.*",
+        "sensio/generator-bundle": "2.3.*",
+        "incenteev/composer-parameter-handler": "~2.0"
     },
     "scripts": {
         "post-install-cmd": [
+            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
         ],
         "post-update-cmd": [
+            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
             "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
@@ -36,12 +39,15 @@
     "config": {
         "bin-dir": "bin"
     },
-    "minimum-stability": "alpha",
+    "minimum-stability": "stable",
     "extra": {
         "symfony-app-dir": "app",
         "symfony-web-dir": "web",
+        "incenteev-parameters": {
+            "file": "app/config/parameters.yml"
+        },
         "branch-alias": {
-            "dev-master": "2.2-dev"
+            "dev-master": "2.3-dev"
         }
     }
 }

All the backward compatibility layers from previous versions have been removed, so it's time to read again all UPGRADE files and check that you've migrated all your code. For changes specific to the 2.3 release, follow the instructions in the UPGRADE document. If you started your project with the Symfony Standard Edition, you might also want to read the UPGRADE-2.3.md file.

Installing

If you are starting a new project on Symfony 2.3, based on the full-stack framework, you have several options:

  • Create a new project via Composer (recommended):

    1
    $ php composer.phar create-project symfony/framework-standard-edition somewhere/ 2.3.0``
    
  • Download an archive for the Symfony Standard Edition;

If you are using some of the Symfony components in your new application, just use the 2.3.0 version or the 2.3 branch:

Let's celebrate! And remember that we should now focus on stability over features.