stablef75bb42

Network Animation Fixes and Deck Stability

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.
view commits →
stable280dcfb

Shuffle Fix, Deck Animation, and Stability

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.
view commits →
stablef5443da

4-Player Table, Night Sky, Settings, Changelog Page, and More

A larger table supporting four players, a night sky environment, an opt-in head-tilt camera, a live changelog page, and persistent settings.

5 features6 fixes

Features

  • 4-player table — the table has been widened with player areas repositioned to support up to four players on different sides.
  • Night sky — the 3D scene now has a full HDR night sky environment, adding depth and atmosphere to the table.
  • Head-tilt camera — an optional subtle camera sway as you move your mouse, giving the table a more physical feel. Enable it under Settings.
  • Settings menu — a new Settings option in the in-game menu, with preferences saved between sessions.
  • Live changelog — the full release history is now available at arcanetable.app/changes, linked from the footer.

Fixes

  • Deck paste — pasting a deck list into the editor was failing when card keys didn't match exactly. Cards are now loaded and matched more robustly.
  • 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.
  • Nav links — Discord, GitHub, and Patreon links in the nav were not opening in a new tab. Fixed.
  • Custom card system search — fixed a crash when a card system doesn't define search fields.
  • Hand animation — cards added to hand were missing rotation data, causing them to snap or animate incorrectly.
  • Card grid scroll speed — scrolling through the card grid was far too slow. It's now much faster and usable.
view commits →
betac7ff5d4

Deck Paste with Mismatched Card System, Hand Animation Fix, and Scroll Speed

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.

1 feature2 fixes

Staging release — try it at staging.arcanetable.app.

Features

  • 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.
view commits →
beta595142d

Persistent Settings and Camera Tilt Tuning

Settings now persist between sessions, and camera tilt has been tuned to feel smoother and more subtle. Continued table and hand layout refinements.

1 feature1 fix

Staging release — try it at staging.arcanetable.app.

Features

  • 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.
view commits →
betadd2f153

Settings Menu, Camera Tilt Toggle, and Regression Fixes

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.

1 feature2 fixes

Staging release — try it at staging.arcanetable.app.

Features

  • Settings menu — there's now a Settings option in the in-game menu. Currently it houses the camera tilt toggle, with more options to come.
  • Camera tilt is now opt-in — the head-tilt camera effect from the previous build is off by default. Enable it in Settings if you want it.

Fixes

  • Hand card overlay — card action menus were appearing in the wrong position when hovering cards in hand. Fixed.
  • Battlefield drag — a regression from the previous build caused cards on the battlefield to rotate incorrectly when dragged. Fixed.
view commits →
betafbddbef

Larger Table, Night Sky, and Head-Tilt Camera

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.

3 features1 fix

Staging release — try it at staging.arcanetable.app.

Features

  • 4-player table — the table has been widened and player areas repositioned to support up to four players sitting at different sides.
  • Night sky — the 3D scene now has a full HDR night sky environment, adding depth and atmosphere to the table.
  • Head-tilt camera — moving your mouse across the screen now causes a subtle camera sway, giving the table a more immersive, physical feel.

Fixes

  • Fixed a rare crash in card animations caused by a missing position reference.
view commits →
stable389c2c7

Keyboard Shortcut Overhaul, Reveal Action, and Counter Fix

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:

ActionOldNew
Untap allShift+UShift+R
CloneCtrl/⌘+C
DiscardCtrl/⌘+DCtrl/⌘+D (renamed from Destroy)
Exile / Remove from gameECtrl/⌘+E
Transfer to fieldBCtrl/⌘+F
Top of deckShift+T
Bottom of deckShift+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.
view commits →
beta389c2c7

Keyboard Shortcut Overhaul, Reveal Action, and Counter Fix

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

Staging release — try it at staging.arcanetable.app.

⚠️ Shortcut Changes

Several keyboard shortcuts have changed. If you have muscle memory from before, here's what moved:

ActionOldNew
Untap allShift+UShift+R
CloneCtrl/⌘+C
DiscardCtrl/⌘+DCtrl/⌘+D (renamed from Destroy)
Exile / Remove from gameECtrl/⌘+E
Transfer to fieldBCtrl/⌘+F
Top of deckShift+T
Bottom of deckShift+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.
view commits →
beta8dac0a5

Live Changelog Page, MTG Server Fix, and Link Fixes

A live changelog is now available at arcanetable.app/changes. Also fixes the MTG card server URL and external nav links not opening in a new tab.

1 feature2 fixes

Staging release — try it at staging.arcanetable.app.

Features

  • 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.
view commits →
stable71a8dd6

Deck Editor, Pokémon & Yu-Gi-Oh, New Landing Page, and More

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.
view commits →
beta34ef5ca

Landing Page, Scry Server Caching, and Search Fix

New landing page draft, stale-while-revalidate caching for slow upstream card servers, and fixes for type toggle search and mobile multiplayer image.

2 features2 fixes

Staging release — try it at staging.arcanetable.app.

Features

Landing Page

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.
view commits →
beta71a8dd6

Landing Page Polish, Community Section, and Loading Fix

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.

2 features1 fix

Staging release — try it at staging.arcanetable.app.

Features

Community Section

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.
view commits →
beta97b736d

Deck Editor Polish and Deck Export Fix

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.

7 fixes

Staging release — try it at staging.arcanetable.app.

Fixes

  • Deck export — exported .txt files no longer include cards that are currently in play on the battlefield.
  • Disabled states — "Start Playtest" and "Edit Deck" are now correctly disabled when no deck is selected. Previously the wrong buttons were being gated.
  • Tags field — pressing Enter in the deck tags field no longer submits the form.
  • Deck mutation — the deck is now cloned before being passed into the editor, so edits can't accidentally affect your saved deck data.
  • Add card button — the click handler is now on the button element rather than the icon inside it, fixing interaction issues in some browsers.
  • Starting life total — clearing the starting life field no longer produces NaN; it falls back to 0.
  • Deck picker close button — removed the close button from the session start dialog to prevent accidentally dismissing it.

Improvements

  • The delete deck confirmation dialog now includes a copy button next to the deck name, so you don't have to type it manually.
view commits →
betadf5debf

Card Image Caching, Search Cancel Fix, and Loading Spinner

Improves card image caching for edge delivery, fixes a stale debounced search firing after clearing filters, and polishes the deck editor loading state.

2 fixes

Staging release — try it at staging.arcanetable.app.

Fixes

  • 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.
view commits →
beta3f721f3

Collapsed Counter Display, Deck Export, and YGO Multi-Type Search

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.

3 features3 fixes

Staging release — try it at staging.arcanetable.app.

Features

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 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.
view commits →
stable5edd756

Hotfix: New User Deck Creation

Hotfix resolving an issue that prevented new users from creating decks in production.

1 fix

Fix

  • Fixed a bug that prevented new users from creating decks in production. Users can now create their first deck without issues.
view commits →
betac630678

HTTPS Card Image Fix (Staging)

Fixes card images across all three built-in card systems being served over HTTP, causing mixed-content blocks in the browser.

1 fix

Staging release — try it at staging.arcanetable.app.

Fixes

  • 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.
view commits →
betae5108d2

Deck Editor Paging and MTG Multi-Type Search Fix (Staging)

Fixes a severe deck editor performance issue by paging search results, and corrects MTG multi-type card searches.

1 feature2 fixes

Staging release — try it at staging.arcanetable.app.

Features

Deck Editor Paging

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.

view commits →
beta09b6012

Deck Editor, Pokémon & Yu-Gi-Oh Support (Staging)

Major staging release: an in-app deck editor, built-in Pokémon and Yu-Gi-Oh card systems, unknown card placeholder, and token caching improvements.

5 features1 fix

Staging release — try it at staging.arcanetable.app before it reaches production.

Features

Deck Editor

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).
view commits →
stablef7632416

Deck Save Fix and Deck Selector Improvements

Fixes a bug preventing decks from saving and improves the deck selector with deckId migration, system viewer access, and copy-link support.

3 features1 fix

Bug Fix

  • Fixed a bug that could prevent decks from being saved. If you experienced decks not persisting, this is now resolved.

Deck Selector & Editor Improvements

  • Switched from deckIndex to deckId for identifying decks — a more reliable foundation for future work.
  • Migrated the deck store from an array to a map for better performance and lookup efficiency.
  • The system viewer is now accessible directly from the deck selector.
  • The copy-link feature now captures the full URL including the ?system= parameter when one is present.
stableaf202d5d

Custom Card Systems and Landing Page Refresh

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.

stable

Stability, Resilience, and Copyable Error Reports

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.

stable

Double-Sided Card Fix and Deck Editor Card Count

Fixes completely broken double-sided card rendering and adds total card count display to the deck editor.

2 features1 fix

Features

  • Deck editor now shows total card count.
  • Double-sided cards now render and behave correctly in play (they were completely broken before this fix).

Chore

  • Prettier run: tidied up the codebase for cleaner diffs and consistency.
stable

Multi-Selection, Enhanced Search, and Performance Improvements

Adds multi-card selection with drag, enhanced comma-separated search, worker-threaded image loading, and visual polish across the table.

12 features6 fixes

Features

Multi-Selection

  • Initial support for multi-selection.
  • Drag select with Ctrl, Command, and Shift.
  • Ctrl, Command, and Shift click for multi-selection.
  • Battlefield menu actions now apply to all selected cards.
  • Hotkeys now apply to selected cards.

Search Enhancements

  • Search now includes card faces for more comprehensive results.
  • Multiple search terms can be used, separated by commas.

Performance

  • Card images now load and resize in a worker thread to reduce jank.
  • Added a card loading texture for smoother visual feedback.
  • Cards now stack during drag-and-drop operations.
  • Dragging cards ignores intersections with the items being dragged.

Visual Improvements

  • Updated table colours to be more theme-appropriate.
  • Card loading animations and card backs load earlier for a better first impression.

Command Palette

  • Ctrl+K / Cmd+K can now be used to toggle the command palette (in addition to Ctrl+Space).

Fixes

  • Prevented scroll bounce during gameplay interactions.
  • Fixed card grid filter removal when the last filtered card is removed.
  • Prevented the search field from wiping unexpectedly.
  • Fixed player menus to allow proper expansion.
  • Normalised app name to "Arcanetable."
  • Cleaned up navigation so Back → Start Now works correctly.
  • Locked interactions during bulk transfers to and from grids.
  • Fixed a selection bug where clearing the selection would not work as intended.

Chore

  • Refactored hotkeys into their own file for cleaner code organisation.
  • Updated dependencies.
  • Added analytics to track user engagement.
  • Removed unnecessary console logs.
stable

Command Palette and Keyboard Shortcuts

Introduces a command palette with deck-specific commands, dice rolls, and global keyboard shortcuts for common battlefield actions.

5 features1 fix

Features

  • Added a command palette for quick actions (Ctrl+Space / Ctrl+K / Cmd+K).
  • Integrated deck-specific commands into the command palette.
  • Enabled logging-only dice rolls via the command palette. (#32)
  • Introduced global keyboard shortcuts for key actions.
  • Card grids now auto-focus the search field when opened.

Keyboard Shortcuts

ScopeKeyAction
BattlefieldCClone
BattlefieldTTap
BattlefieldFFlip
GlobalDDraw
GlobalSSearch deck
GlobalShift+UUntap all
GlobalCtrl+SpaceOpen command palette
Card (global)BSend to battlefield
Card (global)Ctrl+DDestroy
Card (global)EExile
Card (global)PPeek
Card gridEscClose menu

Fixes

  • Properly dispose of cards when closing the token menu.

Closed Issues

  • #21 Basic keyboard shortcut implementation
  • #32 Add dice rolls
stable

Card Grid Stability and Search Fixes

Stability and UX fixes for card grid interactions, counter visibility, flipped cards, and search field behaviour.

5 fixes

Fixes

  • Locked interactions during bulk transfers to and from the card grid to ensure consistent behaviour.
  • Fixed an issue where flipping a card multiple times caused it to land incorrectly on the table.
  • Allowed expanding other players' counter views for better gameplay monitoring. (#40)
  • Resolved an issue where removing the last filtered card from the card grid would not clear the filter.
  • Prevented the search field from wiping unexpectedly during use.
stable

Shuffle Performance, Graveyard Counter, and Token Order Fixes

Performance improvements for shuffling into the deck, graveyard counter decrement fix, and correct token ordering for remote clients.

1 feature4 fixes

Features

  • Improved performance by reusing dismissFromZone for shuffling cards into the deck. (#37)

Fixes

  • Resolved an issue where the graveyard counter did not decrement correctly. (#41)
  • Fixed token order in the "Add Token" menu on remote clients — tokens now sort correctly based on IDs. (#39)
  • Prevented multiple transferCard events when dismissing cards from the grid. (#41)
  • Updated transferCard to use setCardData for improved consistency.

Improvements

  • Optimised shuffle-into-deck by leveraging bulk events. (#37)
  • Added optional chaining to logging for cleaner error handling.
stable

Invite Link Copy, Concede, and Counter Visibility Fixes

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.
stable

Hand and Battlefield Search

Adds search functionality for the hand and battlefield zones, and fixes tap direction for flipped cards.

1 feature1 fix

Features

  • Added search functionality for the hand and battlefield zones.

Fixes

  • Flipped cards now tap in the correct direction.

Chore

  • Cleaned up logs and optimized imports for a smaller bundle size.
stable

Number Field Inputs and Draw Refactor

Updates all variable inputs to number fields and refactors draw to use transferCard with extended options.

2 features

Features

  • Updated all variable inputs to use proper number fields.
  • draw now utilises transferCard with extended options for consistency.

Chore

  • Refactored transferCard to support extended options.
stable

Card Counts, Token Toggle, and Counter Fixes

Adds zone card counts, toggleable token grid, clone-as-token tagging, and several counter bug fixes.

3 features3 fixes

Features

  • Display card counts for hand, battlefield, peek zone, token search zone, deck, and card stacks.
  • "Add Tokens" now toggles the token grid instead of opening a separate view.
  • Cloning cards tags clones as tokens automatically.

Fixes

  • Fixed initial counter rendering issues.
  • Fixed counter placement, scaling, and values exceeding 999.
  • Fixed dismissing the token menu when triggered by a remote action.
  • Fixed removing cards from stacks and prevented duplicate additions.
  • Fixed cards being dismissed twice when added.
  • Removed mesh correctly when calling deck.removeCard.

Chore

  • Refactored emitEvent logic.
stable

Token Display and Drag Fixes

Fixes for token visibility and card dragging from the token menu, plus production artifact hashing.

2 fixes

Fixes

  • Fixed tokens not showing for cards that started in play.
  • Fixed dragging cards from the Add Token menu.

Chore

  • Enabled hashing and compression for production artifacts so browsers always receive the correct file versions.