The ❊ Perpl ❊ Team
– 08 November 2025
❊ Perpl ❊ has a new release!
We have released ❊ Perpl ❊ 2.5.
Also, we have decided to move the ❊ Perpl ❊ repository to its own organisation, https://github.com/perplorm/. This website had already been moved to the new organisation, now we are making it official with the main repository!
Features
We are continuously working on stabilizing, cleaning up and improving the old code:
- Further refined filter system in PR #28, PR #33 and PR #70
- Better handling of DateTime objects and the timestampable behavior
- Better code testability
- And as always: various bugfixes & code cleanup
- Preview: there is WIP for better typing in generated classes
Compare all changes to the previous release under https://github.com/perplorm/perpl/compare/v2.4.0...v2.5.0
Documentation
To reflect the continuous progress in ❊ Perpl ❊, this documentation has also been updated:
- Added update-info time stamps on each page of the documentation (main headline and footer) so you will always know, when a particular documentation page has been last updated!
- Added a ❊ new ❊ indicator for newly added pages
- Documented the new
synced_table behavior from PR #10
- Documented the new
config_store behavior from PR #13
- Documented of the new
bulk-load table attribute from PR #15
- Added a note on the new option to use multiple user-contributed behaviors from the same Github repo
- Finally fixed the active link indication of the page you are currently visiting after 12 years (*lol*)
- Replaced and fixed a lot of dead, old and http-only links
- Introduced a site-wide dark mode!
- Changed the whole color scheme to purplish hues to visually reflect the difference to the old Propel homepage
- Added conditional splitting of blog post previews to better handle & separate long and short posts on the blog page
- Replaced some old libraries
- Replaced the old table join chart with a more clean and legible inline version
- Fixed multiple typos
Download
You can download ❊ Perpl ❊ via Composer.
Please give it a try and report any bugs
you spot:
{
"require": {
"perplorm/perpl": ">=2.0"
}
}
All releases: github.com/perplorm/perpl/releases
The ❊ Perpl ❊ Team
– 04 June 2025
❊ Perpl ❊ aims to proceed where the original Propel seems to be stuck and unmaintained at the moment.
The initiative for this new start originated in discussions on the original repository between different Propel enthusiasts and Moritz Ringler gave it a headstart so it could be realised.
Since April 2025, three releases of ❊ Perpl ❊ have been made availaible.
Additionally the original Propel documentation has been forked in June and made available under this website and will also be improved step by step.
You will still find a lot of places where there are still links to the original Propel repositories but those will be gradually replaced over time with according links for ❊ Perpl ❊.
Also, as you might find, we are still experimenting with branding.
Features
Some of the new and improved features below:
- Runs successfully tested for PHP 8.4
- Improved type-preserving
- Code cleanup for better readability and maintainabilty
- Performance improvements
- Enhanced filter system for easier performing complex queries
- New and improved behaviors
- Added option for importing multiple user-contributed behaviors from the same (user) repo
- Deprecation of some old internal methods
For the (few) BC-breaking changes and more detailed information on new and updated features, please visit https://github.com/perplorm/perpl
Download
You can download ❊ Perpl ❊ via Composer.
Please give it a try and report any bugs
you spot:
{
"require": {
"perplorm/perpl": ">=2.0"
}
}
All releases: github.com/perplorm/perpl/releases
Of course all of this would not have been possible without the original Propel Team & countless other people!
As Isaac Newton said:
If I have seen further it is by standing on yͤ shoulders of Giants.
The Propel Team
– 04 July 2022
With this release, we continue version cleanups aiming API stabilization.
Many thanks to our contributors!
2.0.0-beta2
Here are the changes:
- PHP 8.1 and 8.2 compatibility
- Added strict types to generated code
- Added Symfony 6 support
- Dropped Symfony 3 support. The minimum required Symfony version is 4.4.0 now.
- Added Monolog 2 support
- Added a type safe access to the
StandardServiceContainer via Propel::getStandardServiceContainer() method
- Added support for the
DATETIME column type
- Moved templates into own root level
- Overall code quality improvements
- Fixed
DatabaseComparator in order to skip migration creation if table has skipSql flag
- Fixed an issue with many-to-many mapping
- Fixed usage of deprecated date format
- Fixed column’s time format issue
- Fixed issue with identifier quoting being ignored
- Fixed a debug mode behavior in order to use new connection with it
BC breaking impact
Please note that all methods have param and return types being added now where they were feasible and ensure better code quality.
Make sure any extensions are updated here regarding their method signature.
TIMESTAMP column type in schema files for the MySql databases now generates column with actual TIMESTAMP type instead of DATETIME as it was previously. Propel diff considers it as a table structure change and generates migration.
As another side effect timestamps are only valid until 2037 (32bit). Make sure to adjust any databuilders or fixtures accordingly.
Download
You can download this release as usual via Composer.
Please give it a try and report any bugs
you spot:
{
"require": {
"propel/propel": "2.0.0-beta2"
}
}
All changes/commits: github.com/propelorm/Propel2/compare/2.0.0-beta1…2.0.0-beta2
All releases: github.com/propelorm/Propel2/releases
The Propel Team
– 07 December 2021
With this release, we continue version cleanups aiming API stabilization.
Many thanks to our contributors!
2.0.0-beta1
Here are the changes:
- PHP 8.1 compatibility
- Fixes for PHP 7.4 preloading
- Fixed usage of default on-update and on-delete behavior
- Show names of uncommitted migrations
- BehaviorLocator now looks in dev packages, as well
- Aggregate multiple columns behavior & parameter list support
- Fixes around aliases and cross joins and subqueries
- Added support for
keytype in the magic import/export methods
- PSR naming fixes for variables and methods
- Reset partial flag when populating a relation
- Added
exists operator
- Escape quotes in behavior
- Quote primary table name if identifier quoting is enabled
- Formats insert
DATE values as Y-m-d instead of Y-m-d H:i:s.u
- Allow default-value for concrete-inheritance to be instantiable
- Pluralize
Box to Boxes
- Allow
NO ACTION for foreign key references (in the dtd/xsd)
- Use object-equality instead of reference-equality to compare object properties
- Generates data dictionary documentation
- PHPStan related code cleanup
BC breaking impact
Please note that methods have param and return types being added now where they were feasible and ensure better code quality.
Make sure any extensions are updated here regarding their method signature.
Some internal methods were also renamed to fit PSR coding standards.
Due to the support of PHP 7.4 preloading, an update will need the configuration to be rebuilt once by calling config:convert, see https://github.com/propelorm/Propel2/wiki/Exception-Target:-Loading-the-database#for-imported-configuration
Download
You can download this release as usual via Composer.
Please give it a try and report any bugs
you spot:
{
"require": {
"propel/propel": "2.0.0-beta1"
}
}
All changes/commits: github.com/propelorm/Propel2/compare/2.0.0-alpha12…2.0.0-beta1
All releases: github.com/propelorm/Propel2/releases
The Propel Team
– 22 January 2021
With this release, we continue Alpha-version cleanups aiming API stabilization.
Many thanks to our contributors!
2.0.0-alpha12
Here are the changes:
- PHP 8 compatibility
- Widening the range of Symfony v4 to 4.0+ (instead of 4.3+)
- Fixed transaction handling when \Throwable is thrown
- Fixed identifierQuoting for Versionable behavior
- Fixed invalid hydration when using mergeWith of criteria with “with” models
- Adds the ability for locking reads, either shared or exclusive
- Updated TableMap generator to add column name map for normalization and performance speedup
- Use temporal formatter in the toArray() generator, fixes the issue of entities wrongly being marked as dirty due to differences in the datetime formatting
BC breaks
Please note that due to PHP7 + PHP8 versions both able to be supported with this library, the PDO access had to be refactored in a not fully BC way. Instead of directly extending the PHP core classes, we now depend on interface contracts.
If your software has directly extended those in the past, please make sure to adjust your extensions accordingly.
PDOStatement => Propel\Runtime\Connection\StatementInterface
PdoConnection extends PDO implements ConnectionInterface => only implements the latter and proxies to PDO instead.
Download
You can download this release as usual via Composer. Please give it a try and report any bugs
you spot:
{
"require": {
"propel/propel": "2.0.0-alpha12"
}
}
All changes/commits: github.com/propelorm/Propel2/compare/2.0.0-alpha11…2.0.0-alpha12
All releases: github.com/propelorm/Propel2/releases
The Propel Team
– 07 August 2020
The Propel Team
– 13 July 2020
The Propel Team
– 25 June 2020
The Propel Team
– 27 June 2015
The Propel Team
– 20 November 2014
The Propel Team
– 07 October 2014
William Durand
– 23 April 2014
The Propel Team
– 16 April 2014
The Propel Team
– 25 February 2014
The Propel Team
– 21 October 2013
William Durand
– 05 June 2013
William Durand
– 13 May 2013
The Propel Team
– 20 February 2013
The Propel Team
– 18 February 2013
The Propel Team
– 14 February 2013
The Propel Team
– 15 January 2013
The Propel Team
– 08 January 2013
The Propel Team
– 11 November 2012
The Propel Team
– 13 August 2012
The Propel Team
– 08 August 2012
The Propel Team
– 06 August 2012
The Propel Team
– 30 July 2012
The Propel Team
– 30 July 2012
The Propel Team
– 09 July 2012
The Propel Team
– 02 July 2012
The Propel Team
– 08 June 2012
The Propel Team
– 07 June 2012
The Propel Team
– 30 April 2012
The Propel Team
– 23 April 2012
The Propel Team
– 20 April 2012
The Propel Team
– 27 March 2012
The Propel Team
– 20 March 2012
The Propel Team
– 05 March 2012
The Propel Team
– 27 February 2012
The Propel Team
– 26 February 2012
The Propel Team
– 15 February 2012
The Propel Team
– 13 February 2012
The Propel Team
– 06 February 2012
The Propel Team
– 03 February 2012
The Propel Team
– 01 February 2012
The Propel Team
– 16 January 2012
The Propel Team
– 21 November 2011
The Propel Team
– 15 November 2011
The Propel Team
– 10 November 2011
The Propel Team
– 03 November 2011
The Propel Team
– 01 November 2011
The Propel Team
– 16 October 2011
The Propel Team
– 13 October 2011
The Propel Team
– 06 October 2011
The Propel Team
– 03 October 2011
The Propel Team
– 29 September 2011
The Propel Team
– 28 September 2011
The Propel Team
– 14 September 2011
The Propel Team
– 29 August 2011
The Propel Team
– 22 August 2011
The Propel Team
– 18 August 2011
The Propel Team
– 04 August 2011
The Propel Team
– 03 August 2011
The Propel Team
– 19 June 2011
The Propel Team
– 14 June 2011
The Propel Team
– 09 May 2011
The Propel Team
– 29 April 2011
The Propel Team
– 14 April 2011
The Propel Team
– 06 April 2011
The Propel Team
– 31 March 2011
The Propel Team
– 21 March 2011
The Propel Team
– 18 March 2011
The Propel Team
– 11 March 2011
The Propel Team
– 10 March 2011
The Propel Team
– 03 March 2011
The Propel Team
– 21 February 2011
The Propel Team
– 16 February 2011
The Propel Team
– 02 February 2011
The Propel Team
– 27 January 2011
The Propel Team
– 26 January 2011
The Propel Team
– 19 January 2011
The Propel Team
– 12 January 2011
The Propel Team
– 11 January 2011
The Propel Team
– 22 December 2010
The Propel Team
– 15 December 2010
The Propel Team
– 13 December 2010
The Propel Team
– 09 December 2010
The Propel Team
– 30 November 2010
The Propel Team
– 17 November 2010
The Propel Team
– 10 November 2010
The Propel Team
– 31 October 2010
The Propel Team
– 25 October 2010
The Propel Team
– 20 September 2010
The Propel Team
– 14 September 2010
The Propel Team
– 10 September 2010
The Propel Team
– 06 September 2010
The Propel Team
– 27 August 2010
The Propel Team
– 16 August 2010
The Propel Team
– 03 August 2010
The Propel Team
– 02 August 2010
The Propel Team
– 23 June 2010
The Propel Team
– 17 June 2010
The Propel Team
– 09 June 2010
The Propel Team
– 03 June 2010
The Propel Team
– 01 June 2010
The Propel Team
– 25 May 2010
The Propel Team
– 20 May 2010
The Propel Team
– 17 May 2010
The Propel Team
– 10 May 2010
The Propel Team
– 05 May 2010
The Propel Team
– 29 April 2010
The Propel Team
– 26 April 2010
The Propel Team
– 20 April 2010
The Propel Team
– 19 April 2010
The Propel Team
– 15 April 2010
The Propel Team
– 01 April 2010
The Propel Team
– 25 March 2010
The Propel Team
– 17 March 2010
The Propel Team
– 15 March 2010
The Propel Team
– 02 March 2010
The Propel Team
– 21 February 2010
The Propel Team
– 16 February 2010
The Propel Team
– 15 February 2010
The Propel Team
– 05 February 2010
The Propel Team
– 04 February 2010
The Propel Team
– 26 January 2010
The Propel Team
– 19 January 2010
The Propel Team
– 13 January 2010
The Propel Team
– 06 January 2010
The Propel Team
– 04 January 2010
The Propel Team
– 17 December 2009
The Propel Team
– 13 December 2009
The Propel Team
– 10 December 2009
The Propel Team
– 02 December 2009
The Propel Team
– 30 November 2009
The Propel Team
– 16 November 2009
The Propel Team
– 08 November 2009
The Propel Team
– 07 November 2009