New features
💎 Recommenders premium
Recommendations now have their own dedicated space in the back office. Administrators can define a recommendation strategy (a recommender type) and turn it into an auto-recommender that automatically suggests products across the storefront, all from a few simple screens.
💎 Import/Export feature premium
Gally introduces a new Import/Export feature: bulk operations, such as loading or extracting large sets of data, can now be launched and tracked directly from a dedicated back-office screen, running in the background instead of tying up the interface. This release already puts it to use for Thesaurus dictionaries, with more use cases to come.

Add facet search bar in example app
Filtering by facets just got easier when a list of values is long. The example app's "view more" facet panel now includes a search bar, letting shoppers type a few letters to instantly find the value they're looking for (a brand, a color, a size...) instead of scrolling through a long list.

💎 Track visitor activity and see it in a new Search Usage dashboard premium
Gally can now capture how visitors search, browse and click across the storefront, thanks to a new tracking channel introduced in this release. A first Search Usage dashboard in the back office puts this data to use, giving merchandisers a set of key metrics on how search is used on their store, directly in Gally.

💎 Term suggestion premium
This newly tracked visitor activity also powers a new term suggestion feature, recommending search terms based on what visitors are actually searching for on the store.

Update to API Platform 4.2
The technical foundation of Gally's API has been upgraded to its latest version. This keeps Gally aligned with the latest improvements from its underlying technology, and prepares the ground for future capabilities.
Performance optimizations
This release includes a dedicated round of performance improvements, making Gally more responsive and efficient, with nothing to configure, and no change of habits required.
New JS SDK
Gally now ships an official JavaScript/TypeScript SDK, giving developers a ready-to-use toolkit to build integrations and storefronts on top of Gally: catalog synchronization, search, indexing, visitor tracking and more, all in one place. It makes it faster and easier for technical teams to connect Gally to a new front end or a third-party platform.
⚠️ Breaking changes
- New
crondocker service: this release requires adding acronservice to your Docker setup. It's what runs the new background processing introduced in this release (Import/Export jobs and visitor tracking). - Reindex required: new index aliases have been introduced (catalog, localized catalog and locale). A full reindex is necessary after upgrading for search to keep working correctly.
📦 Features
- [Docker] Add env var to skip yarn install if necessary by @kerwan in #713
- [Job] #1354398 - Import/Export feature by @botisSmile in #731
- [Job] #1354398 - Disable container cron on CI by @botisSmile in #736
- [Composer] Update gally requirement by @PierreGauthier in #738
- [PHPUnit] Update indirect deprecation limit by @botisSmile in #740
- [Example app] #1349080 - Add facet search bar in example app by @botisSmile in #743
- [E2e] #1369486 - ensure category scope config request is awaited in tests by @kerwan in #735
- [E2e] #1365972 - correct e2e tests to account for attribute code column by @kerwan in #733
- [Recommender] #1340374 - Add recommender pages by @botisSmile in #742
- [ImportExport] #1354398 - import export front by @kerwan in #741
- [Tracker] #1362816 - Add cron by @PierreGauthier in #749
- [API Platform] Update to Api Platform 4.2 by @PierreGauthier in #745
- [E2e] #1354398 - Fix job upload modal title in e2e test by @kerwan in #751
- [Cache] Clear gally cache on symfony cache clear by @PierreGauthier in #747
- [Dashboard][E2e] #1214469 - dashboard page by @kerwan in #752
- [E2e] Exclude GallySampleDataBundle from premium status check by @botisSmile in #755
- [E2e] Update search usage KPI expected values to match sample data by @botisSmile in #756
- [Performance] Optimizations by @botisSmile in #762
🐛 Fixes
- [Tracker] #1362816 - Prevent ism index to be created with 1 replica by @PierreGauthier in #746
- [E2eE] Fix e2e tests by @botisSmile in #750
- [E2e]: Add toBeVisible to wait for menu expand animations to comp… by @botisSmile in #757
- [Docker] Fix mono container for 2.2.x by @PierreGauthier in #761
- [E2e] #1392847 - Fix facets flaky tests by @kerwan in #764
- [Docker] Ensure cron waits for php migrations to complete before… by @botisSmile in #765
- [E2e] - fix e2e expected translations by @kerwan in #766
- [Docker] Ensure proxy waits for varnish to be healthy before sta… by @botisSmile in #767
- [Inte] Prevent app secret used as app env on inte env by @PierreGauthier in #768
🔨 Quality
- [CI] #1359468 - Improve ci speed by @kerwan in #705
- [CI] Fix coverage step by @kerwan in #732
- [E2e] #1369486 - add playwright screenshots and video on test failures by @kerwan in #734
- [CI] Add default value for env var by @PierreGauthier in #744
- [CI] Make e2e tests mandatory by @botisSmile in #748
- [Workflow] Make deploy workflow more generic by @PierreGauthier in #753
- [Makefile] Add consume_messages make target with optional receiver filter by @botisSmile in #754
- [Docker] Add blackfire profile by @botisSmile in #758
- [Makefile][Docker][Front] chore: add sdk command to makefile and package.json + upgrade image t… by @kerwan in #759
- [Command] #1389503 - Add option to delete datastream by @PierreGauthier in #763
Full Changelog: v2.2.1...v2.3.0

