Spree Commerce logo

Spree Commerce

Open-source headless ecommerce platform with a REST API and Next.js storefront

Alternative to: Shopify, Magento, WooCommerce, Salesforce Commerce Cloud

Spree Commerce screenshot

About Versions (100)

v4.3.0.rc1

2021-08-11

Major/New Features

Modular API-first architecture

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:

  1. Easily replace Storefront and Admin Panel with your own
  2. 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
  3. 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.

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 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.

Advanced Product Filters

We’ve greatly expanded product filters feature. Now you can:

  1. 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
  2. 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
  3. 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.

Installation

  1. Install Docker
  2. Download Spree Starter
  3. Unzip it
  4. Run bin/setup in spree_starter-main directory

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!

Storefront

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. 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

Core

  • Multi-Store Order#available_payment_methods by default will return only Payment Methods available in Order’s Store Damian Legawiec

    Passing store argument to that method will result in deprecation warning

  • Multi-Store Deprecated Store.current in favour of Stores::FindCurrent Damian Legawiec

    Also, this finder class can be replaced by custom one by setting

    Spree::Dependencies.current_store_finder = YourCustomStoreFinder

    in config/initializers/spree.rb (please check documentation)

  • Multi-Store Product, Promotion and PaymentMethod models require at least one Store associated Damian Legawiec

  • Multi-Store Promotion is now associated to multiple Store records via StorePromotion model Damian Legawiec

    You can disable this behaviour by setting:

    Spree::Config[:disable_store_presence_validation] = true

    in your config/initializers/spree.rb file

  • Multi-Store Store Credit model is now associated with Store Szymon Iwacz

  • Taxon model now requires Taxonomy presence and that Taxonymy needs to match Taxon’s Parent (if present) Damian Legawiec

  • Transactional emails were extracted into a separate gem called spree_emails Damian Legawiec

  • Replaced twitter_cldr gem with much smaller validates_zipcode Damian Kaczmarczyk

  • Removed premailer-rails gem dependency Damian Legawiec

  • Removed rails dependency - only require Rails gems that we really use Damian Legawiec

  • Removed responders dependency Damian Legawiec

  • Removed sprockets dependency Damian Legawiec

  • Moved spree.js file to frontend/backend Damian Legawiec

  • Moved polyfill.min.js and fetch.umd.js files to frontend Damian Legawiec

  • Moved cleave.js file to frontend/backend Damian Legawiec

  • Moved jquery.payment.js file to frontend Damian Legawiec

Full Changelog

You can view the full changes using Github Compare.