⚡
SelfHostStackOpen-Source Directory

Why Migrate Away from Shopify & Gumroad?

Shopify takes 2.9% + $0.30 from every card transaction on top of $39-$399/mo plans, adds 0.5%-2% surcharges if you use any non-Shopify payment gateway, and most stores end up paying another $200-$1,500/mo in App Store subscriptions for basic functionality like subscriptions, tiered discounts, and ERP sync. Gumroad skims a flat 10% of every digital product sale plus a $10/mo tier for core features — on a $100,000/year product line that is $10,000+ in lost margin. Self-hosting Medusa.js or Saleor keeps 100% of the take: zero per-transaction cuts, zero app-store bloat (custom features ship in your own code), full ownership of checkout, order data, and customer records, and headless storefronts with sub-second page loads.

Technical Architecture & Migration Analysis

Shopify operates a monolithic multi-tenant Ruby on Rails core with proprietary Storefront and Admin GraphQL APIs, while Gumroad is a fully managed marketplace that processes and stores your digital files and payouts. Self-hosted commerce inverts the model: Medusa.js runs a modular Node.js/TypeScript core with PostgreSQL for catalog, orders, and customers, Redis/BullMQ for async event processing, and decoupled Next.js or Remix storefronts; Saleor is a Python/Django GraphQL engine with PostgreSQL, Redis, and Celery workers. Both architectures separate backend business logic from your customer-facing frontend, enabling sub-second page loads, fully custom checkout workflows, and digital-download delivery from your own object storage — with zero per-transaction tolls and full ownership of customer data.

⚠️

When NOT to Migrate (When Staying on Shopify & Gumroad Makes Sense)

Self-hosting is not universally the right move. Keep paying for SaaS if your team hits any of these constraints:

  • ▸You are a non-technical solopreneur who needs a drag-and-drop theme/storefront builder with zero coding knowledge.
  • ▸You rely on Shopify's physical retail POS card readers or Gumroad's turnkey global payout handling across dozens of currencies.
  • ▸Your team cannot maintain Node.js/Python services, database migrations, and PCI-DSS scope (mitigated by using Stripe Elements tokenization).

Real-World Cost Comparison: Shopify & Gumroad vs Self-Hosted

Comparing vendor cloud billings against standard Hetzner / DigitalOcean infrastructure costs at scale.

Tier / ScaleShopify & Gumroad CostSelf-Hosted VPS CostEstimated Annual SavingsTechnical Breakdown
Digital Creator / Indie Seller
$5,000/mo digital product sales (e-books, courses, templates)
Gumroad 10% + $10/mo = ~$510/mo ($6,120/year)€3.79/month (Hetzner CX22 2 vCPU, 4GB RAM)~$5,500/yearMedusa + object storage delivers digital files with zero platform cut; Stripe processes at interchange.
Boutique / Emerging Brand
$25,000/mo GMV (500 orders/mo), 2 essential plugins
$150 - $280/month ($1,800 - $3,360/year in base + app fees)€3.79/month (Hetzner CX22 2 vCPU, 4GB RAM)$1,750 - $3,300/yearMedusa.js runs backend services with Redis on a $4/mo VPS; frontend deploys free on Cloudflare Pages.
Fast-Growing DTC Brand
$150,000/mo GMV (3,000 orders/mo), multi-currency, ERP sync
$850 - $1,800/month ($10,200 - $21,600/year in Shopify + app subscriptions)€14.28/month (Hetzner CPX31 4 vCPU, 8GB RAM)$10,000 - $21,400/yearZero third-party transaction fee penalties; direct Stripe or Adyen payment gateway processing.
High-Volume Multi-Region Commerce
$1,000,000+/mo GMV, omni-channel, B2B wholesale portal
$2,500/mo base (Shopify Plus) + $2,000-$5,000/mo app fees + revenue cuts€64.00/month (Dedicated Hetzner AX42 8-core AMD, 64GB DDR5)$50,000 - $120,000+/yearCustom business logic executed directly in PostgreSQL without hitting Shopify API rate limits.

Top 2 Recommended Open-Source Replacements

Tested, self-contained, and production-ready. Click any tool to inspect verified docker-compose configurations, hardware sizing, and deployment guides.

Medusa.js

MIT⭐ 26.5k+

The open-source Shopify alternative. Headless commerce engine built with Node.js, TypeScript, and modern modular architecture.

Min RAM2 GB
Min CPU1 vCPU
GitHub Repo ↗

✅ Advantages

  • Pure MIT open-source license with zero transaction revenue fees
  • Developer-first TypeScript architecture with deep customization hooks
  • Blazing-fast headless storefronts (Next.js, Remix, Astro)
  • Active community and rich plugin ecosystem

⚠️ Trade-offs / Limitations

  • Requires developer setup (not a drag-and-drop builder for non-technical users)
  • Frontend storefront is hosted separately from backend engine

Core Features

▸Complete headless commerce engine with multi-currency, multi-region support
▸Open-source modern React admin dashboard
▸Automated inventory management across multiple physical stock locations
▸Native Stripe, PayPal, Klarna, MeiliSearch, and SendGrid plugins
▸Customizable workflow engine for complex business logic and ERP sync
▸Digital product / file delivery workflows via plugins and object storage

Architecture Notes

Modular Node.js/TypeScript backend, PostgreSQL database, Redis for BullMQ event pub/sub and caching, with a React admin dashboard and Next.js storefront starter.

Known Limitations

Headless architecture requires basic web development knowledge to deploy and customize the frontend.

Official Documentation ↗
📄 docker-compose.yml
Production Ready
version: '3.8'
services:
  medusa:
    image: medusajs/medusa:latest
    restart: always
    ports:
      - "9000:9000"
    environment:
      - DATABASE_URL=postgres://medusa:medusa_pw_2026@postgres:5432/medusa
      - REDIS_URL=redis://redis:6379
      - JWT_SECRET=generate_32_char_jwt_secret
      - COOKIE_SECRET=generate_32_char_cookie_secret
      - STORE_CORS=https://store.yourdomain.com
      - ADMIN_CORS=https://admin.yourdomain.com
    depends_on:
      - postgres
      - redis
  postgres:
    image: postgres:16-alpine
    restart: always
    environment:
      - POSTGRES_DB=medusa
      - POSTGRES_USER=medusa
      - POSTGRES_PASSWORD=medusa_pw_2026
    volumes:
      - medusa_pg_data:/var/lib/postgresql/data
  redis:
    image: redis:7-alpine
    restart: always
volumes:
  medusa_pg_data:

🚀 5-Minute Deployment Guide

  1. 1Deploy a 2GB RAM / 1 vCPU VPS on Hetzner Cloud (€3.79/mo).
  2. 2Install Docker and Docker Compose.
  3. 3Save the docker-compose.yml configuration with your domain CORS settings.
  4. 4Run migrations and start backend: `docker compose up -d`.
  5. 5Deploy the Next.js starter storefront to Cloudflare Pages connected to your Medusa backend URL.
  6. 6Configure Stripe API keys and shipping/tax regions in the Medusa Admin console.

Recommended Cloud VPS for Medusa.js

Compare all VPS hosts →
Hetzner Cloud€3.79/mo

CX22 (2 vCPU, 4GB RAM)

Excellent performance for Medusa backend and PostgreSQL database.

Deploy on Hetzner →
DigitalOcean$24.00/mo

Regular Droplet (2 vCPU, 4GB RAM, 80GB SSD)

Includes $200 in free trial credits for new accounts.

Claim $200 DO Credit →

Saleor

BSD-3-Clause⭐ 20.2k+

High-performance headless GraphQL e-commerce platform built with Python, Django, and PostgreSQL.

Min RAM2 GB
Min CPU2 vCPU
GitHub Repo ↗

✅ Advantages

  • Extremely performant GraphQL backend
  • Deep enterprise multi-channel and multi-warehouse features
  • Clean data modeling and inventory tracking

⚠️ Trade-offs / Limitations

  • Requires familiarity with GraphQL queries
  • Heavier multi-service Docker architecture

Core Features

▸GraphQL-first API design for multi-channel commerce
▸Multi-currency, multi-warehouse, and multi-language support
▸React-based dashboard with order management and customer profiles
▸Extensible webhooks and synchronous payment webhooks
▸Full checkout API for headless and in-app purchases

Architecture Notes

Python/Django GraphQL core, PostgreSQL, Redis, and Celery task workers; the React dashboard and storefront are separate decoupled applications.

Known Limitations

Strict GraphQL API requires GraphQL client tooling on the storefront and developer skills.

Official Documentation ↗
📄 docker-compose.yml
Production Ready
version: '3.8'
services:
  saleor-api:
    image: ghcr.io/saleor/saleor:latest
    restart: unless-stopped
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgres://saleor:saleor_pw_2026@db:5432/saleor
      - REDIS_URL=redis://redis:6379/1
      - SECRET_KEY=generate_secret_key_saleor
    depends_on:
      - db
      - redis
  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_USER=saleor
      - POSTGRES_PASSWORD=saleor_pw_2026
      - POSTGRES_DB=saleor
    volumes:
      - saleor_db_data:/var/lib/postgresql/data
  redis:
    image: redis:7-alpine
    restart: unless-stopped
volumes:
  saleor_db_data:

🚀 5-Minute Deployment Guide

  1. 1Provision a 4GB RAM VPS on Hetzner or DigitalOcean.
  2. 2Clone the Saleor platform Docker repository (`git clone https://github.com/saleor/saleor-platform`).
  3. 3Run database migrations and populate the demo catalog.
  4. 4Configure SSL reverse proxy with Caddy or Nginx.
  5. 5Deploy the storefront from a headless starter against your GraphQL API.

Recommended Cloud VPS for Saleor

Compare all VPS hosts →
Hetzner Cloud€3.79/mo

CX22 (2 vCPU, 4GB RAM)

Great compute for Django + Celery worker execution.

Deploy on Hetzner →
DigitalOcean$24.00/mo

Regular Droplet (2 vCPU, 4GB RAM, 80GB SSD)

Includes $200 in free trial credits for new accounts.

Claim $200 DO Credit →

Quick Specification Matrix

ToolLicenseMin RAMMin CPUGitHub RepoPrimary Advantage
Shopify & Gumroad (Proprietary)Proprietary ClosedManaged CloudManaged CloudN/ATurnkey onboarding with vendor lock-in & paywalls
Medusa.jsMIT2 GB1 vCPUmedusajs/medusaPure MIT open-source license with zero transaction revenue fees
SaleorBSD-3-Clause2 GB2 vCPUsaleor/saleorExtremely performant GraphQL backend

Performance Benchmarks & Hard Operational Limits

Real-world operational trade-offs, resource consumption limits, and measured throughput.

Benchmark MetricShopify & Gumroad BaselineSelf-Hosted Alternative MetricOperational Bottleneck / LimitSource
Storefront Page Load (Core Web Vitals)1.8s - 3.8s (bloated by 15-25 third-party Shopify app scripts)350ms - 800ms (headless Next.js / Astro static storefront)Client third-party script execution.Medusa Architecture Docs
Order Processing Throughput500 req/min (Shopify Admin API bucket rate limits)1,500 - 4,500 orders/min on a single 4 vCPU nodePostgreSQL ACID transaction concurrency.Production Test
Payment Processing Fee Surcharge+0.5% to +2.0% penalty for non-Shopify gateways / 10% Gumroad cut0.0% penalty (direct Stripe / PayPal / Mollie / Adyen interchange)Zero added intermediary cuts.Production Test

Frequently Asked Questions

Practical deployment, migration, and maintenance answers.

How do payments and PCI compliance work on self-hosted Medusa.js?▾

Medusa integrates with Stripe, PayPal, Adyen, and Klarna using tokenized client-side elements (e.g. Stripe Elements). Credit card numbers never touch your VPS server, keeping your PCI compliance scope at the simplest self-assessment level (SAQ A).

Can I customize the admin dashboard and product attributes without paid apps?▾

Yes. Medusa provides an open-source React-based admin dashboard out of the box. You can define custom product properties, multiple sales channels, price lists, and regional tax rules in code without purchasing app extensions.

How does headless e-commerce work for the customer storefront?▾

The headless architecture separates the backend (Medusa/Saleor) from the customer-facing frontend. You can build your storefront using Next.js, Remix, Astro, or mobile apps, communicating via REST or GraphQL APIs. The frontend can be deployed statically on Cloudflare Pages or Vercel for instant worldwide delivery.

Can Medusa handle multi-currency and multi-warehouse fulfillment?▾

Yes. Medusa has native support for multi-region pricing (currencies, tax rates, payment providers) and multi-location inventory management, allowing you to route order fulfillment based on stock availability.

How do I sell digital products and deliver files automatically?▾

Store files in S3-compatible object storage (MinIO or a cloud bucket), generate a download token at checkout, and use a Medusa workflow or plugin to email a secure, expiring download link. No per-sale platform commission is taken.

How do automated order emails and shipping notifications work?▾

Medusa connects to transactional email services (SendGrid, Mailgun, Postmark, or self-hosted Postal) via plugin modules to dispatch order confirmations, tracking numbers, and invoice PDFs.

Starter Stack Pack — $29

Skip the setup: get the production-ready stack

Don't stitch together configs from five different READMEs. Get all 5 production-hardened Docker Compose stacks — Postgres, Redis, SSL auto-renewal, and backup scripts — ready to deploy in minutes.

⚡n8nVisual workflow automation
📊UmamiPrivacy-first web analytics
🛡️Uptime KumaUptime monitoring & alerts
🔐VaultwardenBitwarden-compatible vault
☁️NextcloudDropbox/Drive replacement
Get the Stack Pack — $29 →

One-time purchase · Instant download · Production-ready

esc
↑↓ navigate↵ open