Open Source  ·  Free  ·  Self-Hosted

The Tournament Organizer
for Magic: the Gathering

Draft, Sealed, and Constructed — Swiss pairings, live timers, Hall of Fame, card-value tracking, and more. Built for groups that play together regularly.

Limited Gauntlet — Hall of Fame showing all-time player rankings and stats

Swiss Pairings Engine

Robust Swiss with cross-pod opponent avoidance. Handles intentional draws, custom seat orders, and odd player counts with auto byes.

Live Updates

Timers, pairings, and standings update in real time over WebSocket — no page reloads. Share via link or QR code for a display screen.

Hall of Fame

All-time org leaderboard with win rates, avg. points, and event wins tracked across every tournament. Individual player pages with per-opponent breakdowns.

Rare Pick

Record opened card values at the time of the draft. Top-three cards auto-assigned by standings; every win lands permanently in the player's Treasure Chest.

Webhooks

HMAC-signed events on pairings, round start/end, and pod completion. Multiple webhooks per org, no code changes needed — works great with Home Assistant or Discord.

REST API & MCP

Every UI action backed by an authenticated API. An MCP server wraps it for AI-agent use — manage tournaments directly from Claude Desktop or Claude Code.

Self-host it free, or let me run it

The app is free and open source — self-host and you get everything, forever. Prefer not to run a server? The hosted instance has a free tier to try, and a subscription for groups that play regularly.

Free

€0

Hosted — try it, or a one-off small event.

Get started free
  • 1 tournament, 1 pod
  • Single organizer
  • All the core features
  • Public results pages
  • Data kept for 1 month

Tournament

€5 once

Hosted — a single, bigger event.

Get a pass
  • 1 tournament, unlimited pods
  • 7-day event window
  • Single organizer
  • All the core features
  • Data kept for 1 month

Self-hosted

€0 forever

Run it yourself. MIT-licensed.

How to self-host →
  • Everything in Series — unlimited
  • No tiers, no limits, no paywalls
  • Your data on your own server
  • One Docker image + Postgres
  • MIT licensed — fork it, change it

Hosted payments are handled by Stripe as merchant of record — applicable VAT is added at checkout, and you can cancel anytime (access stays through the period you've paid for). Paying for the hosted instance never gates the open-source app.

Compare all features

Feature Free Tournament Series Self-hosted
Running events
Tournaments 1 1 per pass Unlimited
Pods per tournament 1 Unlimited Unlimited
Max event length 7 days 7 days Unlimited
Editable dates — — ✓
Co-organizers — — ✓
Core features
Swiss pairings & display mode ✓ ✓ ✓
Standings & Gesamtwertung ✓ ✓ ✓
Hall of Fame & player stats ✓ ✓ ✓
Rare Pick & Treasure Chest ✓ ✓ ✓
Public pages & player check-in ✓ ✓ ✓
Integrations & data
Webhooks — — ✓
Spreadsheet & full data export — — ✓
REST API & MCP server — — ✓
Data retention 1 month 1 month Forever

Organizations, Tournaments & Pods

Built for groups that play together repeatedly. An organization tracks all players and their stats across every event. A tournament can span multiple days and formats; each pod is an independent Swiss event with its own results.

  • Players are org-wide — stats accumulate across all tournaments
  • Rich-text tournament descriptions and stat breakdowns
  • Pods support Draft, Sealed, Chaos Draft, Constructed, or Custom
  • Team formats like 2HG supported
  • Player accounts with self-service result submission and token ledger
  • Finished tournaments export to XLSX — standings, points, rounds, and tokens
Tournament overview listing pods

Smart Pairings & Display Mode

First-round pairings are random (customizable) and seed the draft seating. Later rounds follow standard Swiss with a soft cross-pod avoidance layer — over a weekend, everyone tends to face everyone.

  • Never repeat an opponent within the same pod
  • Soft avoidance across other pods in the same tournament
  • Round timer with audible chimes for draft and match time
  • Display mode: share a link or QR code for a wall screen
  • Drop players mid-event; byes handled automatically
  • Seatings tab keeps round-1 opponents hidden until a deliberate Reveal
  • On-demand side events auto-withdraw sign-ups once one fires; cancel a pod without corrupting stats
Pod pairings page with table assignments

Rare Pick & Treasure Chest

Record the cards opened from each draft alongside their market value. The top three cards are automatically assigned to the top three finishers — always adjustable. Every assigned card lives in that player's Treasure Chest permanently.

  • Live € value from Scryfall at time of recording
  • Auto-assign top-three by standings; easily overridden
  • Treasure Chest aggregates all winnings across every event
  • Fully optional — can be disabled per pod
Rare Pick — card value grid

Hall of Fame

Because the same group plays over and over, Limited Gauntlet accumulates meaningful all-time stats. See who wins the most, who scores the most points on average, and how each player matches up head-to-head against every opponent.

  • Overall rating, win rate, and average match points
  • Count of first-place finishes per event
  • Individual player pages with per-opponent breakdown
  • Per-tournament standings view
  • Public links for sharing with friends
Hall of Fame leaderboard

Up and running in three steps

Ships as a single Docker image plus Postgres. No build step — pull from GHCR, fill in your .env, and start. Migrations run automatically on startup.

Node.js + TypeScript Fastify Prisma PostgreSQL React + Vite Tailwind Socket.IO Docker MIT
# 1. Grab the compose file curl -o docker-compose.yml \ https://raw.githubusercontent.com/TobiasDax/LimitedGauntlet/main/docker-compose.image.yml # 2. Configure your .env cp .env.example .env && $EDITOR .env # 3. Start — migrations run automatically docker compose up -d
OIDC / SSO Google, Discord, or any OpenID Connect provider. Or local accounts only — your choice.
Data Export / Import Full JSON export at any time. Import historical data via the Claude Code skill included in the repo.
SMTP Optional transactional email for co-organizer invites and address verification.
Tokens Opt-in org-wide points system — tie into an external prize wall or run a second leaderboard.
Organizer Accounts Any organizer can invite co-organizers — no owner role, everyone has equal power. One login can belong to several orgs, organizing some and playing in others.
Player Privacy & GDPR Pseudonymize or anonymize a player on public pages, export their full data as JSON, and serve a built-in Impressum & privacy notice at /legal.

Try the public demo first

Live instance with anonymized seed data, resets on a schedule.

URL: demo.limited-gauntlet.com

admin@demo.com  /  admin1234

Open Demo →

Don't want to self-host? — app.limited-gauntlet.com

The hosted instance runs LimitedGauntlet for you. Sign in with Discord, start on the free tier, and upgrade to a one-time pass or a Series subscription whenever you need more. See pricing above. Questions? public@limited-gauntlet.com.

Get started →
🤖

AI Disclaimer

This tool is completely vibe-coded by Claude Code — I only provide the specs for what should be built and test it on my own instance as thoroughly as possible. It has been scanned with Codex Security. I plan to support and enhance it as long as it's in active use, but my support capabilities are limited. Use at your own risk — bug reports and suggestions are welcome in the GitHub issue tracker.