---
title: Version Comparison
slug: klevu-magento-v4/version
docTags: 
createdAt: 2024-09-12T11:45:39.159Z
---

## Improvements

- PHPUnit Integration tests with code coverage \~80%.
- PHPCS to a stricter standard than Magento.
- PHPStan to Level 6 (Level 9 for non-Magento modules, e.g. PHP-SDK)
- Separation of concerns, each module can be removed if not required.

### Frontend

- Setting of Theme JS settings via the admin.
- Single URL for search results.
- Addition of recommendations banner widget.
- Correct filtering of visibility without any customisation.
- Correct currency conversion including symbols defined in Magento.
- Move Javascript to page end where possible.&#x20;
- Add Javascript to the head in a non-blocking manner where possible.
- Remove all Klevu code from the checkout

### Indexing (Data Sync)

- Switch to Klevu JSON indexing from XML indexing.
- Removal of on-the-fly calculation of indexing actions.
- Customer group pricing includes catalog price rules.
- Use Magento image generation for Klevu images.

***

|                                                             | **v2.x/v3.x**                                                                                                                                                                         | **v4.x**                                                                                                                                                                                                                                  |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Plugin                                                      | Migrated from Magento 1.                                                                                                                                                              | Purpose-built for Magento 2 following Magento’s best practice.                                                                                                                                                                            |
| PHP support                                                 | 5.6+<br />Limits PHP features that can be used, e.g. type hints.<br />Versions of PHP that are EOL contain security bugs.                                                             | 8.1+<br />Make full use of newer PHP features (type hints, named args, null safe op, etc..)<br />Performance improvements from newer versions of PHP.                                                                                     |
| Magento Support                                             | 2.1.18 - 2.4.6<br />Includes workarounds for missing features, core bugs, etc..<br />Support for the old version means v2.x of the extension cannot be listed on Magento Marketplace. | 2.4.4+<br />Only supports Magento versions supported by Adobe.                                                                                                                                                                            |
| Future Klevu Development                                    | Will receive feature updates until v4.x General Availability and security updates for 1 year after the launch.                                                                        | Will receive all new features, including message queues for indexing and analytics, partial product data sync and multi-store integration with one API key.                                                                               |
| Klevu API                                                   | XML API                                                                                                                                                                               | JSON API                                                                                                                                                                                                                                  |
| Test Code Coverage                                          | \~14%                                                                                                                                                                                 | \~80%                                                                                                                                                                                                                                     |
| PHPCS compliant                                             | No                                                                                                                                                                                    | Yes, to a stricter standard than Magento’s PHPCS.                                                                                                                                                                                         |
| PHPStan compliant                                           | No                                                                                                                                                                                    | Yes, to level 6 for the Magento modules (level 9 for PHP-SDK and PHP-pipelines)                                                                                                                                                           |
| Separation of concerns                                      | Indexing and search code mixed in the same module.                                                                                                                                    | A module for each feature. Indexing, frontend and analytics are separated.<br />Each indexing entity type and frontend solution is added via separate modules.<br />Designed to have non-required modules removed via `composer replace`. |
| Object Manager                                              | Is used in the code and can not be removed due to circular dependencies.                                                                                                              | No usage outside of Magento's best practice guidelines (e.g. constructor arguments, factories or tests).                                                                                                                                  |
| Can code be modified via plugins?                           | Not all due to some variables passed by reference.                                                                                                                                    | Yes, this is the recommended way of modifying all Klevu code.                                                                                                                                                                             |
| Klevu JS Theme customisations                               | Via a custom module only.                                                                                                                                                             | Via admin settings, themes or a custom modules.                                                                                                                                                                                           |
| Search Results URL                                          | Custom URL `/search` can not be changed.<br />Magento results URL is also available at `/catalogsearch/result` causing duplicate content.                                             | Reuses the Magento search URL `/catalogsearch/result` can be changed as required.<br />Toggle between Klevu Theme JS results and Magento via a URL parameter.                                                                             |
| Recommendations Banners                                     | Code has to be added manually. Code provided via KMC does not work with dynamic blocks.                                                                                               | Added via a widget with an option to make it compatible with dynamic blocks. Only the recs banner ID is required.                                                                                                                         |
| Custom Product Types                                        | Possible, but not simple to implement. Requires preferencing classes which could lead to breaking the upgrade path for the module.                                                    | Built with custom product types in mind. Inject an `entityProvider` class for the custom type via `di.xml`                                                                                                                                |
| Custom Entity Types                                         | Possible, but not simple to implement. Requires preferencing classes and breaking the upgrade path for the module.                                                                    | Built with custom entity types in mind. Inject an `entityIndexerService` class for the new type via `di.xml`                                                                                                                              |
| Entity data sent to Klevu during indexing.                  | Syncs many attributes which may not be required by your store.                                                                                                                        | Sync only the data required for your store.                                                                                                                                                                                               |
| Customisation of entity data sent to Klevu during indexing. | Requires preferencing a class and breaking the upgrade path for the module.<br /><br />                                                                                               | Uses Klevu YAML pipelines which can be overridden by injecting your own YAML file via `di.xml`. Option to auto-generate YAML for custom attributes. No code is required to add data to indexing.                                          |
| Indexing next action calculation                            | During indexing the action to perform is calculated on the fly. This can be extremely resource-heavy and time-consuming for larger stores.                                            | The next action is calculated in advance of the sync and stored in the database tables. Sync then reads those tables and performs the required action.                                                                                    |
| Klevu script tags                                           | Multiple script tags are added that should have been combined into one.                                                                                                               | Reduction in the number of tags added.                                                                                                                                                                                                    |
| Klevu interactive                                           | Is in use. Klevu JS waits until page is interactive before firing.                                                                                                                    | Removed. Klevu JS executes immediately. Any Klevu JS that has other dependencies is handled via webhooks and is executed when available.                                                                                                  |
| Headless Frontend                                           | Frontend modules have to remain installed, enabled and enabled in the config.                                                                                                         | All fronted modules can be removed via `composer replace` if a headless implementation is required.                                                                                                                                       |
|                                                             |                                                                                                                                                                                       |                                                                                                                                                                                                                                           |

