antiwork/gumroad

▲ 33 stars today★ 9,823⑂ 2,059

See what sticks

About antiwork/gumroad

antiwork/gumroad is an open-source project on GitHub, mainly written in Ruby. See what sticks It currently holds 9,823 stars and 2,059 forks with 7 open issues, and was last pushed on 2026-10-08 (repository created 2025-04-03).

Project Overview

Git Homed tracks it on the Today's Trending board, currently at rank #85 with 33 new stars today.

GitHub Repository Details

Repository antiwork/gumroad · default branch main · size 681291 KB · watchers 100 · source: GitHub REST API and repository README

README

https://github.com/antiwork/gumroad/blob/HEAD/Gumroad logo

See what sticks.

Gumroad is an e-commerce platform that enables creators to sell products directly to consumers. This repository contains the source code for the Gumroad web application.

https://github.com/antiwork/gumroad/blob/HEAD/Gumroad CLI

Contributing

We don't run an inbound review queue on this repo. To contribute a change: fork the repo, open the pull request on your own fork, then email [email protected] with a link to it. We read every submission and merge the ones we want on our side, keeping your authorship — though we can't promise a reply to each one or a timeline.

Your PR still has to meet the same bar as our own work — visual evidence for anything user-facing, QA steps, test results, and an AI disclosure naming the model. See CONTRIBUTING.md for the full guidelines and the substitutions that apply when working from a fork.

Table of Contents

Getting Started

Prerequisites

💡 If you're on Windows, follow our Windows setup guide instead.

Before you begin, ensure you have the following installed:

Ruby

Node.js

Docker

We use Docker to setup the services for development environment.

sudo wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker $(whoami)

MySQL & Percona Toolkit

Install a local version of MySQL 8.4.x to match the version running in production.

The local version of MySQL is a dependency of the Ruby mysql2 gem. You do not need to start an instance of the MySQL service locally. The app will connect to a MySQL instance running in the Docker container.

brew install [email protected] percona-toolkit
brew link --force [email protected]

to use Homebrew's openssl:

brew install openssl bundle config --global build.mysql2 --with-opt-dir="$(brew --prefix openssl)"

ensure MySQL is not running as a service

brew services stop [email protected]

ImageMagick

We use imagemagick for preview editing.

FFmpeg

We use ffprobe that comes with FFmpeg package to fetch metadata from video files.

PDFtk

We use pdftk to stamp PDF files with the Gumroad logo and the buyers' emails.

wkhtmltopdf

While generating invoices, to convert HTML to PDF, PDFKit expects wkhtmltopdf to be installed on your system. Download and install the version 0.12.6 for your platform.

Installation

Bundler and gems

We use Bundler to install Ruby gems.

gem install bundler

Install gems:

bundle install

Also make sure to install dotenv as it is required for some console commands:

gem install dotenv

npm and Node.js dependencies

Make sure the correct version of npm is enabled:

corepack enable

Install dependencies:

npm install

Configuration

Set up Custom credentials

App can be booted without any custom credentials. But if you would like to use services that require custom credentials (e.g. S3, Stripe, Resend, etc.), you can copy the .env.example file to .env and fill in the values.

Running Locally

Start Docker services

If you installed Docker Desktop (on a Mac or Windows machine), you can run the following command to start the Docker services:

make local

If you are on Linux, or installed Docker via a package manager on a mac, you may need superuser access to expose container ports. To do that, use sudo make local instead.

This command will not terminate. You run this in one tab and start the application in another tab. If you want to run Docker services in the background, use LOCAL_DETACHED=true make local instead.

Set up the database

bin/rails db:prepare

For Linux (Debian / Ubuntu) you might need the following:

Start the application

bin/dev

This starts the Rails server, the JavaScript build system, and a Sidekiq worker.

You can now access the application at http://localhost:3000. Seller subdomains and the asset/api hosts use *.localhost (e.g. http://seller.localhost:3000, http://api.localhost:3000) — modern browsers auto-resolve these to 127.0.0.1, so no /etc/hosts edits are needed.

Local dev limitations

*.localhost over HTTP is treated as a secure context by browsers (so Stripe.js, Stripe Elements, and other secure-context APIs work), but a couple of features that need either HTTPS or a registrable cookie domain don't work in this setup:

Testing

Run the full test suite:

bin/rspec

Run a single file or specific test:

bin/rspec spec/requests/dashboard_spec.rb
bin/rspec spec/requests/dashboard_spec.rb:75

Dependencies

Before running tests:

make local                          # start Docker services (db, Redis, etc.)
RAILS_ENV=test bin/rails db:setup   # set up the test database
RAILS_ENV=test bin/rails js:export  # generate JS constants for the test environment

Integration tests

Integration specs use Capybara with Selenium driving Chrome. Install Chrome from google.com/chrome.

See docs/testing.md for details on preventing flaky specs, VCR cassettes, debugging widgets, and purchase testing with Stripe/PayPal.

Development

Logging in

You can log in with the username [email protected] and the password password. The two-factor authentication code is 000000.

Read more about logging in as a user with a different team role at Users & authentication.

Resetting Elasticsearch indices

You will need to explicitly reindex Elasticsearch to populate the indices after setup, otherwise you will see index_not_found_exception errors when you visit the dev application. You can reset them using:

# Run this in a rails console:
DevTools.delete_all_indices_and_reindex_all

Push Notifications

To send push notifications:

INITIALIZE_RPUSH_APPS=true bundle exec rpush start -e development -f

Common Development Tasks

Rails console:

bin/rails c

Rake tasks:

bin/rake task_name

Linting

We use ESLint for JS, and Rubocop for Ruby. Your editor should support displaying and fixing issues reported by these inline, and CI checks these on every push.

If you'd like, you can run git config --local core.hooksPath .githooks to check for these locally when committing.

Common Issues

macOS Error When Running Tests (Related to fork())

objc[11912]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
objc[11912]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

This issue occurs on macOS due to how the fork() system call interacts with multithreaded Objective-C applications—commonly triggered when Spring is enabled during testing.

How to Fix:

Temporarily disable Spring before running your tests to avoid this error.

export DISABLE_SPRING=1
bin/rspec spec/requests/balance_pages_spec.rb

This will disable Spring for the current session, allowing the tests to run without triggering the fork()-related crash.

GitHub Stars & Activity

9,823Stars
2,059Forks
7Open issues
RubyLanguage

GitHub Popularity

GitHub stars9,823
Forks2,059
Open issues7
Primary languageRuby
LicenseMIT
Stars gained today33
Created2025-04-03
Last pushed2026-10-08

Trending History

Daily boardrank #85 · ▲ 33 stars

Related GitHub Projects

1

Homebrew / brew

Ruby★ 49,956⑂ 11,385▲ 26 stars
→
2

mattpocock / skills

Shell★ 281,061⑂ 23,557▲ 1,774 stars
→
3

jackfrued / Python-100-Days

Jupyter Notebook★ 186,953⑂ 55,750▲ 43 stars
→
4

ollama / ollama

Go★ 182,413⑂ 18,166▲ 128 stars
→
5

msitarzewski / agency-agents

Shell★ 158,336⑂ 25,541▲ 344 stars
→
6

Genymobile / scrcpy

C★ 151,565⑂ 13,908▲ 202 stars
→
7

ggml-org / llama.cpp

C++★ 130,546⑂ 24,204▲ 123 stars
→
8

microsoft / generative-ai-for-beginners

Jupyter Notebook★ 121,009⑂ 63,799▲ 61 stars
→

More Trending Repositories