Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
  - Play Chess over social/messaging

Created because I wanted to play chess with others without having to install software, create accounts, etc.. Game play is simple -- make your move, copy and paste the URL to your opponent, etc.

Technical details:

Web browser-side - all chess logic is run in the browser

  • chessboard.js - JavaScript chessboard component - by Chris Oakman
  • chess.js - JavaScript chess library that is used for chess move generation/validation, piece placement/movement, and check/checkmate/stalemate detection - by Jeff Hlywa
  • JQuery - the above two chess libraries required it, so I used it too.

Web Server - simple Node/Express server with some super simple templating to create the Open Graph and Twitter Card image URLs, links, etc.  This could have easily been a static website other than this requirement.

  • request-ip - Used for logging IP address of each move to use for future scaling (create additional copies in regions, etc.)
  • nanoid - Used to generate unique Game IDs
  • No database/data store -- all game state info is passed back and forth between players in URL
  • Deployed on Google Cloud Run

Image Server - used to generate the image used for Open Graph and Twitter cards so that when a user posts a game link to most platforms, the platform will show the image with the current board position. I created an endpoint that looks like any other png file url (example).

  • chess-image-generator - JavaScript library that creates a png from a FEN (standard chess board notation) - by Andrew Young
  • I made a copy of generateBuffer() as generateCustomBuffer() and customized it to do padding to match Open Graph requirements
  • Deployed as a route in the web server Node express app

Testing and deploying

The parts

  • Main web server is in project root -- server.js
  • Web content is in ./public

Local testing of serve - run from project root.

# Install all dependencies
npm install

# Run server
node server

Access http://localhost:8080 to test. If you are running this on your own server, you'll need to change the URL hard-coding in server.js (replace "")

Deploying to Google Cloud Run

npm run build
npm run deploy


Play chess over Twitter, SMS, iMessage, Facebook, Snap, Whatsapp, Google Chat. WeChat, Telegram, KaTalk, Viber, and many more.








No packages published

Contributors 4