This is a decentralized Chess game, build on top of Solid. No central sever is required to run or set up a game. All personal data about the game is stored on your POD. Requests to join a game are sent to the inbox of your opponent directly. You have two types of games: a non-real-time and a real-time game. With a non-real-time game all updates are sent to the inbox of your opponent, who can interact with it when (s)he wants. With a real-time game WebRTC is used to allow for a direct communication between two instances of the Web app.
The game is available in the browser and terminal. Check the live version or one of the following screencasts:
WARNING: The "Clear inbox" button removes all files with (chess) game data in your inbox! So be careful!
- Code documentation can be found here.
- If you want to know more about how the application interacts with different Solid PODs, you can read this.
- Create a new game, which will send a request to join to your opponent.
- Join a game, which will send a response back to your opponent.
- Continue a game you started earlier.
- Linked Data: to represent/share the details of the games
- Decentralization: information is fetched from different servers
- Solid PODs: store personal data about the games
- LDflex for Solid: simple access to data in Solid pods through LDflex expressions
- SPARQL: query/update games
- RDF: representation of the data
- Comunica: querying different data sources
- chess.js: chess engine
- chessboard.js: chessboard
You can run the game locally by doing the following:
- Clone this repo.
npm i
: install Node.js dependencies.npm run build:web
: bundle the JavaScript via Webpack. The result can be found inweb-app/dist/main.js
.- Serve the contents of the root folder, e.g., via
http-server
.
npm i solid-chess -g
: install the game.solid-chess
:launch the game.
- Freevector Chess Pieces Set (CC BY-SA 4.0, no changes were made)
- Font Awesome chess-rook icon (CC BY 4.0, no changes were made)
© 2018 Pieter Heyvaert, MIT License