/excalidraw-rpg

Virtual table top mod for Excalidraw

Primary LanguageTypeScriptMIT LicenseMIT

Excalidraw

A modification of the open-source whiteboard to support a Virtual Tabletop.
Collaborative and end-to-end encrypted.


Excalidraw is released under the MIT license. npm downloads/month PRs welcome! Chat on Discord Follow Excalidraw on Twitter

Product showcase

Create beautiful hand-drawn like diagrams, wireframes, or whatever you like.

Features

The Excalidraw editor (npm package) supports:

  • 💯 Free & open-source.
  • 🎨 Infinite, canvas-based whiteboard.
  • ✍️ Hand-drawn like style.
  • 🌓 Dark mode.
  • 🏗️ Customizable.
  • 📷 Image support.
  • 😀 Shape libraries support.
  • 👅 Localization (i18n) support.
  • 🖼️ Export to PNG, SVG & clipboard.
  • 💾 Open format - export drawings as an .excalidraw json file.
  • ⚒️ Wide range of tools - rectangle, circle, diamond, arrow, line, free-draw, eraser...
  • ➡️ Arrow-binding & labeled arrows.
  • 🔙 Undo / Redo.
  • 🔍 Zoom and panning support.

Mod Features

  • Ability to restrict drawings & elements to specific users.
  • A DM / GM role that is able to modify everything.
  • A simple chat window with commands
  • Ability to assign stats to elements on the whiteboard
  • Dice rolling, with full stat integration (if you mention a stat in your roll, it will pull it from the elements you have selected)

It's not an exceptionally sophisticated mod, but it did need some tinkering to make the locking per-user specific

A screenshot of the Excalidraw VTT Mod, showing a selected player in some sort of witch hut with a few rat monsters

Instructions

GM / DM creates a session and runs /claim, this tells the board who the owner is.

Players can connect and add their own drawings / icons. They will automatically be attached to the user. Alternatively, the GM / DM can use /give <name> to assign an element to a user.

Mod Commands

  • /roll <notation> Rolls a dice publicly, with notation generally from: https://dice-roller.github.io/documentation/guide/notation/
  • /dmroll <notation> Rolls a dice privately
  • /clear Clears the chat (locally)
  • /w or /whisper <user> <message> allows you to whisper to another user
  • /take Assigns a selected element(s) to the user running the command
  • /give <user> Assigns the selected element(s) to the user specified by the command
  • /set <attribute> <value> Assigns an attribute to each of the selected elements
  • /setr <attribute> <notation> Allows you to assign attributes to the selected elements, with a roll. It will roll for each element (this makes it easy to roll HP for a few tokens at the same time).
  • /unset <attribute> Removes an attribute from selected elements
  • /mod <attribute> <notation> Allows you to modify an attribute by a roll. It will roll for each element (this makes it easy to roll HP for a few tokens at the same time).

When you use /roll <notation>, you are able to refer to stats from the elements you have selected, for example,

If I wrote /roll d20+STR, as shown in the image, it will pull STR from the selected element, and roll d20+4

An example showing a roll pulling a stat from the element selected

If you use /set name <some-name>, it will make it easier to refer to the element from the stats, and will show up in the dice roll if you used attributes.

The name of the element showing up next the roll

If you reference stats from your rolls, and have multiple elements selected, it will roll the dice for each selected element, making it simpler to run encounters.

An image showing multiple rat monsters selected, and an attack roll being performed for each with just one command

Excalidraw D20

The app hosted at excalidraw-d20.netlify.app, and supports the same features as mainline Excalidraw:

  • 📡 PWA support (works offline).
  • 🤼 Real-time collaboration.
  • 🔒 End-to-end encryption.
  • 💾 Local-first support (autosaves to the browser).
  • 🔗 Shareable links (export to a readonly link you can share with others).

We'll be adding these features as drop-in plugins for the npm package in the future.

Sponsors & support

If you like the project, support the Excalidraw developers! You can become a sponsor for them at Open Collective or use Excalidraw+.