{"repo":"pietrobassi/bunnychess","free":true,"listed":false,"github":"https://github.com/pietrobassi/bunnychess","clone":"git clone https://github.com/pietrobassi/bunnychess.git","description":"Scalable chess server based on NestJS gRPC microservices + NATS JetStream","language":"TypeScript","stars":46,"topics":["ai","chess","docker","grpc","javascript","microservices","nats","nestjs","node","nodejs"],"license":"MIT","category":"deployment-docker-iac","readme_excerpt":"♟️🐰 Bunnychess 🐰♟️ Scalable, distributed, stateless chess server based on gRPC microservices. Built with NestJS + Vue.js, leveraging NATS JetStream, PostgreSQL and Redis. Included features: - 🎮 Multiple game modes and ranked/unranked matches - 🤖 Play against AI (Stockfish) - ⏳ Matchmaking server - 💪 Fault-tolerant, persistent queues - 💬 Chat and live matchmaking queues status Tech stack: - 💻 Typescript + NestJS microservices (monorepo) - 🖌️ Vue.js + Pinia - 📔 NATS JetStream, PostgreSQL (kysely), Redis - 🗣️ gRPC, WebSocket (Socket.IO), HTTP - 🐳 docker compose Feel free to contact me on LinkedIn for ideas, discussions and opportunities 🙂 https://www.linkedin.com/in/pietro-bassi Scope of the project This is a toy project designed to experiment with NestJS microservices and gRPC, leveraging NATS JetStream and its persistent queues to demonstrate how it can be used to build fault-tolerant distributed systems. The microservices are stateless and horizontally scalable, with Redis used to maintain game state. A more traditional stateful server approach was intentionally avoided, as it would have reduced the project to a load-balancing exercise between server instances while keeping the game state in memory. Quick start Clone this repository: Navigate inside project root folder: Start all services (docker compose required): Alternatively, you can start a multi-instance example that demonstrates load balancing for both HTTP/WebSocket requests and gRPC messages with: After s","default_branch":null,"files":null,"tree":[],"storefront":"/r/pietrobassi","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/pietrobassi/bunnychess/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}