Backwards Compatibility Promise
Last updated
Was this helpful?
Last updated
Was this helpful?
Sylius follows a versioning strategy called . It means that only major releases include BC breaks, whereas minor releases include new features without breaking backwards compatibility.
Since Sylius is based on Symfony, our BC promise extends with a few new rules and exceptions stated in this document. We also follow process to be able to innovate safely.
Patch releases (such as 1.0.x, 1.1.x, etc.) do not require any additional work apart from cleaning the Symfony cache.
Minor releases (such as 1.1.0, 1.2.0, etc.) require to run database migrations.
This BC promise applies to all of Sylius’ PHP code except for:
code tagged with @internal
or @experimental
tags
event listeners
model and repository interfaces
PHPUnit tests (located at tests/
, src/**/Tests/
)
PHPSpec tests (located at src/**/spec/
)
Behat tests (located at src/Sylius/Behat/
)
final controllers (their service name is still covered with BC promise)
To fulfill the constant Sylius’ need to evolve, model interfaces are excluded from this BC promise. Methods may be added to the interface, but backward compatibility is promised as long as your custom model extends the one from Sylius, which is true for most cases.
Following the reasoning same as above and due to technological constraints, repository interfaces are also excluded from this BC promise.
They are excluded from this BC promise, but they should be as simple as possible and always call another service. Behaviour they’re providing (the end result) is still included in BC promise.
It is allowed to change their dependencies, but the behaviour they’re providing is still included in BC promise. The service name and class name will not change.
The currently present routes cannot have their name changed, but optional parameters might be added to them. All the new routes will start with sylius_
prefix in order to avoid conflicts.
Services names cannot change, but new services might be added with sylius.
or Sylius\\
prefix.
Neither template events, block or templates themselves cannot be deleted or renamed.
Before we remove or replace code covered by this backwards compatibility promise, it is first deprecated in the next minor release before being removed in the next major release.
A code is marked as deprecated by adding a @deprecated
PHPDoc to relevant classes, methods, properties:
The deprecation message should indicate the version in which the class/method was deprecated and how the feature was replaced (whenever possible).
A PHP deprecation must also be triggered to help people with the migration, for instance:
You should not use the @trigger_error()
function.