Sharetribe Go - an open source marketplace platform, also available with SaaS model.
Clone or download
thomasmalbaux Merge pull request #3591 from sharetribe/remove-admin-acts-as-user-fe…

[Feature flag] Remove :admin_acts_as_user feature flag
Latest commit f87632d Jan 23, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci Fix CI not running some tests Dec 21, 2018
app [Feature flag] Remove :admin_acts_as_user feature flag Jan 22, 2019
autotest The basic structure for rspec Jul 5, 2010
bin rails5 upgrade - add rails5 configuration defaults Jun 20, 2017
client [Bug] Fixed listing working hours validation front-end Nov 30, 2018
config Merge pull request #3584 from sharetribe/view-all-my-listings-in-a-table Jan 21, 2019
db allow admin to change logo link in topbar Jan 10, 2019
docs Merge pull request #3442 from MStadlmeier/patch-1 Dec 18, 2018
features [Feature flag] Remove :admin_acts_as_user feature flag Jan 22, 2019
lib Log in-marketplace progress in data deletion log output Dec 7, 2018
log Add log dir to repository as new Thinking-sphinx requires it Jan 24, 2014
public Add support for running in maintenance mode Dec 1, 2016
script Support ongoing deletion of old marketplace data Dec 5, 2018
spec [Feature flag] Remove :admin_acts_as_user feature flag Jan 22, 2019
test [Feature] New marketplace - last fixes Apr 17, 2018
vendor/assets [Reviews] Admin can edit reviews Oct 17, 2018
.dockerignore Update Docker support Nov 22, 2016
.gitignore Fixed: New Order type "Offering services" Oct 25, 2017
.node-version Fixate node version to 7.8.0 Nov 19, 2017
.nvmrc rails5 upgrade - update react_on_rails Jun 20, 2017
.pryrc Remove awesome_rails_console, add awesome_print for nicer debugging o… May 3, 2016
.rspec Remove spork remove drb Dec 20, 2013
.rubocop.yml rails5 upgrade - silence rubocop warnings Jun 20, 2017
.rubocop_todo.yml stripe integration: added cucumber integration test features/stripe/s… Jul 26, 2017
.ruby-version Fixate ruby version to 2.3.4 Nov 19, 2017
.slugignore Add log dir to repository as new Thinking-sphinx requires it Jan 24, 2014
.wti WTI update Aug 3, 2018 Merge branch 'master' into fix-design-page Dec 19, 2018 Add fancy emojis Oct 17, 2016
Dockerfile Switch to using convox secure env Nov 1, 2018
Gemfile [Core] rails up to Dec 13, 2018
Gemfile.lock [Core] rails up to Dec 13, 2018
Guardfile Remove livereload Apr 11, 2016 Clarify copy Aug 19, 2015 Add Node and npm versions to Issue Template Oct 10, 2016
LICENSE Update license copyright years Jul 14, 2017
Procfile Remove image process queue Sep 30, 2016
Procfile.client-hot wait_for_routes -> export_routes_js Jun 6, 2016
Procfile.client-static wait_for_routes -> export_routes_js Jun 6, 2016 wait_for_routes -> export_routes_js Jun 6, 2016
Procfile.spec wait_for_routes -> export_routes_js Jun 6, 2016
Procfile.static Integrate the export task to Procfile Jun 6, 2016 Add HSTS by default and add support for per-community config Nov 28, 2018 Fix indentation Jun 9, 2017
Rakefile A new badge status is saved to the database using delayed job when a … Oct 26, 2010 Add HSTS by default and add support for per-community config Nov 28, 2018
VERSION Release 7.4.0 Oct 9, 2018
Vagrantfile Improve Docker/Fig setup Dec 22, 2014 Revert "Disable deflater" Sep 30, 2014
custom_plan.rb Update custom_plan according to the example Feb 4, 2016 Support ongoing deletion of old marketplace data Dec 5, 2018
docker-compose.yml Update Docker support Nov 22, 2016
fig.yml Add zeus service to fig Dec 22, 2014
package.json rails5 upgrade - update react_on_rails Jun 20, 2017
zeus.json Try zeus Dec 19, 2013


CircleCI Dependency Status Code Climate

Sharetribe is an open source platform to create your own peer-to-peer marketplace.

Would you like to set up your marketplace in one minute without touching code? Head to


Technology stack

  • Ruby 2.3
  • Ruby on Rails 5.1.1
  • MySQL 5.7
  • React + jQuery
  • Node.js 7.8 (for compiling JavaScript assets)
  • "what you see is what you get" Editor Mercury
  • Deploy: Custom Script (not using Mina or Cap3)
  • Server: Heroku
  • Image hosting: Amazon S3
  • Background job: delayed_job
  • Gems:
    • devise | Authentication
    • omniauth-facebook | Third party login: Facebook
    • haml and ERB | HTML teamplating
    • mysql2 | MySQL library for Ruby
    • paperclip | Image upload management
    • passenger | Web application server
    • react_on_rails | Integration of React + Webpack + Rails
    • factory_girl, capybara, rspec-rails, cucumber-rails, selenium-webdriver | Testing



Before you get started, the following needs to be installed:

  • Ruby. Version 2.3.4 is currently used and we don't guarantee everything works with other versions. If you need multiple versions of Ruby, RVM or rbenv is recommended.
  • RubyGems
  • Bundler: gem install bundler
  • Node. Version 7.8 is currently used and we don't guarantee everything works with other versions. If you need multiple versions of Node, consider using n, nvm, or nenv.
  • Git
  • A database. Only MySQL 5.7 has been tested, so we give no guarantees that other databases (e.g. PostgreSQL) work. You can install MySQL Community Server two ways:
    1. If you are on a Mac, use homebrew: brew install mysql (highly recommended). Also consider installing the MySQL Preference Pane to control MySQL startup and shutdown. It is packaged with the MySQL downloadable installer, but can be easily installed as a stand-alone.
    2. Download a MySQL installer from here
  • Sphinx. Version 2.1.4 has been used successfully, but newer versions should work as well. Make sure to enable MySQL support. If you're using OS X and have Homebrew installed, install it with brew install sphinx --with-mysql
  • Imagemagick. If you're using OS X and have Homebrew installed, install it with brew install imagemagick

Setting up the development environment

  1. Get the code. Clone this git repository and check out the latest release:

    git clone git://
    cd sharetribe
    git checkout latest
  2. Install the required gems by running the following command in the project root directory:

    bundle install

    Note: libv8 might fail to build with Clang 7.3, in that case you can try installing V8 manually:

    brew tap homebrew/versions
    brew install v8-315
    gem install libv8 -v '' -- --with-system-v8
    gem install therubyracer -- --with-v8-dir=/usr/local/opt/v8-315
    bundle install
  3. Install node modules:

    npm install
  4. Create a database.yml file by copying the example database configuration:

    cp config/database.example.yml config/database.yml
  5. Add your database configuration details to config/database.yml. You will probably only need to fill in the password for the database(s).

  6. Create a config.yml file by copying the example configuration file:

    cp config/config.example.yml config/config.yml
  7. Create and initialize the database:

    bundle exec rake db:create db:structure:load
  8. Run Sphinx index:

    bundle exec rake ts:index

    Note: If your MySQL server is configured for SSL, update the config/thinking_sphinx.yml file and uncomment the mysql_ssl_ca lines. Configure correct SSL certificate chain for connection to your database over SSL.

  9. Start the Sphinx daemon:

    bundle exec rake ts:start
  10. Start the development server:

    foreman start -f Procfile.static
  11. Invoke the delayed job worker in a new console (open the project root folder):

    bundle exec rake jobs:work

Congratulations! Sharetribe should now be up and running for development purposes. Open a browser and go to the server URL (e.g. Fill in the form to create a new marketplace and admin user. You should be now able to access your marketplace and modify it from the admin area.


Use Mailcatcher to receive sent emails locally:

  1. Install Mailcatcher:

    gem install mailcatcher
  2. Start it:

  3. Add the following lines to config/config.yml:

      mail_delivery_method: smtp
      smtp_email_address: "localhost"
      smtp_email_port: 1025
  4. Open http://localhost:1080 in your browser

Database migrations

To update your local database schema to the newest version, run database migrations with:

bundle exec rake db:migrate

Running tests

Tests are handled by RSpec for unit tests and Cucumber for acceptance tests.

Remember to follow all the steps listed in the Setting up the development environment paragraph before running tests because some tests depend on webpack assets.

  1. Navigate to the root directory of the sharetribe project

  2. Initialize your test database:

    bundle exec rake test:prepare

    This needs to be rerun whenever you make changes to your database schema.

  3. If Zeus isn't running, start it:

    zeus start
  4. To run unit tests, open another terminal and run:

    zeus rspec spec
  5. To run acceptance tests, open another terminal and run:

    zeus cucumber

    Note that running acceptance tests is slow and may take a long time to complete.

To automatically run unit tests when code is changed, start Guard:

bundle exec guard

Working with React, Webpack and Foreman

Some components are created with React (see documentation) and they need to be built with Webpack. We have Foreman Procfiles that can be used to run both Rails and Webpack:

  1. React component static build

    foreman start -f Procfile.static
  2. React component & hot loading styleguide (http://localhost:9001/)

    foreman start -f
  3. If you need to debug the Rails parts of Sharetribe with Pry, it's not possible with Foreman due to a known compatibility issue. In this case we recommend running Rails with old-fashioned rails server and React builds with Foreman in a separate terminal. That way your binding.pry calls open nicely in the same window with the Rails process.

  4. React component static build, React client only

    foreman start -f Procfile.client-static
  5. React component & hot loading styleguide (http://localhost:9001/), React client only

    foreman start -f Procfile.client-hot

Setting up Sharetribe for production

Before starting these steps, perform steps 1-5 from above.

  1. Set secret_key_base

    Generate secret key

    rake secret

    Add the following lines to config/config.yml:

      secret_key_base: # add here the generated key

    (You can also set the secret_key_base environment variable, if you don't want to store the secret key in a file)

  2. Create the database:

    RAILS_ENV=production bundle exec rake db:create
  3. Initialize your database:

    RAILS_ENV=production bundle exec rake db:structure:load
  4. Run Sphinx index:

    RAILS_ENV=production bundle exec rake ts:index
  5. Start the Sphinx daemon:

    RAILS_ENV=production bundle exec rake ts:start
  6. Precompile the assets:

    RAILS_ENV=production NODE_ENV=production bundle exec rake assets:precompile
  7. Invoke the delayed job worker:

    RAILS_ENV=production bundle exec rake jobs:work
  8. In a new console, open the project root folder and start the server:

    bundle exec rails server -e production

The built-in WEBrick server (which was started in the last step above) should not be used in production due to performance reasons. A dedicated HTTP server such as unicorn is recommended.

It is not recommended to serve static assets from a Rails server in production. Instead, you should use a CDN (Content Delivery Network) service, such as Amazon CloudFront. To serve the assets from the CDN service, you need to change the asset_host configuration in the the config/config.yml file to point your CDN distribution.

You need to configure a couple scheduled tasks in order to properly run your marketplace in production. See the Scheduled tasks documentation.

For production use we recommend you to upgrade only when new version is released and not to follow the master branch.

Setting your domain

  1. In your database, change the value of the domain column in the communities table to match the hostname of your domain. For example, if the URL for your marketplace is, then the domain is

  2. Change the value of the use_domain column to true (or 1) in the communities table.

  3. If you wish to enable HTTP Strict Transport Security (recommended), set also the hsts_max_age column in communities table to a non-zero number of seconds. For instance 31536000 (1 year).

Setting up S3

If you want to use S3 to host your images, you need to do a bit more configuration.

  1. Create a IAM role which has full S3 access. Save the AWS access and secret keys.

  2. In the S3 console, create two buckets, one for upload and one for permanent storage. For example your-sharetribe-images and your-sharetribe-images-tmp.

  3. Set the upload bucket (your-sharetribe-images-tmp) to have an expiration (for example, of 14 days) using lifecycle management

  4. Enable CORS on the upload bucket.

  5. Set the following configuration in your sharetribe config.yml: s3_bucket_name: "your-sharetribe-images" s3_upload_bucket_name: "your-sharetribe-images-tmp"

  6. Add your AWS keys to the sharetribe app. The best way to do that is via environment variables, rather than checking them into your config.yml. Set the aws_access_key_id and aws_secret_access_key environment variables to the values for the IAM user.

  7. (Optional) When you enable S3, uploaded images are linked directly to the S3 bucket. If you want to serve these assets through CDN, you can set the user_asset_host configuration option in addition to asset_host in config/config.yml.

Here's a sample CORS configuration that allows anyone to post to your bucket. Note that you may want to lock down the origin host more tightly, depending on your needs.

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="">
Troubleshooting S3 Setup
  • if you are having trouble uploading, look at the request using browser devtools and see what error statuses and messages are being sent.
  • double check that your AWS keys are being correctly set.
  • if you can upload images successfully, but the images aren't processed, make sure that the delayed-job worker is running.

Advanced settings

Default configuration settings are stored in config/config.default.yml. If you need to change these, use the config/config.yml file to override the defaults. You can also set configuration values to environment variables.

React components can be created using hot module replacement HMR technique in Styleguide (http://localhost:9001/) path in local development environment. Webpack is used to bundle React components for deployments and hot loading. Related webpack configs can be found from folder sharetribe/client/

Unofficial installation instructions

Use these instructions to set up and deploy Sharetribe for production in different environments. They have been put together by the developer community, and are not officially maintained by the Sharetribe core team. The instructions might be somewhat out of date.

If you have installation instructions that you would like to share, don't hesitate to share them at the Sharetribe community forum.


PayPal and Stripe are the two available payment gateways integrated.

PayPal payments are only available on marketplaces hosted at due to special permissions needed from PayPal. We hope to add support for PayPal payments to the open source version of Sharetribe in the future.

Stripe can be used in the open-source alternative, as long as your country and currency are supported.

Enable Stripe

Starting from release 7.2.0, Stripe is supported.

Stripe API keys will be encrypted when stored so it is important to configure your own random encryption key. You should fill the app_encryption_key variable in the config/config.yml file with a long random string, unique to your project.

Stripe can be configured from the admin panel, in the "Payment settings" section. Instructions on how to get Stripe API keys can be found there.

If Stripe isn't automatically enabled in the admin panel after upgrading to 7.2.0, you should run the following commands in your Rails console, where <ID> is your marketplace ID (probably 1): TransactionService::API::Api.processes.create(community_id: <ID>, process: :preauthorize, author_is_seller: true) and TransactionService::API::Api.settings.provision(community_id: <ID>, payment_gateway: :stripe, payment_process: :preauthorize, active: true).


Sharetribe follows Semantic Versioning where possible.

Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes,
  • MINOR version when you add functionality in a backwards-compatible manner, and
  • PATCH version when you make backwards-compatible bug fixes.

See the document How Sharetribe applies Semantic Versioning to read more how Semantic Versioning is applied in practice.


See for detailed list of changes between releases.


See for information about actions needed when upgrading.

For production use we recommend you to upgrade only when new version is released and not to follow the master branch.


Would you like to make Sharetribe better?

See for the steps to contribute.


See for information about how to make a new release.


Sharetribe uses WebTranslateIt (WTI) for translations. If you'd like to translate Sharetribe to your language or improve existing translations, please ask for a WTI invitation. To get an invite, send an email to and mention that you would like to become a translator.

All language additions and modifications (except for English) should be done through the WTI tool. We do not accept Pull Requests that add or modify languages (except English).

Bug tracker

Browse open issues and submit new ones in Github Issues.

We are dedicating the Github Issue only for bugs in the Sharetribe codebase. For general questions, start a new thread in the Community forum instead of opening a new Issue.

After you have opened a new issue, the team will handle it according to these instructions: How to handle Github Issues


More detailed technical documentation is located in docs/

Community forum

The Sharetribe open source community forum is located at

The forum is a great place to ask support and help for example with issues during the installation.

MIT License

Sharetribe is open source under the MIT license. See LICENSE for details.