Monolith is gone replaced with a truly headless modular design!
We’ve completely decoupled Storefront (
spree_frontend), Admin Panel (
spree_backend) and extracted transactional Emails into their own gem (
spree_emails). Thanks to this you can:
- Easily replace Storefront and Admin Panel with your own
- Use the version of Storefront and Admin you like, so you can update the Spree Core and API without the need to upgrade these two
- Easily replace standard transactional emails with Klaviyo, Mailchimp and other 3rd parties
We’re also making Spree less dependent on the Rails framework, while supporting Rails 5.2, 6.0 and 6.1 on Ruby 2 and 3.
New set of fast and modern APIs for application to application integrations based on oAuth 2.0 authentication and permissions. This API completely replaces API v1 which will be extracted from Spree core in 5.0. Platform API is built on the same foundations and technology as Storefront API that means JSON API format, Swagger (Open API) documentation and oAuth 2.0 authentication.
Platform API is the biggest and most robust API for Spree with the biggest number of API endpoints to cover all features available in Admin Panel plus more. All API v1 usage in Admin Panel was also replaced with Platform API.
We’ve greatly expanded product filters feature. Now you can:
- Filter by Properties - you can set which Properties should be filterable and the ones you choose will be visible and supported in the Storefront and API
- Filter by Option Types - you can set which Oprion Types should be filterable and the ones you choose will be visible and supported in the Storefront and API
- Filters on Storefront, both Properties and Option Types will be automatically shown only when Products in selected Taxon have these Option Types/Properties attached, same goes for values, we’re only displaying values from Products in the given Taxon
This way you can create new custom filters in the Admin UI from Option Types or Properties and the system will do the rest work for you.
Please review each of the noteworthy changes to ensure your customizations or extensions are not affected. If you are affected by a change and have any suggestions, please submit a PR to help the next person!
- Upgraded Sprockets to v4 and added support for ES6, Source Maps and Manifest.js Damian Legawiec
- Multi-Store Only Store Orders are returned Damian Legawiec
- Multi-Store Only Store Products are returned Damian Legawiec
- Added clearing all filters on PLP / Taxon page Lukasz Adamczyk
- Added filtering Products on PLP by a custom price range Lukasz Adamczyk
- Display only these Product Filters that have Products attached Lukasz Adamczyk
Added caching to API v2 serialized increasing API responsivenes 3-5 times Damian Legawiec
This also includes new confirmation option
Spree::Api::Config[:api_v2_cache_ttl]for the cache expiration TTL. Defualt value is
3600(1 hour). Cache also auto-expires when cachd record is updated, more on this topic: https://github.com/jsonapi-serializer/jsonapi-serializer#caching
- Multi-Store Storefront Products API returns Products from the current Store Damian Legawiec
- Multi-Store Storefront Account Orders API returns Orders from the current Store Damian Legawiec
- Multi-Store Storefront Order Status API returns Order from the current Store Damian Legawiec
Order#available_payment_methodsby default will return only Payment Methods available in Order’s Store Damian Legawiec
storeargument to that method will result in deprecation warning
Store.currentin favour of
Also this finder class can be repleced by custom one by setting
Spree::Dependencies.current_store_finder = YourCustomStoreFinder
config/initializers/spree.rb(please check documentation)
PaymentMethodmodels require at least one
Storeassociated Damian Legawiec
Promotionis now associated to multiple
StorePromotionmodel Damian Legawiec
You can disable this behaviour by setting:
Spree::Config[:disable_store_presence_validation] = true
Store Creditmodel is now associated with
- Transactional emails were extracted into a seperate gem called
twitter_cldrgem with much smaller
premailer-railsgem dependency Damian Legawiec
railsdependency - only require Rails gems that we really use Damian Legawiec
respondersdependency Damian Legawiec
sprocketsdependency Damian Legawiec
spree.jsfile to frontend/backend Damian Legawiec
fetch.umd.jsfiles to frontend Damian Legawiec
cleave.jsfile to frontend/backend Damian Legawiec
jquery.payment.jsfile to frontend Damian Legawiec
You can view the full changes using Github Compare.