Skip to main content

Code compatibility promise

In compliance with the Release Process and to ensure clear expectations, Oro uses 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 in Oro code from one MINOR version to the next.
Both MAJOR and MINOR releases may introduce backward-incompatible changes in Oro code.
  • System requirements may 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 backward compatibility promise applies to all PHP code except for:
  • PHPUnit tests (*/Tests/Unit/)
  • Behat tests (*/Tests/Behat/)
  • Functional tests (*/Tests/Functional/)
  • Other test-related code (*/Test/)
  • Test framework bundles: */Bundle/TestFrameworkBundle/, */Bundle/TestFrameworkCRMBundle/, */Bundle/DemoDataBundle/, */Bundle/DemoDataCommerceCRMBundle/
  • The enterprise package oro/crm-pro-demo-data-bundle

Allowed changes by code type

Type of changeAllowed
Add an interfaceYes
Remove an interfaceNo
Add a methodNo
Remove a methodNo
Add an argument to a methodNo
Change an argument nameYes
Remove an argumentNo
Add a type hint to an argumentNo
Remove a type hint of an argumentNo
Add a default value to an argumentNo
Remove a default value of an argumentNo
Change an argument default valueNo

Build docs developers (and LLMs) love