---
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
