https://github.com/svenjacobs/pearls
Self-hostable, turn-based multiplayer board game
https://github.com/svenjacobs/pearls
board-game boardgame dice dice-game game games progressive-web-app pwa self-hosted selfhosted svelte sveltekit turn-based turn-based-game typescript vite web
Last synced: 26 days ago
JSON representation
Self-hostable, turn-based multiplayer board game
- Host: GitHub
- URL: https://github.com/svenjacobs/pearls
- Owner: svenjacobs
- Created: 2025-12-21T12:00:18.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-05-18T22:37:34.000Z (about 1 month ago)
- Last Synced: 2026-05-19T00:49:07.572Z (about 1 month ago)
- Topics: board-game, boardgame, dice, dice-game, game, games, progressive-web-app, pwa, self-hosted, selfhosted, svelte, sveltekit, turn-based, turn-based-game, typescript, vite, web
- Language: JavaScript
- Homepage:
- Size: 726 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Pearls
[](https://github.com/svenjacobs/pearls/actions/workflows/ci.yml)
A self-hostable, turn-based multiplayer web implementation of a board game. Race to clear all 12 rows of pearls from your board before your opponents do. Full rules are explained in game.

Demo at [pearls.svenjacobs.com](https://pearls.svenjacobs.com).
## Features
- **Real-time multiplayer** — up to several players per game, board states update live via Server-Sent Events
- **Multiple parallel games** — join and manage several games at once from the active games list
- **AI players** — play against computer-controlled opponents
- **Invite via link or QR code** — share a game with one tap, no account required
- **All-boards view** — see every player's board live during the game
- **Initiative dice-off** — dice roll determines turn order at game start
- **Emoji reactions** — send one of 6 reactions during play, toggleable in settings
- **Sound effects** — 9 sounds for dice, pearls, and game events, mutable
- **Pearl color themes** — 30+ board themes across colors, nature, seasons, and country flags
- **Progressive Web App** — installable on mobile and desktop
- **Push notifications** — get notified when it's your turn, opt-in
- **Localization** — English and German
- **Dark mode** — follows system preference
## Tech Stack
| Layer | Technology |
| ----------------- | ---------------------------------------- |
| Framework | SvelteKit 2 (Svelte 5, SSR) |
| Language | TypeScript 6 |
| Styling | TailwindCSS v4 |
| Build tool | Vite 8 |
| Test runner | Vitest 4 |
| Integration tests | Testcontainers (real Redis in container) |
| Database | Redis 8 |
| Realtime | Server-Sent Events (SSE) |
| Logging | Pino |
| i18n | Paraglide JS |
| PWA | vite-plugin-pwa + Workbox |
| Package manager | pnpm 11 |
| Runtime | Node.js 26 |
| Container | Docker / Podman |
## Self-Hosting & Deployment
See [DEPLOYMENT.md](DEPLOYMENT.md) for full instructions, including Docker Compose and Podman Quadlet setups.
---
> **Disclaimer:** This project was created with the assistance of AI tools.