opensourceprojects.dev

A broadsheet for software that doesn't ask for your email

Gumroad's open-source e-commerce platform, with a fork-and-email contribution mo...
GitHub RepoImpressions3

Project Description

View on GitHub

Gumroad Is Open Source Now, and Its Contribution Model Is Unusual

You've probably bought something from Gumroad at some point—a PDF, a font, a plugin, maybe a course. But did you know the whole platform is now open source? The code behind one of the most popular tools for creators selling directly to consumers is sitting on GitHub, and you can read through it, run it locally, and even contribute. The catch is that contributing works a little differently than you might expect.

What It Does

Gumroad is an e-commerce platform that lets creators sell products directly to consumers. This repository contains the source code for the Gumroad web application—the thing that handles storefronts, checkout, product delivery, and everything else that happens between a creator hitting publish and a customer clicking buy.

The stack is a fairly conventional Rails setup. You'll need Ruby (the version pinned in .ruby-version), Node.js (pinned in .node-version), and Docker for the development services. MySQL 8.4.x matches production, and there's a local dependency on Percona Toolkit, plus ImageMagick for preview editing and FFmpeg for pulling metadata out of video files. If you're on Windows, the README points you to a separate setup guide rather than trying to make the standard instructions work.

In other words, it's not a toy repo. It's the actual application, with the actual dependencies, and getting it running means installing the same things the Gumroad team installs.

Why It's Cool

The interesting part here isn't just that Gumroad is open source—plenty of companies dump code on GitHub and walk away. It's the contribution model, which is genuinely different from what you're used to.

There's no inbound review queue. The README is blunt about this: "We don't run an inbound review queue on this repo." Instead, the process is fork the repo, open the pull request on your own fork, then email [email protected] with a link to it. The team reads every submission and merges the ones they want on their side, keeping your authorship. They also say plainly that they can't promise a reply to each one or a timeline.

The bar is the same as their own work. Your PR has to meet the same standard as internal contributions—visual evidence for anything user-facing, QA steps, test results, and an AI disclosure naming the model you used. That last one is a notable requirement, and it's the kind of thing more projects will probably start asking for. The full guidelines live in CONTRIBUTING.md, including the substitutions that apply when you're working from a fork (since some things you'd normally do on a branch in the main repo aren't available to you).

It's a real production codebase. You're not looking at a demo or a stripped-down example. You're looking at the app, with its Elasticsearch indices, push notifications, linting setup, and integration tests. If you've ever wanted to see how a commercial Rails app of this scale is structured, this is a rare chance to read it end to end.

The setup is honest about the friction. The README doesn't pretend installation is a one-liner. It tells you to stop MySQL from running as a service on macOS, warns you to link Homebrew's OpenSSL for the mysql2 gem, and gives you separate instructions for Linux. That kind of specificity saves you an afternoon of debugging.

The tradeoff is real, though: emailing a link to your PR is unusual, and the lack of a promised reply means you're contributing without knowing whether anyone will look at it this week or next month. If you need feedback loops to stay motivated, this model will test your patience.

How to Try It

Getting the app running locally takes some setup, but the README walks you through it.

  1. Install Ruby at the version in .ruby-version, and Node.js at the version in .node-version.
  2. Install Docker. On macOS, grab Docker Desktop. On Linux:
    sudo wget -qO- https://get.docker.com/ | sh
    sudo usermod -aG docker $(whoami)
    
  3. Install MySQL 8.4.x locally (it's a dependency of the mysql2 gem, but you don't need to start the service—the app connects to MySQL in the Docker container). On macOS:
    brew install [email protected] percona-toolkit
    brew link --force [email protected]
    brew install openssl
    bundle config --global build.mysql2 --with-opt-dir="$(brew --prefix openssl)"
    brew services stop [email protected]
    
    On Linux, install MySQL from the official docs and run apt install libmysqlclient-dev.
  4. Install ImageMagick and FFmpeg. On macOS that's brew install imagemagick and brew install ffmpeg; on Linux it's sudo apt-get install imagemagick and the equivalent for FFmpeg.
  5. Follow the rest of the installation, configuration, and "Running Locally" sections in the README.

Once it's up, the Development section covers logging in, resetting Elasticsearch indices, push notifications, common tasks, and linting—so you're not left guessing how to do everyday things.

The repo is at github.com/antiwork/gumroad. If you're on Windows, start with the Windows setup guide instead of the standard instructions.

Final Thoughts

This is best for developers who want to read a real production Rails app, or who have a specific fix or feature they care enough about to fork and email about. It's not the right fit if you want a fast merge or a back-and-forth review conversation—the README is upfront that neither is guaranteed. But if you can work with that, you're getting access to a codebase that powers a lot of creator businesses, and a contribution model that trades responsiveness for a much lower volume of noise. That's a reasonable trade, and it's worth seeing how it plays out.

Back to Projects
Project ID: 2735eac6-2d1d-4487-a211-2e1f7015c3a2Last updated: October 4, 2026 at 02:48 AM