Important
You are browsing documentation for version 6.0 of OroCommerce, supported until 2028. Read the documentation for the latest LTS version to get up-to-date information.
See our Release Process documentation for more information on the currently supported and upcoming releases.
Our Backward Compatibility Promise
Code Compatibility Promise
In compliance with our Release Process and to ensure clear expectations, we use a MAJOR.MINOR.PATCH versioning scheme. While this format resembles Semantic Versioning, it does not follow SemVer’s strict backward-compatibility guarantees between MINOR versions.
In Oro products, the MAJOR version reflects the Symfony LTS version used by that release line. A non-changing MAJOR version indicates only that the underlying major Symfony version remains the same - it does not guarantee API or behavioral stability within Oro code from one MINOR version to the next.
As a result:
Both MAJOR and MINOR releases may introduce backward-incompatible changes in Oro code.
System requirements may also change between MINOR versions, including updates to the minimally supported versions of PHP, PostgreSQL, and other required components.
Third-party dependencies used by the Oro application may be upgraded or replaced in MINOR releases. Such updates may include major-version changes or library substitutions, in both PHP and JavaScript, and may introduce breaking changes.
PATCH releases are expected to remain fully backward compatible. A breaking change would only be considered for a PATCH release if it were absolutely required to remediate a critical security issue and no viable non-breaking alternative existed. Any such exceptions are extremely rare and will be documented in the CHANGELOG, release notes, and release announcements.
Code Covered
This BC promise applies to all PHP code except for:
PHPUnit tests (located in
*/Tests/Unit/)Behat tests (located in
*/Tests/Behat/)Functional tests (located in
*/Tests/Functional/)Other code related to tests (located in
*/Test/)Bundles with the testing framework extensions and demo data definitions
*/Bundle/TestFrameworkBundle/,*/Bundle/TestFrameworkCRMBundle/,*/Bundle/DemoDataBundle/,*/Bundle/DemoDataCommerceCRMBundle/An enterprise package with additional OroCRM demo data
oro/crm-pro-demo-data-bundle
Using Code
Changing Interfaces
This table specifies the changes you are allowed to do when working on interfaces:
Type of Change |
Change Allowed |
|---|---|
Add an interface |
Yes |
Remove an interface |
No |
Add a method |
No |
Remove a method |
No |
Add an argument to a method |
No |
Methods |
|
Change an argument name |
Yes |
Remove an argument |
No |
Add a type hint to an argument |
No |
Remove a type hint of an argument |
No |
Add a default value to an argument |
No |
Remove a default value of an argument |
No |
Change an argument default value |
No |
Changing Classes
This table specifies the changes you are allowed to do when working on classes:
Type of Change |
Change Allowed |
|---|---|
Remove the class entirely |
No |
Add a class |
Yes |
Public Properties |
|
Remove public property |
No |
Add public property |
Yes |
Protected Properties |
|
Remove protected property |
No |
Add protected property |
Yes |
Private Properties |
|
Add private property |
Yes |
Remove private property |
Yes |
Constructors |
|
New public constructor (does not match supertype) |
No |
New protected constructor (does not match supertype) |
No |
Public Methods |
|
Remove a public method |
No |
Add an argument |
No |
Remove an argument |
No |
Add a public method |
Yes |
Change an argument name |
Yes |
Add a type hint to an argument |
No |
Remove a type hint of an argument |
No |
Add a default value to an argument |
No |
Remove a default value of an argument |
No |
Change a default value of an argument |
No |
Protected Methods |
|
Remove a protected method |
No |
Add an argument |
No |
Remove an argument |
No |
Add a protected method |
Yes |
Change an argument name |
Yes |
Add a type hint to an argument |
No |
Remove a type hint of an argument |
No |
Add a default value to an argument |
No |
Remove a default value of an argument |
No |
Change a default value of an argument |
No |
Private Methods |
|
Add a private method |
Yes |
Remove a private method |
Yes |
Add an argument |
Yes |
Remove an argument |
Yes |
Change an argument name |
Yes |
Add a type hint to an argument |
Yes |
Remove a type hint of an argument |
Yes |
Add a default value to an argument |
Yes |
Remove a default value of an argument |
Yes |
Change a default value of an argument |
Yes |
Final classes |
|
Add a public method |
Yes |
Add a protected method |
Yes |
Add an argument to a protected method |
Yes |
Remove a protected method |
Yes |
Change a public method implementation |
Yes |
Change a protected method implementation |
Yes |
Change a private method implementation |
Yes |
Changing Traits
This table specifies the changes you are allowed to do when working on traits:
Type of Change |
Change Allowed |
|---|---|
Remove a trait entirely |
No |
Add a trait |
Yes |
Remove a public method |
No |
Add a public method |
Yes |
Remove a protected method |
No |
Add a protected method |
Yes |
Remove protected property |
No |
Add protected property |
Yes |
Add private property |
Yes |
Remove private property |
No |
Add a private method |
Yes |
Remove a private method |
No |
Add an argument to a public method |
No |
Add an argument to a protected method |
No |
Add an argument to a private method |
No |
Add public property |
Yes |
Change a public method implementation |
Yes |
Change a protected method implementation |
Yes |
Change a private method implementation |
Yes |
Change an argument name of (public, protected, private) |
Yes |
Remove an argument of (public, protected, private) |
No |
Add a type hint of an argument (public, protected, private) |
No |
Remove a type hint of an argument (public, protected, private) |
No |
Add a default argument value (public, protected, private) |
No |
Remove a default argument value (public, protected, private) |
No |
Change a default argument value (public, protected, private) |
No |
Changing Functions
This table specifies the changes you are allowed to do when working on functions:
Type of Change |
Change Allowed |
|---|---|
Remove a function |
No |
Add a new argument |
No |
Remove an argument |
No |
Add a function |
No |
Change a function implementation |
Yes |
Remove an argument type |
No |
Add a default value to an argument |
No |
Remove a default value of an argument |
No |
Change a default value of an argument |
No |