--- title: PlanarAlly created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, gaming, vtt, jdr, tabletop, django, python, multijoueur] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Gaming, https://www.planarally.io/] --- # 🐉 PlanarAlly > **Virtual Tabletop (VTT) self-hosted en Python/Django** — l'alternative open-source sérieuse à Foundry VTT pour vos parties de JDR en ligne. ## 📋 Informations Générales | Champ | Valeur | | :--- | :--- | | **Site web** | [planarally.io](https://www.planarally.io/) | | **GitHub** | [Kruptein/PlanarAlly](https://github.com/Kruptein/PlanarAlly) | | **License** | AGPL-3.0 | | **Langage** | Python (Django) + TypeScript (client) | | **Étoiles** | ⭐84 (catalogue) | | **Dernière MAJ** | 2025.x (release 2025.1) | | **Catégorie** | [[cat-gaming\|Gaming]] | ## 📝 Description **PlanarAlly** est un **Virtual Tabletop (VTT)** self-hosted écrit en **Python/Django** côté serveur, avec un client **TypeScript** (React-like) moderne. Il permet aux maîtres du jeu (DM/MJ) et à leurs joueurs de se retrouver autour d'une table virtuelle pour jouer à **Donjons & Dragons, Pathfinder, Call of Cthulhu, ou tout autre JDR** avec cartes, tokens, mesures, et plus encore. L'application se distingue par son **système de vision avancé** : chaque token a un champ de vision, une ligne de vue (Line of Sight) qui dépend des murs, et un **fog of war** dynamique. Le DM peut aussi définir des zones de lumière (luminosité, couleur) qui ne se révèlent aux joueurs que lorsque leurs tokens s'en approchent. C'est l'un des VTT open-source les plus aboutis sur ce point. L'architecture est **client-serveur** : un backend Django gère l'état de la partie (synchronisation temps réel via websockets) et un client TypeScript gère le rendu canvas. Vous pouvez soit **build le client manuellement**, soit utiliser une image Docker **pré-buildée** qui embarque le client et le serveur. PlanarAlly supporte aussi les **macros** (scripts Python exécutés en jeu) et un système de **notes partagées** entre le DM et les joueurs. **Fonctionnalités clés** : - ✅ **Line of Sight** dynamique par token (calcul sur serveur) - ✅ **Fog of War** révélé progressivement - ✅ **Système d'éclairage** (zones de lumière, ombres, jour/nuit) - ✅ **Mesures** (cases, distances configurables par map) - ✅ **Layers multiples** : background, terrain, tokens, GM, fog - ✅ **Notes partagées** (MJ ↔ joueurs) - ✅ **Macros Python** côté serveur (extensibilité) - ✅ **Templates / assets** réutilisables (blocs de donjons, marqueurs) - ✅ **Multijoueur temps réel** via websockets - ✅ **Partage d'écran** (optionnel, via WebRTC peer-to-peer) - ✅ **Self-hosted 100%** : vos parties restent privées ## 🚀 Installation ### Option 1 : Docker (recommandé, client pré-buildé) ```yaml # docker-compose.yml services: planarally: container_name: planarally image: kruptein/planarally:latest # ou :v2025.1 restart: unless-stopped ports: - "8443:8443" volumes: - ./planarally/data:/app/data # base SQLite + médias uploadés - ./planarally/config:/app/config # config serveur environment: - TZ=Europe/Paris - PA_SECRET=*** Change...t - PA_HOST=0.0.0.0 - PA_PORT=8443 - PA_WEB_PORT=8443 ``` ```bash docker compose up -d ``` Accéder à `https://IP:8443`. Le serveur utilise un certificat auto-signé par défaut — à remplacer ou à mettre derrière un reverse proxy ([[app-traefik]], [[app-caddy]]). ### Option 2 : Build manuel (client + serveur) ```bash git clone https://github.com/Kruptein/PlanarAlly.git cd PlanarAlly # Backend Django cd server pip install -r requirements.txt python manage.py migrate python manage.py runserver 0.0.0.0:8000 # Client (autre terminal) cd ../client npm install npm run build # Servir le build statique via Nginx/Caddy ``` ### Option 3 : Utiliser le dashboard hébergé (sans self-host) L'équipe propose un dashboard hébergé gratuit sur [planarally.io](https://www.planarally.io/) pour ceux qui ne veulent pas auto-héberger — mais l'**auto-hébergement est l'option recommandée** pour la confidentialité de vos parties. ## ⚙️ Configuration 1. **Premier compte** : s'inscrire au premier accès sur l'UI — le premier compte créé devient administrateur. 2. **Carte** : créer un "Location" (donjon, ville, etc.), uploader une image de carte (`.jpg`/`.png`, jusqu'à ~20 Mo recommandé). 3. **Calibration** : clic droit sur la carte → "Set grid size" pour configurer la taille d'une case (ex. 5ft = 70px). 4. **Tokens** : glisser-déposer depuis la sidebar, configurer le champ de vision (portée, angle, type : normal/grand-angle/...). 5. **MJ vs Joueurs** : activer/désactiver le "fog of war" et le "DM layer" depuis le panneau de droite. 6. **Macros** : onglet "Macros" pour écrire des scripts Python qui peuvent lire/modifier l'état de la partie. 7. **Reverse proxy** : à mettre derrière [[app-traefik]] ou [[app-caddy]] avec **WebSocket** correctement relayé (Upgrade/Connection headers), sinon le multijoueur ne marche pas. ## 🔄 Alternatives ### Open Source (VTT self-hosted) - **Foundry VTT** — Référence, ~50 USD licence unique, très riche (la cible que PlanarAlly vise) - **Owlbear Rodeo** — Simple, gratuit pour usage basique, hébergé ou self-hosted - **Astra** — Encore en développement, basé sur Phaser - **Tabletop Simulator** — Non self-hosted, propriétaire - **Roll20** — Propriétaire, hébergé - **MapTool** — Java desktop, self-hostable, plus ancien - **Fantasy Grounds** — Propriétaire, Unity-based ### Comparaison rapide | Critère | PlanarAlly | Foundry VTT | Owlbear Rodeo | | :--- | :--- | :--- | :--- | | Prix | Gratuit (AGPL) | ~50 USD licence | Freemium | | Self-hosted | ✅ | ✅ | ✅ (limité) | | Line of Sight | ✅ Avancé | ✅ Très avancé | ❌ Basique | | Fog of War | ✅ Dynamique | ✅ | ✅ | | Lighting | ✅ Zones | ✅ Très avancé | ❌ | | Macros | ✅ Python | ✅ JS/Slott | ❌ | | Modules | Limité | ✅ Énorme écosystème | ❌ | | Licence | AGPL-3.0 | Propriétaire | AGPL-3.0 | ## 🔐 Sécurité - **HTTPS obligatoire** : les websockets et l'auth MJ/joueurs exigent TLS. Mettre derrière un reverse proxy ([[app-traefik]] / [[app-caddy]]). - **Compte admin** : le premier compte créé est admin. Protégez-le avec un mot de passe fort + 2FA si possible. - **`PA_SECRET`** : 32+ caractères aléatoires (`openssl rand -hex 32`). - **Confidentialité des parties** : en self-hosted, vos parties ne transitent par aucun serveur tiers. C'est un **avantage énorme** vs Roll20/Foundry hébergé pour les campagnes sensibles. - **Base de données** : `./data/db.sqlite3` — sauvegarder régulièrement. - **Pas d'auth native** : pour ajouter 2FA ou OAuth, il faut passer par un proxy d'authentification ([[app-authelia]], [[app-authentik]]). ## 📚 Ressources - [Site officiel](https://www.planarally.io/) - [Documentation self-hosting](https://www.planarally.io/server/setup/self-hosting/) - [GitHub Kruptein/PlanarAlly](https://github.com/Kruptein/PlanarAlly) - [Discord communautaire](https://discord.gg/4rd4mus) - [Blog & guides](https://www.planarally.io/blog/) ## Pages Liées - [[cat-gaming]] — Catégorie Gaming - [[app-traefik]] — Reverse proxy (WebSockets!) - [[app-authelia]] — Ajouter 2FA - [[app-foundry-vtt]] — Alternative payante (si plus tard ajoutée) - [[recettes-docker-compose]] — Templates Docker - [[securisation-home-lab]] — Durcir l'infra