spree

Open Source multi-language/multi-currency/multi-store E-commerce platform for Ruby on Rails with a modern UX, PWA frontend, REST API, GraphQL, several official extensions, and 3rd party integrations.

Last updated on: July 12 at 09:29 PM

source code bug tracker
Opensource
11318 11318 4735
owner:  spree

Spree Commerce - complete open source e-commerce solution built with Ruby on Rails. PWA, Global Commerce, Headless Commerce

Spree Commerce

Gem Version Circle CI Test Coverage

Spree is a complete open source e-commerce solution for global brands. It was started by Sean Schofield and is now developed by Spark Solutions. We're open to contributions.

Key Features

admin panel

  • Headless Commerce - build mobile apps or custom storefronts in any technology
  • PWA - offline shopping experiences like native mobile apps
  • Mobile-first Storefront - modern, ultra fast and responsive storefront designed for great UX as well as SEO
  • Global Commerce - multi currency and multi language support out of the box, different shipping methods / costs for different regions, advanced tax calculation
  • Multi-Store - host multiple brands / stores on one Spree instance with different branding, configuration, payment methods, shipping options, product catalogs etc
  • Responsive Admin Panel - manage and curate products, users, orders, returns, shipments & more
  • Orders - robust system for orders, shipments, returns and refunds
  • Carts - comprehensive and advanced discounts system
  • Payments - over 30 payment provider integration out of the box plus API to integrate any other gateway
  • Run everywhere - cloud, VPS, Docker, Kubernetes
  • Battle Tested - used by thousands of merchants around the globe in all categories since 2007!
  • Fully customizable - pick and choose parts you want to use and customize everything else (storefront, order processing, API, etc) to create unique solutions that your business requires
  • More features available via extensions - dozens of extensions built by community, ready for use for free!

multi store

Demo

See Spree in action: demo.spreecommerce.org

Or fire up your own demo on Heroku:

Deploy

Admin panel credentials for your own Heroku demo:

  • login: spree@example.com
  • password: spree123

Installation

Option A - use Spree Starter with Docker

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

Option B - add Spree to an existing Ruby on Rails application

  1. Please follow Add Spree to an existing Ruby on Rails application tutorial

Documentation

Go to Spree Guides

Extensions

Extensions provide additional features and integrations for your Spree store

Go to Extensions Directory

Contributing

Spree is an open source project and we love contributions in any form - pull requests, issues, feature ideas!

Please review the Contributing Guide

License

Spree is released under the New BSD License.

About Spark Solutions

Spark Solutions

Spark Solutions is a full stack eCommerce agency specialed in Spree Commerce, Ruby on Rails and JavaScript. We’ve been leading Spree open-source efforts since 2016 as its core team. We also do client work. Our project teams consist of Designers, Software Engineers, Testers and Project Managers practicing agile project delivery. We’ll integrate our team with yours to jointly architect, deliver, maintain and scale the software products you need. You drive the project with requirements and acceptance testing and we help you deliver faster using industry-standard project management and comms best practices.

We are passionate about open source software. We are available for hire.

tags
e-commerce ecommerce rails ruby rubyonrails spree spreecommerce cart ecommerce-platform graphql headless-commerce shop spree-commerce store
compatible spree versions
tags spree versions
master s.version
v0.2.0
v0.4.0
v0.4.1
v0.5.0
v0.5.1
v0.6.0
v0.7.0
v0.7.1
v0.8.0
v0.8.1
v0.8.2
v0.8.3
v0.8.4
v0.8.5
v0.9.0
v0.9.1
v0.9.2
v0.9.3
v0.9.4
v0.10.0.beta
v0.10.0
v0.10.1
v0.10.2
v0.11.0
v0.11.1
v0.11.2
v0.11.3
v0.11.4
v0.11.99
v0.30.0.beta1 version
v0.30.0 version
v0.30.1 version
v0.30.2 version
v0.40.0 version
v0.40.1 version
v0.40.2 version
v0.40.3 version
v0.40.4 version
v0.50.0 version
v0.50.1 version
v0.50.2 version
v0.50.3 version
v0.50.4 version
v0.60.0.RC1 version
v0.60.0 version
v0.60.1 version
v0.60.2 version
v0.60.3 version
v0.60.4 version
v0.60.5 version
v0.60.6 version
v0.70.0.rc2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.0 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.3 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.4 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.5 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.6 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v0.70.7 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.0.rc1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.0.rc2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.0.rc3 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.0.rc4 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.0 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.3 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.4 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.5 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.6 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.0.7 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.0.rc1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.0.rc2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.0 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.2.rc1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.3 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.4 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.5 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.1.6 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.0.rc1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.0.rc2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.0 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.3 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.4 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.2.5 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.0.rc1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.0.rc2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.0 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.1 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.2 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.3 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.4 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v1.3.5 File.read(File.expand_path("../SPREE_VERSION", __FILE__)).strip
v2.0.0.rc1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.0 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.4 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.5 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.6 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.7 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.8 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.9 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.10 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.11 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.0.12 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.0 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.4 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.5 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.6 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.7 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.8 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.9 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.10 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.11 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.1.12 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.0 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.4 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.5 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.6 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.7 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v.2.2.8 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.8 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.9 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.10 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.11 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.12 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.13 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.2.14 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.0 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.4 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.5 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.6 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.7 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.8 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.9 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.10 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.11 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.12 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.3.13 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.0.rc1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.0.rc2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.0.rc3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.4 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.5 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.6 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.7 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.8 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.9 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v2.4.10 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.0.rc1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.0.rc2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.0.rc3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.0.rc4 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.0 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.2 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.3 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.4 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.5 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.6 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.6.1 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.7 File.read(File.expand_path('../SPREE_VERSION', __FILE__)).strip
v3.0.8 s.version
v3.0.9 s.version
v3.0.10 s.version
v3.1.0.rc1 s.version
v3.1.0.rc2 s.version
v3.1.0.rc3 s.version
v3.1.0.rc4 s.version
v3.1.0 s.version
v3.1.1 s.version
v3.1.2 s.version
v3.1.3 s.version
v3.1.4 s.version
v3.1.5 s.version
v3.1.6 s.version
v3.1.7 s.version
v3.1.8 s.version
v3.1.10 s.version
v3.1.11 s.version
v3.1.12 s.version
v3.1.13 s.version
v3.1.14 s.version
v3.2.0.rc1 s.version
v3.2.0.rc2 s.version
v3.2.0.rc3 s.version
v3.2.0 s.version
v3.2.1 s.version
v3.2.2 s.version
v3.2.3 s.version
v3.2.4 s.version
v3.2.6 s.version
v3.2.7 s.version
v3.2.8 s.version
v3.2.9 s.version
v3.3.0.rc1 s.version
v3.3.0.rc2 s.version
v3.3.0.rc3 s.version
v3.3.0.rc4 s.version
v3.3.0 s.version
v3.3.1 s.version
v3.3.3 s.version
v3.3.4 s.version
v3.3.5 s.version
v3.3.6 s.version
v3.4.0.rc1 s.version
v3.4.0.rc2 s.version
v3.4.0 s.version
v3.4.1 s.version
v3.4.2 s.version
v3.4.3 s.version
v3.4.4 s.version
v3.4.5 s.version
v3.4.6 s.version
v3.5.0.rc1 s.version
v3.5.0.rc2 s.version
v3.5.0 s.version
v3.6.0.rc1 s.version
v3.6.0 s.version
v3.6.1 s.version
v3.6.2 s.version
v3.6.3 s.version
v3.6.4 s.version
v3.6.5 s.version
v3.6.6 s.version
v3.7.0.beta s.version
v3.7.0.rc1 s.version
v3.7.0.rc2 s.version
v3.7.0.rc3 s.version
v3.7.0 s.version
v3.7.1 s.version
v3.7.2 s.version
v3.7.3 s.version
v3.7.4 s.version
v3.7.5 s.version
v3.7.6 s.version
v3.7.8 s.version
v3.7.9 s.version
v3.7.10 s.version
v4.0.0.beta s.version
v4.0.0.rc1 s.version
v4.0.0.rc2 s.version
v4.0.0.rc3 s.version
v4.0.0 s.version
v4.0.1 s.version
v4.0.2 s.version
v4.0.3 s.version
v4.1.0.rc1 s.version
v4.1.0.rc2 s.version
v4.1.0.rc3 s.version
v4.1.0 s.version
v4.1.1 s.version
v4.1.2 s.version
v4.1.3 s.version
v4.1.4 s.version
v4.1.5 s.version
v4.1.6 s.version
v4.1.7 s.version
v4.1.8 s.version
v4.1.9 s.version
v4.2.0.beta s.version
v4.1.10 s.version
v3.7.11 s.version
v4.0.4 s.version
v4.1.11 s.version
v4.2.0.rc1 s.version
v3.7.12 s.version
v3.7.13 s.version
v4.0.5 s.version
v4.1.12 s.version
v4.2.0.rc2 s.version
v4.2.0.rc3 s.version
v4.2.0.rc4 s.version
v4.2.0.rc5 s.version
v4.2.0 s.version
v3.7.14 s.version
v4.0.7 s.version
v4.2.1 s.version
v4.2.2 s.version
v3.7.14.1 s.version
v4.0.7.1 s.version
v4.1.13.1 s.version
v4.2.3 s.version
v4.2.3.1 s.version
v4.0.8 s.version
v4.1.14 s.version
v4.2.5 s.version
authors
Sean Schofield Spark Solutions