GitHub - nic-kup/liskat: Play Skat online for free. TypeScript engine + Bun/ws server + Svelte client.

2 min read Original article ↗

Play Skat online, for free.

Inspired by lichess's philosophy (free, open, ad-free, no bots) but built fresh for Skat rather than forked, since Skat (3-player, hidden-hand, trick-taking with bidding) shares almost no game model with chess.

Architecture

A TypeScript monorepo, separating pure rules from transport and UI: the one idea most worth borrowing from lichess.

Package Role Status
packages/engine Pure Skat rules: bidding, round state machine, scoring, match formats ✅ done (25 tests)
packages/server Authoritative game server + matchmaking lobby (WebSocket) ✅ done (5 tests)
packages/client Web UI: the table and cards (Svelte + SVG) ✅ playable

The engine has zero dependencies and runs on Node's built-in test runner and type stripping (no build step).

npm install        # all workspace deps
npm test           # run all package test suites (engine + server)

# from the repo root, two terminals:
bun run server     # game server on :8080 (Bun, hot-reload via --watch)
bun run client     # web client on :5173 (proxies /ws -> :8080)

Then open http://localhost:5173, pick a nickname, and create or quick-match a table.

The server is plain node:http + ws, so it runs on Bun (bun run server, the default) or Node (cd packages/server && npm run start:node). Bun needs no build flags and gives instant hot-reload.

Graphics

Cards are plain SVG files under packages/client/public/cards/<deck>/<id>.svg (e.g. french/CJ.svg, french/back.svg). A clean placeholder French deck is generated by npm run gen-deck in the client. To use custom art, just drop replacement SVGs into that folder (no code changes). A german/ deck folder is ready for German-suited cards.

License

AGPL-3.0-or-later, matching lichess.