{"slug": "show-hn-playmat-browser-client-for-xmage-the-open-source-mtg-engine", "title": "Show HN: Playmat – Browser client for XMage, the open-source MTG engine", "summary": "Developer arcanite24 released Playmat, a browser client and fork of the open-source Magic: The Gathering rules engine XMage that adds a WebSocket bridge to the server and an MTG Arena-style web interface. Playmat runs at playmat.deimos.studio, ships installers for Windows 10/11, macOS (Apple silicon and Intel) and Linux x64/ARM with Java bundled, and offers AI opponents, booster draft, sealed, Jumpstart and constructed tournaments, plus an optional single-player Career mode. The project is a hobby effort unaffiliated with Wizards of the Coast, merges from upstream XMage regularly, and is described by its author as a work in progress with rough edges.", "body_md": "A fan-made web client for [XMage](https://github.com/magefree/mage), the open-source Magic: The Gathering\n  rules engine. A hobby project, not affiliated with Wizards of the Coast.\n\n[Play online](https://playmat.deimos.studio) ·\n  [Website](https://arcanite24.github.io/playmat/) ·\n  [Download](#play-on-your-computer) ·\n  [Run a server](#running-a-server) ·\n  [Working on Playmat](#working-on-playmat) ·\n  [WebSocket API](https://github.com/arcanite24/playmat/blob/master/docs/WebSocketAPI.md)\n\nPlaymat is a fork of [XMage](https://github.com/magefree/mage), the open-source Magic rules engine with its cards, AI\nopponents, drafts and tournaments. It adds a WebSocket bridge to the server and a browser client styled after MTG\nArena. Play it in your browser at [playmat.deimos.studio](https://playmat.deimos.studio), where the project runs a\npublic server, [install it on your computer](#play-on-your-computer) to play the AI, Career or friends on your\nWi-Fi, or [run a server](#running-a-server) for a group that plays from anywhere. The engine stays XMage, merged from upstream\nregularly, so the cards it supports work here too.\n\nIt's a work in progress with rough edges. Bug reports and pull requests are welcome.\n\nCome say hi, find a game or report bugs on the [Discord server](https://discord.gg/SFQKFrTvww). If you'd like to help\nkeep the server running, you can [support the project on Ko-fi](https://ko-fi.com/nerijs).\n\n- **Playing.** Pick a deck and play the AI, or send a friend an invite link. Practice mode gives you a\ngoldfish opponent and tools to put any card in hand or on the battlefield.\n- **The board.** Attack arrows, a visible stack, priority shown on the table, auto-pass with the stops you choose, and\nkeyboard shortcuts for passing and answering.\n- **Decks.** A deck builder with card search, and an import sheet that takes a link from Archidekt,\nMoxfield and other deck sites, a pasted list or a`.dck` file. Starter decks are there from the first sign-in,\nCommander ones included.\n- **Events.** Booster draft, sealed, Jumpstart and constructed tournaments. Empty seats fill with AI players.\n- **Career.** An optional single-player mode: five colour campaigns with a boss at the end of each, an Academy with a school\nfor every format, puzzles, a gauntlet, sealed and draft runs, a weekly challenge, booster packs to open, a collection\nto craft into and achievements, illustrated with AI-generated art.\n- **Social.** Lobby chat, players online, profiles, a table browser, spectating, match history and replays.\n- **Devices.** Desktop browsers, tablets, an installable web app and an Android app that keeps card\npictures on the device. English and Spanish.\n- **On your computer.** Installers for Windows, macOS and Linux with everything inside, Java included: install,\nopen, play. Friends on the same network join from their browser.\n- **Hosting.** One Docker Compose stack: the server, Caddy with automatic HTTPS, a Scryfall picture cache,\nnightly backups and Discord notifications.\n\nOne download with everything inside, Java included. Install it, open Playmat, and the game opens in your browser. Play the AI and Career on your own, or have friends on the same Wi-Fi join you. Nothing else to install.\n\n| Your computer | Download | \n|---|---|\n| **Windows** 10 or 11 | [Playmat-Setup-Windows-x64.exe](https://github.com/arcanite24/playmat/releases/latest/download/Playmat-Setup-Windows-x64.exe) : run it and press**Install** | \n| **Mac** with Apple silicon (M1 and later) | [Playmat-macOS-arm64.dmg](https://github.com/arcanite24/playmat/releases/latest/download/Playmat-macOS-arm64.dmg) : drag Playmat to Applications | \n| **Mac** with an Intel processor | [Playmat-macOS-x64.dmg](https://github.com/arcanite24/playmat/releases/latest/download/Playmat-macOS-x64.dmg) : drag Playmat to Applications | \n| **Linux** (x64 or ARM) | `curl -fsSL https://github.com/arcanite24/playmat/releases/latest/download/install.sh \\| sh` | \n\nPrefer a terminal? These download the right file, install it and start Playmat, without the warnings below:\n\n```\n# macOS or Linux\ncurl -fsSL https://github.com/arcanite24/playmat/releases/latest/download/install.sh | sh\n# Windows (PowerShell)\nirm https://github.com/arcanite24/playmat/releases/latest/download/install.ps1 | iex\n```\n\n**The first time**\n\n- Windows may say it protected your PC: choose **More info** , then**Run anyway** . macOS may say it can't check\nPlaymat: open**System Settings** ,**Privacy & Security** and choose**Open Anyway** . Playmat is a free fan project\nwithout paid signing certificates; the terminal installers above skip both screens.\n- The first start prepares the card database, which takes a few minutes once. Your computer may ask whether Playmat (Java) may accept network connections: allowing it lets friends on your network join.\n\n**Playing**\n\n- A small Playmat window shows what's happening and opens `http://localhost:17170` in your browser when the game is\nready. Keep it open while you play; closing it stops the game.\n- Create an account the first time; it stays on your computer and unlocks Career. Untick **Player accounts** in the\nPlaymat window to sign in with just a name instead.\n- Friends on the same network open the address the window shows, such as `http://192.168.1.20:17170` .\n- Card pictures come from Scryfall, so an internet connection helps.\n- The window tells you when a new version is out. Installing it keeps your accounts, decks and Career progress.\n\nEvery version is on the [releases page](https://github.com/arcanite24/playmat/releases).\n[ops/desktop/README.md](https://github.com/arcanite24/playmat/blob/master/ops/desktop/README.md) covers how the app works, where it keeps its data and how releases are\nbuilt.\n\nYou need Docker and a machine your players can reach.\n\n```\ncp ops/web/.env.example ops/web/.env      # set DOMAIN, XMAGE_AUTH, XMAGE_OWNER\ndocker compose -f ops/web/docker-compose.yml --env-file ops/web/.env up -d\n```\n\nThis runs the published images, so nothing is built. The [docs on the site](https://arcanite24.github.io/playmat/docs/) walk through\n[running a server](https://arcanite24.github.io/playmat/docs/server.html) and\n[updating it](https://arcanite24.github.io/playmat/docs/updates.html): the admin console's Updates section says when a\nnewer version is out, and with the updater turned on the owner installs it with one button.\n\nPlayers open `https://<your domain>` and sign in.\n[ops/web/README.md](https://github.com/arcanite24/playmat/blob/master/ops/web/README.md) covers private LAN servers, running behind another reverse proxy, every setting,\naccounts and moderation, Discord notifications, backups and capacity.\n\nTo run it from source while you change it. Requirements: JDK 17 or later, Maven, and the Node.js version in [`Mage.Web.Client/.nvmrc`](https://github.com/arcanite24/playmat/blob/master/Mage.Web.Client/.nvmrc).\n\n```\n# 1. build the server (a few minutes the first time)\nmvn -T 1C -pl '!Mage.Client,!Mage.Server.Console,!Mage.Tests,!Mage.Verify,!Mage.Reports' install -DskipTests\n\n# 2. start it: the WebSocket bridge listens on ws://localhost:17172\ncd Mage.Server/release\nmvn -f ../../pom.xml -pl Mage.Server -Dexec.mainClass=mage.server.Main exec:java\n\n# 3. in another terminal, start the client on http://localhost:5173\ncd Mage.Web.Client\nnpm ci\nnpm run dev\n```\n\nSign in with any name. The client's own guide, [Mage.Web.Client/README.md](https://github.com/arcanite24/playmat/blob/master/Mage.Web.Client/README.md), covers its\narchitecture, tests and the Android build (`npm run android`).\n\n| Path | What lives there | \n|---|---|\n| [`Mage.Web.Client`](https://github.com/arcanite24/playmat/blob/master/Mage.Web.Client) | The Playmat client: React 19, TypeScript, Vite. Product brief in [PRODUCT.md](https://github.com/arcanite24/playmat/blob/master/Mage.Web.Client/PRODUCT.md) , design system in[DESIGN.md](https://github.com/arcanite24/playmat/blob/master/Mage.Web.Client/DESIGN.md) . | \n| [`Mage.Server`](https://github.com/arcanite24/playmat/blob/master/Mage.Server) | XMage's server, plus the JSON-RPC WebSocket bridge and Career services ( `src/main/java/mage/server/websocket` ,`.../career` ). | \n| [`ops/web`](https://github.com/arcanite24/playmat/blob/master/ops/web) | The Docker Compose deployment kit. | \n| [`ops/desktop`](https://github.com/arcanite24/playmat/blob/master/ops/desktop) | The desktop app: a launcher and installers for Windows, macOS and Linux. | \n| [`docs`](https://github.com/arcanite24/playmat/blob/master/docs) | The WebSocket API, data models and the upstream merge recipe. | \n| [`brand`](https://github.com/arcanite24/playmat/blob/master/brand) | The Playmat logo, generated from the app's typeface by `build_logo.py` . | \n| [`site`](https://github.com/arcanite24/playmat/blob/master/site) | The project website, published to GitHub Pages. | \n| Everything else | XMage: the rules engine, card implementations, AI, tests and the original desktop client. | \n\nPlaymat stands on XMage and the many people who have built it since 2010: the rules engine, tens of thousands of card\nimplementations and the AI are their work. Card and rules bugs usually live in the engine; XMage's\n[issue tracker](https://github.com/magefree/mage/issues) and [wiki](https://github.com/magefree/mage/wiki) are the\nplaces for those. Card pictures and data come from [Scryfall](https://scryfall.com).\n\nReleased under the [MIT License](https://github.com/arcanite24/playmat/blob/master/LICENSE.txt), like XMage.\n\nPlaymat is unofficial Fan Content permitted under the Fan Content Policy. Not approved/endorsed by Wizards. Portions of the materials used are property of Wizards of the Coast. ©Wizards of the Coast LLC.", "url": "https://wpnews.pro/news/show-hn-playmat-browser-client-for-xmage-the-open-source-mtg-engine", "canonical_source": "https://github.com/arcanite24/playmat", "published_at": "2026-10-29 17:31:55+00:00", "updated_at": "2026-10-29 17:47:14.526592+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Playmat", "XMage", "Wizards of the Coast", "arcanite24", "Magic: The Gathering", "Archidekt", "Moxfield", "Scryfall"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-playmat-browser-client-for-xmage-the-open-source-mtg-engine", "markdown": "https://wpnews.pro/news/show-hn-playmat-browser-client-for-xmage-the-open-source-mtg-engine.md", "text": "https://wpnews.pro/news/show-hn-playmat-browser-client-for-xmage-the-open-source-mtg-engine.txt", "jsonld": "https://wpnews.pro/news/show-hn-playmat-browser-client-for-xmage-the-open-source-mtg-engine.jsonld"}}