<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pierre-Arthur DEMENGEL</title>
    <description>The latest articles on DEV Community by Pierre-Arthur DEMENGEL (@pierrearthurdemengel).</description>
    <link>https://dev.to/pierrearthurdemengel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3863227%2Fb0fcf750-59c4-4eab-ad3c-a8df536eb2e4.png</url>
      <title>DEV Community: Pierre-Arthur DEMENGEL</title>
      <link>https://dev.to/pierrearthurdemengel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pierrearthurdemengel"/>
    <language>en</language>
    <item>
      <title>Symfony 7 and Sylius 2.0: What Changes for Developers</title>
      <dc:creator>Pierre-Arthur DEMENGEL</dc:creator>
      <pubDate>Sat, 11 Apr 2026 20:25:31 +0000</pubDate>
      <link>https://dev.to/pierrearthurdemengel/symfony-7-and-sylius-20-what-changes-for-developers-ihe</link>
      <guid>https://dev.to/pierrearthurdemengel/symfony-7-and-sylius-20-what-changes-for-developers-ihe</guid>
      <description>&lt;p&gt;Sylius 2.0 supports both Symfony 6.4 LTS and Symfony 7.1+.&lt;/p&gt;

&lt;p&gt;For developers who've been running Sylius 1.x on Symfony 5 or 6, this means a significant stack modernization. Let's break down what Symfony 7 brings to the table and what it means concretely for your Sylius projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Symfony 7: What's Different
&lt;/h2&gt;

&lt;p&gt;Symfony 7 was released in November 2023. It's the "clean" major version that &lt;em&gt;removes&lt;/em&gt; everything deprecated in the 6.x cycle. If you've been ignoring deprecation notices, Symfony 7 is where they become fatal errors.&lt;/p&gt;

&lt;h3&gt;
  
  
  PHP 8.2 Minimum
&lt;/h3&gt;

&lt;p&gt;Symfony 7 requires PHP 8.2+, and Sylius 2.0 aligns with that minimum. If your production servers still run PHP 8.1, you'll need to upgrade your runtime first.&lt;/p&gt;

&lt;p&gt;This is generally a good thing: PHP 8.2 brings readonly classes and significant performance improvements, and if you move to PHP 8.3 you also get typed class constants and the &lt;code&gt;json_validate()&lt;/code&gt; function.&lt;/p&gt;

&lt;h3&gt;
  
  
  All Deprecations Removed
&lt;/h3&gt;

&lt;p&gt;Every method, class, and configuration option that was marked &lt;code&gt;@deprecated&lt;/code&gt; in Symfony 6.x is gone in Symfony 7. The most impactful removals for Sylius projects include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: The old &lt;code&gt;security.encoders&lt;/code&gt; configuration is removed. You must use &lt;code&gt;security.password_hashers&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailer&lt;/strong&gt;: SwiftMailer integration has been removed (the library itself was abandoned by its maintainers in 2021). &lt;code&gt;symfony/mailer&lt;/code&gt; is the standard replacement in Sylius 2.0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing&lt;/strong&gt;: Docblock annotations (&lt;code&gt;@Route&lt;/code&gt; in comments, relying on SensioFrameworkExtraBundle) are no longer supported. Use PHP 8 attributes &lt;code&gt;#[Route]&lt;/code&gt;, which Symfony has supported since 5.2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DI&lt;/strong&gt;: Some container configuration shortcuts have been removed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  New Attributes-First Approach
&lt;/h3&gt;

&lt;p&gt;Symfony 7 doubles down on PHP attributes everywhere: routing, security voters, event subscribers, DI configuration. If your Sylius project still uses YAML or annotation-based configuration for custom controllers and services, now is the time to modernize.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Sylius 2.0
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Twig Hooks Become the Recommended Customization Approach
&lt;/h3&gt;

&lt;p&gt;This change is Sylius-specific, provided by the &lt;code&gt;sylius/twig-hooks&lt;/code&gt; package (which itself supports Symfony 6.4 and 7.x). The old pattern of overriding entire Twig templates by placing files in &lt;code&gt;templates/bundles/&lt;/code&gt; still works but is discouraged in favor of &lt;strong&gt;Twig Hooks&lt;/strong&gt;: a system where you register small template fragments that hook into specific extension points.&lt;/p&gt;

&lt;p&gt;Twig Hooks primarily replaces the older Sylius Template Events and Sonata Block Events systems. The benefit: your customizations are more granular and survive Sylius core updates more cleanly. The cost: existing template overrides need to be rewritten if you want to follow the new approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Symfony Workflow Replaces winzou
&lt;/h3&gt;

&lt;p&gt;Sylius 1.x relied on &lt;code&gt;winzou/state-machine-bundle&lt;/code&gt; for order, payment, and shipping workflows. Sylius 2.0 uses Symfony's native Workflow component.&lt;/p&gt;

&lt;p&gt;Key differences for developers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configuration moves from &lt;code&gt;winzou_state_machine&lt;/code&gt; to &lt;code&gt;framework.workflows&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Callbacks become event subscribers listening to &lt;code&gt;workflow.transition&lt;/code&gt; events&lt;/li&gt;
&lt;li&gt;Guards use Symfony's expression language instead of service callbacks&lt;/li&gt;
&lt;li&gt;The Workflow component has better tooling: the &lt;code&gt;workflow:dump&lt;/code&gt; command generates visual diagrams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: the &lt;code&gt;winzou/state-machine-bundle&lt;/code&gt; package has been moved to the suggested dependencies in Sylius 2.0 and can still be installed manually if needed, but the core Sylius workflows have all migrated to Symfony Workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  Symfony UX Replaces jQuery
&lt;/h3&gt;

&lt;p&gt;The frontend migration isn't just a Sylius decision: it aligns with the broader Symfony ecosystem direction. Symfony UX (Turbo + Stimulus) is the official approach to frontend interactivity in Symfony applications.&lt;/p&gt;

&lt;p&gt;For Sylius developers, this means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more jQuery dependency&lt;/li&gt;
&lt;li&gt;Interactive features use Stimulus controllers instead of inline JS&lt;/li&gt;
&lt;li&gt;Page updates use Turbo Frames and Streams for partial page refreshes&lt;/li&gt;
&lt;li&gt;The asset pipeline changes (Webpack Encore configuration updates; Sylius 2.0 still uses Webpack Encore)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API Platform 4
&lt;/h3&gt;

&lt;p&gt;Sylius 2.0 moves from API Platform 2.7 to API Platform 4, which brings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplified resource configuration (new XML schema &lt;code&gt;metadata/resources-3.0&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;State providers and processors replacing the older data providers and data persisters&lt;/li&gt;
&lt;li&gt;Improved OpenAPI documentation generation&lt;/li&gt;
&lt;li&gt;Improved JSON:API and GraphQL support at the API Platform level (note: Sylius 2.0 doesn't expose GraphQL endpoints by default, but you can enable them)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've written custom API Platform data providers, data persisters, or data transformers, they'll need to be rewritten as state providers, state processors, or serializer context builders. Namespaces change accordingly (for example, classes under &lt;code&gt;Sylius\Bundle\ApiBundle\DataProvider&lt;/code&gt; move to &lt;code&gt;Sylius\Bundle\ApiBundle\StateProvider&lt;/code&gt;). Sylius also prefixes all its serialization groups with &lt;code&gt;sylius:&lt;/code&gt; in 2.0, so any custom resource that extends Sylius groups needs to be updated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Migration Path
&lt;/h2&gt;

&lt;p&gt;Here's the approach I recommend:&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: Prepare on Sylius 1.x (1–2 weeks, depending on project state)
&lt;/h3&gt;

&lt;p&gt;Before touching Sylius 2.0, clean up your current codebase:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upgrade to the latest Sylius 1.x release (1.14 LTS if you're not already there)&lt;/li&gt;
&lt;li&gt;Run PHPUnit with &lt;code&gt;SYMFONY_DEPRECATIONS_HELPER=strict&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fix all Symfony deprecations: encoders → password hashers, annotations → attributes, SwiftMailer → &lt;code&gt;symfony/mailer&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Make sure your tests pass green&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Phase 2: Audit (1–2 days)
&lt;/h3&gt;

&lt;p&gt;Run a comprehensive audit of your project to understand the full migration scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Count template overrides&lt;/li&gt;
&lt;li&gt;List winzou state machine customizations&lt;/li&gt;
&lt;li&gt;Check plugin compatibility&lt;/li&gt;
&lt;li&gt;Inventory frontend customizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;a href="https://sylius-upgrade-analyzer.dev/" rel="noopener noreferrer"&gt;Sylius Upgrade Analyzer&lt;/a&gt; helps. The CLI tool automates this entire audit, scanning your codebase with 49 analyzers organized into 5 thematic families (Templates &amp;amp; Frontend, Deprecations &amp;amp; Breaking Changes, Plugins, Grid &amp;amp; Resource, API Platform) and producing a report with effort estimations. It runs locally, so your code doesn't leave your machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 3: Backend Migration (1–4 weeks)
&lt;/h3&gt;

&lt;p&gt;Tackle backend changes in order of dependency:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update &lt;code&gt;composer.json&lt;/code&gt; to require Sylius 2.0&lt;/li&gt;
&lt;li&gt;Migrate state machine configuration and callbacks&lt;/li&gt;
&lt;li&gt;Update payment gateway integrations&lt;/li&gt;
&lt;li&gt;Fix any remaining deprecated API usages&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Phase 4: Frontend Migration (1–4 weeks)
&lt;/h3&gt;

&lt;p&gt;This can often run in parallel with backend work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Replace Semantic UI classes with Bootstrap 5&lt;/li&gt;
&lt;li&gt;Convert jQuery code to Stimulus controllers&lt;/li&gt;
&lt;li&gt;Update asset build configuration&lt;/li&gt;
&lt;li&gt;Test all interactive features (cart, checkout, admin)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Phase 5: Plugin Updates &amp;amp; QA (1–2 weeks)
&lt;/h3&gt;

&lt;p&gt;Update all plugins, run full regression tests, and validate payment flows. Remember that plugin compatibility varies: some (like several BitBag plugins) already have stable 2.x releases, others are still being ported.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;Symfony 7 + Sylius 2.0 is a major modernization. The resulting stack is cleaner, more maintainable, and better aligned with the PHP ecosystem's direction. The migration effort is real but manageable with proper planning.&lt;/p&gt;

&lt;p&gt;The biggest risk isn't any single change: it's underestimating the combined scope. Audit first, plan methodically, and you'll come out the other side with a much better codebase.&lt;/p&gt;

</description>
      <category>sylius</category>
      <category>symfony</category>
      <category>php</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>Top 10 Mistakes When Migrating Sylius to 2.0</title>
      <dc:creator>Pierre-Arthur DEMENGEL</dc:creator>
      <pubDate>Sat, 11 Apr 2026 20:21:01 +0000</pubDate>
      <link>https://dev.to/pierrearthurdemengel/top-10-mistakes-when-migrating-sylius-to-20-11nn</link>
      <guid>https://dev.to/pierrearthurdemengel/top-10-mistakes-when-migrating-sylius-to-20-11nn</guid>
      <description>&lt;p&gt;After helping several teams plan their Sylius 1.x → 2.0 migration, I've seen the same mistakes come up again and again. Here are the ten most common pitfalls, and how to avoid them.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Treating It Like a Regular Composer Update
&lt;/h2&gt;

&lt;p&gt;Sylius 2.0 is not a minor version bump. Running &lt;code&gt;composer update&lt;/code&gt; and hoping for the best will leave you with a broken application. This is a full platform migration that touches templates, state machines, mailer, payments, and the frontend stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Treat it as a project in its own right with dedicated time, a fresh branch, and a proper test plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Ignoring Template Overrides Until the Last Minute
&lt;/h2&gt;

&lt;p&gt;Template overrides in &lt;code&gt;templates/bundles/SyliusShopBundle/&lt;/code&gt; are the single largest source of migration work. In Sylius 2.0, these overrides still work but are discouraged in favor of Twig Hooks. Many teams postpone this inventory and get blindsided by the volume of files they'll eventually want to convert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Run a full inventory of your template overrides &lt;em&gt;before&lt;/em&gt; estimating the migration effort. Each override can be kept as-is (with technical debt) or mapped to the new Twig Hook equivalent (the recommended path forward).&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Assuming All Plugins Are Compatible
&lt;/h2&gt;

&lt;p&gt;Just because a plugin works on Sylius 1.x doesn't mean it has a 2.0 release. Plugin authors need to update their code for the new architecture, and many haven't done so yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Go through every Sylius plugin in your &lt;code&gt;composer.json&lt;/code&gt;. Check each one on the Sylius Addons marketplace and on GitHub. If a plugin doesn't have a 2.0-compatible version and no announced timeline, plan for a replacement or a fork.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Forgetting About winzou State Machine Callbacks
&lt;/h2&gt;

&lt;p&gt;If you've added custom callbacks to &lt;code&gt;winzou_state_machine&lt;/code&gt; configuration, those won't work with Symfony Workflow. The configuration format, event system, and guard mechanism are all different: guards move from service callbacks to Symfony's expression language, and callbacks become event subscribers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Search your config files for &lt;code&gt;winzou_state_machine&lt;/code&gt;. List every custom callback and transition guard. Each one needs to be rewritten as a Symfony Workflow event subscriber (or expression-language guard, for simple authorization checks).&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Not Testing Payment Flows
&lt;/h2&gt;

&lt;p&gt;Sylius 2.0 introduces Payment Requests as an experimental, event-driven payment architecture. In 2.0, Payum remains the default way to interact with payment gateways, so existing custom Payum gateways keep working, but any customization touching payment logic should be retested end-to-end after migration. Removed core gateways (like Stripe and PayPal Express Checkout, which are no longer shipped with Sylius by default) need particular attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Audit your &lt;code&gt;Payum/&lt;/code&gt; directory and any custom gateway code. Check whether any gateway you rely on was removed from core. Test every payment scenario in your staging environment after migration, and don't assume it "just works."&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Underestimating the Frontend Migration
&lt;/h2&gt;

&lt;p&gt;Moving from Semantic UI + jQuery to Bootstrap 5 + Symfony UX (Turbo + Stimulus) isn't just swapping CSS classes. If your storefront has custom JavaScript interactions, modal behaviors, AJAX calls via jQuery, or custom Semantic UI components, each one needs to be rewritten.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Inventory every &lt;code&gt;.js&lt;/code&gt; file and every template using Semantic UI classes. Estimate frontend work separately from backend work: they're often comparable in effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Migrating Everything at Once
&lt;/h2&gt;

&lt;p&gt;Trying to upgrade Symfony, Sylius, the frontend, and all plugins simultaneously creates a debugging nightmare. When something breaks, you won't know which change caused it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; If possible, first upgrade to the latest Sylius 1.x (1.14 LTS) on Symfony 6.4 LTS. Resolve all deprecations there. Then tackle the 2.0 migration as a separate step.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Skipping the Deprecation Log
&lt;/h2&gt;

&lt;p&gt;Symfony's deprecation layer exists for a reason. Running your Sylius 1.x app and checking the Symfony profiler's deprecation tab tells you exactly what deprecated APIs your code uses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Run your test suite with &lt;code&gt;SYMFONY_DEPRECATIONS_HELPER=strict&lt;/code&gt; in PHPUnit. Fix every deprecation &lt;em&gt;before&lt;/em&gt; starting the 2.0 migration. This removes an entire class of surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. No Migration Roadmap
&lt;/h2&gt;

&lt;p&gt;Starting the migration without a structured plan leads to scope creep, blocked developers, and missed deadlines. Migration touches every layer of the application, so it needs coordination.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Break the migration into phases: audit, deprecation fixes, backend migration, frontend migration, plugin updates, QA. Assign owners and timelines to each phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Doing the Entire Audit Manually
&lt;/h2&gt;

&lt;p&gt;Manually checking every template override, every deprecated service, every plugin version, and every frontend dependency across a large project is slow and error-prone. Important issues get missed, effort estimates are inaccurate, and stakeholders don't get a clear picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Use Sylius Upgrade Analyzer to automate the audit. It scans your project locally with 49 analyzers organized into 5 thematic families (Templates &amp;amp; Frontend, Deprecations &amp;amp; Breaking Changes, Plugins, Grid &amp;amp; Resource, API Platform), and produces a structured report with effort estimations in hours. The CLI is open-source and your code stays on your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Not Communicating the Effort to Stakeholders
&lt;/h2&gt;

&lt;p&gt;Migration isn't just a developer concern. Product managers, project managers, and clients need to understand that this will take dedicated time and may temporarily slow feature delivery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Produce a clear, visual migration report. A PDF with a complexity score, a breakdown by category, and hour estimates speaks louder than a verbal "it'll take a while." This is exactly the kind of deliverable Sylius Upgrade Analyzer generates.&lt;/p&gt;

</description>
      <category>sylius</category>
      <category>symfony</category>
      <category>php</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>Migrating Sylius 1.x to 2.0: A Complete Guide</title>
      <dc:creator>Pierre-Arthur DEMENGEL</dc:creator>
      <pubDate>Sat, 11 Apr 2026 20:18:32 +0000</pubDate>
      <link>https://dev.to/pierrearthurdemengel/migrating-sylius-1x-to-20-a-complete-guide-4kfb</link>
      <guid>https://dev.to/pierrearthurdemengel/migrating-sylius-1x-to-20-a-complete-guide-4kfb</guid>
      <description>&lt;p&gt;Sylius 2.0 is the most significant release since the framework's inception. If you're running a Sylius 1.x store in production, migration is no longer a question of &lt;em&gt;if&lt;/em&gt; but &lt;em&gt;when&lt;/em&gt;. This guide walks you through every major area of change, so you can plan your upgrade with confidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Sylius 2.0 Is a Major Shift
&lt;/h2&gt;

&lt;p&gt;Sylius 2.0 isn't a simple &lt;code&gt;composer update&lt;/code&gt;. The core team has modernized the entire stack. Here's what's changing at a high level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Semantic UI + jQuery are gone, replaced by Bootstrap 5 + Symfony UX (Turbo, Stimulus)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templates&lt;/strong&gt;: &lt;strong&gt;Twig Hooks&lt;/strong&gt; becomes the recommended customization approach, replacing the old template override pattern (still functional but discouraged)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State machines&lt;/strong&gt;: &lt;code&gt;winzou/state-machine-bundle&lt;/code&gt; is replaced by &lt;strong&gt;Symfony Workflow&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailer&lt;/strong&gt;: SwiftMailer is out, &lt;code&gt;symfony/mailer&lt;/code&gt; is in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments&lt;/strong&gt;: the Payum-based flow is being complemented by the new &lt;strong&gt;Payment Requests&lt;/strong&gt; system (experimental in 2.0), which will progressively replace Payum in upcoming minor versions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API&lt;/strong&gt;: API Platform 2.7 migrates to API Platform 4&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these is a migration project in itself. Combined, they can represent weeks or months of work depending on how heavily your project has customized the default Sylius behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 0: Get to Sylius 1.14 First
&lt;/h2&gt;

&lt;p&gt;If your project is on Sylius 1.12 or 1.13, upgrade to 1.14 (the LTS version) first. The official Sylius migration guide recommends this as a prerequisite: it smooths out intermediate deprecations and aligns your codebase with the latest 1.x APIs before tackling the 2.0 jump.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Audit Your Template Overrides
&lt;/h2&gt;

&lt;p&gt;The biggest source of migration effort for most projects is &lt;strong&gt;Twig template overrides&lt;/strong&gt;. If you've overridden 5 templates, it's manageable. If you've overridden 80, you're looking at a significant effort.&lt;/p&gt;

&lt;p&gt;In Sylius 1.x, you customize the storefront by placing template overrides in &lt;code&gt;templates/bundles/SyliusShopBundle/&lt;/code&gt;. In 2.0, overrides still work but are discouraged in favor of Twig Hooks, where you register small, composable template fragments at specific extension points instead of copying entire files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What to do:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List every template you've overridden in &lt;code&gt;templates/bundles/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;For each override, identify &lt;em&gt;what&lt;/em&gt; you changed (often it's just a few lines)&lt;/li&gt;
&lt;li&gt;Map each change to the equivalent Twig Hook in Sylius 2.0&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This mapping exercise is the most time-consuming part of the audit. Each overridden template needs to be analyzed individually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Handle Deprecated Components
&lt;/h2&gt;

&lt;h3&gt;
  
  
  winzou State Machine → Symfony Workflow
&lt;/h3&gt;

&lt;p&gt;If you've defined custom state machine callbacks or transitions, you'll need to rewrite them as Symfony Workflow event subscribers. The configuration format is completely different.&lt;/p&gt;

&lt;p&gt;Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;winzou_state_machine&lt;/code&gt; configuration keys in your YAML files&lt;/li&gt;
&lt;li&gt;Custom callback classes&lt;/li&gt;
&lt;li&gt;Any service that injects &lt;code&gt;StateMachineInterface&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note: the &lt;code&gt;winzou/state-machine-bundle&lt;/code&gt; package has been moved to the suggested dependencies in Sylius 2.0 and can still be installed manually if needed, but the core Sylius workflows have all migrated to Symfony Workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  SwiftMailer → symfony/mailer
&lt;/h3&gt;

&lt;p&gt;This is usually one of the easier migrations. The &lt;code&gt;swiftmailer/swiftmailer&lt;/code&gt; dependency has been completely removed (the library itself was abandoned by its maintainers in 2021). Search for &lt;code&gt;\Swift_Message&lt;/code&gt;, &lt;code&gt;\Swift_Mailer&lt;/code&gt;, and any SwiftMailer-specific configuration, and replace with &lt;code&gt;symfony/mailer&lt;/code&gt; equivalents.&lt;/p&gt;

&lt;h3&gt;
  
  
  Payum and Payment Requests
&lt;/h3&gt;

&lt;p&gt;Sylius 2.0 introduces Payment Requests as an experimental, event-driven payment architecture on top of Symfony Messenger. In 2.0, Payum is still available and remains the default way to interact with payment gateways: Payment Requests is designed to work alongside it and progressively replace it in upcoming minor versions. If you've written custom Payum gateways, they keep working, but you can start exploring Payment Requests for new gateways or headless scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Check Plugin Compatibility
&lt;/h2&gt;

&lt;p&gt;This is a critical and often overlooked step. Every third-party Sylius plugin you use needs to be compatible with Sylius 2.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For each plugin in your &lt;code&gt;composer.json&lt;/code&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check if the plugin has a 2.x-compatible release&lt;/li&gt;
&lt;li&gt;If not, check the plugin's GitHub issues for migration plans&lt;/li&gt;
&lt;li&gt;If no plans exist, you may need to fork the plugin or find an alternative&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The status varies plugin by plugin: some (like several BitBag plugins) already have stable 2.x releases, others are still being ported, and a few smaller community plugins have no announced timeline. Always check the plugin's Packagist page and GitHub repo directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Frontend Migration
&lt;/h2&gt;

&lt;p&gt;If you've customized the storefront's CSS or JavaScript, you'll need to migrate from Semantic UI to Bootstrap 5. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replacing Semantic UI CSS classes (&lt;code&gt;ui button&lt;/code&gt;, &lt;code&gt;ui grid&lt;/code&gt;, etc.) with Bootstrap equivalents&lt;/li&gt;
&lt;li&gt;Rewriting any jQuery code as Stimulus controllers&lt;/li&gt;
&lt;li&gt;Updating your Webpack Encore configuration (Sylius 2.0 still uses Webpack Encore, with new asset organization)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your project uses a fully custom frontend (headless), this step may not apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: API Platform Migration
&lt;/h2&gt;

&lt;p&gt;If you use Sylius's API, you'll need to update from API Platform 2.7 to 4. The concrete changes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serialization groups are now prefixed with &lt;code&gt;sylius:&lt;/code&gt; (e.g., &lt;code&gt;admin:product:index&lt;/code&gt; becomes &lt;code&gt;sylius:admin:product:index&lt;/code&gt;). Non-prefixed groups have been removed, so every custom resource extending Sylius groups needs to be updated.&lt;/li&gt;
&lt;li&gt;DataProviders become StateProviders and DataPersisters become StateProcessors, following API Platform 4's provider/processor pattern. Namespaces change accordingly: classes under &lt;code&gt;Sylius\Bundle\ApiBundle\DataProvider&lt;/code&gt; move to &lt;code&gt;Sylius\Bundle\ApiBundle\StateProvider&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;DataTransformers are gone, some refactored into SerializerContextBuilders.&lt;/li&gt;
&lt;li&gt;Resource configuration files use a new XML schema (&lt;code&gt;metadata/resources-3.0&lt;/code&gt;; note that the "3.0" refers to the schema version, not API Platform's major version).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Estimating the Effort
&lt;/h2&gt;

&lt;p&gt;From experience, here's a rough estimation framework:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project Type&lt;/th&gt;
&lt;th&gt;Customization Level&lt;/th&gt;
&lt;th&gt;Estimated Effort&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Light customization&lt;/td&gt;
&lt;td&gt;&amp;lt; 10 template overrides, no custom plugins&lt;/td&gt;
&lt;td&gt;2 to 5 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium customization&lt;/td&gt;
&lt;td&gt;10 to 30 overrides, 2 to 5 plugins, custom state machines&lt;/td&gt;
&lt;td&gt;2 to 4 weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heavy customization&lt;/td&gt;
&lt;td&gt;30+ overrides, custom payment gateways, heavy JS&lt;/td&gt;
&lt;td&gt;1 to 3 months&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These estimates cover application code migration only. Add time for infrastructure updates (PHP 8.2+ runtime, Node.js 20 or 22), full regression QA, and stakeholder coordination.&lt;/p&gt;

&lt;p&gt;The key variables are: number of template overrides, number of deprecated API usages, and plugin compatibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automating the Audit
&lt;/h2&gt;

&lt;p&gt;Doing this analysis manually for each project is tedious and error-prone. That's exactly why I built &lt;a href="https://sylius-upgrade-analyzer.dev/" rel="noopener noreferrer"&gt;Sylius Upgrade Analyzer&lt;/a&gt;: a CLI tool that scans your Sylius 1.x project and produces a detailed migration report. It checks template overrides, deprecated components, plugin compatibility, frontend dependencies, and calculates an effort estimation in hours.&lt;/p&gt;

&lt;p&gt;The CLI is open-source (MIT license) and runs entirely on your machine, so your code never leaves your environment. If you need a polished PDF report for stakeholders, there's also an optional paid service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start the audit now&lt;/strong&gt;, even if you're not ready to migrate yet. Understanding the scope early avoids surprises.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template overrides are the biggest risk factor.&lt;/strong&gt; Focus your assessment there first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check plugin compatibility before committing to a timeline.&lt;/strong&gt; A single incompatible plugin can block the entire migration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate what you can.&lt;/strong&gt; Manual auditing across dozens of files is where mistakes happen.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sylius 2.0 is a major leap forward for the platform. The migration effort is real, but the result is a more modern, maintainable stack compatible with Symfony 6.4 LTS and Symfony 7. Plan ahead, and you'll get there smoothly.&lt;/p&gt;

</description>
      <category>sylius</category>
      <category>symfony</category>
      <category>php</category>
      <category>ecommerce</category>
    </item>
    <item>
      <title>Sylius 1.x end of support is coming, so I built a CLI to audit your migration to 2.x</title>
      <dc:creator>Pierre-Arthur DEMENGEL</dc:creator>
      <pubDate>Mon, 06 Apr 2026 06:04:36 +0000</pubDate>
      <link>https://dev.to/pierrearthurdemengel/sylius-1x-end-of-support-is-coming-so-i-built-a-cli-to-audit-your-migration-to-2x-2nii</link>
      <guid>https://dev.to/pierrearthurdemengel/sylius-1x-end-of-support-is-coming-so-i-built-a-cli-to-audit-your-migration-to-2x-2nii</guid>
      <description>&lt;p&gt;If you maintain a Sylius 1.x project in production, you already know what's coming. The end of support is approaching, and every site still running on 1.x will have to migrate to 2.x.&lt;/p&gt;

&lt;p&gt;The official Sylius plugin migration guide is still tagged "WIP/experimental" on docs.sylius.com, and the scope of the upgrade is massive: Bootstrap + Symfony UX replacing Semantic UI + jQuery, Twig Hooks replacing template overrides, Symfony Workflow replacing winzou, &lt;code&gt;symfony/mailer&lt;/code&gt; replacing SwiftMailer, Payment Requests introduced alongside Payum, API Platform 4 replacing API Platform 2.7, plus a long list of removed classes, renamed services, and dropped routes.&lt;/p&gt;

&lt;p&gt;Every agency and every lead developer facing this migration does the same thing: open the project, manually dig through every overridden Twig template, check &lt;code&gt;composer.json&lt;/code&gt; plugins one by one against the Marketplace, grep for jQuery calls, count Semantic UI classes, read through &lt;code&gt;UPGRADE-2.0.md&lt;/code&gt; line by line. It takes days and the result is an approximate spreadsheet at best.&lt;/p&gt;

&lt;p&gt;I found that unacceptable, so I built the tool that was missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Sylius Upgrade Analyzer
&lt;/h2&gt;

&lt;p&gt;Sylius Upgrade Analyzer is an open-source CLI tool that installs via Composer, scans a Sylius 1.x project, and produces a full migration diagnostic in seconds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer require &lt;span class="nt"&gt;--dev&lt;/span&gt; pierre-arthur/sylius-upgrade-analyzer

vendor/bin/sylius-upgrade-analyzer sylius-upgrade:analyze
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No configuration needed. It detects your Sylius version from &lt;code&gt;composer.lock&lt;/code&gt; and runs every analyzer against your codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;PHP 8.2 or higher&lt;/li&gt;
&lt;li&gt;Symfony 6.4 or 7.2&lt;/li&gt;
&lt;li&gt;A Sylius 1.x project (compatible with Sylius 1.0 and above)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What It Covers
&lt;/h2&gt;

&lt;p&gt;The tool ships with &lt;strong&gt;49 built-in analyzers&lt;/strong&gt; organized across &lt;strong&gt;5 thematic families&lt;/strong&gt;, all built from the official &lt;code&gt;UPGRADE-2.0.md&lt;/code&gt;, &lt;code&gt;UPGRADE-API-2.0.md&lt;/code&gt;, and &lt;code&gt;CHANGELOG-2.0.md&lt;/code&gt;. Nothing is guessed, everything is sourced.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Templates &amp;amp; Frontend.&lt;/strong&gt; Overridden Sylius templates that should migrate to Twig Hooks, &lt;code&gt;sonata_block_render_event&lt;/code&gt; and &lt;code&gt;sylius_template_event&lt;/code&gt; calls to replace with &lt;code&gt;hook()&lt;/code&gt;, Semantic UI CSS classes still present in templates, jQuery and Semantic UI JS usage in assets, and &lt;code&gt;webpack.config.js&lt;/code&gt; with &lt;code&gt;@symfony/webpack-encore&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Deprecations &amp;amp; Breaking Changes.&lt;/strong&gt; winzou state machine to Symfony Workflow, SwiftMailer to &lt;code&gt;symfony/mailer&lt;/code&gt;, legacy user encoders to &lt;code&gt;password_hashers&lt;/code&gt;, Payum to Payment Requests, message bus renames, command handler namespace changes, removed email managers, removed payment gateways from core, service decorator targets, order processor priorities, form type extension priorities, deprecated Behat contexts, admin menu event changes, translation key renames, promotion rules, shipping calculators, Doctrine XML mapping to PHP attributes, fixture system changes, multi-store channel deprecations, bundle configuration changes, &lt;code&gt;sylius/calendar&lt;/code&gt; to &lt;code&gt;symfony/clock&lt;/code&gt;, security firewall renames, removed user model fields, removed classes (150+), renamed service IDs, removed routes, LiipImagine config changes, changed constructor signatures, grid filter syntax changes, removed &lt;code&gt;use_webpack&lt;/code&gt; config, PHP and Node version requirements, moved classes between bundles, service visibility changes, missing payment request env vars, and removed deprecated bundle packages like FOSRest and JMSSerializer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Plugins.&lt;/strong&gt; Cross-references every Sylius plugin in your &lt;code&gt;composer.json&lt;/code&gt; against the Addons Marketplace API and Packagist to determine compatibility with 2.x.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Grid &amp;amp; Resource.&lt;/strong&gt; Custom grid YAML/PHP customizations, resource bundle config, grid filter entity syntax changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. API Platform.&lt;/strong&gt; Namespace changes, serialization group prefixes, endpoint restructuring, and query extension signature changes.&lt;/p&gt;

&lt;p&gt;Each issue is classified as &lt;code&gt;BREAKING&lt;/code&gt;, &lt;code&gt;WARNING&lt;/code&gt;, or &lt;code&gt;SUGGESTION&lt;/code&gt;, with a time estimate in hours and a direct link to the relevant Sylius documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auto-fix
&lt;/h2&gt;

&lt;p&gt;Detection is useful but fixing is better. The tool includes &lt;strong&gt;41 auto-fixers&lt;/strong&gt; that can apply the most common corrections automatically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vendor/bin/sylius-upgrade-analyzer sylius-upgrade:analyze &lt;span class="nt"&gt;--fix&lt;/span&gt; &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;--dry-run&lt;/code&gt; flag generates a unified diff patch showing what would change without touching any files. When you're confident, drop the flag and let it apply.&lt;/p&gt;

&lt;p&gt;Each fixer has a confidence level. &lt;code&gt;HIGH&lt;/code&gt; means safe to apply without review, like renaming &lt;code&gt;security.encoders&lt;/code&gt; to &lt;code&gt;security.password_hashers&lt;/code&gt; or updating removed service IDs. &lt;code&gt;MEDIUM&lt;/code&gt; means likely correct but worth a manual check, like workflow migration or Sonata block event replacement.&lt;/p&gt;

&lt;p&gt;Among the 41 fixers: Twig Hook YAML generation, winzou to Symfony Workflow conversion, SwiftMailer to &lt;code&gt;symfony/mailer&lt;/code&gt; rewrite, renamed service IDs, security firewall renames, LiipImagine config, Sonata block events to &lt;code&gt;hook()&lt;/code&gt;, grid filter entity syntax, calendar-to-clock replacement, bundle config updates, deprecated package removal, routing import fixes, removed config keys, translation key prefixes, API namespace updates, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Output Formats
&lt;/h2&gt;

&lt;p&gt;The CLI supports six output formats depending on your workflow: Console (the default, with a colored ASCII gauge, severity breakdown and category table), JSON (machine-readable, for CI/CD integration), CSV (Excel-compatible with UTF-8 BOM and semicolon separator), SARIF (GitHub Code Scanning compatible), Markdown (human-readable, suitable for PRs and wikis), and PDF (detailed below).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vendor/bin/sylius-upgrade-analyzer sylius-upgrade:analyze &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json &lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;report.json

vendor/bin/sylius-upgrade-analyzer sylius-upgrade:analyze &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sarif &lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;report.sarif

vendor/bin/sylius-upgrade-analyzer sylius-upgrade:analyze &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;csv &lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;report.csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  GitHub Action
&lt;/h2&gt;

&lt;p&gt;The analyzer runs in CI too. Add it to your workflow and it can fail on breaking issues, upload SARIF to GitHub Code Scanning, and post a summary comment on pull requests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pierrearthurdemengel/sylius-upgrade-analyzer@v1&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;project-path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.'&lt;/span&gt;
    &lt;span class="na"&gt;target-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;2.2'&lt;/span&gt;
    &lt;span class="na"&gt;fail-on-breaking&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;true'&lt;/span&gt;
    &lt;span class="na"&gt;upload-sarif&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;true'&lt;/span&gt;
    &lt;span class="na"&gt;post-pr-comment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;true'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Additional Features
&lt;/h2&gt;

&lt;p&gt;The CLI also supports custom rules via a &lt;code&gt;.sylius-upgrade-rules.yaml&lt;/code&gt; file at the root of your project, baseline management to save and diff results across runs, sprint planning with configurable team velocity, multi-project analysis for agencies managing several Sylius sites, report comparison to track migration progress, and webhook notifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  PDF Reports
&lt;/h2&gt;

&lt;p&gt;The sixth output format is PDF, generated via a web service at &lt;code&gt;sylius-upgrade-analyzer.dev&lt;/code&gt;. This is the only paid part. Your source code never leaves your machine: the CLI sends the JSON report only, the service generates a professional PDF with migration roadmap and time estimates, and sends it back. No source code transits.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vendor/bin/sylius-upgrade-analyzer sylius-upgrade:analyze &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;json &lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;report.json

vendor/bin/sylius-upgrade-analyzer sylius-upgrade:upload report.json &lt;span class="nt"&gt;--api-key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sua_xxx &lt;span class="nt"&gt;--output&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;report.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three plans are available: &lt;strong&gt;Report&lt;/strong&gt; at 59 EUR for a single PDF, &lt;strong&gt;Studio&lt;/strong&gt; at 299 EUR per year for unlimited white-label reports with your agency's branding, and &lt;strong&gt;Agency&lt;/strong&gt; at 799 EUR per year adding multi-seat keys and consolidated multi-project reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/pierrearthurdemengel/sylius-upgrade-analyzer" rel="noopener noreferrer"&gt;github.com/pierrearthurdemengel/sylius-upgrade-analyzer&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Web service: &lt;a href="https://sylius-upgrade-analyzer.dev" rel="noopener noreferrer"&gt;sylius-upgrade-analyzer.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The end of Sylius 1.x support is not a question of if but when. If you have projects to migrate, give it a try and let me know what's missing.&lt;/p&gt;

</description>
      <category>php</category>
      <category>symfony</category>
      <category>sylius</category>
    </item>
  </channel>
</rss>
