Releases: Leyline-Coding/scryme
Release list
v0.26.1
Patch release rolling up the 29 commits since v0.26.0.
Highlights
UI
- Responsive / wide layouts across the search page, collection dashboard, and deck detail view.
- New card-size slider in Settings to retune the grid density (#320–#322).
Preferences & Settings
- Server-backed preferences singleton + unified
/settingspage, so appearance/currency/search defaults follow you across devices (#203, #315, #320, #321).
Decks & EDH tooling
- Deck versions + diff (#296), Commander bracket estimator (#292), owned-card upgrade suggestions (#293).
- Printable proxy sheets (#312), goldfish / sample-hand playtester (#313).
- Per-line finish tracking + printing re-sync (#306), Moxfield/Archidekt profile import (#303), checklist CRUD (#301), owned-deck → collection sync (#302).
Security
- Bumped
cryptography49 → 50.0.0 to clear PYSEC-2026-3552 (#326).
Dependencies / CI / demo
- Backend minor-patch bumps (fastapi, uvicorn, ruff); desktop dev-dep bumps (undici, fast-uri, electron).
- Jenkins builds now run on the unRAID Docker agents (#307).
- Demo autodeploy survives a transient GHCR outage without alerting forever (#324).
No new migrations since v0.26.0.
v0.26.0
Per-card price-history chart currency (#233)
The price-history chart on each card page now has a currency dropdown — USD, EUR, GBP, CAD, AUD, JPY. Prices are recorded in USD, so to chart past values in another currency accurately, scryme converts each snapshot at the exchange rate that applied on its own date (historical daily rates from Frankfurter, downloaded once and cached). The first non-USD pick confirms the one-time download via a modal; if rates can't be fetched it falls back to an "approximate" current-rate view. Your choice is remembered per browser and is independent of the site-wide currency picker.
This completes milestone #13 — Collection Pricing, Selling & Grading.
Upgrade: applies migration 0024_fx_rate_history (a new cache table; the container entrypoint runs alembic upgrade head automatically).
🤖 Generated with Claude Code
v0.25.2
Highlights
- More display currencies — alongside USD and EUR, you can now value your collection in GBP, CAD, AUD, and JPY. Scryfall only prices in USD/EUR, so the rest convert from USD using daily ECB rates (via Frankfurter), refreshed automatically. Price history stays in its honest source currency (USD). (#232)
- Per-card price history — the card detail page now shows a USD price-history chart for cards you own or track (wishlist / price-watch), with the same range pills as the collection value chart. (#233)
- Desktop: fixed "Failed to start: undefined" — the desktop app now starts reliably and shuts its backend and Postgres down cleanly whenever you close it, so relaunching always works:
- Single-instance lock — a second launch focuses the running window instead of colliding on the Postgres data-dir lock.
- Full teardown on every exit path (window close, quit, OS signal), plus self-healing of an orphaned Postgres left by a hard crash.
- Real startup diagnostics written to
startup-error.loginstead of a bareundefined. - Auto
--no-sandboxon distros that restrict unprivileged user namespaces (e.g. Ubuntu 24.04 / Zorin 18).
Desktop packaging change
Linux is now AppImage-only (x64 and arm64). The .deb target has been dropped — the AppImage is universal, distro-agnostic, and needs no install. Windows (.exe) and macOS (.dmg/.zip) are unchanged.
Docs
Updated for the new currencies (theming / configuration / API), the per-card price-history chart, and AppImage-only desktop packaging.
Full changelog: v0.25.1...v0.25.2
v0.25.1
Maintenance & dependency release.
Highlights
- Desktop:
get-port5 → 7 (ESM, dynamicimport()) — build and runtime validated on Electron 43.1.1: clean AppImage/deb build, and a launched install boots the embedded Postgres 17 cluster + frozen backend to a healthy/healthin ~6s.main.js/preload.jsmodernized (node:imports,globalThis) and previously-swallowed errors now log. - Quality: SonarQube maintainability & reliability code smells cleared (93 → 0) and backend test coverage raised to 100% — including a fix for async greenlet coverage under-reporting (
COVERAGE_CORE=sysmon).
Docker image: ghcr.io/leyline-coding/scryme:v0.25.1. Desktop installers are attached by the desktop-release workflow.
v0.25.0
Security & CI hardening release.
Highlights
- CI/security: GitHub-native layer (Dependabot, CodeQL SAST, pip-audit gate, Trivy image scan) plus an in-cluster Jenkins + SonarQube quality gate; Node 20 → Node 24 GitHub Actions bumps.
- Vulnerabilities cleared: all 12 CodeQL code-scanning findings (ReDoS, DOM-XSS, open-redirect) and all 28 Dependabot alerts.
- Desktop: Electron 33 → 43, electron-builder → 26,
tar→ 7 (via override); Linux.desktopwindow/taskbar association. - Docs: new Quality & Security page and README status badges.
Docker image: ghcr.io/leyline-coding/scryme:v0.25.0. Desktop installers are attached by the desktop-release workflow.
v0.24.0
Collection Pricing — choose your price source (#231)
Pick a preferred marketplace in Settings → Price source, and card prices + collection value follow it:
- TCGplayer (market price, via Scryfall) — the default.
- Card Kingdom — retail prices, synced from MTGJSON.
- ManaPool — synced from ManaPool's public price feed.
Applies across the card page, collection stats, decks, wishlist, sell list, valuation, and trade binder. Cards a marketplace doesn't price fall back to TCGplayer. Price history stays TCGplayer-based.
Self-hosting: run sync-market-prices (and, once, backfill-mtgjson-ids for Card Kingdom) — the daily refresh also runs on the schedule. Migration 0022.
v0.23.1
Card page
- Fixed the Transform / Rotate buttons (they didn't respond in v0.23.0). Rotate is now 90° counter-clockwise per click.
Card grid
- Double-faced cards flip on hover. Hovering a double-faced card in results shows a theme-tinted overlay and a flip button; clicking it flips the card to its other face (with an animation) without navigating away. Single-faced and rotate-only cards are unaffected.
No database migration.
v0.23.0
Card page
- Transform button on double-faced cards (transform / modal DFC / battles / reversible) — flip to the other face, Scryfall-style, with a card-flip animation.
- Rotate button on Battles, Planes/Phenomena, and Aftermath cards, which read sideways — spins the card 90° per click (with a playful animation) so it's easier to read.
- Normal single-faced cards are unchanged.
Footer
- The Fan Content / pricing disclaimer is now centered at the bottom of the page.
- Added a final line showing the current release, linked to its GitHub release.
No database migration.
v0.22.0
Performance
- CDN/browser caching of static assets. Card images (
/images) are now served with a 1-year immutableCache-Control, and bundled CSS/JS (/static) with a 1-day TTL. Card grids feel instant on repeat views, and a CDN in front (e.g. Cloudflare on the demo) can serve images without touching the origin. - GZip compression for HTML, the value-chart SVG, and the JSON API.
- Read-only response cache. When
SCRYME_READ_ONLYis set (e.g. the public demo), the heavy per-request computations — search facets, collection stats, the value chart, growth, set progress, and the movers panel — are memoized for a few minutes, cutting most repeat database work. Self-hosted (writable) deployments are unaffected.
No database migration.
v0.21.0
Fixes
- Search:
is:foil/is:etchednow match the finish you own. Previously these matched printings that merely could be foil/etched, so cards found this way showed finish "normal" and no foil/etched card animation on the card page. They now mean "you own a copy in that finish" — the finish chip and the foil/etched shimmer light up correctly, and the Foil/Etched sidebar facet counts match what the filter returns.
Infra (demo)
- Tuned the k3s demo's Postgres (2Gi,
shared_buffers/work_mem/effective_cache_size) and gave the backend 2 uvicorn workers — the demo is noticeably snappier.
No database migration.