SyliusCon 2025
Early Bird Deal
LogoLogo
🛣️ Roadmap💻 Sylius Demo💬 Community Slack
  • Sylius Documentation
  • Sylius Plugins
  • Sylius Stack
  • đź“–Sylius Documentation
  • Organization
    • Sylius Team
  • Release Cycle
    • Backwards Compatibility Promise
  • Getting Started with Sylius
    • Installation
    • Basic Configuration
    • Shipping & Payment
    • First Product
    • Customizing the Shop
    • Customizing Business Logic
    • Using API
    • Installing Plugins
    • Deployment
    • Summary
  • The Book
    • Introduction to Sylius
    • Installation
      • System Requirements
      • Sylius CE Installation
        • Sylius CE Installation with Docker
      • âž•Sylius Plus Installation
      • Upgrading Sylius CE
      • Upgrading Sylius Plus
    • Architecture
      • Architecture Overview
      • Architectural Drivers
      • Resource Layer
      • State Machine
      • Translations
      • E-Mails
      • Contact
      • Fixtures
      • Events
    • Configuration
      • Channels
      • Locales
      • Currencies
    • Customers
      • Customer & ShopUser
      • âž•Customer Pools
      • AdminUser
      • Addresses
        • Countries
        • Zones
        • Addresses
        • Address Book
    • Products
      • Products
      • Product Reviews
      • Product Associations
      • Attributes
      • Pricing
      • Catalog Promotions
      • Taxons
      • Inventory
      • âž•Multi-Source Inventory
      • Search
    • Carts & Orders
      • Orders
      • Cart flow
      • Taxation
      • Adjustments
      • Cart Promotions
      • Coupons
      • Payments
      • đź§©Invoices
      • Shipments
    • 🎨Frontend & Themes
    • Support
    • Contributing
      • Contributing Code
        • Submitting a Patch
        • ⚠️Security Issues
        • Coding Standards
        • Conventions
        • Sylius License and Trademark
      • Contributing Translations
      • Key Contributors
  • The Customization Guide
    • Customizing Models
      • How to add a custom model?
      • How to add a custom translatable model?
    • Customizing Forms
      • How to add a live form for a custom model?
    • Customizing Templates
    • Customizing Styles
    • Customizing Dynamic Elements
    • Customizing Validation
    • Customizing Menus
    • Customizing Translations
    • Customizing Flashes
    • Customizing State Machines
    • Customizing Grids
    • Customizing Fixtures
    • Customizing API
    • Customizing Serialization of API
    • Customizing Payments
      • How to integrate a Payment Gateway as a Plugin?
  • 🧑‍🍳The Cookbook
  • How to resize images?
  • How to add one image to an entity?
  • How to add multiple images to an entity?
  • How to add a custom cart promotion action?
  • How to add a custom cart promotion rule?
  • Sylius 1.X Documentation
    • đź““Sylius 1.x Documentation
Powered by GitBook
LogoLogo

Developer

  • Community
  • Online Course

About

  • Team

© 2025 Sylius. All Rights Reserved

On this page
  • Minor and patch releases
  • Code covered
  • Additional rules
  • Deprecations

Was this helpful?

Edit on GitHub
  1. Release Cycle

Backwards Compatibility Promise

PreviousRelease CycleNextInstallation

Last updated 7 months ago

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.

Minor and patch releases

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.

Code covered

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)

Additional rules

Models & model interfaces

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.

Repositories & repository interfaces

Following the reasoning same as above and due to technological constraints, repository interfaces are also excluded from this BC promise.

Event listeners

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.

Final controllers

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.

Routing

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

Services names cannot change, but new services might be added with sylius. or Sylius\\ prefix.

Templates

Neither template events, block or templates themselves cannot be deleted or renamed.

Deprecations

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:

/**
 * @deprecated Deprecated since version 1.X. Use XXX instead.
 */

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:

trigger_deprecation(
    'sylius/some-package', // package name
    '1.x', // package version
    'A is deprecated and will be removed in Sylius 2.0. Use B instead.', // message
);

You should not use the @trigger_error() function.

Semantic Versioning
Symfony’s Backward Compatibility Promise
Symfony’s Experimental Features