7.4 KiB
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 |
| GitHub | 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 |
📝 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é)
# 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
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)
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 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
- Premier compte : s'inscrire au premier accès sur l'UI — le premier compte créé devient administrateur.
- Carte : créer un "Location" (donjon, ville, etc.), uploader une image de carte (
.jpg/.png, jusqu'à ~20 Mo recommandé). - Calibration : clic droit sur la carte → "Set grid size" pour configurer la taille d'une case (ex. 5ft = 70px).
- Tokens : glisser-déposer depuis la sidebar, configurer le champ de vision (portée, angle, type : normal/grand-angle/...).
- MJ vs Joueurs : activer/désactiver le "fog of war" et le "DM layer" depuis le panneau de droite.
- Macros : onglet "Macros" pour écrire des scripts Python qui peuvent lire/modifier l'état de la partie.
- 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
- Documentation self-hosting
- GitHub Kruptein/PlanarAlly
- Discord communautaire
- Blog & guides
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