Files
2026-06-09 18:40:21 +02:00

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

  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

Pages Liées