Frequently Asked Questions

About Spryker in general

I don’t get it, what is Spryker?

Spryker is a commerce framework for customer centric, data driven transactional business models for online pure players, digital (corporate) transformation projects or non-standard but transactional business models (like e.g. marketplaces, price engines).

How fast is Spryker’s technology?

Recent performance tests have shown 29ms front-end and 34ms back-end performance for a “Hello World” execution in a DevVM. Its speed is due to the separation of the front-end application and the back-end system, and its architecture design. Most information needed (e.g. products and CMS data) is served by the front-end and its fast KV storage; the back-end is only queried if more complex business logic is needed, like in cart calculation.

How scalable is Spryker’s technology?

Spryker is built to handle a huge amount of visitors. The software scales horizontally and vertically, so if you need more power, you can simply ramp up server capacity or deploy better hardware.

What makes Spryker stand out from competitors?

Spryker represents a new approach because it focuses not on having a huge amount of configurable – not changeable – features, but on IT productivity and business flexibility. The key promise is to increase the productivity and agility of the IT team allowing for a much leaner, trial-and-error oriented approach in development. A lot of today’s challenges like massive personalization, website speed, decoupled components, data driven approach, hyper-agility, multiple deployments a day are the industry’s best practices that have all been applied to Spryker.

How is Spryker connected to Project A Ventures?

Project A Ventures is an investor in Spryker Systems along other investors who support and believe in our team, product and vision.

How many Spryker shops are online?

Spryker 2.0 was released as open code version in April 2016 with less than 10 customers live. Until then it was developed as “Yves and Zed” by Project A Ventures, which we call Spryker 1.0 and has 20 live customers today and the first learnings of Spryker are based on the Rocket Internet ecommerce history with version 0.5, internally called “Alice and Bob” with approx.. 100+ live customers.


How do we start with Spryker or how do we transform the Demoshop to our new shop?

To understand Spryker’s architecture and how to develop your product using Spryker, please follow the articles listed in here. Under the Tutorials section from documentation you’ll find some short tutorials to help you get started with Spryker. The tutorials include :

  • Project Structure Overview
  • Extending Spryker Core functionality
  • How to add a new bundle
  • Extending the database schema

How can we import old customer data and order data?

Data migration refers to the process of transferring data from an old legacy system to a new system. This process must be planned in advance.

When preparing the data migration you must identify the mapping between the entities defined in the legacy system and the ones defined in the new one. You can store these mappings in spreadsheet. You must define validation checks for extracted data and also acceptance tests that must be done after the migration process is completed.

  • Retrieve the data from the legacy system database : you can either use SQL or a data migration tool
  • Extract files containing data for each data source in turn
  • Run validation checks against the files containing the extracted data
  • Transform the extracted data so that it fits the database model from the new syste
  • Load the transformed data in the new database
  • Run acceptance tests

Does Spryker provide a solution for hosting?

Hosting is not handled by Spryker. We have a list of system requirements and we provide all the information necessary to set Spryker up, but the rest is up to you. You can also engage with one of our hosting partners or follow the guidance and best practices from the ACADEMY regarding infrastructure.

Upon purchasing a Spryker license, will I have a ready-to-run shop or do I start from the scratch?

You‘ll have a simple, ready-to-run shop and can start from there. The code is a great baseline for fast development, so you get pretty much everywhere pretty soon.

Am I able to launch an online shop internationally with Spryker?

Yes. Our architecture provides internationalization capabilities. One single shop can use integrated features like multi-language, but most customers will want to launch separate web shops in each country. Therefore, we have developed systematics that allow developers to create one basic shop system for all countries, with the option for customizing parts of the system for each country. This minimizes development expenses, while still being able to meet individual demands.

How easy is it to integrate Spryker into an existing IT environment?

Spryker is made for an easy IT environment integration. There are several connection points so that you can write the APIs you need.

How long will my Spryker installation remain compatible with the main system?

Spryker consists of close to 100 feature bundles that can be seen independently, so you can update a bundle if it hasn’t been changed and the connections to other bundles stay the same. Nevertheless, you’ll have access to all future developments, from which you can pick and choose.

What is used between Yves and Zed, is this pure RPC (no REST, SOAP)?

It is a pure RPC for internal usage. We decided to avoid the overhead of the standard web-service protocols because of performance reasons.


At the Hackathon, PosgreSQL was recommended, but the VM uses MySQL. Which are the advantages and disadvantages? Is it possible to change our VM to use PostgreSQL?

MySQL vs PostgreSQL is a decision that you must make when you need to integrate open-source relational database management system in the application. You must consider the advantages and disadvantages of both database management systems so that you can choose what fits your solution the best.

Spryker supports both MySQL and PostgreSQL. This can be easily configured in the configuration file placed under config/Shared folder.

If you choose to use MySQL :

$config[SystemConfig::ZED_DB_ENGINE] = 'mysql';

or if you choose to use PostgreSQL:

$config[SystemConfig::ZED_DB_ENGINE] = 'pgsql';

How is the data-base connected to the shop system?

The Zed system is connected with the underlying SQL database using an OR-Mapper, we rely on Propel as our default ORM.

How is front-end tracking data integrated into the data warehouse?

Web tracking is just another data source for the data warehouse.

Which technology is used for ETL processes in the data warehouse?

There is no specific tool, just a set of scripts that extract, transform, and load the data into the snowflake schema. It’s often faster.

Would Spryker work with a NoSQL database?

Yves already uses two NoSQL database which are Redis as KV storage and Elasticsearch as search engine. To persist the data Spryker uses a relational database (PostgreSQL as default) to keep the data structured and consistent. In some cases it makes sense to connect Zed to another NoSQL database like Couchbase or MongoDB which is of course possible.

Does Spryker support Master-Master replication?

Yes, the database server can be configured to support Master-Master replication. Database replication is the process by which a single data set stored in the database, will be live-copied to a second server.

Why do you prefer/use Propel over Doctrine? What are the exact advantages?

Propel is preferred to be used because it accomplishes good software with less code and it offers support to IDE to provide you intellisense. Propel is well integrated, fast and powerful.

Why do you use Redis and not Memcached?

Both Redis and Memcached are in-memory, key-value data stores. Both technologies are based on the same key-value data model and they both keep data in RAM, which makes them extremely useful as a caching layer. Both technologies solve the same problem, but Redis is newer and by using it you gain a lot of power. Redis superiority is evident on every aspect of cache management(the algorithms used by it are far more performant). Also, Redis gives you much greater flexibility regarding the objects you can cache and a larger size limit. But the most important aspect on choosing Redis over Memcached is that Redis offers replication. Replication is a proven solution that guarantees the cache’s contents and service availability.

How is it controlled which attributes are available in the search server?

The data stored in Elasticsearch is loaded via collectors job. The implementation for extracting, transforming and loading the data to Elasticsearch can be found in the ProductCollector class.

The collector process consists of 2 steps :

  • createQuery - here you define the sql query that retrieves the data that needs to be loaded in Elasticsearch
  • processData - here you transform the retrieved dataset to fit the Elasticsearch structure

Can I use Solr instead of Elasticsearch as a search engine?

Each component in Spryker is decoupled and easy to replace. The Elasticsearch solution delivered with Spryker can be easily replaced with a new one.

Why do you use Elasticsearch over Solr, what is the advantage?

Both Elasticsearch and Solr are built on the Lucene search engine; Elasticsearch is a newer technology which already proved its capabilities and it gained a lot of attention. The focus of Elasticsearch is not only over the search functionality but more on extracting value from data in generally. Elasticsearch makes it easier to implement a large search system, being also a big data analysis solution.

How do you control which facets are provided for a category? How can this be overwritten?

The facets are configured in the FacetConfig class. They must be in line with the structure of the data loaded in Elasticsearch.

More information about search can be read here.

Third parties

Do you work with third-party providers for payment, e-mail, etc.?

Yes, we provide a set of interface implementations to work with different systems like payment providers, e-mail services, fraud prevention systems, etc. You can also check out our industry partner directory for recent integrations or the ACADEMY content for best practices in integrating such 3rd parties.

As a third-party service provider, how can we work together with Spryker?

Just call us. We‘re happy to work with third party providers to get even better software.

How can the state machine e.g. be triggered by SAP (Web-service)?

You can find out more about modeling a sales order process in here. For integration with other systems you can setup a condition over a transition. This condition is checked when the check:condition cron job runs ( it can check if a specific event took place)

Is there a set of APIs available to connect content systems to Zed?

Generally, we suggest that APIs are developed to a specific requirement to ensure error-free data transfers. Building this kind of customized API should be relatively easy and clearly easier than connecting specific systems to a generic API.

Front-end Development

Why does Spryker use Silex as its front-end engine?

As a micro-framework, it is clean and easy to handle. The underlying Symfony ecosystem is widely accepted among developers, making it easy to customize and extend the capabilities of the front end as needed.

How can I incorporate my own CSS styles and Javascript in Zed/Yves?

The Javascript and CSS files are placed under static/assets folder.

The resources used by Zed are under static/assets/Zed folder and the ones used by Yves in the static/assets/Yves folder.

Could I replace Yves by my own front-end layer (e.g. AngularJS based front-end)?

Yes, you can choose any technology that you want for the front-end layer (AngularJS, React or Vanilla). This applies for CSS as well; you can use either Sass, LESS, Stylus or PostCSS.

Is Yves just pure CSS, Javascript and HTML templates?

Yves is a fast and lightweight front-end application. It mainly contains CSS, Javascript and Twig templates but not only. Yves also contains controllers written in PHP to access the bussiness logic implemented in Zed; also, it contains support to access the Redis key-value data storage and Elasticsearch.

Yves doesn’t use full page cache, but isn’t Yves - in a way - Zed’s full page cache?

Yves and Zed are linked through an asynchronous connection, so that data is always up to date. Since data is never stored in Yves, the usual cold cache issues (outdated product availability, etc.) do not arise with Yves. We use Redis as a Key Value storage in combination with Elasticsearch. This guarantees us front-end performance of around 25-50 ms with a classical cache like e.g. Varnish while still maintaining full personalization abilities.

How do the translations work (One store and more than one language)?

Translated content is managed by the Glossary bundle. You can find more details about this here. For each store you can configure the available locales, as in the example below :

$stores['DE'] = [  ...
    'locales' => ['de_DE','en_US'], 

For having the content translated in Yves, you can use the trans Twig extension. You must specify the glossary key and apply the trans extension on it as in the example below:

 {{ "customer.address.update" | trans }} 

Back-end Development

Which coding language do you use?

We use PHP because it is easy to learn and a lot of people know how to use it.

How long does it take to bring developers up to speed?

An experienced developer needs only a few days to get a good feeling for the system. Based on our experience, a developer is up to speed in a few weeks.

How tests are written and how they are executed?

Regarding the best practices on writing tests, please read the Testing section from here. You can easily run the tests by running the code:test console command with the following arguments depending on the context:

// Run all the tests on the project level
vendor/bin/console code:test
// Running groups of tests
vendor/bin/console code:test -g Foo,Bar
// Also initializing and making sure all test classes are present
vendor/bin/console code:test -i

How does the authentication for Zed work? How can I work around it for a specific controller (e.g. for a REST API)?

Users and their associated roles and groups can be managed from the Zed interface, by navigating to Users Control section.

The set of authentication rules are configured in the configuration file placed under the config/Shared folder; same for the user rules.

$config[AclConfig::ACL_DEFAULT_RULES] = [
        'bundle' => 'auth',
        'controller' => 'login',
        'action' => 'index',
        'type' => 'allow',
config[AclConfig::ACL_USER_RULE_WHITELIST] = [
        'bundle' => 'application',
        'controller' => '*',
        'action' => '*',
        'type' => 'allow',