Solidus
A free, open-source ecommerce platform that gives you complete control over your store.
A free, open-source ecommerce platform that gives you complete control over your store.
<img width="250" src="./logo.svg" alt="Solidus logo"> # Solidus [](https://github.com/solidusio/solidus/actions/workflows/test.yml) [](https://codecov.io/gh/solidusio/solidus/branch/main) [](https://rubygems.org/gems/solidus) [](LICENSE) [](https://opencollective.com/solidus) [](https://opencollective.com/solidus) [](https://opencollective.com/solidus) [](https://opencollective.com/solidus) [](https://www.codetriage.com/solidusio/solidus) [](http://slack.solidus.io) **A free, open-source e-commerce platform that gives you complete control over your store.** - **Visit our website**: [https://solidus.io/](https://solidus.io/) - **Read our Community Guidelines**: [https://guides.solidus.io/policies/community-guidelines/](https://guides.solidus.io/policies/community-guidelines/) - **View the project roadmap**: [https://github.com/orgs/solidusio/projects/7](https://github.com/orgs/solidusio/projects/7) - **Read our guides**: [https://guides.solidus.io/](https://guides.solidus.io/) - **Join our Slack**: [http://slack.solidus.io/](http://slack.solidus.io/) - **Solidus Security**: [mailing list](https://groups.google.com/forum/#!forum/solidus-security) ## Table of Contents - [Supporting Solidus](#supporting-solidus) - [Summary](#summary) - [Demo](#demo) - [Getting Started](#getting-started) - [Installation Options](#installation-options) - [Performance](#performance) - [Developing Solidus](#developing-solidus) - [Contributing](#contributing) ## Supporting Solidus As a community-driven project, Solidus relies on funds and time donated by developers and stakeholders who use Solidus for their businesses. If you'd like to help Solidus keep growing, please consider: - [Become a backer or sponsor on Open Collective](https://opencollective.com/solidus). - [Contribute to the project](https://github.com/solidusio/.github/blob/main/CONTRIBUTING.md). ### Main Contributor & Director At present, Nebulab is the main code contributor and director of Solidus, providing technical guidance and coordinating community efforts and activities. [](https://nebulab.com/) ### Ambassadors Support this project by becoming a Solidus Ambassador. Your logo will show up here with a link to your website. [Become an Ambassador](https://opencollective.com/solidus). [](https://supergood.software/) --- ## Summary Solidus is a complete open source e-commerce solution built with Ruby on Rails. It is a fork of [Spree](https://spreecommerce.org). See the [Solidus class documentation](http://docs.solidus.io) and the [Solidus Guides](https://guides.solidus.io) for information about the functionality that Solidus provides. Solidus consists of several gems. When you require the `solidus` gem in your `Gemfile`, Bundler will install all of the following gems: - [`solidus_api`](https://github.com/solidusio/solidus/tree/master/api) (RESTful API) - [`solidus_backend`](https://github.com/solidusio/solidus/tree/master/backend) (Admin area) - [`solidus_core`](https://github.com/solidusio/solidus/tree/master/core) (Essential models, mailers, and classes) - [`solidus_sample`](https://github.com/solidusio/solidus/tree/master/sample) (Sample data) All of the gems are designed to work together to provide a fully functional e-commerce platform. However, you may only want to use the [`solidus_core`](https://github.com/solidusio/solidus/tree/master/core) gem combine it with your own custom frontend, admin interface, and API. ## Demo You can try the live Solidus demo [here.](http://demo.solidus.io/) The admin section can be accessed [here.](http://demo.solidus.io/admin) ## Getting started Begin by making sure you have [Imagemagick](http://imagemagick.org/script/download.php) installed, which is required for Paperclip. (You can install it using [Homebrew](https://brew.sh) if you're on a Mac.) To install Solidus with the current storefront, follow the instructions in [storefront/README.md](storefront/README.md). ### Accessing Solidus Store Start the Rails server with the command: ```bash bin/rails s ``` The storefront will be accessible at [http://localhost:3000/](http://localhost:3000/) and the admin can be found at [http://localhost:3000/admin/](http://localhost:3000/admin/). For information on how to customize your store, check out the [customization guides](https://guides.solidus.io/customization/customizing-your-storefront). ### Default Username/Password As part of running the above installation steps, you will be asked to set an admin email/password combination. The default values are `[email protected]` and `test123`, respectively. ### Questions? The best way to ask questions is to [join the Solidus Slack](http://slack.solidus.io/) and join the [#support channel](https://solidusio.slack.com/messages/support/details/). ## Installation options Instead of a stable build, if you want to use the bleeding edge version of Solidus, use this line: ```ruby gem 'solidus', github: 'solidusio/solidus' ``` **Note: The master branch is not guaranteed to ever be in a fully functioning state. It is too risky to use this branch in production.** By default, the installation generator (`solidus:install`) will run migrations as well as adding seed and sample data. This can be disabled using ```bash bin/rails g solidus:install --migrate=false --sample=false --seed=false ``` You can always perform any of these steps later by using these commands. ```bash bin/rails railties:install:migrations bin/rails db:migrate bin/rails db:seed bin/rails spree_sample:load ``` There are also options and rake tasks provided by [solidus\_auth\_devise](https://github.com/solidusio/solidus_auth_devise). ## Performance You may notice that your Solidus store runs slowly in development mode. This can be because in development each CSS and JavaScript is loaded as a separate include. This can be disabled by adding the following to `config/environments/development.rb`. ```ruby config.assets.debug = false ``` ### Turbolinks To gain some extra speed you may enable Turbolinks inside of Solidus admin. Add `gem 'turbolinks', '~> 5.0.0'` into your `Gemfile` (if not already present) and change `vendor/assets/javascripts/spree/backend/all.js` as follows: ```js //= require turbolinks // // ... current file content // //= require spree/backend/turbolinks-integration.js ``` **CAUTION** Please be aware that Turbolinks can break extensions and/or customizations to the Solidus admin. Use at your own risk. ## Developing Solidus * Clone the Git repo ```bash git clone git://github.com/solidusio/solidus.git cd solidus ``` ### Without Docker * Install the gem dependencies ```bash bin/setup ``` _Note_: If you're using PostgreSQL, MySQL, or MariaDB, you'll need to install those gems through the DB environment variable. ```bash # PostgreSQL export DB=postgresql bin/setup # MySQL or MariaDB (mysql2 adapter) export DB=mysql bin/setup ``` ### With Docker ```bash docker-compose up -d ``` Wait for all the gems to be installed (progress can be checked through `docker-compose logs -f app`). You can provide the ruby version you want your image to use: ```bash docker-compose build --build-arg RUBY_VERSION=3.0 app docker-compose up -d ``` The rails version can be customized at runtime through the `RAILS_VERSION` environment variable: ```bash RAILS_VERSION='~> 5.0' docker-compose up -d ``` Running tests: ```bash # sqlite docker-compose exec app bin/rspec # postgres docker-compose exec app env DB=postgres bin/rspec # mysql docker-compose exec app env DB=mysql bin/rspec ``` Accessing the databases: ```bash # sqlite docker-compose exec app sqlite3 /path/to/db # postgres docker-compose exec app env PGPASSWORD=password psql -U root -h postgres # mysql docker-compose exec app mysql -u root -h mysql -ppassword ``` In order to be able to access the [sandbox application](#sandbox), just make sure to provide the appropriate `--binding` option to `rails server`. By default, port `3000` is exposed, but you can change it through `SANDBOX_PORT` environment variable: ```bash SANDBOX_PORT=4000 docker-compose up -d docker-compose exec app bin/sandbox SANDBOX_PORT=4000 docker-compose exec app bin/dev ``` ### Sandbox Solidus is meant to be run within the context of Rails application. You can easily create a sandbox application inside of your cloned source directory for testing purposes. This sandbox includes solidus\_auth\_devise and generates with seed and sample data already loaded. * Create the sandbox application ```bash bin/sandbox ``` You can create a sandbox with PostgreSQL, MySQL, or MariaDB by setting the DB environment variable. ```bash # PostgreSQL export DB=postgresql bin/sandbox # MySQL or MariaDB (mysql2 adapter) export DB=mysql bin/sandbox ``` Depending on your local environment, it may be necessary for you to set environment variables for your RDBMS, namely: - `DB_HOST` - `DB_USER` - `DB_PASSWORD` If you need to create a Rails 5.2 application for your sandbox, for example if you are still using Ruby 2.4 which is not supported by Rails 6, you can use the `RAILS_VERSION` environment variable. ```bash export RAILS_VERSION='~> 5.2.0' bin/setup bin/sandbox ``` * You can start the Rails server and other services from either the Solidus folder or the sandbox one by running the command: ```bash bin/dev ``` Please note: if you run `bin/rails server` or similar commands, only the Rails server will start. This might cause the error `couldn't find file 'solidus_admin/tailwind.css'` when you try to load all pages. ### Tests Solidus uses [RSpec](http://rspec.info) for tests. Refer to its documentation for more information about the testing library. #### CI/CD We use GitHub Actions to run Solidus' test suites against all supported versions of Ruby and Rails. Before a pull request can be merged, all of the tests must pass. You can see the build statuses on the repository's [GitHub Actions page](https://github.com/solidusio/solidus/actions). #### Run all tests [ChromeDriver](https://chromedriver.chromium.org/downloads) is required to run the backend test suites. To execute all of the test specs, run the `bin/build` script at the root of the Solidus project: ```bash createuser --superuser --echo postgres # only the first time bin/build ``` The `bin/build` script runs using PostgreSQL by default, but it can be overridden by setting the DB environment variable to `DB=sqlite` or `DB=mysql` (MariaDB uses `DB=mysql`). For example: ```bash env DB=mysql bin/build ``` If the command fails with MySQL or MariaDB related errors you can try creating a user with this command: ```bash # Creates a user with the same name as the current user and no restrictions. mysql --user="root" --execute="CREATE USER '$USER'@'localhost'; GRANT ALL PRIVILEGES ON * . * TO '$USER'@'localhost';" ``` #### Run an individual test suite Each gem contains its own series of tests. To run the tests for the core project: ```bash cd core bundle exec rspec ``` By default, `rspec` runs the tests for SQLite 3. If you would like to run specs against another database you may specify the database in the command: ```bash env DB=postgresql bundle exec rspec ``` #### Code coverage reports If you want to run the [SimpleCov](https://github.com/colszowka/simplecov) code coverage report: ```bash COVERAGE=true bundle exec rspec ``` ### Extensions In addition to core functionality provided in Solidus, there are a number of ways to add features to your store that are not (or not yet) part of the core project. A list can be found at [extensions.solidus.io](http://extensions.solidus.io/). If you want to write an extension for Solidus, you can use the [solidus_dev_support](https://github.com/solidusio/solidus_dev_support.git) gem. ## Contributing Solidus is an open source project and we encourage contributions. Please read [CONTRIBUTING.md](https://github.com/solidusio/.github/blob/main/CONTRIBUTING.md) before contributing.
Django based open-sourced e-commerce storefront.
Spree is a complete, modular & API-driven open source e-commerce solution for Ruby on Rails.
Django based ticket sales platform for events.
Open-source platform to create your own peer-to-peer marketplace, also available with SaaS model.