It's been a long time since the latest beta release (0.7.1915), and even a longer time since the last stable release (0.6.3). Today, we are happy to announce the release of symfony 1.0 Beta 1, and this is a major step towards the version 1.0, which should come shortly.

New features

This release has almost all the features of the future 1.0 stable. Here is an extract of the most interesting changes since 0.6.3:

  • Easier installation and larger compatibility. Symfony is now compatible with magic_quotes_gpc set to on and PHP 5.2. Pake and phing are now bundled with the core classes, so symfony has no more external dependency. It is very easy to link a symfony application to the symfony libraries (through the config/config.php file), and PEAR is no more a prerequisite. The symfony command line now works out the box (for PEAR, SVN or .tgz).

  • Major performance improvement. Many parts of the code have been refactored, with performance in mind. The result is a performance increase of 50% to 500%, depending on your platform.

  • New plugin system. Extending symfony has never been easier. A plugin can package classes, modules, helpers, filters, web assets, fixtures, data models, unit tests, and so on. Plugins can be installed with one command. Check the Plugins page for a list of already available plugins.

  • New unit test library. Symfony is now bundled with its own unit and functional test framework, called lime, and a bunch of automated tests utilities, such as the sfTestBrowser and sfDomCssSelector classes. Symfony itself has more than 2800 unit and functional tests that guarantee its quality of code.

  • Updated default pages for error 404, error 500, insufficient credentials, unavailable page, and deactivated application (thanks justinm for the design!). These pages are both much nicer and much easier to customize than before.

  • Easier templating. Components and components slots now work perfectly on every situation, even with cache set to on. Their code was refactored to be fast and effective. The new temlate fragment tools, called slots, are faster than component slots, require no extra file or configuration to add a dynamic zone to a layout. And the icing on the cake: Ajax actions have no layout by default.

  • Better and more flexible Model layer. Symfony is now ORM independent: it is still bundled with Propel by default, but can work with others (such as Doctrine) in a snap. Database schemas can now be written in YAML instead of XML. Persistent support and specific database encoding are now supported natively.

  • New mixin feature. The sfMixin class introduces mixins in PHP, allowing core classes modification without inheritance, addition of new methods to existing classes, and multiple inheritance.

  • New behaviors for Propel classes. A behavior is a group of properties and methods that can alter the Propel generated classes. To make a Propel class sortable, to add a pessimistic lock, or to change the deletion by a is_deleted flag, you now need only one line of code with behaviors.

  • More user-friendly development tools. The symfony logs and the web debug toolbar now display more information about time and execution bottlenecks, thanks to the new sfTimer class. The symfony command line now has a color output (in *nix). The logging mechanism (via the sfLogger class) is more flexible and easier to extend. Logs rotation and cleaning are automated.

  • More flexible filter system. User filters can now be registered anywhere in the filter chain (even before the security filter).

  • New many-to-many relationships are now supported in the admin generator.

  • Easier deployment. The freeze task is implemented and fully functional. It transforms a symfony project into a self sufficient program by adding in the symfony libraries and assets.

  • Updated creole, Propel, (1.6.5) and prototype (1.5.0_rc1)

  • And more than 200 bug fixes and small enhancements

All these features are not yet fully documented, but this will soon come. Also, guidelines for developers used to the 0.6.3 and outlining the changes in syntax will soon be published. In the meantime, please consult the full changelog.

We want to thank all the contributors for their great efforts in making this release so full of great features.

What is a beta 1?

This release is tagged "Beta", so it is not yet completely stable and there are some known bugs still to be fixed. If you are interested in the new features, or if you want to help to qualify the beta for a stable release, please try it. It you plan to develop a real web application, you should also use this beta.

We plan to release a few more betas (called Beta 2, Beta 3, and so on) each time we fix more bugs and stabilize the trunk further. We will not add new features, unless we meet a problem with the current release. Every feature addition will require a discussion on the mailing-list first. We may break compatibility with Beta 1 in following betas, in very specific areas.

Once we are satisfied with a beta release, we will release a Release Candidate for 1.0 (1.0RC1). Release Candidates are feature-frozen, and should be stable enough to qualify for 1.0 - except if bugs are found, which is the purpose of the RCs. Once we release the first RC, we won't add new functionality or break BC - except in case of major security breach.

We plan to release as few Release Candidates as possible, but you might expect to see a RC1 and a RC2 before the final 1.0 stable.

How to upgrade?

Depending on how you installed symfony, the upgrade process will differ. If you installed symfony via PEAR, type:

> pear upgrade symfony/symfony-beta

If you used a checkout from the SVN repository, browse to the symfony root and type:

> svn update -r2872

The most important thing to do is to upgrade all the projects that use the 1.0 beta distribution of symfony. Indeed, symfony 1.0 breaks backward compatibility in some parts, but the project upgrade is fully automated and transparent. This release comes with an upgrade script that will modify the code of a symfony project to make it symfony 1.0 compatible. To upgrade, browse to the root of your symfony projects and type:

> symfony upgrade 1.0

In case of PEAR installation, the command line may be broken. In that case, you can still launch the upgrade script by calling:

> php /path/to/pear/data_dir/symfony/bin/symfony upgrade 1.0

If you experience problems while upgrading, report to the dedicated forum.

What's next?

What we deeply want is to release the 1.0 stable as fast as possible. But the more we get help, the faster we'll reach this point. You can help in many ways:

  • By testing the beta 1 and submitting bug reports

Let me rephrase that: If you submit explicit bug reports with a step-by-step scenario to reproduce the bug, we'll pay more attention to it. If, in addition, you attach the functional tests to reproduce it automatically and a patch against the trunk, then the bug will probably be fixed within 48 hours.

  • By contributing unit tests

Unit tests are very easy to write. The beta 1 already has 2800 unit and functional tests, and they can serve as a good example for the areas that are not yet covered by automated tests. Any help on that task will be much appreciated.

  • By contributing documentation

You probably noticed that the trunk version of the documentation is not completely up to date with the latest functionality. We will do our best to have everything documented, but in this field as well, any help is welcome.

For tests and documentation, please announce the area in which you want to work on in the developers' mailing-list, to avoid duplicates. Then, contribute your work as a patch attached to a ticket (please don't do a direct commit to the trunk, nor send a mail with code).

We need you

Please help us to release the 1.0 stable quickly. We really need you!