Skip to content

Repository files navigation

Scryme Logo

Scryme

A self-hosted Scryfall-like search for your MTG collection.

GitHub Release License GitHub Stars GitHub Issues
Tests CodeQL Image Dependabot Trivy Secret scanning SonarQube
Public Demo · Documentation · Report Bug

A localized, self-hostable implementation of Scryfall for indexing and searching your own Magic: The Gathering collection.

Import an export from ManaBox, Dragon Shield, Delver Lens, Moxfield, or Archidekt (or any CSV, via a column-mapping wizard) and search it with a Scryfall-style interface that understands Scryfall search syntax and regular expressions.

Live demo (read-only) · Documentation

Features

  • 🔎 Scryfall-compatible search with regex, scoped to your collection or all cards — plus a grid/table toggle, clickable facets, "did you mean?" suggestions, saved searches (with alerts for cards that newly match after an update), and an advanced form builder.
  • 📥 Import from ManaBox, Dragon Shield, Delver Lens, Moxfield, and Archidekt — or any CSV via the column-mapping wizard — with replace / increment / per-card merge on re-import and one-click undo of the last import.
  • 🃏 Rich card pages — oracle text, prices, legalities, printings, rulings, real mana & set symbols, tags (tag: search), inline add/edit (plus bulk edit from results), and a price watchlist (alert when a card crosses a USD target).
  • 🃏 Decks — coverage, format legality, stats, and export; build a deck from your collection (commander → owned-card suggestion) or import one from a Moxfield / Archidekt / TappedOut URL.
  • 🧰 Collection tools — stats dashboard (value + growth over time), price history with acquisition profit/loss, set completion, custom checklists, a wishlist, and a trade/surplus binder.
  • 💱 USD / EUR price display and a themeable UI (preset themes + custom accent).
  • 💾 Backup & restore — a portable JSON dump of your data, with scheduled on-disk backups to a folder you choose (point it at a synced folder for cross-device backup).
  • 🖼️ Local card database + image cache — works offline and respects Scryfall's API policy.
  • 🐳 Self-hostable via Docker, with an optional read-only public demo.
  • 🖥️ Desktop app (macOS / Windows / Linux) — an install-free build that bundles PostgreSQL and the backend, with drag-and-drop import, a global quick-search hotkey, LAN sharing, and auto-update.

Quick start (self-host)

docker compose up -d
# open http://localhost:8080

On first run the collection is empty, so the home page shows an upload prompt. After importing a collection it becomes a Scryfall-style search bar.

After starting, ingest card data and (optionally) cache images:

docker compose exec backend python -m src.cli ingest          # ~550 MB Scryfall bulk file
docker compose exec backend python -m src.cli backfill-images # cache images for owned cards

Configuration

Variable Default Purpose
POSTGRES_PASSWORD scryme Database password
SCRYME_PORT 8080 Host port for the web UI
SCRYME_READ_ONLY false Demo mode — disables uploads/mutations and shows a banner
SCRYME_DEFAULT_CURRENCY usd Default display currency (usd or eur)
SCRYME_BACKUP_DIR (unset) Folder for on-disk/scheduled backups (e.g. a synced folder)

See the configuration docs for the full list.

Public demo

Ingest cards, seed a sample collection, then run read-only:

docker compose exec backend python -m src.cli ingest
docker compose exec backend python -m src.cli seed-demo --limit 60
SCRYME_READ_ONLY=true docker compose up -d

Desktop app

Prefer a native app to Docker? The scryme desktop app bundles its own PostgreSQL and the backend — no Docker, no setup. Download the installer for your OS from the latest release:

OS File Arch
Linux .AppImage (portable), or .deb (x64) x64 + arm64
Windows .exe installer x64 (runs on ARM via emulation)
macOS .zip or .dmg Apple Silicon

On first launch it downloads the card database (once), then it's the same app as the web version. All data lives in one folder you can back up or point at a synced drive. Highlights:

  • Drag-and-drop import, a global quick-search hotkey (Ctrl/Cmd+Shift+S), and system notifications for saved-search alerts.
  • LAN sharing — browse your collection from your phone on the home network (with a QR code and optional access code).
  • Auto-update from GitHub Releases.

Installers are currently unsigned, so Windows SmartScreen / macOS Gatekeeper will warn on first open (signing is on the roadmap). Build from source and details: desktop/.

Development

docker compose -f docker-compose.dev.yml up   # hot reload, app on http://localhost:8000
cd backend && pytest tests/                   # tests (needs Postgres via SCRYME_DATABASE_URL)
ruff check src tests                          # lint

Feature branches → PRs into main, which is protected and requires green CI before merge. See CLAUDE.md for architecture and conventions, or the documentation for the full guide.

Quality & security

Changes are validated for correctness, code quality, dependency health, and security before and after they reach main:

  • CI on every PRruff lint and the full pytest suite (400+ tests, with coverage) against a real PostgreSQL service.
  • 🔒 Dependency auditingpip-audit fails the build on a known-vulnerable dependency, and Dependabot keeps dependencies (pip / npm / GitHub Actions) patched with grouped and security updates.
  • 🛡️ Static analysisCodeQL (Python + JS/TS) on every PR plus a weekly scan, and a self-hosted SonarQube quality gate (Jenkinsfile + sonar-project.properties) that complements the GitHub Actions gate.
  • 🐳 Image scanning — published container images are scanned with Trivy for OS/library vulnerabilities.
  • 🔑 Repository hardening — secret scanning with push protection, plus Dependabot alerts and automated security fixes.

Full details: Quality & Security.

Tech stack

FastAPI · SQLAlchemy 2.0 (async) + asyncpg · PostgreSQL 16 · Alembic · Jinja2 + HTMX + Alpine.js + Tailwind · APScheduler · Docker + nginx.

License

See LICENSE.

Disclaimer

Scryme is an unofficial Fan project permitted under the Wizards of the Coast Fan Content Policy. The literal information presented on this site about Magic: The Gathering, including card images and mana symbols, is copyright of Wizards of the Coast, LLC. Our card images are sourced through Scryfall as an intermediary. (Also our source of inspiration!) Scryme is not endorsed by Wizards of the Coast.

Card prices and promotional offers represent daily estimates and/or market values provided by major markets. Absolutely no guarantee is made for any price information. See stores for final prices and details.

About

A Scryfall-like search engine for your personal collection.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages