<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Spryker Documentation</title>
        <description>Spryker documentation center.</description>
        <link>https://docs.spryker.com/</link>
        <atom:link href="https://docs.spryker.com/feed.xml" rel="self" type="application/rss+xml"/>
        <lastBuildDate>Thu, 03 Sep 2026 15:31:09 +0000</lastBuildDate>
        <generator>Jekyll v4.2.2</generator>
        
        
        <item>
            <title>Release notes 202608.0</title>
            <description>## B2B Business-Ready Commerce Experiences

### Recurring Orders: general availability {% include badge.html type=&quot;feature&quot; %}

Recurring Orders is now generally available. This release gives buyers real control over an upcoming order before it is placed. They can handle the exceptions that used to break a schedule f.e. swapping in a replacement when a product is discontinued, adjusting quantities, adding products that were missed and decide whether each change applies once or permanently. Budget problems can be corrected by the buyer directly rather than raised as a ticket

**Key capabilities:**
- Adjust an upcoming order before it is placed: replace an item that is no longer available, add or remove lines, and change quantities.
- Choose whether a change applies to the next delivery only or to every delivery from now on.
- Move an order to a different budget or cost center without cancelling the schedule.
- Resolve an order that is in review because of an exceeded budget.
- Proactively editing for Schedule Name, Frequency, Budget &amp; Cost Center, Next Execution date
- Run schedules with up to 200 line items, at the speed buyers expect across list, overview, and review screens.

**Business benefits:**
- Supply continuity. A missed replenishment can stop a production line. Schedules that survive real-world exceptions keep materials arriving without anyone watching the calendar.
- Procurement capacity freed up. Repeat orders are already-made decisions. Automating them lets buyers spend their time on sourcing, not re-keying the same basket.
- Spend stays inside the guardrails. Budget and cost center governance travels with every scheduled order, so automation never becomes a route around approval control.
- Stickier customers. A buyer who runs replenishment through your storefront has embedded you in their production workflow, switching becomes a procurement project, not a price comparison.


**Documentation:**
- [Recurring Orders feature overview](https://docs.spryker.com/docs/pbc/all/order-experience-management/latest/base-shop/feature-overviews/recurring-orders-feature-overview)
- [Install the Recurring Orders feature](https://docs.spryker.com/docs/pbc/all/order-experience-management/latest/base-shop/install-and-upgrade/install-features/install-the-recurring-orders-feature)
- [Recurring Orders GA release](https://api.release.spryker.com/release-group/6689)

### Workflows {% include badge.html type=&quot;feature,early-access&quot; %}

This release introduces a workflows infrastructure that lets teams model and manage workflows for different business entities directly in the Back Office, without requiring code changes or deployment. It provides a reusable, auditable, and versioned workflows foundation built on top of the existing state machine engine.

{% include carousel.html
images=&quot;
https://d2s0ynfc62ej12.cloudfront.net/docs/About/all/releases/release-notes-202608.0.md/workflows_1.jpg||::
https://d2s0ynfc62ej12.cloudfront.net/docs/About/all/releases/release-notes-202608.0.md/workflows_2.jpg||::
https://d2s0ynfc62ej12.cloudfront.net/docs/About/all/releases/release-notes-202608.0.md/workflows_now_next.gif||&quot;
%}

**Key capabilities:**
- Create and adjust workflows directly in the Back Office, including states, transitions, events, conditions, and timeouts that define each process
- Manage workflow versions and control which version is active
- Monitor workflow progress across different entities, with support for project-specific requirements

**Business benefits:**
- Enables business teams to create and adjust workflows faster without developer involvement
- Reduces duplication by replacing one-off workflow implementations with one reusable infrastructure
- Improves governance through versioned definitions and controlled building blocks

**Documentation:**
- [Workflows feature overview](https://docs.spryker.com/docs/pbc/all/back-office/latest/base-shop/workflows-feature-overview)
- [Workflows installation guide](https://docs.spryker.com/docs/dg/dev/integrate-and-configure/integrate-workflow-feature)

### Spryker Design System Storefront {% include badge.html type=&quot;improvement&quot; %}

This release extends the Spryker Design System in the storefront by modernizing the product listing page and merchant profile page. It helps create a more consistent buying journey for B2B customers while giving teams a scalable foundation for future storefront enhancements.

&lt;figure class=&quot;video_container&quot;&gt;
    &lt;video width=&quot;100%&quot; height=&quot;auto&quot; controls&gt;
      &lt;source src=&quot;https://d2s0ynfc62ej12.cloudfront.net/docs/About/all/releases/release-notes-202608.0.md/Design_System_PLP.mp4&quot; type=&quot;video/mp4&quot;&gt;
  &lt;/video&gt;
&lt;/figure&gt;

**Key capabilities:**
- Modernized product listing page based on the B2B design system
- Added a reusable merchant page template for consistent merchant content
- Expanded the storefront design foundation introduced in earlier design-system phases

**Business benefits:**
- Improves product discovery with a more consistent and efficient browsing experience
- Increases storefront visual consistency for B2B buyers
- Reduces future design and development effort through reusable page structures

### Algolia API update {% include badge.html type=&quot;improvement&quot; %}

The Algolia integration has been updated to use the newer PHP client version. This change helps keep the integration aligned with the supported Algolia SDK lifecycle and reduces risk related to the older client reaching the end of SLA.

**Key capabilities:**
- Updates the integration to the newer Algolia PHP client version
- Aligns the integration with Algolia&apos;s current supported SDK direction
- Prepares customers for continued use without relying on an outdated client

**Business benefits:**
- Reduces support and lifecycle risk for customers using the Algolia integration
- Improves confidence in long-term maintainability
- Helps customers stay current with less ambiguity around SDK support status

**Documentation:**
- [Algolia module update](https://github.com/spryker-eco/algolia/releases/tag/2.0.0)
- [Migration guide](https://docs.spryker.com/docs/pbc/all/search/latest/base-shop/third-party-integrations/algolia/upgrade-the-algolia-module)


### Vertex Back Office Configuration {% include badge.html type=&quot;feature&quot; %}

The Vertex configuration page in the Back Office has been updated to reflect the new integration and replace legacy App Composition Platform-oriented fields. This makes the setup clearer and better aligned with the current Vertex integration experience.

**Key capabilities:**
- Updates Vertex configuration fields in the Back Office
- Replaces legacy field structure inherited from the previous ACP-based setup
- Aligns configuration with the new integration model

**Business benefits:**
- Simplifies Vertex setup for business and implementation teams
- Reduces confusion caused by outdated configuration fields
- Helps shorten implementation and configuration time

**Documentation:**
- [Configure Vertex in the Back Office](https://docs.spryker.com/docs/pbc/all/tax-management/latest/base-shop/third-party-integrations/vertex/install-vertex/configure-vertex-in-the-back-office)

## Connected, and AI-Enabled Platform

### AI Dev SDK: Introduce Project Setup Wizard {% include badge.html type=&quot;feature,early-access&quot; %}

The AI Dev SDK now provides a guided setup wizard for new Spryker B2B Marketplace projects based on a fresh demoshop clone. It captures project decisions once and applies them through a resumable setup workflow. This helps teams move faster from initial clone to a verified, project-shaped shop.

&lt;figure class=&quot;video_container&quot;&gt;
    &lt;video width=&quot;100%&quot; height=&quot;auto&quot; controls&gt;
      &lt;source src=&quot;https://d2s0ynfc62ej12.cloudfront.net/docs/About/all/releases/release-notes-202608.0.md/AI_DEV_SDK_project_wizard.mp4&quot; type=&quot;video/mp4&quot;&gt;
  &lt;/video&gt;
&lt;/figure&gt;

**Key capabilities:**
- Runs a guided setup interview covering project identity, services, stores, localization, CI, and run mode
- Applies setup decisions through orchestrated steps with resume support if the process is interrupted
- Produces setup artifacts, verification results, and a summary of remaining manual actions

**Business benefits:**
- Reduces time and effort needed to initialize a new project
- Improves consistency across early project setup decisions
- Gives teams a clearer and more reliable path to a ready-for-scope development environment

**Documentation:**
- [AI Dev SDK Project Starter Wizard](https://docs.spryker.com/docs/dg/dev/ai/ai-dev/ai-dev-project-starter-wizard)

### AI Dev SDK: Introduce Project Upgrade Helper {% include badge.html type=&quot;feature,early-access&quot; %}

The AI Dev SDK now includes an AI-assisted upgrade workflow for customized Spryker projects. It carries a project from its current release to the target one, adopting major module releases into existing project code and verifying the result against a running application. Team checkpoints keep release choice and feature adoption under explicit control.

**Key capabilities:**
- Moves a customized project onto the target Spryker release and resolves the dependency work automatically
- Adopts major module releases into project code by applying the official migration guides to existing customizations
- Realigns customizations, including customized storefront and Back Office screens, with the updated platform
- Verifies the upgraded project against a running application, covering artifact regeneration, tests, and key pages
- Keeps release choice and new feature adoption under team control at defined checkpoints
- Records progress and findings so an upgrade can pause, resume, and run as repeatable CI checks

**Business benefits:**
- Turns weeks of manual upgrade investigation into a guided, largely automated run
- Keeps existing customizations working instead of quietly going dead after an upgrade
- Adopts new platform capabilities only when the team chooses them
- Makes upgrades reviewable and resumable across sprints

**Documentation:**
- [AI Dev SDK Upgrade Workflow](https://docs.spryker.com/docs/dg/dev/ai/ai-dev/ai-dev-upgrade-workflow)

### AI Dev SDK: Autonomous Bugfixer &amp; Improved Customization Workflow {% include badge.html type=&quot;early-access&quot; %} {% include badge.html type=&quot;feature&quot; %}

The AI Dev SDK introduces a new guided workflow for turning bug reports into validated project changes and improves the existing workflow for feature requests. Teams can start with plain-language input and follow an orchestrated path through planning, implementation, verification, and review, while retaining decision-making throughout the workflow and reviewing and approving changes before they are delivered.

**Key capabilities:**
- Improves feature implementation from request intake through acceptance criteria, implementation planning, coding, and verification
- Supports bug fixing from symptom or ticket intake through reproduction, root-cause analysis, minimal fix, testing, QA, and final verification
- Produces traceable reports and supports collaborative or autonomous execution modes

**Business benefits:**
- Speeds up delivery from request or incident to validated change
- Reduces manual handoffs across implementation, QA, and review steps
- Improves consistency and traceability in AI-assisted development workflows

**Documentation:**
- [AI Dev SDK Bugfix Workflow](https://docs.spryker.com/docs/dg/dev/ai/ai-dev/ai-dev-bugfix-workflow)
- [AI Dev SDK Customization Workflow](https://docs.spryker.com/docs/dg/dev/ai/ai-dev/ai-dev-customization-workflow)

### AI Commerce: Configurable Instructions Prompt {% include badge.html type=&quot;improvement,early-access&quot; %}

AI Commerce feature prompts can now be configured consistently through the Back Office across the platform, rather than being hardcoded in the codebase. This applies to capabilities such as Search by Image, Visual Add-to-Cart, the Back Office Assistant, and Smart PIM.

Teams can customise prompts more easily to reflect project-specific language, tone, and business requirements, without requiring deployments or support from developer teams.

**Key capabilities:**
- Moves prompt definitions to configurable project-level settings with default values provided out of the box
- Supports prompt customization without changing the codebase
- Enables easier tuning of AI behavior for specific catalogs, industries, and branding needs

**Business benefits:**
- Makes AI Commerce features easier to adapt for different business contexts
- Reduces custom code and upgrade friction in AI Commerce projects
- Shortens iteration cycles for prompt tuning and testing

**Documentation:**
- [AI Commerce Overview](https://docs.spryker.com/docs/dg/dev/ai/ai-commerce/ai-commerce-overview)

## Efficient and Flexible Cloud Foundation

### Enhancements to Symfony Scheduler {% include badge.html type=&quot;improvement&quot; %}

We improved scheduled job management to give teams more control and better visibility in the Back Office and PaaS environment. You can now manage job execution more easily, run multiple schedules in parallel within the same container, and review richer operational logs and status information.

{% include carousel.html
images=&quot;
https://spryker.s3.eu-central-1.amazonaws.com/docs/About/Releases/release-notes-202608/scheduler2.png||::
https://spryker.s3.eu-central-1.amazonaws.com/docs/About/Releases/release-notes-202608/scheduler1.png||&quot;
%}

**Key capabilities:**
- Start, stop, enable, and disable scheduled jobs from the Back Office
- Run multiple scheduled jobs in parallel in the same container to reduce infrastructure overhead
- View job status details such as running, waiting, error state, worker name, timing, priority, and error logs of the last run

**Business benefits:**
- Reduces operational effort for managing scheduled jobs
- Improves transparency for support and business teams through better job visibility
- Helps optimize infrastructure usage and costs

**Release:**
- [Enhancements to Symfony Scheduler](https://api.release.spryker.com/release-group/6718)

**Documentation:**
- [Integrate Symfony Messenger](https://docs.spryker.com/docs/dg/dev/integrate-and-configure/integrate-symfony-messenger)
- [Integrate Symfony Scheduler](https://docs.spryker.com/docs/dg/dev/integrate-and-configure/integrate-symfony-scheduler)

### Maintenance and Service Updates {% include badge.html type=&quot;improvement&quot; %}

We delivered routine maintenance and service updates across the cloud foundation to keep environments secure, reliable, and aligned with current technology standards. These updates introduce PHP 8.5 as the default runtime version, add initial support for OpenSearch 2.x and 3.x, and establish the foundation for migrating from AWS OpenSearch 1.x.

**Key capabilities:**
- Added PHP 8.5 support to Docker SDK PHP images and enabled it as the default version. PHP 8.2 images are still available, while discontinuing further image generation for that version [after 2026](https://www.php.net/supported-versions.php)
- Added compatibility for indexing, reading, and writing data with newer OpenSearch versions.
- Support for the newer OpenSearch version in Spryker PaaS comes in the next release.

**Business benefits:**
- Improves security and stability through up-to-date platform components
- Helps teams remain aligned with supported PHP and OpenSearch technology versions
- Reduces operational risk and technical debt

**Documentation:**
- [Upgrade to PHP 8.5](https://docs.spryker.com/docs/dg/dev/upgrade-and-migrate/upgrade-to-php-85)
- [Supported versions of PHP](https://docs.spryker.com/docs/dg/dev/supported-versions-of-php)
- [OpenSearch migration to 3.5](https://docs.spryker.com/docs/pbc/all/search/latest/base-shop/install-and-upgrade/migrate-from-opensearch-1.3-to-3.5)

### Frontend builder for Yves moved into ShopUi {% include badge.html type=&quot;improvement&quot; %}

We moved the Yves builder into ShopUi and introduced a cleaner extension approach for project-level customization. This makes the builder more reusable, configurable, and easier to maintain across projects.

**Key capabilities:**
- Builder logic is now centralized in ShopUi instead of the project layer
- Project teams can extend entry paths, discovery paths, and namespaces through configuration
- Supports project-level overrides without changing module internals

**Business benefits:**
- Reduces customization effort for frontend builds
- Improves maintainability and reuse across projects
- Simplifies frontend setup while preserving existing storefront behavior

**Documentation:**
- [Frontend builder for Yves v2](/docs/dg/dev/frontend-development/latest/yves/frontend-builder-for-yves-v2)
- [Upgrade to frontend builder v2 for Yves](/docs/dg/dev/upgrade-and-migrate/upgrade-to-frontend-builder-v2-for-yves)

### Dynamic multistore locale visibility fixes {% include badge.html type=&quot;improvement&quot; %}

We fixed an issue where adding a new locale via Dynamic Multistore could result in products, category trees, and navigation not being visible as expected.

**Key capabilities:**
- Correctly populates entities with data for newly added locales
- Restores product visibility for newly added locales
- Ensures category trees and navigation are displayed correctly after locale addition


**Business benefits:**
- Reduces setup issues when expanding into new locales
- Helps teams launch localized storefronts with fewer manual corrections
- Ensures consistent and complete entity data across stores and locales

**Documentation:**
- [Adjusted editing navigation for new locale](https://api.release.spryker.com/release-group/6658)

### Customer login consistency improvements {% include badge.html type=&quot;improvement&quot; %}

We fixed an issue that could break login behavior when a customer signed in from different places.

**Key capabilities:**
- Improves login handling across multiple customer sessions
- Prevents disruptions caused by parallel or distributed login activity
- Stabilizes customer authentication behavior

**Business benefits:**
- Reduces customer login friction
- Improves reliability of the customer account experience
- Lowers support effort related to authentication issues

**Documentation:**
- [Fixed session handler to avoid behavior inconsistency](https://api.release.spryker.com/release-group/6656)

### Reservation aggregation across multiple plugins {% include badge.html type=&quot;improvement&quot; %}

We introduced a new, more flexible plugin stack for reservation calculation. The new mechanism executes all configured reservation aggregation plugins, ensuring that reservation data is processed completely and accurately.

**Key capabilities:**
- Executes multiple reservation aggregation plugins in sequence
- Prevents incomplete aggregation when reservations span multiple stores or warehouses
- Avoids incorrect merging behavior during reservation processing
- Provides a more flexible foundation for extending reservation calculation logic

**Business benefits:**
- Improves inventory and reservation accuracy
- Supports more complex multi-store and warehouse setups
- Reduces risk of stock inconsistencies

**Documentation:**
- [Install the Packaging Units feature](https://docs.spryker.com/docs/pbc/all/product-information-management/latest/base-shop/install-and-upgrade/install-features/install-the-packaging-units-feature#set-up-behavior)
- [Install the Marketplace Inventory Management + Order Management feature](https://docs.spryker.com/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-order-management-feature#prerequisites)
- [Install the Marketplace Inventory Management + Packaging Units feature](https://docs.spryker.com/docs/pbc/all/warehouse-management-system/latest/marketplace/install-features/install-the-marketplace-inventory-management-packaging-units-feature#set-up-behavior)
- [Multistore reservation aggregation](https://api.release.spryker.com/release-group/6611)
- [Fix reservation aggregation request expander](https://api.release.spryker.com/release-group/6676)

### API Platform nested object schema support {% include badge.html type=&quot;improvement&quot; %}

We extended API Platform resource YAML so a list of objects can declare its element shape. A `type: array` property with a sibling items block now publishes the element as a referenced component schema, instead of a bare untyped array. Single nested objects were already typed; this closes the gap for collections.

Key capabilities:
- Declare `items: {type: object, properties: …}` alongside `type: array` in a resource schema
- The generated OpenAPI document references a generated element schema and registers it in the same document
- Lists of scalars and canonical (shared) object shapes are supported
- Existing providers keep working — assigning raw arrays is still valid; no provider rewrite required

Adoption is per field, and opt-in for a reason: a typed element is a closed shape. Adding items to a list that is already part of a released response silently drops every payload key you did not declare. Before adopting an existing field, diff a real response payload against your intended items.properties. New fields are unaffected. Storefront APIs are unchanged.

Note: openapiContext.items is documentation passthrough only — it generates nothing. Only a sibling of type: array produces a typed element schema.

Documentation:
- [Typed collections in the published contract](/docs/integrations/spryker-api/api-platform/typed-collections.html)
- [Object collections](/docs/integrations/spryker-api/api-platform/resource-schemas.html#object-collections)

### Graceful handling of email delivery failures {% include badge.html type=&quot;improvement&quot; %}

We improved email sending mechanisms across Storefront, Back Office, Merchant Portal, and API to handle delivery failures gracefully without causing system errors or disrupting application workflows.

**Key capabilities:**
- Prevents email delivery failures from interrupting or causing the failure of primary business processes, including cases where email addresses or domains are not whitelisted in AWS SES sandbox mode.
- Displays clear, non-disruptive error messages with error codes in the Storefront, Merchant Portal, and Back Office, while allowing the primary user action to complete successfully.
- Records comprehensive details for every email delivery failure, including the email type, sender, recipients, and relevant exception details.
- Logs email delivery failures that occur during Order Management System (OMS) processing without halting execution or leaving orders stuck.
- Standardizes REST/Glue API responses to return a 422 Unprocessable Entity status code instead of a 500 Internal Server Error

**Business benefits:**
- Delivers a smooth user experience by preventing app crashes during email failure scenarios
- Reduces support overhead and troubleshooting effort for technical and operations teams

**Documentation:**
- [Email service](/docs/ca/dev/email-service/email-service)
- [Email deliverability](/docs/ca/dev/email-service/email-deliverability)

### Community contributions {% include badge.html type=&quot;improvement&quot; %}

We included several community-driven improvements in this release. These contributions help improve compatibility and code quality in commonly used modules.

**Key capabilities:**
- Made QuoteApproval compatible with PropelBehavior
- Replaced docblocks with typed class constants in Transfer
- Added support for sensitive properties in Transfer

**Business benefits:**
- Brings practical enhancements contributed by the community
- Improves maintainability, security, and compatibility in key modules
- Strengthens collaboration across the Spryker ecosystem

**Documentation:**
- [New community PR: Make QuoteApproval compatible to PropelBehavior](https://api.release.spryker.com/release-group/6664)
- [New community PR: Add support of sensitive properties](https://api.release.spryker.com/release-group/6657)
</description>
            <pubDate>Thu, 03 Sep 2026 08:07:01 +0000</pubDate>
            <link>https://docs.spryker.com/docs/about/all/releases/release-notes-202608.0.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/about/all/releases/release-notes-202608.0.html</guid>
            
            
        </item>
        
        <item>
            <title>Upgrade to PHP 8.5</title>
            <description>This document describes how to upgrade PHP to version 8.5. This upgrades the version in Docker environment and `composer.json`.

{% info_block infoBox &quot;Minimum supported version&quot; %}

PHP 8.5 is the recommended version, but PHP 8.3 remains the minimum version Spryker modules support. You can upgrade your project to PHP 8.5 without waiting for the minimum version to change. Support for PHP 8.3 will be dropped in July 2027.

{% endinfo_block %}

## 1. Check project code for PHP compatibility using PHPCompatibility

To make sure your project is compatible with PHP 8.5, follow the steps:

1. Require the `php-compatibility` package:

```bash
composer require --dev phpcompatibility/php-compatibility --ignore-platform-reqs
```

2. Configure `phpcs` to use `php-compatibility` rules:

```bash
vendor/bin/phpcs --config-set installed_paths vendor/phpcompatibility/php-compatibility
```

3. Execute the `php-compatibility` sniffer for PHP 8.5:

```bash
vendor/bin/phpcs -p src/ --standard=PHPCompatibility  --runtime-set testVersion 8.5
```

This returns the code that&apos;s not compatible with PHP 8.5.

4. Fix all the discovered incompatibilities.

## 2. Check and resolve incompatible dependencies

1. Identify any dependencies that are not compatible with PHP 8.5:

```bash
composer why-not php 8.5
```

The command listed dependencies that are not compatible with PHP 8.5, along with the reasons why they can&apos;t be upgraded.

2. Update dependencies. Check if there are newer versions of these dependencies that support PHP 8.5. You can do this by visiting the package&apos;s repository or checking its documentation.
If updates are available, update your `composer.json` file to require these newer versions.

3. Resolve conflicts. If newer versions are not available, you may need to find alternative packages that are compatible with PHP 8.5. Search for alternative packages on Packagist or other package repositories.

Pay particular attention to static analysis and testing tools. Because they run on the same PHP version as your application, an outdated analyzer can fail on a new PHP minor even when your own code is fine.

## 3. Update composer.json

1. Set the minimum required PHP version to 8.5:

```bash
&quot;require&quot;: {
  &quot;php&quot;: &quot;&gt;=8.5&quot;,
}
```

2. Define PHP 8.5 as the platform version for dependency resolution:

```bash
&quot;config&quot;: {
  &quot;preferred-install&quot;: &quot;dist&quot;,
  &quot;platform&quot;: {
    &quot;php&quot;: &quot;8.5.0&quot;
  },
```

3. Update dependencies:

```bash
composer update
```

This updates the dependencies to the latest versions that are compatible with PHP 8.5.

## 4. Upgrade Codeception to version 5.3.4 or later

Running tests on PHP 8.5 requires Codeception 5.3.4 or later.

1. Check the installed Codeception version:

```bash
composer show codeception/codeception
```

2. If the installed version is earlier than 5.3.4, upgrade it:

```bash
composer update codeception/codeception
```

{% info_block infoBox &quot;Why it&apos;s needed&quot; %}

On PHP 8.5, Codeception versions earlier than 5.3.4 fail during configuration on every run with the following error:

```text
Fatal error: Uncaught Codeception\Exception\ConfigurationException: register_argc_argv must be set to On for running Codeception
```

Codeception versions earlier than 5.3.4 rely on the `register_argc_argv` PHP setting to read command-line arguments. That mechanism no longer works on PHP 8.5, so Codeception aborts before any test executes. Codeception 5.3.4 or later reads command-line arguments without `register_argc_argv`, so it is required for running tests on PHP 8.5.

Setting `register_argc_argv=On` in the PHP configuration is only a workaround: it masks the error in the current environment and leaves the incompatibility in place.

{% endinfo_block %}

## 5. Update Docker configuration

1. In all `deploy.yml` files, update the PHP image:

```bash
image:
    tag: spryker/php:8.5
    environment:
```

2. Apply the changes by restarting the application:

```bash
docker/sdk boot &amp;&amp; docker/sdk up --build
```

## 6. Resolve common PHP 8.5 deprecations

The deprecations below are the ones most likely to appear in a Spryker-based project. They are new in PHP 8.5: on PHP 8.3 and 8.4 the same calls emit nothing at all.

Several of them concern calls that stopped having any effect in an earlier release—the notice itself states both dates, for example `deprecated since 8.5, as it has no effect since PHP 8.1`. Because such a call is already a no-op, removing it changes no behavior, and the fix is valid on PHP 8.3 and 8.4 as well. You can therefore clean these up before switching versions.

Deprecations emit an `E_DEPRECATED` notice and keep working, so they do not break your application, but they flood your logs and hide real problems.

| Deprecated call | Resolution |
| --- | --- |
| `ReflectionProperty::setAccessible()`, `ReflectionMethod::setAccessible()` | Remove the call. Since PHP 8.1, Reflection accesses private and protected members without it. |
| `curl_close()`, `curl_share_close()`, `imagedestroy()`, `finfo_close()`, `xml_parser_free()` | Remove the call. These handles became objects in PHP 8.0 and are released automatically. |
| `new ArrayObject($object)`, `new ArrayIterator($object)` | Pass an array instead: `new ArrayObject([$object])` for a single item, or `new ArrayObject($arrayObject-&gt;getArrayCopy())` to copy an existing collection. |
| Non-canonical casts `(boolean)`, `(integer)`, `(double)`, `(binary)` | Use `(bool)`, `(int)`, `(float)`, `(string)`. This one is reported at compile time, so it surfaces even for code paths that never run. |

For the complete list, see [Deprecated Features PHP 8.5](https://www.php.net/manual/en/migration85.deprecated.php).

{% info_block warningBox &quot;Passing an object to ArrayObject may hide a bug&quot; %}

When you pass a plain object—for example, a transfer object—to `ArrayObject`, PHP builds the collection from the object&apos;s *property table*, not from the object itself. The resulting collection contains the object&apos;s properties rather than the object. This is already incorrect on PHP 8.3 and 8.4; the PHP 8.5 notice only makes it visible. Check such places for correctness instead of only silencing the notice.

{% endinfo_block %}

## 7. Test the upgrade

Thoroughly test your application to identify any issues because of the PHP version upgrade:

- Automated tests: Run unit, integration, and functional tests.
- Manual testing: Test critical application functionality.
- Monitor for deprecations: Check for deprecation notices or warnings that may arise from running on PHP 8.5.

{% info_block infoBox &quot;Deprecations are suppressed by default&quot; %}

By default, Spryker excludes `E_DEPRECATED` and `E_USER_DEPRECATED` from `ErrorHandlerConstants::ERROR_LEVEL`, so deprecation notices are neither logged nor thrown. A plain test run therefore reports nothing even when deprecations occur. To collect them, run with `SPRYKER_DEBUG_DEPRECATIONS_ENABLED=1`: deprecations are then written to the log, and because they are listed in `ErrorHandlerConstants::ERROR_LEVEL_LOG_ONLY`, they are still not converted into exceptions.

{% endinfo_block %}
</description>
            <pubDate>Thu, 03 Sep 2026 07:56:42 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/upgrade-and-migrate/upgrade-to-php-85.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/upgrade-and-migrate/upgrade-to-php-85.html</guid>
            
            
        </item>
        
        <item>
            <title>Keeping dependencies updated for performance</title>
            <description>Keeping your project&apos;s Spryker module dependencies up to date is critical for maintaining optimal performance, security, and reducing long-term upgrade efforts.

## Why keep dependencies updated

Updating dependencies regularly provides several practical benefits:

1. **Risk of security vulnerabilities**: Most recent versions contain necessary fixes to all known vulnerabilities.
2. **Performance and resource consumption optimizations**: Spryker continuously releases performance improvements based on real-life experiences and scenarios.
3. **Decreasing upgrade efforts**: Distributing upgrades across many smaller steps is much easier than doing one massive upgrade later.

## Key resources

The following resources provide information about performance-related module releases:

- [Security release notes 202512.0](https://docs.spryker.com/docs/about/all/releases/security-releases/security-release-notes-202512.0.html)
- [Release notes 202410.0](https://docs.spryker.com/docs/scos/user/intro-to-spryker/releases/release-notes/release-notes-202410.0/release-notes-202410.0.html)
- [Release notes 202507.0](https://docs.spryker.com/docs/scos/user/intro-to-spryker/releases/release-notes/release-notes-202507.0/release-notes-202507.0.html)
- [General performance guidelines](/docs/dg/dev/guidelines/performance-guidelines/general-performance-guidelines.html) - contains the list of recent module versions with known performance optimizations
- [Cart page performance configuration](https://docs.spryker.com/docs/pbc/all/cart-and-checkout/latest/cart-page-performance-configuration.html)

## Critical module updates

The following sections list important module updates that include performance improvements. It&apos;s recommended that each Spryker project evaluates and applies these updates.

### Product search performance

**spryker/product-page-search** - Recent versions (for example, `3.38.0` - `3.40.0`) include improvements such as:
- Caching logic adjustments for product images
- Potential bulk operation support to make search document writes more efficient
- Avoiding duplicate locale events

### Session management

**spryker/session** - at least `^4.17.0`
- Provides configurable session locking mechanism
- See [Redis session lock](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/redis-session-lock.html) for configuration details

**spryker/session-redis** - at least `^1.11.2`
- Includes configurable session locker
- See [Redis session lock](/docs/dg/dev/troubleshooting/troubleshooting-performance-issues/redis-session-lock.html) for setup instructions

### Merchant Portal and Back Office performance with ACL rules

- [spryker/acl:^3.26.0](https://github.com/spryker/acl/releases/tag/3.26.0)
- [spryker/acl-entity:^1.16.0](https://github.com/spryker/acl-entity/releases/tag/1.16.0)
- [spryker/gui:^4.11.0](https://github.com/spryker/gui/releases/tag/4.11.0)
- [spryker/merchant-profile:^1.9.0](https://github.com/spryker/merchant-profile/releases/tag/1.9.0)
- [spryker/merchant-user:^1.9.0](https://github.com/spryker/merchant-user/releases/tag/1.9.0)
- [spryker/multi-factor-auth-merchant-portal:^2.1.0](https://github.com/spryker/multi-factor-auth-merchant-portal/releases/tag/2.1.0)
- [spryker/product-attribute:^1.18.0](https://github.com/spryker/product-attribute/releases/tag/1.18.0)
- [spryker/zed-navigation:^1.15.0](https://github.com/spryker/zed-navigation/releases/tag/1.15.0)

### Back Office performance on category list page

- [spryker/product-category:&quot;^4.32.0&quot;](https://github.com/spryker/zed-navigation/releases/tag/4.32.0)

### Order placement performance

- [spryker/calculation:^4.14.0](https://github.com/spryker/calculation/releases/tag/4.14.0)
- [spryker/discount-calculation-connector:^5.4.0](https://github.com/spryker/discount-calculation-connector/releases/tag/5.4.0)
- [spryker/merchant:^3.15.0](https://github.com/spryker/merchant/releases/tag/3.15.0)
- [spryker/sales:^11.60.0](https://github.com/spryker/sales/releases/tag/11.60.0)
- [spryker/product:^6.49.0](https://github.com/spryker/product/releases/tag/6.49.0)
- [spryker/discount:^9.43.0](https://github.com/spryker/discount/releases/tag/9.43.0)
- [spryker/product-cart-connector:^4.13.0](https://github.com/spryker/product-cart-connector/releases/tag/4.13.0)
- [spryker/company-role:^1.9.1](https://github.com/spryker/company-role/releases/tag/1.9.1)
- [spryker/propel:^3.43.0](https://github.com/spryker/propel/releases/tag/3.43.0)
- [spryker/sales:^11.63.0](https://github.com/spryker/sales/releases/tag/11.63.0)
- [spryker/sales-product-connector:^1.11.1](https://github.com/spryker/sales-product-connector/releases/tag/1.11.1)
- [spryker/shipment:^8.24.0](https://github.com/spryker/shipment/releases/tag/8.24.0)

### OMS availability check and order item reservation

- [spryker/availability:^9.27.0](https://github.com/spryker/availability/releases/tag/9.27.0)
- [spryker/stock:^8.10.1](https://github.com/spryker/stock/releases/tag/8.10.1)
- [spryker/oms:^11.45.1](https://github.com/spryker/oms/releases/tag/11.45.1)
- [spryker/propel:^3.43.0](https://github.com/spryker/propel/releases/tag/3.43.0)
- [spryker/sales:^11.63.0](https://github.com/spryker/sales/releases/tag/11.63.0)

### Publish and synchronization (merchant-related)

- [spryker/merchant-product-offer-storage:^2.6.0](https://github.com/spryker/merchant-product-offer-storage/releases/tag/2.6.0)
- [spryker/product-offer-storage:^1.8.0](https://github.com/spryker/product-offer-storage/releases/tag/1.8.0)
- [spryker/propel:^3.45.0](https://github.com/spryker/propel/releases/tag/3.45.0)

### Publish and synchronization (merchant relationship prices)

- [spryker/merchant:^3.21.0](https://github.com/spryker/merchant/releases/tag/3.21.0)
- [spryker/price-product-merchant-relationship:^1.13.0](https://github.com/spryker/price-product-merchant-relationship/releases/tag/1.13.0)
- [spryker/price-product-merchant-relationship-storage:^1.22.0](https://github.com/spryker/price-product-merchant-relationship-storage/releases/tag/1.22.0)

Additionally, index the `fk_company_business_unit` column of both storage tables. Create `src/Pyz/Zed/PriceProductMerchantRelationshipStorage/Persistence/Propel/Schema/spy_price_product_merchant_relationship_storage.schema.xml` and run `vendor/bin/console propel:install`:

```xml
&lt;!--//--&gt;
    &lt;table name=&quot;spy_price_product_abstract_merchant_relationship_storage&quot;&gt;
        &lt;index name=&quot;spy_price_product_ab_m_r_storage-fk_company_business_unit&quot;&gt;
            &lt;index-column name=&quot;fk_company_business_unit&quot;/&gt;
        &lt;/index&gt;
    &lt;/table&gt;

    &lt;table name=&quot;spy_price_product_concrete_merchant_relationship_storage&quot;&gt;
        &lt;index name=&quot;spy_price_product_con_m_r_storage-fk_company_business_unit&quot;&gt;
            &lt;index-column name=&quot;fk_company_business_unit&quot;/&gt;
        &lt;/index&gt;
    &lt;/table&gt;
&lt;!--//--&gt;
```

### Publish and synchronization (product-related)

- [spryker/price-product:^4.48.0](https://github.com/spryker/price-product/releases/tag/4.48.0)
- [spryker/product-page-search:^3.40.0](https://github.com/spryker/product-page-search/releases/tag/3.40.0)
- [spryker/product-search:^5.24.1](https://github.com/spryker/product-search/releases/tag/5.24.1)
- [spryker/product-storage:^1.47.0](https://github.com/spryker/product-storage/releases/tag/1.47.0)
- [spryker/product-offer-storage:^1.10.0](https://github.com/spryker/product-offer-storage/releases/tag/1.10.0)
- [spryker/price-product-offer:^1.7.1](https://github.com/spryker/price-product-offer/releases/tag/1.7.1)
- [spryker/price-product-offer-storage:^1.5.1](https://github.com/spryker/price-product-offer-storage/releases/tag/1.5.1)
- [spryker/price-product-storage:^4.13.0](https://github.com/spryker/price-product-storage/releases/tag/4.13.0)
- [spryker/product-image:^3.20.1](https://github.com/spryker/product-image/releases/tag/3.20.1)
- [spryker/product-category-storage:^2.11.0](https://github.com/spryker/product-category-storage/releases/tag/2.11.0)
- [spryker/product-category-search:^1.2.1](https://github.com/spryker/product-category-search/releases/tag/1.2.1)
- [spryker/propel:^3.47.0](https://github.com/spryker/propel/releases/tag/3.47.0)
  - Note: If you still use destructive deployments, update the `config/install/destructive.yml` file. You can copy it from any demo shop.
- [spryker/event-behavior:^1.32.0](https://github.com/spryker/event-behavior/releases/tag/1.32.0)
- [spryker/synchronization-behavior:^1.13.0](https://github.com/spryker/synchronization-behavior/releases/tag/1.13.0)

### Publish and synchronization (Category tree build logic)

- [spryker/category:&quot;^5.23.0&quot;](https://github.com/spryker/category/releases/tag/5.23.0)
- [spryker/category-storage:&quot;^2.12.0&quot;](https://github.com/spryker/category-storage/releases/tag/2.12.0)
- [spryker/propel-orm:&quot;^1.22.0&quot;](https://github.com/spryker/propel-orm/releases/tag/1.22.0)
- [spryker/util-sanitize:&quot;^2.3.1&quot;](https://github.com/spryker/util-sanitize/releases/tag/2.3.1)

### Publish and synchronization (queue and event performance)

To update all required modules at once:

```bash
composer update spryker/rabbit-mq:&quot;^2.25.0&quot; spryker/availability-storage:&quot;^2.11.0&quot; spryker/event:&quot;^2.17.1&quot; spryker/glossary-storage:&quot;^1.14.0&quot; spryker/merchant-product:&quot;^1.12.0&quot; spryker/merchant-product-offer:&quot;^1.12.0&quot; spryker/merchant-product-offer-search:&quot;^1.9.0&quot; spryker/merchant-product-search:&quot;^1.6.0&quot; spryker/merchant-product-storage:&quot;^1.7.0&quot; spryker/price-product:&quot;^4.51.0&quot; spryker/price-product-merchant-relationship-storage:&quot;^1.21.0&quot; spryker/price-product-offer-storage:&quot;^1.8.0&quot; spryker/price-product-storage:&quot;^4.16.0&quot; spryker/product:&quot;^6.54.0&quot; spryker/product-category-search:&quot;^1.3.0&quot; spryker/product-category-storage:&quot;^2.13.0&quot; spryker/product-group-storage:&quot;^1.9.0&quot; spryker/product-image:&quot;^3.21.0&quot; spryker/product-image-storage:&quot;^1.21.0&quot; spryker/product-list:&quot;^1.10.0&quot; spryker/product-list-search:&quot;^2.11.0&quot; spryker/product-list-storage:&quot;^1.21.0&quot; spryker/product-offer:&quot;^1.17.0&quot; spryker/product-offer-availability-storage:&quot;^1.6.0&quot; spryker/product-offer-stock:&quot;^1.7.0&quot; spryker/product-page-search:&quot;^3.47.0&quot; spryker/product-page-search-extension:&quot;^1.7.0&quot; spryker/propel:&quot;^3.50.0&quot; spryker/queue:&quot;^1.28.0&quot; spryker/symfony-messenger:&quot;^1.6.0&quot; spryker/tax-product-storage:&quot;^1.8.0&quot; spryker/url-storage:&quot;^1.23.0&quot; spryker/synchronization-behavior:&quot;^1.14.0&quot;
```

- [spryker/rabbit-mq:^2.25.0](https://github.com/spryker/rabbit-mq/releases/tag/2.25.0)
- [spryker/availability-storage:^2.11.0](https://github.com/spryker/availability-storage/releases/tag/2.11.0)
- [spryker/event:^2.17.1](https://github.com/spryker/event/releases/tag/2.17.1)
- [spryker/event-behavior:^1.35.0](https://github.com/spryker/event-behavior/releases/tag/1.35.0)
- [spryker/glossary-storage:^1.14.0](https://github.com/spryker/glossary-storage/releases/tag/1.14.0)
- [spryker/merchant-product:^1.12.0](https://github.com/spryker/merchant-product/releases/tag/1.12.0)
- [spryker/merchant-product-offer:^1.12.0](https://github.com/spryker/merchant-product-offer/releases/tag/1.12.0)
- [spryker/merchant-product-offer-search:^1.9.0](https://github.com/spryker/merchant-product-offer-search/releases/tag/1.9.0)
- [spryker/merchant-product-search:^1.6.0](https://github.com/spryker/merchant-product-search/releases/tag/1.6.0)
- [spryker/merchant-product-storage:^1.7.0](https://github.com/spryker/merchant-product-storage/releases/tag/1.7.0)
- [spryker/price-product:^4.51.0](https://github.com/spryker/price-product/releases/tag/4.51.0)
- [spryker/price-product-merchant-relationship-storage:^1.21.0](https://github.com/spryker/price-product-merchant-relationship-storage/releases/tag/1.21.0)
- [spryker/price-product-offer-storage:^1.8.0](https://github.com/spryker/price-product-offer-storage/releases/tag/1.8.0)
- [spryker/price-product-storage:^4.16.0](https://github.com/spryker/price-product-storage/releases/tag/4.16.0)
- [spryker/product:^6.54.0](https://github.com/spryker/product/releases/tag/6.54.0)
- [spryker/product-category-search:^1.3.0](https://github.com/spryker/product-category-search/releases/tag/1.3.0)
- [spryker/product-category-storage:^2.13.0](https://github.com/spryker/product-category-storage/releases/tag/2.13.0)
- [spryker/product-group-storage:^1.9.0](https://github.com/spryker/product-group-storage/releases/tag/1.9.0)
- [spryker/product-image:^3.21.0](https://github.com/spryker/product-image/releases/tag/3.21.0)
- [spryker/product-image-storage:^1.21.0](https://github.com/spryker/product-image-storage/releases/tag/1.21.0)
- [spryker/product-list:^1.10.0](https://github.com/spryker/product-list/releases/tag/1.10.0)
- [spryker/product-list-search:^2.11.0](https://github.com/spryker/product-list-search/releases/tag/2.11.0)
- [spryker/product-list-storage:^1.21.0](https://github.com/spryker/product-list-storage/releases/tag/1.21.0)
- [spryker/product-offer:^1.17.0](https://github.com/spryker/product-offer/releases/tag/1.17.0)
- [spryker/product-offer-availability-storage:^1.6.0](https://github.com/spryker/product-offer-availability-storage/releases/tag/1.6.0)
- [spryker/product-offer-stock:^1.7.0](https://github.com/spryker/product-offer-stock/releases/tag/1.7.0)
- [spryker/product-page-search:^3.47.0](https://github.com/spryker/product-page-search/releases/tag/3.47.0)
- [spryker/product-page-search-extension:^1.7.0](https://github.com/spryker/product-page-search-extension/releases/tag/1.7.0)
- [spryker/propel:^3.50.0](https://github.com/spryker/propel/releases/tag/3.50.0)
- [spryker/queue:^1.28.0](https://github.com/spryker/queue/releases/tag/1.28.0)
- [spryker/symfony-messenger:^1.6.0](https://github.com/spryker/symfony-messenger/releases/tag/1.6.0)
- [spryker/tax-product-storage:^1.8.0](https://github.com/spryker/tax-product-storage/releases/tag/1.8.0)
- [spryker/url-storage:^1.23.0](https://github.com/spryker/url-storage/releases/tag/1.23.0)
- [spryker/synchronization-behavior:^1.14.0](https://github.com/spryker/synchronization-behavior/releases/tag/1.14.0)

### Data import (memory usage)

- [spryker/acl-entity:&quot;^1.17.0&quot;](https://github.com/spryker/acl-entity/releases/tag/1.17.0)
- [spryker/data-import:&quot;^1.33.0&quot;](https://github.com/spryker/data-import/releases/tag/1.33.0)
- [spryker/merchant-relationship-product-list-data-import:&quot;^0.1.3&quot;](https://github.com/spryker/merchant-relationship-product-list-data-import/releases/tag/0.1.3)
- [spryker/price-product-merchant-relationship-data-import:&quot;^0.2.5&quot;](https://github.com/spryker/price-product-merchant-relationship-data-import/releases/tag/0.2.5)

### Dynamic entity performance improvements

- [spryker/dynamic-entity:^1.21.0](https://github.com/spryker/dynamic-entity/releases/tag/1.21.0)
- [spryker/dynamic-entity-backend-api:^1.15.0](https://github.com/spryker/dynamic-entity-backend-api/releases/tag/1.15.0)
- [spryker/stock:^8.15.0](https://github.com/spryker/stock/releases/tag/8.15.0)

### Cart page and checkout for large carts (100+ items)

For comprehensive guidance on optimizing cart performance, see [Cart page performance configuration](https://docs.spryker.com/docs/pbc/all/cart-and-checkout/latest/cart-page-performance-configuration.html).

- [spryker-shop/checkout-page:^3.41.0](https://github.com/spryker-shop/checkout-page/releases/tag/3.41.0)
- [spryker-shop/session-customer-validation-page:^1.4.0](https://github.com/spryker-shop/session-customer-validation-page/releases/tag/1.4.0)

## Update strategy

To effectively manage dependency updates:

1. **Monitor release notes**: Regularly check Spryker release notes for performance-related updates.
2. **Test in staging**: Always test module updates in a staging environment before production deployment.
3. **Prioritize performance modules**: Focus on modules that directly impact your application&apos;s performance bottlenecks.
4. **Use semantic versioning**: Understand the impact of major, minor, and patch updates.
5. **Batch related updates**: Group related module updates together for testing efficiency.

## Compatibility considerations

When updating modules:

- Check module compatibility with your current Spryker version
- Review breaking changes in major version updates
- Test all affected functionality after updates
- Monitor application performance metrics before and after updates
- Consider using Spryker&apos;s [Composer Dependency Manager](https://docs.spryker.com/docs/scos/dev/setup/managing-scos-dependencies-with-composer.html)
</description>
            <pubDate>Wed, 02 Sep 2026 08:45:56 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/guidelines/performance-guidelines/keeping-dependencies-updated.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/guidelines/performance-guidelines/keeping-dependencies-updated.html</guid>
            
            
        </item>
        
        <item>
            <title>Packaged Business Capabilities</title>
            <description>Packaged Business Capabilities (PBCs) are capabilities that enclose a certain functionality with the Spryker system. PBCs provide a good foundation for decision makers throughout multiple business entities.

This section is in beta because not all the PBCs are covered. Marketplace functionalities will also be added at a later stage. You are welcome to use the docs that are already here, and we will keep adding the docs for the rest of the PBCs.

## Spryker PBCs

| NAME | DESCRIPTION | BENEFITS |
| --- | --- | --- |
| [AI Foundation](/docs/pbc/all/ai-foundation/{{site.version}}/ai-foundation.html) | Provider agnostic AI layer that connects Spryker Commerce OS to leading AI providers through one common interface. | Accelerates delivery of AI features and keeps freedom to choose and change AI providers and models per use case. |
| [AI Commerce](/docs/pbc/all/ai-commerce/{{site.version}}/ai-commerce.html) | Brings AI assisted capabilities to the Spryker storefront and the Back Office to help buyers and operators complete commerce tasks faster and more consistently, reducing manual effort with human review and enterprise governance. | Speeds up key commerce workflows while improving consistency and reducing errors, enabling scalable adoption of assisted capabilities across teams and markets. |
| [Business Intelligence](/docs/pbc/all/business-intelligence/{{site.version}}/business-intelligence.html) | Analyze data to understand how your shop performs and areas for improvement. | Make informed decisions. |
| [Carrier Management](/docs/pbc/all/carrier-management/{{site.version}}/carrier-management.html) | The Spryker Cloud Commerce OS integrates with several shipping carriers and methods and lets you define their availability, price, and tax set. During the checkout process, customers have the option to select their preferred shipment method and relevant carrier. | Ensures quick and cost-effective delivery. |
| [Cart and Checkout](/docs/pbc/all/cart-and-checkout/{{site.version}}/cart-and-checkout.html) | The online shopping cart and checkout process act as a gateway for customer and order management. It lets your customers organize and manage their purchases, apply vouchers and coupon codes. Based on their roles and permissions, your B2B customers can add or remove products, share the cart, and manage their purchases. | Increases conversion rates and reduces drop-off rates. Offers additional B2B specific, permission-related functionalities. |
| [Content Management System (CMS)](/docs/pbc/all/content-management-system/{{site.version}}/content-management-system.html) | The CMS features let you customize your store, enrich it with information, stories, or other content, and make it easily findable in search engines. Several SEO features enable you to add customized meta information to all your content and create search engine-friendly URLs. | Provides compelling content and stories where your customers need it. |
| [Customer Relationship Management (CRM)](/docs/pbc/all/customer-relationship-management/{{site.version}}/customer-relationship-management.html) | The customer management tool lets B2B and B2C businesses manage customer accounts and efficiently monitor shopping habits. It provides your B2B Customers with a way to map their business hierarchies, permissions, and role management. With the creation of distinctive Business Units, the internal hierarchy can easily be mapped out, and each Unit can operate independently. The Roles and Permissions System lets your customer&apos;s buyers define the purchase and approval process. | Increases conversion rates and average order values with a compact Customer Relationship Management tool. |
| [Data Exchange](/docs/pbc/all/data-exchange/{{site.version}}/data-exchange.html) | You can import your business logic and data, including product information, customer base, categories, and more, into the Spryker Cloud Commerce OS. You can use the out-of-the-box export data functionality as a generic blueprint for any data set that you need to export. | Lets you import and export specific data points quickly and easily. |
| [Discount Management](/docs/pbc/all/discount-management/{{site.version}}/discount-management.html) | You can define several types of discounts based on a brand, the overall cart value, specific product ranges, or unique customer groups. You can also offer discount vouchers or incentivize certain products through coupon codes. | Lets you run effective promotional campaigns to boost conversion rates. |
| [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{site.version}}/dynamic-multistore.html) | Manage stores in the Back Office | Make changes to your stores setup quickly and easily. |
| [Emails](/docs/pbc/all/emails/{{site.version}}/emails.html) | You can send automated account e-mails and confirmations or offer different types of newsletter subscriptions. | Keep in touch with your customers. |
| [Gift Cards](/docs/pbc/all/gift-cards/{{site.version}}/gift-cards.html) | Lets your customers purchase and redeem gift cards. Enabling gift card purchases can boost your brand awareness and help you reach new customers. | Lets you acquire new customers through gift card payment options. |
| [Identity Access Management (IAM)](/docs/pbc/all/identity-access-management/{{site.version}}/identity-access-management.html) | Enables the creation of new accounts for end customers and B2B customers. It also allows users to define password settings and utilize multi-login blockers for security purposes. Moreover, a third-party access management function is integrated. | Allows for quick and easy authorization and authentication of customers |
| [Merchant Management](/docs/pbc/all/merchant-management/{{site.version}}/merchant-management.html) | For efficient Merchant Management, two parts are important. One, the overview and management on the Operator side, like approvals, edits, etc. And two, the self-service management of the Merchants, where they can take care of their daily business, like order or product management. | Gives you an overview of all your Merchants&apos; activities. |
| Miscellaneous | This category holds the documents that are not related to any PBC.  |  |
| [Offer Management](/docs/pbc/all/offer-management/{{site.version}}/offer-management.html) | Lets your Merchants create Offers on existing products in your Marketplace. By doing so, duplicates in the product catalog can be avoided and the management of Merchants, Products, and Offers becomes much more convenient. | Saves time because of a good overview of Merchant&apos;s Offers. |
| [Order Management System (OMS)](/docs/pbc/all/order-management-system/{{site.version}}/order-management-system.html) | Helps you keep track of your order processing from your B2B, B2C, or Marketplace, and ensure quick fulfillment. You can manage incoming orders in the Back Office, view and edit orders, track their progress, or contact customers who make open orders directly. With the compact Order Management features, you can keep your order processing running smoothly. | Lets you pProcess orders smoothly to fulfill them quickly. |
| [Payment Service Provider (PSP)](/docs/pbc/all/payment-service-provider/{{site.version}}/payment-service-provider.html) | Provides integration of payment methods. You can integrate multiple payment gateways, define their availability, and customize how they appear on your site. | Lets you provide an excellent shopping experience and integrate your customers&apos; preferred payment methods. |
| [Price Management](/docs/pbc/all/price-management/{{site.version}}/price-management.html) | The Spryker Cloud Commerce OS supports multiple currencies and automatically detects the payment currency based on a customer&apos;s preference. You can manage gross and net prices per product and per country. You can also offer volume discounts to encourage customers to purchase products in larger quantities. | Saves you time by letting you implement your pricing strategy in one place and catering it to your business needs. |
| [Product Information Management (PIM)](/docs/pbc/all/product-information-management/{{site.version}}/product-information-management.html) | Encompasses all functionality that is needed to set up your product catalog. With PIM, you can create and extend the product catalog to match your business needs. | Helps you expand your business by organizing your products in a fast and efficient way. |
| [Product Relationship Management](/docs/pbc/all/product-relationship-management/{{site.version}}/product-relationship-management.html) | Helps you enhance your shop with cross- and up-selling capabilities to increase sales. | Increases average order values with product relations. |
| [Ratings and Reviews](/docs/pbc/all/ratings-reviews/{{site.version}}/ratings-and-reviews.html) | Lets you incorporate user reviews and ratings. You can receive and moderate feedback in the Back Office. The Ratings and Reviews feature also comes with the functionality to add text-free reviews and star ratings. | Inspires trust among customers with ratings and reviews. |
| [Request for Quote (RFQ)](/docs/pbc/all/request-for-quote/{{site.version}}/request-for-quote.html) | Your customers can request a quote for products and services that you sell. The Request for Quote feature supports all functionalities of the price engine and product capabilities, such as Volume Prices, Customer Specific Prices, Measuring and Packaging units, Shipping costs, Product Options, etc. | Enhances customer loyalty and increase conversion rates. |
| [Return Management](/docs/pbc/all/return-management/{{site.version}}/marketplace/marketplace-return-management-feature-overview.html) | Lets you establish a return policy and execute returns. | Increase customer satisfaction and loyalty. |
| [Search](/docs/pbc/all/search/{{site.version}}/base-shop/search-feature-overview/search-feature-overview.html) | The out-of-the-box Elasticsearch technology lets you include full-text search, auto-suggestions, and auto-completion. You can set individual search preferences for multiple stores and categorize your products by adding dynamic filters and facets to help your customers further refine the search results. You can also add more advanced filters that use the product&apos;s metadata or promote a brand&apos;s top-sellers or highly rated products. | Helps you increase conversion rates by providing an excellent Search and Filter experience. |
| [Service Points Management](/docs/pbc/all/service-point-management/{{site.version}}/service-point-management.html) | Set up offline service points where customers can interact with your business. | Creates touch points to connect a shop with offline locations. |
| [Shopping List and Wishlist](/docs/pbc/all/shopping-list-and-wishlist/{{site.version}}/shopping-list-and-wishlist.html) | Your B2B customers can save the products they wish to purchase, in shopping lists. Different roles and permission systems ensure smooth sharing and contribution management amongst company users. This PBC encompasses additional features like printing, barcode generation, and direct-to-cart. Enabling your B2C customers to track and save the products they wish to purchase through a wish list function effectively reduces cart abandonment, boosts your sales, and allows you to keep track of which products are of interest to your customers. | Lets you increase conversion rates and loyalty by offering rich Shopping and B2B Wish Lists. |
| [Tax Management](/docs/pbc/all/tax-management/{{site.version}}/tax-management.html) | Lets you adhere to respective tax regulations in the countries you sell by configuring and managing tax rates for products, shipments, and additional services. You can define tax rates for different countries and apply integrations to manage US taxes. | Lets you comply with fiscal regulations. |
| [User Management](/docs/pbc/all/user-management/{{site.version}}/user-management.html) | Lets the Back Office users manage user access, set rights, and onboard customers. | Ensures high security and compliance through managed user flows. |
| [Warehouse Management System (WMS)](/docs/pbc/all/warehouse-management-system/{{site.version}}/warehouse-management-system.html) | Lets you keep an overview of your stock levels in the Back Office to determine accurate availabilities on your store&apos;s website. Any open orders or reserved items are taken into consideration when stock availabilities are displayed. | Helps you save your time by keeping an eye on your stock levels. |
| [Workflows](/docs/pbc/all/back-office/latest/base-shop/workflows-feature-overview.html) | Workflows lets operations teams design, run, and improve multi-step processes for different entities directly in the Back Office, without relying on developers for every change. Teams can manage process definitions and their versions, so they can work on process improvements without disrupting processes that are currently running. | Speeds up process changes and reduces developer dependency by letting business teams design and adjust workflows directly in the Back Office. |
&lt;!--
| Digital Asset Management (DAM) | The DAM system provides impactful visuals while simultaneously maintaining fast response times, thus helping you reduce your bounce rate effectively and create an enhanced shopping experience. With the DAM, you can add images and videos to any of your pages. | Offers an exceptional brand experience with impactful visuals, banners, and media assets. |
--&gt;


### Application PBCs

| NAME | DESCRIPTION | BENEFITS |
| --- | --- | --- |
| Back Office | The administration interface that allows you to manage all back-office tasks. In the Back Office, you can manage and create customer accounts and define who can access the Back Office. You can also keep track of all your internal processes including the management of your products, orders, customers and many more. | Keeps your back-end processes running efficiently, protects your data and administers all accounts. |
| Storefront | The out-of-the-box online shop application that includes all regular functionalities and workflows. You can use the Storefront as a boilerplate to kick-start your project. | Lets you easily start your online shop from our boilerplate solution. |

## App Composition Platform apps

&lt;div class=&quot;width-100&quot;&gt;

| APP | CATEGORY |
| --- | --- |
| [Vertex](/docs/pbc/all/tax-management/{{site.version}}/base-shop/third-party-integrations/vertex/vertex.html) | Tax compliance. |
| [Algolia](/docs/pbc/all/search/{{site.version}}/base-shop/third-party-integrations/algolia/integrate-algolia.html) | Search engine. |
| [Payone](/docs/pbc/all/payment-service-providers/payone/integrate-payone.html) | Payment service provider. |
| [Bazaarvoice](/docs/pbc/all/ratings-reviews/{{site.version}}/third-party-integrations/integrate-bazaarvoice.html) | Platform for user-generated content. |
| [Stripe](/docs/pbc/all/payment-service-provider/{{site.version}}/base-shop/third-party-integrations/stripe/stripe.html) |  Financial infrastructure platform. |

&lt;/div&gt;
</description>
            <pubDate>Tue, 01 Sep 2026 08:26:04 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/pbc.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/pbc.html</guid>
            
            
        </item>
        
        <item>
            <title>View service points</title>
            <description>This topic describes how to view [service points](/docs/pbc/all/service-point-management/latest/unified-commerce/service-points-feature-overview.html#service-point) in the Back Office.

To start working with service points, go to **Customer Portal&amp;nbsp;&lt;span aria-label=&quot;and then&quot;&gt;&gt;&lt;/span&gt; Service Points**.

The Back Office presents service points as read-only information. To create or change them, use the [Glue API](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.html) or [data import](/docs/pbc/all/service-point-management/latest/unified-commerce/import-and-export-data/import-file-details-service-point.csv.html).

## Prerequisites

Import service points, or add them using Glue API. Both active and inactive service points are displayed.

Each section contains reference information. Review it before you start, or look up the necessary information as you go through the process.

## View the list of service points

To view all the service points of your project:
1. Go to **Customer Portal&amp;nbsp;&lt;span aria-label=&quot;and then&quot;&gt;&gt;&lt;/span&gt; Service Points**.
    This opens the **Service Points** page.
2. Optional: To find a specific service point, enter its name, key, city, zip code, or country in **Search**.
3. Optional: To change the order of the records, click a column header.

![Service points list in the Back Office](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/service-point-management/unified-commerce/manage-in-the-back-office/service-points-list.png)

**Tips and tricks**
&lt;br&gt;Inactive service points remain in the list and are marked as **Inactive**. A service point that has no address yet is displayed with **Not set** in the **Address** column.

### Reference information: View the list of service points

The following table describes the columns of the **Service Points** page:

| COLUMN | DESCRIPTION |
| --- | --- |
| Name | Name of the service point. |
| Key | Unique service point identifier. |
| Address | Zip code, city, and country of the service point. Displays **Not set** if the service point has no address. |
| Stores | All the stores the service point is assigned to. |
| Service Types | Service types of all the services provided at the service point. |
| Status | Defines if the service point is active. Inactive service points are not offered on the Storefront. |
| Actions | Opens the details of the service point. |

## View the details of a service point

To view the details of a service point:
1. Go to **Customer Portal&amp;nbsp;&lt;span aria-label=&quot;and then&quot;&gt;&gt;&lt;/span&gt; Service Points**.
2. Next to the service point you want to view, click **View**.
    This opens the **View Service Point** page.

![Service point details in the Back Office](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/service-point-management/unified-commerce/manage-in-the-back-office/service-point-details.png)

### Reference information: View the details of a service point

The following table describes the sections of the **View Service Point** page:

| SECTION | DESCRIPTION |
| --- | --- |
| Service Point | Name, key, status, and assigned stores of the service point. |
| Address | Full address of the service point in one line: street, zip code, city, region, and country. Parts that are not defined are omitted. Displays **Not set** if the service point has no address. |
| Services | All the services provided at the service point, with their service type, key, and status. |
| Connected Offers | All the product offers that are provided through the services of the service point. An offer connected through several services of the same service point is displayed once. |

The following table describes the columns of the **Connected Offers** section:

| COLUMN | DESCRIPTION |
| --- | --- |
| Offer Reference | Unique product offer identifier. |
| SKU | SKU of the concrete product the offer belongs to. |
| Stores | All the stores the product offer is assigned to. |
| Approval Status | Approval status of the product offer: **Approved**, **Waiting for Approval**, or **Denied**. |
| Status | Defines if the product offer is active. |
| Actions | Opens or edits the product offer. The actions are displayed only if the corresponding pages are configured in your project. |
</description>
            <pubDate>Mon, 31 Aug 2026 13:10:15 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/service-point-management/latest/unified-commerce/manage-in-the-back-office/view-service-points.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/service-point-management/latest/unified-commerce/manage-in-the-back-office/view-service-points.html</guid>
            
            
        </item>
        
        <item>
            <title>Service Points feature overview</title>
            <description>The *Service Points* feature lets you create and manage service points, service types, and associated services.

## Service point

A *service point* is a physical location where services are provided. Depending on the services provided, there can be different kinds of service points, like a warehouse or a physical store. The definition of a service point ultimately depends on the services it provides.

To add service points using Glue API, see [Add service points](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.html). To import service points, see [Import file details: service_point.csv](/docs/pbc/all/service-point-management/latest/unified-commerce/import-and-export-data/import-file-details-service-point.csv.html).

To add service point addresses using Glue API, see [Add service point addresses](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.html). To import service point addresses, see [Import file details: service_point_address.csv](/docs/pbc/all/service-point-management/latest/unified-commerce/import-and-export-data/import-file-details-service-point-address.csv.html)

## Service type

A *service type* is a classification of services that a business offers to its customers. Service types are determined by the nature of the business. Service type examples:
- Pickup service
- Return service
- Rental service
- Repair service

To add service types using Glue API, see [Add service types](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.html).

To import service types, see [Import file details: service_type.csv](/docs/pbc/all/service-point-management/latest/unified-commerce/import-and-export-data/import-file-details-service-type.csv.html).


## Service

A *service* represents a specific service type that is provided at a specific service point. Because each service is unique, if two service points provide services with the same service type, like pickup, those services are represented as two separate entities and are managed accordingly. For example, a pickup service at a retail location at Julie-Wolfthorn-Straße 1, 10115, Berlin is a unique service.

To add services using Glue API, see [Add services](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.html).

To import services, see [Import file details: service.csv](/docs/pbc/all/service-point-management/latest/unified-commerce/import-and-export-data/import-file-details-service.csv.html).


## Service points use cases


With the help of service points, types, and services, a store operator can model different use cases depending on their business needs. Here are some examples of services that can be implemented at the project level:
- Ship from store
- Car maintenance or installations services
- Product demonstration at a retail location
- Repair service at a retail location


## Service points in the Back Office

Back Office users can review all the service points of a project, including the inactive ones, in **Customer Portal&amp;nbsp;&lt;span aria-label=&quot;and then&quot;&gt;&gt;&lt;/span&gt; Service Points**. The list shows the name, key, address, assigned stores, service types, and status of every service point. Opening a service point displays its address, the services provided at it, and the product offers connected to it through those services.

Service points are read-only in the Back Office. To create or change them, use Glue API or data import.

For more details, see [View service points](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-in-the-back-office/view-service-points.html).

## Service points on the Storefront

When checking out, customers select a service point they want the order to be processes at. The feature is shipped with a search widget that lets them search service points by the following:
- Service point name
- Zip code
- City

By default, search results are sorted by city.

![service point search widget](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/service-point-management/unified-commerce/service-points-feature-overview.md/service-point-search.png)

You can add only predefined service points by default. But developers can configure customers to be able to enter custom addresses for service points.

After placing an order, the customer can see the selected service point on the Order Details page.

![Storefront order with a service point](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/service-point-management/unified-commerce/service-points-feature-overview.md/storefront-order-service-point.png)


## Current constraints

- Services can be configured only for product offers.
- Product catalog can&apos;t be filtered by a service type or a service provided in a specific service point.
- The product offer widget on the product details page is not supported. It doesn&apos;t show the differences between product offers based on the services assigned to them. As a result, differnt product offers are displayed as duplicates.
- Customers can&apos;t add products with preselected service points to cart. They can select service points only during checkout.
- If a product is added to cart without a product offer attached to it, this product can be purchased only with the *Delivery* shipment type.


## Related Business User documents

| FEATURE OVERVIEWS | MERCHANT PORTAL GUIDES |
| - | - |
| [Shipment feature overview](/docs/pbc/all/carrier-management/latest/base-shop/shipment-feature-overview.html) | [Create and edit product offers](/docs/pbc/all/offer-management/latest/unified-commerce/unified-commerce-create-and-edit-product-offers.html) |



## Related Developer documents

| INSTALLATION GUIDES | GLUE API GUIDES   |
| - | - |
| [Install the Service Points feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-feature.html) | [Add service points](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-add-service-points.html) |
| [Install the Service Points + Shipment feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-shipment-feature.html) |  [Retrieve service points](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-retrieve-service-points.html)  |
| [Install the Service Points + Customer Account Management feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-customer-account-management-feature.html) | [Update service points](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-points/glue-api-update-service-points.html) |
| [Install the Service Points + Order Management feature](/docs/pbc/all/service-point-management/latest/unified-commerce/install-features/install-the-service-points-order-management-feature.html) | [Add service types](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-add-service-types.html) |
| [Install the Product Offer Shipment feature](/docs/pbc/all/offer-management/latest/marketplace/install-and-upgrade/install-features/install-the-product-offer-shipment-feature.html) | [Retrieve service types](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-retrieve-service-types.html) |
| [Install the Shipment + Customer Account Management feature](/docs/pbc/all/carrier-management/latest/base-shop/install-and-upgrade/install-features/install-the-shipment-customer-account-management-feature.html) | [Update service types](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-types/glue-api-update-service-types.html) |
| |  [Add service point addresses](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-add-service-point-addresses.html) |
| |  [Retrieve service point addresses](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-retrieve-service-point-addresses.html) |
| |  [Add service point addresses](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-service-point-addresses/glue-api-update-service-point-addresses.html) |
| | [Add services](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-services/glue-api-add-services.html) |
| |  [Retrieve services](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-services/glue-api-retrieve-services.html) |
| | [Update services](/docs/pbc/all/service-point-management/latest/unified-commerce/manage-using-glue-api/manage-services/glue-api-update-services.html) |
</description>
            <pubDate>Mon, 31 Aug 2026 13:10:15 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/service-point-management/latest/unified-commerce/service-points-feature-overview.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/service-point-management/latest/unified-commerce/service-points-feature-overview.html</guid>
            
            
        </item>
        
        <item>
            <title>System requirements</title>
            <description>## System requirements (apps based on Spryker Framework)


| REQUIREMENT                                | VALUE                                                                                                                                                                                                                                                                                                                                                                                   |
|--------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| OS                                         | Native: Linux                                                                                                                                                                                                                                                                                                                                                                           |
| Web server                                 | NginX or any web server supporting PHP, like lighttpd, Apache, or Cherokee.                                                                                                                                                                                                                                                                                                             |
| Databases                                  | For cloud environments, MariaDB &gt;= 11.8 preferred. For on-premise environments, PostgreSQL &gt;=17  or MySQL &gt;=8.4.                                                                                                                                                                                                                                                                        |
| PHP                                        | PHP &gt;=8.3 with the following extensions: `curl`, `json`, `mysql`, `pdo-sqlite`, `sqlite3`, `gd`, `intl`, `mysqli`, `pgsql`, `ssh2`, `gmp`, `mcrypt`, `pdo-mysql`, `readline`, `twig`, `imagick`, `memcache`, `pdo-pgsql`, `redis`, `xml`, `bz2`, and `mbstring`. For details about supported PHP versions, see [Supported Versions of PHP](/docs/dg/dev/supported-versions-of-php.html) |
| SSL                                        | For production environments, a valid security certificate is required for HTTPS.                                                                                                                                                                                                                                                                                                        |
| Key-value store (Redis or Valkey)          | Redis versions 5.0 and 6.2; Valkey version &gt;=7.2                                                                                                                                                                                                                                                                                                                                        |
| Search engines                             | Elasticsearch 7.x, OpenSearch [1.3, 2.19, 3.5](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/what-is.html#end-of-support)                                                                                                                                                                                                                                        |
| RabbitMQ                                   | Version &gt;=4.1                                                                                                                                                                                                                                                                                                                                                                           |
| Jenkins (for cronjob management)           | Version &gt;=2.0                                                                                                                                                                                                                                                                                                                                                                           |
| Graphviz (for state machine visualization) | Version &gt;=2.0                                                                                                                                                                                                                                                                                                                                                                           |
| Node.js                                    | Version &gt;= 24.14.0. For details about upgrading, see [Upgrade Node.js and npm](/docs/dg/dev/upgrade-and-migrate/upgrade-nodejs.html)                                                                                                                                                                                                                                                    |
| npm                                        | Version &gt;= 10.0.0                                                                                                                                                                                                                                                                                                                                                                       |
| Intranet                                   | Back Office application must be secured in an Intranet using VPN, Basic Auth, IP allowlist, or DMZ.                                                                                                                                                                                                                                                                                     |
| Available languages                        | German and English. UTF-8 left-to-right languages are fully supported.                                                                                                                                                                                                                                                                                                                  |


## Marketplace system requirements

| OPERATING SYSTEM | NATIVE: LINUX-ONLY THROUGH VM: MACOS AND MS WINDOWS                                                                                                                                                                                                                                                                                                                                  |
|---|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Web server                                | NginX or any web server supporting PHP, like lighttpd, Apache, or Cherokee.                                                                                                                                                                                                                                                                                                          |
| Databases                               | MariaDB &gt;= 11.8 preferred, PostgreSQL &gt;=17, or MySQL &gt;=8.4.                                                                                                                                                                                                                                                                                                                          |
| PHP                                       | PHP &gt;=8.3 with the following extensions: `curl`, `json`, `mysql`, `pdo-sqlite`, `sqlite3`, `gd`, `intl`, `mysqli`, `pgsql`, `ssh2`, `gmp`, `mcrypt`, `pdo-mysql`, `readline`, `twig`, `imagick`, `memcache`, `pdo-pgsql`, `redis`, `xml`, `bz2`, `mbstring`. For details about supported PHP versions, see [Supported Versions of PHP](/docs/dg/dev/supported-versions-of-php.html). |
| SSL                                       | For production systems, a valid security certificate is required for HTTPS.                                                                                                                                                                                                                                                                                                          |
| Key-value store (Redis or Valkey)         | Redis versions 5.0 and 6.2; Valkey version &gt;=7.2                                                                                                                                                                                                                                                                                                                                     |
| Search engines                             | Elasticsearch &gt;=7.0, OpenSearch &gt;=1.3                                                                                                                                                                                                                                                                                                                                                |
| RabbitMQ                                  | Version &gt;=4.1                                                                                                                                                                                                                                                                                                                                                                        |
| Jenkins (for cronjob management)          | Version &gt;=2.0                                                                                                                                                                                                                                                                                                                                                                        |
| Graphviz (for state machine visualization) | Version &gt;=2.0                                                                                                                                                                                                                                                                                                                                                                        |
| Symfony                                   | Versions 5.0, and 6.0                                                                                                                                                                                                                                                                                                                                                                |
| Node.js                                   | Version &gt;= 24.14.0. For details about upgrading, see [Upgrade Node.js and npm](/docs/dg/dev/upgrade-and-migrate/upgrade-nodejs.html)                                                                                                                                                                                                                                                  |
| npm                                       | Version &gt;= 10.0.0                                                                                                                                                                                                                                                                                                                                                                    |
| Intranet                                  | Back Office application must be secured in an Intranet using VPN, Basic Auth, IP allowlist, or DMZ.                                                                                                                                                                                                                                                                                  |
| Spryker Commerce OS                       | Version &gt;= {{page.release_tag}}                                                                                                                                                                                                                                                                                                                                                          |
</description>
            <pubDate>Mon, 31 Aug 2026 06:49:34 +0000</pubDate>
            <link>https://docs.spryker.com/docs/dg/dev/system-requirements/latest/system-requirements.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/dg/dev/system-requirements/latest/system-requirements.html</guid>
            
            
        </item>
        
        <item>
            <title>Migrate from OpenSearch 1.3 to 3.5</title>
            <description>This document describes how to migrate an OpenSearch cluster used by a Spryker project from version 1.3 to 3.5.

Between major OpenSearch versions, an index or a cluster setting can become incompatible with the target version, for example because of an outdated Lucene index format, a deprecated setting, or a breaking plugin change. OpenSearch does not support skipping major versions and cannot be upgraded in place while such incompatibilities exist, so the upgrade is blocked until you resolve them. To resolve this, you upgrade the cluster incrementally, from 1.3 to 2.19, and then from 2.19 to 3.5, fixing every incompatibility before each upgrade.

{% info_block warningBox &quot;Verification&quot; %}

Before you start, test the migration in a non-production environment. Blocking writes to an index makes it read-only until the reindexing is complete, so plan the migration for a maintenance window.

{% endinfo_block %}

## 1. Update the required modules

You only need to update the packages for the features used in your project. Check the following table and update the packages that are installed in your project to at least the specified versions:

| Package | Minimum version |
| --- | --- |
| `spryker/sales-return-search` | 1.4.1 |
| `spryker/merchant-search` | 1.3.1 |
| `spryker/product-review` | 2.15.1 |
| `spryker/search-elasticsearch` | 1.23.1 |
| `spryker/service-point-search` | 1.4.1 |
| `spryker-feature/self-service-portal` | 20.9.1 |

Update the packages installed in your project using Composer:

```bash
composer update spryker/merchant-search:&quot;^1.3.1&quot; spryker/product-review:&quot;^2.15.1&quot; spryker/sales-return-search:&quot;^1.4.1&quot; spryker/search-elasticsearch:&quot;^1.23.1&quot; spryker/service-point-search:&quot;^1.4.1&quot; spryker-feature/self-service-portal:&quot;^20.9.1&quot;
```

If your project overrides the search schema of these modules, apply the equivalent changes to your project-level search schema as well.

## 2. Check the upgrade eligibility

Consult the breaking changes and deprecation notices for OpenSearch 2.19, and check your indexes and cluster settings against them to determine whether the cluster is eligible for the upgrade.

- If the cluster is eligible, upgrade it to 2.19 and continue to [4. Check the upgrade eligibility for 3.5](#4-check-the-upgrade-eligibility-for-35).
- If the cluster is not eligible, one or more incompatibilities block the upgrade.
  - For an index with an incompatible index format, unblock the upgrade by reindexing it as described in the following section.
  - For any other incompatibility, for example a deprecated index setting or a breaking plugin change, fix it first. Only continue with the upgrade after all the incompatibilities are resolved.

## 3. Reindex an index to unblock the upgrade

Repeat the following steps for every index with an incompatible index format. Replace `&lt;index&gt;` with the name of the index you are migrating.

### 3.1. Block writes to the index

To prevent data from changing while the index is being cloned, block write operations:

```json
PUT /&lt;index&gt;/_settings
{
  &quot;settings&quot;: {
    &quot;index.blocks.write&quot;: true
  }
}
```

### 3.2. Clone the index

Clone the index into a temporary index:

```json
PUT /&lt;index&gt;/_clone/&lt;index&gt;_tmp
```

### 3.3. Verify the document count

Compare the document count of `&lt;index&gt;` and `&lt;index&gt;_tmp`. The counts must match before you continue.

### 3.4. Delete the original index

```json
DELETE /&lt;index&gt;
```

### 3.5. Re-create the index and its schema

Re-create the index and install its schema using the following console command:

```bash
console search:setup:sources
```

### 3.6. Reindex the documents

Reindex the documents from the temporary index back into the newly created `&lt;index&gt;`:

```json
POST /_reindex?slices=2&amp;wait_for_completion=false
{
  &quot;source&quot;: {
    &quot;index&quot;: &quot;&lt;index&gt;_tmp&quot;
  },
  &quot;dest&quot;: {
    &quot;index&quot;: &quot;&lt;index&gt;&quot;
  }
}
```

### 3.7. Verify the document count again

Compare the document count of `&lt;index&gt;` and `&lt;index&gt;_tmp` again. The counts must match before you continue.

### 3.8. Delete the temporary index

```json
DELETE /&lt;index&gt;_tmp
```

After you reindex all the blocking indexes, upgrade the cluster to version 2.19.

## 4. Check the upgrade eligibility for 3.5

Consult the breaking changes and deprecation notices for OpenSearch 3.5, and check your indexes and cluster settings on version 2.19 against them to determine whether the cluster is eligible for the upgrade.

- If the cluster is eligible, upgrade it to 3.5.
- If the cluster is not eligible, incompatibilities again block the upgrade. Resolve them the same way as in step 2: reindex every index with an incompatible index format by repeating the steps in [3. Reindex an index to unblock the upgrade](#3-reindex-an-index-to-unblock-the-upgrade), and fix any other incompatibility. Then upgrade the cluster to 3.5.
</description>
            <pubDate>Wed, 26 Aug 2026 12:12:26 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/search/latest/base-shop/install-and-upgrade/migrate-from-opensearch-1.3-to-3.5.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/search/latest/base-shop/install-and-upgrade/migrate-from-opensearch-1.3-to-3.5.html</guid>
            
            
        </item>
        
        <item>
            <title>Upgrade the PurchasingControl module</title>
            <description>{% include pbc/all/upgrade-modules/upgrade-the-purchasingcontrol-module.md %} &lt;!-- To edit, see /_includes/pbc/all/upgrade-modules/upgrade-the-purchasingcontrol-module.md --&gt;
</description>
            <pubDate>Tue, 25 Aug 2026 08:40:54 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-purchasingcontrol-module.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-purchasingcontrol-module.html</guid>
            
            
        </item>
        
        <item>
            <title>Purchasing Control feature overview</title>
            <description>The *Purchasing Control* feature lets B2B companies track and control procurement spending by assigning orders to cost centers and enforcing configurable budget rules. It extends the existing [Approval Process](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/approval-process-feature-overview.html) with a second dimension of spending governance: per-department or per-project budget limits that work alongside the existing per-person permission limits.

Buyers assign a cost center and a budget to a cart at checkout or to a quote request, and agents can do the same on a customer&apos;s behalf.

{% info_block infoBox &quot;Info&quot; %}

This feature is available in the Back Office and on the Storefront.

{% endinfo_block %}

## Cost centers

A *cost center* is an organizational unit within a company that incurs costs but does not directly generate revenue. Companies use cost centers to track and control spending by department, project, location, or function.

**Common examples:**

- **Departmental:** Marketing, Engineering, HR, Facilities
- **Project-based:** Office Renovation Q2 2026, Trade Show Berlin
- **Location-based:** Warehouse Berlin, Office London

Every purchase a buyer makes is charged to a cost center so the company can track where money is being spent. In ERP systems such as SAP, Oracle, and Microsoft Dynamics, cost centers are a foundational accounting concept - orders flow into the ERP tagged with a cost center code, enabling financial reporting and cost allocation.

### Deactivated cost centers and budgets

A cost center or budget can be deactivated instead of deleted, which preserves the history of the orders already charged to it. Deactivated records are not offered in the cost center and budget selectors, and a deactivated cost center is no longer shown where the assignment of a cart or quote is displayed. If every cost center available to a buyer is deactivated, or if the selected cost center has no active budget left, no choices are rendered and the buyer cannot assign one until an active record is available again.

## Budgets

A *budget* is a spending limit assigned to a cost center for a defined period - monthly, quarterly, or annually. It represents the maximum amount that a department or project is authorized to spend in that period.

**Example:** The Marketing department has a quarterly procurement budget of €50,000 for office supplies and event materials. Once that budget is consumed, further purchases are either blocked, flagged for review, or escalated for approval.

### Budget enforcement rules

Each budget is configured with one of three enforcement rules:

| RULE | DESCRIPTION |
| --- | --- |
| Block | The order is rejected outright when the budget is exceeded. The buyer cannot proceed to checkout. |
| Warn | A warning is displayed to the buyer, but they can proceed. |
| Require Approval | The order is sent for approval when the budget is exceeded. The buyer cannot complete checkout until an approver accepts the order. |

### Budgets in recurring orders

With the [Recurring Orders feature](/docs/pbc/all/order-experience-management/latest/base-shop/feature-overviews/recurring-orders-feature-overview.html) installed, a recurring order carries a cost center and a budget, selected on the recurring order forms and changeable when the buyer edits the schedule or approves a review.

Budgets with the **Require Approval** enforcement rule cannot be used for a recurring order. A recurring order places its follow-up orders unattended, so no approver can accept them at placement time. The restriction applies in two places:

- Such budgets are not offered in the recurring order budget selector.
- Checkout is blocked if a quote being set up as a recurring order carries one. This check applies regardless of the quote grand total and of the remaining budget amount, so the budget does not have to be exceeded for the block to take effect.

Regular, non-recurring checkouts are not affected—there, the **Require Approval** rule behaves as described above.

## Relationship to the Approval Process

Spryker&apos;s existing Approval Process triggers a workflow when a buyer&apos;s order exceeds their *Buy up to grand total* permission. The Purchasing Control feature adds a parallel check: an order might be within a buyer&apos;s personal permission limit but still exceed the cost center&apos;s remaining budget.

Both checks run independently at checkout. If either the permission limit or the budget rule is triggered, the configured action - block, warn, or require approval - is applied. This gives companies layered spending governance: per-person limits *and* per-department or per-project limits.

{% info_block infoBox &quot;Permissions required for the Require Approval enforcement rule&quot; %}

To use budgets with the **Require Approval** enforcement rule, the following [Approval Process](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/approval-process-feature-overview.html) permissions must be assigned to the relevant company roles:

| PERMISSION | REQUIRES |
| --- | --- |
| Buy up to grand total | Send cart for approval |
| Send cart for approval | Buy up to grand total |
| Approve up to grand total | None |

{% endinfo_block %}

{% info_block warningBox &quot;Approvals within a business unit&quot; %}

Approvers can only approve orders of employees within their own business unit. This constraint applies to both permission-based and budget-based approval requests.

{% endinfo_block %}

## Cost centers and budgets in the procurement workflow

The typical B2B procurement flow involving cost centers and budgets:

1. **Finance sets budgets.** At the start of a fiscal period, finance allocates budgets to each cost center.
2. **Buyers are assigned to cost centers.** Buyers are linked to one or more cost centers they are authorized to purchase against. Cost centers are linked to company business units, so all users in a business unit are automatically assigned to the corresponding cost centers.
3. **Orders are tagged.** At checkout, the buyer selects the cost center the purchase is charged to and the budget it is drawn from. Both fields are saved together in a single step:
   - The budget dropdown offers the budgets of every cost center available to the buyer, narrowed to the selected cost center.
   - Changing the cost center narrows the budget list immediately, without reloading the page. If the previously selected budget does not belong to the new cost center, the budget field is cleared.
   - If the selected cost center has no active budgets, the budget field is hidden and a message states that no budgets are available.
   - A budget that is selected must belong to the selected cost center. The pairing is validated on the server, so a mismatched combination is rejected even when the browser-side filtering is bypassed.
   - The selector form does not enforce a budget selection by itself, but the field is marked as required in the browser whenever the selected cost center has active budgets. An order cannot be placed without an active budget: if the buyer&apos;s business unit has active cost centers and no active budget is resolved, checkout fails and the buyer is asked to select a cost center and a budget.
4. **Budget is validated.** The system checks whether the order total fits within the remaining budget for the selected cost center.
5. **Enforcement rules apply.** Based on the configured rule, the order is blocked, a warning is shown, or approval is required.
6. **Budget is consumed.** Once the order is confirmed, the budget balance is reduced by the order amount.
7. **Budget is restored.** If the order is cancelled or refunded, the budget balance is restored by the amount corresponding to the cancelled or refunded items. For partial cancellations or refunds, only the amounts of the affected items are restored.

## Checkout validation outcomes

| SCENARIO | OUTCOME |
| --- | --- |
| Within budget and within permission limit | Buyer completes checkout without additional steps. |
| Exceeds budget  -  Warn rule | A warning is displayed; the buyer can proceed to checkout. |
| Exceeds budget  -  Require Approval rule | The order is sent for approval; the buyer cannot complete checkout until approved. |
| Exceeds Buy up to grand total permission limit | The order is sent for approval, same as the standard Approval Process. |
| Exceeds budget  -  Block rule | Checkout is blocked; no approval option is available. |
| Recurring order with a Require Approval budget | Checkout is blocked, whether or not the budget is exceeded. The buyer must select a budget bound to the Block or Warn rule. |
| No active budget resolved while the business unit has active cost centers | Checkout fails; the buyer must select a cost center and a budget before placing the order. |

## Quote lock

When an order is sent for approval - whether triggered by a budget rule or a permission limit - the quote is locked to preserve the order state during the approval review. Neither the buyer nor the approver can modify the quote while it is pending approval. For details, see [Quote lock functionality](/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/approval-process-feature-overview.html#quote-lock-functionality).

## Cost centers and budgets on quote requests

Buyers do not have to wait until checkout to attribute spending. The same cost center and budget selection is available on quote requests, so a purchase is assigned to a cost center while it is still being negotiated.

{% info_block infoBox &quot;Info&quot; %}

Cost center selection on quote requests requires the [Quotation Process](/docs/pbc/all/request-for-quote/latest/install-and-upgrade/install-features/install-the-quotation-process-feature.html) feature.

{% endinfo_block %}

| CONTEXT | WHERE THE SELECTION IS AVAILABLE |
| --- | --- |
| Buyer (Storefront) | Quote request details page and quote request edit page in the company area. |
| Agent (Storefront) | Agent quote request details page and agent quote request edit page. |

### Cost centers follow the quote request owner

Cost centers are scoped per company business unit. On a quote request, the applicable cost centers are those of the business unit that owns the request - the business unit of the company user who created it - and not those of the person currently viewing it. An agent working on a customer&apos;s quote request therefore sees the customer&apos;s cost centers rather than their own.

Buyers can only change the cost center on their own quote requests. A quote request reference that belongs to another company user is treated as not found, so an unauthorized reference is indistinguishable from a reference that does not exist.

### Editability

On a quote request, selecting a budget is optional: there is no checkout to pass, so a quote request is saved with a cost center and no budget. A budget that is selected must still belong to the selected cost center.

A cost center and a budget can be changed only while the quote request is in an editable status. The status check runs on the server, so a quote request that is no longer editable is rejected even when the form is submitted directly. Quote requests that are not editable still display the assigned cost center and budget as read-only.

## Roles and capabilities

| ROLE | CAPABILITIES |
| --- | --- |
| Site Operator (Back Office) | Create, update, activate, and deactivate cost centers. Assign cost centers to business units. Create and manage budgets with amount, period, currency, and enforcement rule. View the **Cost Center** column in the orders table. Filter and search orders by cost center and budget. View spend-vs-budget reports. Export reports to CSV. Review the audit log. Import cost centers, budgets, and business unit assignments in bulk using data import. |
| Cost Center Manager (Storefront) | Create, update, activate, and deactivate cost centers and budgets from the company area. Requires the **Manage Cost Centers** permission assigned to their company role. |
| Buyer (Storefront) | Select a cost center and budget at checkout. Assign a cost center and budget to their own quote requests. View the remaining budget for the selected cost center. Submit orders for approval when required. Filter order history by cost center and budget. View the assigned cost center and budget on order detail pages. |
| Approver (Storefront) | Review locked quotes pending approval. Approve or reject orders, including those triggered by budget rules. |
| Agent (Storefront) | Assign a cost center and budget to a customer&apos;s quote request on the customer&apos;s behalf, using the cost centers of the quote request owner&apos;s business unit. |

## Related Developer documents

| INSTALLATION GUIDES |
| --- |
| [Install the Purchasing Control feature](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/install-features/install-the-purchasing-control-feature.html) |

| MIGRATION GUIDES |
| --- |
| [Upgrade the PurchasingControl module](/docs/pbc/all/cart-and-checkout/latest/base-shop/install-and-upgrade/upgrade-modules/upgrade-the-purchasingcontrol-module.html) |
</description>
            <pubDate>Tue, 25 Aug 2026 08:40:54 +0000</pubDate>
            <link>https://docs.spryker.com/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/purchasing-control-feature-overview.html</link>
            <guid isPermaLink="true">https://docs.spryker.com/docs/pbc/all/cart-and-checkout/latest/base-shop/feature-overviews/purchasing-control-feature-overview.html</guid>
            
            
        </item>
        
    </channel>
</rss>
