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
- 🔎 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.
docker compose up -d
# open http://localhost:8080On 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| 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.
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 -dPrefer 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/.
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 # lintFeature 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.
Changes are validated for correctness, code quality, dependency health, and security before and
after they reach main:
- ✅ CI on every PR —
rufflint and the fullpytestsuite (400+ tests, with coverage) against a real PostgreSQL service. - 🔒 Dependency auditing —
pip-auditfails the build on a known-vulnerable dependency, and Dependabot keeps dependencies (pip / npm / GitHub Actions) patched with grouped and security updates. - 🛡️ Static analysis — CodeQL (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.
FastAPI · SQLAlchemy 2.0 (async) + asyncpg · PostgreSQL 16 · Alembic · Jinja2 + HTMX + Alpine.js + Tailwind · APScheduler · Docker + nginx.
See LICENSE.
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.