Dismissing from the reveal menu now correctly returns cards. Dragging from the reveal zone is prevented. The root cause of the recurring session crash when a card ID couldn't be found has been identified and fixed.
3 fixes
Fixes
Reveal menu dismiss - the Dismiss button in the reveal menu was only cleaning up cards locally without properly returning them to their zones. It now goes through the proper dismiss path.
Session crash root cause - the recurring "card not found" crash tracked down in the last release has been identified. Revealed cards are local clones that don't exist on other clients, but they were incorrectly broadcasting network events that other clients couldn't process. They're now marked as local-only and filtered before hitting the network.
Dragging from reveal zone - cards in the reveal zone could be accidentally dragged, which caused problems. Dragging is now prevented while a reveal is open.
First round of fixes driven by real error data from Sentry. Several crashes now fail gracefully instead of breaking the session. Spectator mode and deck editor pagination also fixed.
4 fixes
Fixes
Session crash on unknown card - when a client received a network event referencing a card it didn't know about, it could crash the whole session. It now fails gracefully and continues instead.
Spectator mode - player areas weren't being positioned correctly when entering spectator mode. Fixed.
Deck editor pagination - the deck editor was trying to fetch pages beyond the last page of results. It now stops at the correct page.
Multi-card drop stability - dropping multiple cards onto the battlefield could crash if drag offset data was missing. Now handled gracefully.
Shuffling into the deck from a peek search now correctly sends cards to the deck instead of the wrong zone. The reveal menu now reliably shows when a card is revealed, and the Related Cards menu is more consistent.
3 fixes
Fixes
Shuffle into deck - dismissing cards from a peek search and shuffling into the deck could send cards to the wrong zone instead of the deck. It now explicitly transfers them to the bottom of the deck before shuffling.
Reveal menu reliability - the reveal menu wasn't always showing up when a card was revealed. It's been reworked to track the reveal zone directly, now appears reliably and shows who revealed the card along with the count.
Related Cards menu - the menu still showed its old "Add Tokens" name in its header and could be unreliable about showing, hiding, and focusing search. Both are now fixed.
Pass Turn now has a keyboard shortcut. Cards with missing art now fall back to the generic card correctly. Card image cache survives deployments. Several stability fixes on game teardown.
1 feature3 fixes
Features
Pass Turn shortcut - Pass Turn is now available via keyboard shortcut in addition to the in-game menu.
Fixes
Card art fallback - when a specific printing's art couldn't be found, the card was broken instead of showing the generic card face. Now falls back correctly.
Card cache survives deploys - the MTG card image cache now persists across server deployments, so you won't get a slow first load after an update.
Rendering stops on teardown - the renderer now shuts down cleanly when leaving a game instead of continuing to run in the background.
New Pass Turn button announces to all players when you pass. Player areas now stay in a consistent order across all clients. Individual changelog entries now have their own pages.
3 features1 fix
Features
Pass Turn - there's now a Pass Turn option in the in-game menu. When you pass, a large announcement appears on screen for everyone in the session so it's hard to miss.
Changelog detail pages - each changelog entry now has its own page at arcanetable.app/changes. Click any entry title to see the full notes.
Stronger camera tilt - the head-tilt camera effect has been made more pronounced for those who have it enabled in Settings.
Fixes
Player position consistency - player areas on the table were not always in the same positions for all clients when players joined at different times. They now stay in a consistent order for everyone.
Related Cards menu replaces Add Tokens and shows all associated card parts. Multi-card drag now syncs to all players. Arcanetable is now installable as a PWA. Deck search is faster. Several fixes including tapped state, game log stability, and animation polish.
4 features6 fixes
Features
Related Cards - the "Add Tokens" menu is now "Related Cards" and shows all associated card parts, not just tokens. Meld targets, adventure cards, and other linked parts now appear here too.
Multi-card drag syncs to all players - dragging and dropping multiple cards now broadcasts a restack event over the network so everyone sees the same card positions after a drop.
Installable app - Arcanetable now has a proper PWA manifest with name, description, and icon. You can add it to your home screen or install it as a desktop app from supported browsers.
Faster deck search - dismissing cards from the deck search is significantly faster thanks to the new batched event system. As this migration continues it should also clean up some edge-case multiplayer bugs.
Fixes
Tapped state on leave - cards were retaining their tapped state when moved off the battlefield. They now reset to untapped when they leave.
Game log stability - the game log was crashing on malformed or incomplete network events. Now handles them gracefully.
Animation crash loop - when an animation failed due to missing position data, it would loop infinitely. It now cancels cleanly.
Animations snap on interrupt - animations cancelled mid-flight now snap to their destination instead of freezing in place.
Deck export - exporting a deck was including cards with a quantity of 0. Those are now filtered out.
Card grid scroll speed - scroll speed in the card grid has been tuned to a more comfortable pace.
Dragging and dropping multiple cards now syncs correctly to all players. Animations that get interrupted now snap to their end position instead of getting stuck.
Multi-card drag syncs to all players - dragging and dropping multiple cards at once now broadcasts a restack event over the network, so everyone sees the same card positions after a drop. Card grid scroll speed has also been tuned down to a more comfortable pace.
Fixes
Animations snap on interrupt - animations that were cancelled mid-flight (e.g. a card getting moved while already animating) now snap to their destination instead of freezing in place.
Arcanetable can now be installed as a PWA. Deck search is significantly faster thanks to a new batched event system. Fixed an animation failure mode that caused infinite loops.
Installable app - Arcanetable now has a proper PWA manifest with name, description, and icon. You can add it to your home screen or install it as a desktop app from supported browsers.
Faster deck search - the start of a new unified event system with auto-batching means deck search dismissal is significantly faster. As this migration continues, it should also clean up some edge-case multiplayer bugs and make the overall system more predictable.
Fixes
Animation crash loop - when an animation failed due to missing position data, it would loop infinitely instead of giving up. It now cancels cleanly.
The token menu is now a Related Cards menu showing all associated card parts. Fixed cards keeping their tapped state when leaving the battlefield. Game log no longer crashes on malformed entries.
Related Cards - the "Add Tokens" menu has been renamed to "Related Cards" and now shows all associated card parts, not just tokens. Meld cards, adventure cards, and other linked parts now appear here too.
Fixes
Tapped state on leave - cards were retaining their tapped state when moved off the battlefield. They now reset to untapped when they leave.
Game log stability - the game log was crashing when it encountered malformed or incomplete network events. It now handles those gracefully.
Fixed a crash on production where the deck picker would try to render before the card system context was ready, causing a blank screen or crash.
1 fix
Fixes
Production load crash - in certain load conditions, the deck picker would try to render before the card system context was ready, causing a crash or blank screen. Fixed with proper fallbacks.
Fixed a long-standing set of serialization bugs that broke remote card animations for other players, plus deck flip hangs and animation queue corruption.
4 fixes
Fixes
Remote card animations - card animations were silently never playing for other players due to Three.js objects (positions, rotations, curves) not being correctly serialized and reconstructed across the network. Fixed.
Deck flip hang - the deck flip animation would hang indefinitely when triggered on an empty deck. Fixed.
Animation queue corruption - rapidly adding cards to the top of a deck with keep-flipped enabled could corrupt the animation queue. Fixed.
Animation data guards - added runtime checks that surface bad animation data at the call site rather than crashing silently several frames later.
Fixed a statistical bias in the shuffle algorithm, corrected the deck bounce animation, fixed visual glitches when moving cards between zones, and improved crash resistance.
5 fixes
Fixes
Shuffle bias — the shuffle algorithm had a statistical bias that gave cards near the top of the deck a higher chance of staying there. Fixed with a correct Fisher-Yates implementation.
Deck bounce animation — the bounce animation when cards are added to the deck was using the wrong position as its anchor, making it look wrong. Fixed.
Card rotation mutation — moving cards between zones (graveyard, stacks) was accidentally mutating the parent mesh rotation, causing visual glitches. Fixed by cloning the quaternion before inverting.
Transfer crash — transferring a card with a missing source zone could crash the game. Now handled gracefully.
Animation path guard — added a guard against undefined points in card movement paths, preventing a class of rare animation crashes.
You can now paste a deck list even when the card system doesn't have full search config. Fixed a hand card animation bug and increased card grid scroll speed.
Paste deck list with any card system — pasting a deck list into the editor no longer fails when the card system doesn't have a full search configuration. Cards are loaded and matched more robustly.
Fixes
Hand animation bug — cards added to hand were missing rotation data, causing them to snap or animate incorrectly. Fixed.
Card grid scroll speed — scrolling through the card grid was far too slow. It's now 8× faster and much more usable.
Settings are now saved — your preferences (like camera tilt) are remembered between sessions. No more re-enabling it every time you reload.
Fixes
Camera tilt smoothness — the previous build had no easing on the camera tilt, making it feel immediate and jarring. It's now properly smoothed with separate horizontal and vertical sensitivity, and a much gentler motion overall.
Camera tilt is now opt-in via a new in-game Settings menu. Also fixes two regressions from the previous build affecting hand card overlays and battlefield card dragging.
The table has been expanded to support four players, a night sky environment has been added to the scene, and the camera now subtly tilts as you move your mouse.
Revised keyboard shortcuts with platform-aware modifier keys, shortcuts displayed in menus, a new Reveal action, top-of-deck shortcut from peek, and a counter display fix.
5 features2 fixes
⚠️ Shortcut Changes
Several keyboard shortcuts have changed. If you have muscle memory from before, here's what moved:
Action
Old
New
Untap all
Shift+U
Shift+R
Clone
—
Ctrl/⌘+C
Discard
Ctrl/⌘+D
Ctrl/⌘+D(renamed from Destroy)
Exile / Remove from game
E
Ctrl/⌘+E
Transfer to field
B
Ctrl/⌘+F
Top of deck
—
Shift+T
Bottom of deck
—
Shift+B
Modifier keys now display correctly per platform — ⌘ on macOS, Ctrl elsewhere.
Features
Shortcuts in menus — keyboard shortcuts are now shown next to their actions in the move menu and deck menu, so you can learn them in context.
Reveal — new Reveal action added to the move menu.
Top Deck from peek — a "Top Deck" button is now available directly in the peek menu.
Platform-aware modifier keys — shortcut labels use ⌘ on macOS and Ctrl on Windows/Linux throughout the UI.
Fixes
Counter display — counters in the field menu now update correctly when switching between selected cards.
Card list crash — fixed a crash when a card system doesn't define any card types.
Revised keyboard shortcuts with platform-aware modifier keys, shortcuts displayed in menus, a new Reveal action, top-of-deck shortcut from peek, and a counter display fix.
Changelog page — you can now read the full release history at arcanetable.app/changes, linked from the footer. Each release shows its date, target, and full notes.
Fixes
MTG card server — fixed a typo in the MTG card server URL that was causing card lookups to fail when starting a game from the landing page.
External links — Discord, GitHub, and Patreon links in the nav were not opening in a new tab. Fixed.
The biggest Arcanetable release yet: a built-in deck editor, Pokémon and Yu-Gi-Oh support, a collapsed counter display, deck list export, a new landing page, and a large pile of bug fixes and performance improvements.
6 features12 fixes
Features
In-App Deck Editor
You can now build and edit decks directly inside Arcanetable — no more managing lists outside the app. Search for cards, adjust quantities, paste in a list, or download your deck as a .txt file when you're done. Search supports multiple comma-separated terms and searches across card faces, so double-faced and split cards show up when you expect them to.
Pokémon & Yu-Gi-Oh Support
Two new built-in card systems join MTG: Pokémon and Yu-Gi-Oh are now supported out of the box. Switch between them in the deck selector and use the system viewer to browse available cards. Multi-type search works correctly for both — searching "Fire Water" in Pokémon or "Effect Monster Spell" in Yu-Gi-Oh returns the right results.
Collapsed Counter Display
Cards with counters now show a compact counter row directly below the card action menu. Left-click to add a counter, right-click to remove one. No more hunting through menus to track Infamy, Population, or any other counter type — they're always visible at a glance while a card is selected.
New Landing Page
The landing page has been completely redesigned with updated copy, imagery, and layout that better reflects what Arcanetable actually is. Game picker cards now let you jump straight into MTG, Pokémon, or Yu-Gi-Oh with one click. A new Community section links to the Discord and Ko-fi for anyone who wants to follow along or chip in.
Stale-While-Revalidate Card Server Caching
The card data servers now serve cached responses immediately while refreshing stale data in the background — so browsing large card sets is snappier, especially on repeat visits. Card images also now cache correctly at the Cloudflare edge, which should make a noticeable difference on first load.
Download Deck List
Export your current deck as a .txt file directly from the deck editor — handy for sharing with friends or backing up your lists outside the app.
Fixes
Deck export — exported lists no longer include cards currently on the battlefield.
Disabled states — "Start Playtest" and "Edit Deck" now correctly disable when no deck is selected.
Tags field — pressing Enter in the deck tags field no longer submits the form.
Deck mutation — the deck is cloned before entering the editor, so unsaved edits can't affect your saved deck data.
Add card button — click handler moved to the button element, fixing interaction issues in some browsers.
Starting life total — clearing the field no longer produces NaN; it falls back to 0.
Deck picker close button — removed from the session start dialog to prevent accidentally dismissing it.
Delete dialog — the confirmation dialog now includes a copy button next to the deck name so you don't have to retype it manually.
Type filter search — toggling a card type filter off and back on now correctly triggers a new search.
Search cancel — clearing the search field cancels any pending debounced search, preventing stale results from flashing in.
Loading spinner — the "Loading more results" indicator in the deck editor now only appears when a search is actually active.
Mobile — the multiplayer image now displays correctly on mobile.
New draft of the landing page is live with updated copy and layout.
Scry Server Caching
Card data servers now use a stale-while-revalidate model. Since upstream card servers can be slow, cached responses are served immediately while fresh data loads in the background — less waiting when browsing cards.
Fixes
Toggling a card type filter off and back on now correctly triggers a new search.
Multiplayer image now displays correctly on mobile.
Refreshed landing page imagery, a new community support section with Discord and Ko-fi links, and a fix for the loading spinner showing when no search is active.
A new "Support the Project" section on the landing page links to the Discord and Ko-fi. Free and open source, built in spare time — this makes it easier for people to find where to hang out and chip in if they want to.
Landing Page Imagery
Updated hero, game picker, and section images across the landing page for a fresher look.
Fix
The "Loading more results" spinner in the deck editor now only appears when a search is actually active — it no longer shows on page load or after clearing the search field.
A round of deck editor fixes: correct disabled states, form submission prevention, deck mutation fix, corrected deck export, and small UX improvements to the deck picker and delete dialog.
Improves card image caching for edge delivery, fixes a stale debounced search firing after clearing filters, and polishes the deck editor loading state.
Search cancel — clearing the search field or deselecting all type filters now cancels any pending debounced search, so stale results no longer flash in after you've already cleared the input.
Card image edge caching — removed the Vary header from image responses on the MTG scry server, which was preventing Cloudflare from caching card images at the edge. Card images should now cache and load significantly faster.
Improvements
The "Loading more results" indicator in the deck editor is now a proper animated spinner instead of plain text, and uses the correct page field to determine when more results are available.
Adds a compact always-visible counter row, deck list export to .txt, Yu-Gi-Oh multi-type search, and a card back texture fix that lays the groundwork for sleeve customisation.
Cards with counters now show a compact counter row directly below the card action menu. Left-click to add a counter, right-click to remove one. No more hunting through menus to track counters like Infamy or Population — they're always visible at a glance while a card is selected.
Download Deck List
You can now download your deck list as a .txt file directly from the deck editor — handy for sharing or backing up lists outside the app.
Yu-Gi-Oh Multi-Type Search
Searching for cards with multiple types in Yu-Gi-Oh (e.g. "Effect Monster" + "Spell") now works correctly. The server fans out requests per type and merges results with proper deduplication and error handling.
Fixes
Switching card systems now correctly updates the card back texture on all existing cards in the scene in real time, instead of only newly loaded cards. This lays the groundwork for sleeve customisation — custom card backs per deck could happen if there's enough interest.
Fixed a bug where deck search wasn't filtering results correctly due to a typo in the config key.
Various stability fixes in the counter and deck search subsystems.
Card images for Pokémon, Yu-Gi-Oh, and MTG were being served over HTTP instead of HTTPS, causing them to be blocked as mixed content in the browser. All three systems now load card images correctly.
Search results in the deck editor are now paged. Previously, searching "creatures" in MTG triggered 8,800+ requests and transferred nearly 1 GB. Only the current page of results loads now — browsing large sets is dramatically faster.
Fixes
Searching for MTG cards with multiple types (e.g. "Artifact Creature") now works correctly.
Fixed card image requests being served over HTTP instead of HTTPS (mixed content block). (See also 2026-05-18 patch.)
Credits
Thanks to Zulu in the SolidJS Discord for catching the performance issue and providing the network tab receipts.
You can now build and edit decks directly inside Arcanetable — no more managing lists outside the app. The editor supports searching for cards and adjusting quantities without leaving the table.
Pokémon & Yu-Gi-Oh Support
Two new built-in card systems join MTG: Pokémon and Yu-Gi-Oh are supported out of the box. Switch between them in the deck selector and use the system viewer to browse available cards.
Try the new systems by adding ?system=scry-server-[game].arcanetable.app to the URL — replace [game] with pokemon or yugioh.
Unknown Card Image
Cards that cannot be loaded now show a proper placeholder instead of a broken state.
Token Routing
Tokens are now routed through the caching server, improving load times and reducing redundant fetches during play.
Fixes
Resolved an issue with card image display (addressed in subsequent staging patches).
Arcanetable can now load any remote card system via the ?system= query parameter, enabling support for custom cubes, proxied MTG decks, and other TCGs.
2 features
Features
Custom Card Systems
Arcanetable can now load a remote card system at startup. Point it at your own JSON endpoint via the ?system= query parameter to bring your own cards — whether that's a custom cube, a proxied MTG deck, or a completely different TCG like Pokémon or Yu-Gi-Oh.
The card system config controls: where card data comes from, how images are structured, how cards are indexed for search, and which field drives popularity sorting.
Two image formats are supported:
standard (default) — for systems with multiple printings per card, where each card has a map of print variants.
scryfall — mirrors the Scryfall API format, used by the built-in MTG system.
Full documentation is in the README.
Landing Page
Refreshed landing page copy and layout to better reflect what Arcanetable actually does.
Improved stability for long play sessions with copyable error reports, graceful animation degradation, and null-safety fixes.
2 fixes
Improvements
Added copyable error reports when something goes wrong, making it easy to share useful bug reports without opening DevTools.
Improved handling of corrupted or invalid animations — the game now degrades gracefully instead of crashing.
Normalised how resting positions are assigned to reduce subtle layout inconsistencies over time.
Fixes
Added null checks and refactored user data handling to prevent serialised data from being stored incorrectly.
Cleaned up internal formatting and data handling to reduce hard-to-track issues during extended gameplay.
Community
Special thanks to @Herbert De La Comb Au Loup for reporting a major issue where cards can disappear for a player mid-game. This update includes groundwork to make issues like that easier to track down and fix.
Adds copy-invite-link from the deck picker, player concede flow, and fixes counter visibility on card backs.
2 features2 fixes
Features
Added the ability to copy an invite link directly from the deck picker. (#22)
Players can now concede a game. Conceding moves the player to spectator mode; when all but one player has conceded the game transitions to deck selection mode. (#23)
Fixes
Fixed counter visibility from the back side of cards.
Counters are now properly removed when a card is destroyed.