Spree Commerce
Open-source headless ecommerce platform with a REST API and Next.js storefront
Alternative to: Shopify, Magento, WooCommerce, Salesforce Commerce Cloud
v4.3.0
2021-09-14Major new features
Modular API-first architecture

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.
Next.js Commerce integration

Next.js Commerce is an all-in-one React starter kit for high-performance eCommerce sites. With the new API-first architecture it was very easy to connect Spree APIs via Spree SDK to the new blazing fast react storefront.
BTW we have more storefront integrations news lined up in the coming weeks!
Pages & Navigation CMS
This release gives Spree users a powerful content management system that goes beyond creating basic text pages.
Spree Content Management System allows you to create:
Home Pages
- Create many home pages per store.
- Each home page is unique by language.
- Add multiple sections to each home page.
Standard Pages
- Standard pages consist of WYSIWYG text editor content.
- Each standard page has a slug that is unique to the store.
- Each page is assigned a language.
Feature pages
- Feature pages use page sections.
- Each feature page has a slug that is unique to the store.
- Feature pages are assigned a language.
Menus Users can create navigation menus for their Spree stores.
Each menu is unique by language and location within the store and has the following features:
- Menus contain many menu items. Each menu item can link to a product, taxon, URLs, home page, or CMS page.
- Menu items can be nested inside other menu items creating nested links.
- Menus can have container items used to organize links within the menu.
- Menu items can have images allowing you to create promotions within the main menu.
Platform API Developer Preview
A 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 which 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.
Advanced Product Filters
We’ve greatly expanded the 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 Option Types should be filterable and the ones you choose will be visible and supported in the Storefront and API
- Storefront API will also return available filters for products in the Product API endpoint
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.
Installation
Upgrade
Follow 4.2 to 4.3 upgrade guide
Noteworthy changes
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!
API
-
Added caching to API v2 serialized increasing API responsiveness 3-5 times Damian Legawiec
This also includes new confirmation option
Spree::Api::Config[:api_v2_cache_ttl]for the cache expiration TTL. Default value is3600(1 hour). Cache also auto-expires when cachd record is updated, more on this topic: https://github.com/jsonapi-serializer/jsonapi-serializer#caching -
Added universal collection caching for Platform/Storefront API responses #11245
-
Increased API v2 per page limit to 500 #11257
-
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
-
Multi-Store Return only Store resources in Storefront API, Platform API, and Storefront UI #11126 (damianlegawiec)
-
Fix API V2 Platform products by price sorting #11276 (szymoniwacz)
-
Platform API Classifications endpoints #11195 (damianlegawiec)
-
Platform API - Products endpoints #11194 (damianlegawiec)
-
Added API endpoint for changing cart currency #11331 (rafalcymerys)
-
Storefront API Products endpoint returns filter options with products #11318 (rafalcymerys)
-
Storefront API Adresses endpoint - display addresses from countries supported in the current store #11271 (v10110)
-
Add public preferences to payment methods in Storefront API Checkout endpoints #11301 (damianlegawiec)
-
Storefront Countries API returns all countries on a single page #11289 (damianlegawiec)
-
Fix API V2 Platform products by price sorting #11276 (szymoniwacz)
-
Storefront API / Platform API - allow to dynamically specify image dimensions/quality in API URLs to get the transformed image #11264 (damianlegawiec)
Core
-
Multi-Store
Order#available_payment_methodsby default will return only Payment Methods available in Order’s Store Damian LegawiecPassing
storeargument to that method will result in deprecation warning -
Multi-Store Deprecated
Store.currentin favour ofStores::FindCurrentDamian LegawiecAlso, this finder class can be replaced by custom one by setting
Spree::Dependencies.current_store_finder = YourCustomStoreFinderin
config/initializers/spree.rb(please check documentation) -
Multi-Store
Product,PromotionandPaymentMethodmodels require at least oneStoreassociated Damian Legawiec -
Multi-Store
Promotionis now associated to multipleStorerecords viaStorePromotionmodel Damian LegawiecYou can disable this behaviour by setting:
Spree::Config[:disable_store_presence_validation] = truein your
config/initializers/spree.rbfile -
Multi-Store
Store Creditmodel is now associated withStoreSzymon Iwacz -
Taxonmodel now requiresTaxonomypresence and thatTaxonymyneeds to match Taxon’s Parent (if present) Damian Legawiec -
Transactional emails were extracted into a separate gem called
spree_emailsDamian Legawiec -
Replaced
twitter_cldrgem with much smallervalidates_zipcodeDamian Kaczmarczyk -
Removed
premailer-railsgem dependency Damian Legawiec -
Removed
railsdependency - only require Rails gems that we really use Damian Legawiec -
Removed
respondersdependency Damian Legawiec -
Removed
sprocketsdependency Damian Legawiec -
Moved
spree.jsfile to frontend/backend Damian Legawiec -
Moved
polyfill.min.jsandfetch.umd.jsfiles to frontend Damian Legawiec -
Moved
cleave.jsfile to frontend/backend Damian Legawiec -
Moved
jquery.payment.jsfile to frontend Damian Legawiec -
Migrate User Roles code from Spree Auth Devise to Spree Core #11108 (damianlegawiec)
-
Change integer id columns into bigint #11182 (szymoniwacz)
Admin Panel
- Full Multi Store support with Store switcher #11099 (Vegann & MatthewKennedy)
- Change the taxon autocomplete to use Platform API. #11244 (MatthewKennedy)
- Use RTE for product description. #11181 (MatthewKennedy)
- Automatically set Store and Currency when creating resources in Admin UI #11096 (damianlegawiec)
- Added admin panel stock menu for stock locations and transfers #11134 (aplegatt)
Storefront
- 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
- Allow user to sort products by name on PLP #11091 (Vegann)