Open-source project
kakaroto/Beyond20 avatar
kakaroto/Beyond20

Beyond20 copies a D&D Beyond character sheet into your Roll20 tab

D&D Beyond Character Sheet Integration in Roll20

554 stars179 forksJavaScriptGPL-3.0

At a glance

What is it?
Beyond20 is a browser extension that reads your D&D Beyond character sheet in one tab and sends rolls to every Roll20 or Foundry VTT tab you have open, so you stop copying numbers between two sites. It is GPL-3.0 licensed, works on Chrome and Firefox, and its quick settings differ depending on which side of the pair you are looking at.
Who is it for?
Adopt Beyond20 if you play on Roll20 or Foundry VTT with a character managed on D&D Beyond and you are tired of transcribing modifiers, because the extension removes that step and adds formula detection on top. Do not adopt it if you use a different virtual tabletop, or if you are on a platform that has no store listing, since the extension is distributed through the Chrome Web Store and Firefox Add-ons only.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 36 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Two tabs, and the extension sits between them

Beyond20 is a browser extension that integrates the character sheet from D&D Beyond into Roll20, Foundry VTT and Discord. The homepage is beyond20.here-for-more.info and the project is a single JavaScript extension rather than a server or a service.

The operating model is worth understanding before anything else, because it explains both the value and the limits. You open Roll20 or Foundry VTT in one tab of Chrome or Firefox, and your character sheet on D&D Beyond in another tab. The extension runs in both of them and moves data across.

If you use Chrome with Foundry VTT there is one extra step, because the documentation says you need to click the Beyond20 icon in the Chrome window toolbar to activate Beyond20 for that Foundry VTT installation. That is a per-installation activation rather than a global setting, which is a hint about how the extension identifies the VTT instance it should talk to.

The two-tab arrangement is also why the extension is a browser extension at all. A page script could not read the D&D Beyond sheet and write into a Roll20 tab; only something with access to both can.

Click a button on one side, roll on the other

The usage description is precise about the interaction. You click on the item you want to roll, whether that is initiative, a skill, an ability or saving throw check, a weapon or spell attack, a class or racial feat or trait, hit dice, a death saving throw, and so on.

When the D&D Beyond sheet shows information about the item you selected in its side panel, a Beyond20 button or B20 icon appears there. The extension picks up what was selected on its own and sends the roll to all Roll20 or Foundry VTT tabs open.

There is a second, more useful path. If a spell, item, action or feat description contains a dice formula such as 2d10 + 3, or a modifier formula such as + 3, that text is underlined and a B20 dice icon appears next to it. Clicking the formula or the dice makes the roll in the Roll20 tab.

That second path is the feature that changes how a session feels. Rather than picking an item from a list, you can read the description text and roll the number that is written there, which removes the step of finding the right entry in the VTT character sheet.

Quick settings that change depending on the tab

Clicking the Beyond20 button in the toolbar pops open the quick settings menu. The detail that matters is that the menu is different depending on whether you are on the VTT tab or the D&D Beyond tab, and it contains the per-character configuration.

That asymmetry is a reasonable design given what each side can do. On the D&D Beyond side the configuration concerns the character, and on the VTT side it concerns how the roll is delivered, and a single menu would have to mix settings that apply to only one of the two.

The per-character framing is the other thing to note. The settings are attached to a character rather than to the extension, which is what you would want if you play several characters, and the extension is used by groups where different people have different characters and different preferences about how rolls should be sent.

The options page in the repository is a separate file, options.html with its own options.css, and there is also a popup.html and a default_popup.html, so the extension has a toolbar popup, a full options page and a default variant of the popup.

Building it, and loading it unpacked

The build path is a two-step process in the source directory. You install the build dependencies with npm install, then build the files with npm run build.

The package manifest shows the pipeline behind that command. The build script runs a clean step and then a series of build steps, with separate targets for firefox and chrome, so the two stores get their own builds. The package step runs the build and then packages the artefacts, again with one target per browser, and it uses web-ext build with the version injected from the package manifest into the artefact filename. There is a third package target for the source itself, which uses git archive over a named list of paths.

The source archive list is a decent map of what the project contains: images, libs, src, package.json, options.html, options.css, manifest.json, manifest_ff.json, popup.html, gulpfile.js, default_popup.html, the README and both licence files. The manifest_ff.json is the Firefox variant of the extension manifest, which is how a single codebase ships to two browsers.

There are also start scripts that run the built extension in a browser with web-ext run, one for chromium and one for firefox, and the build itself is driven by a gulpfile.js at the root.

Developer mode installation, step by step

The documentation describes a manual install path for anyone who wants to run the extension from source rather than from a store.

The first step is to disable any existing Beyond20 installed from the Chrome or Firefox stores, since two copies would conflict. Then download the extension archive, either the Chrome or the Firefox one, from the latest release, and extract the zip into a directory of your choice.

For Chrome the steps are to open the Extensions page from the menu under More Tools, enable Developer Mode in the top right corner, click Load Unpacked, and select the directory where you extracted the extension. For Firefox the route is the about:debugging page, where you click Load Temporary Add-on and select the manifest.json file from the extension's directory.

The difference between the two reflects how each browser handles unpacked extensions. Chrome loads a whole directory, Firefox loads a single manifest, and the temporary nature of the Firefox add-on means it disappears when the browser restarts.

The release archives are published with a latest download link rather than a version number, so a developer install always gets the current build.

A Foundry VTT module, and a GPL codebase with borrowed assets

The repository contains an FVTT-module directory, which holds the Foundry VTT side of the integration, including a conditions subdirectory with its own licence file. That is a notable structural choice: the project is not only a browser extension, it also ships a module for the VTT itself.

The licence structure has three layers and each needs reading. The extension itself is released under the GPL v3 licence, with the LICENSE file at the root for details. The options page was copied in part from the D&D Beyond Toolbox extension, and the html and css files for that page are licensed under the MIT licence in a separate LICENSE.MIT file. The condition icons are for the most part taken from game-icons.net and are licensed under a Creative Commons CC-BY 3.0 licence, with each icon's source and licence recorded in the conditions LICENSE file.

The remaining assets are public domain or credited. The icon image is based on a public domain image from openclipart, downloaded from Wikimedia and modified. The roll badge icons were designed and created by Jerry Escandon. The donation icon is a public domain contribution by Fission Strategy, US, from The Noun Project, and the up arrow used in the screenshots page is a public domain image shared by OCAL on clker.com.

That mix of licences in a GPL project is normal and workable, but it is exactly the kind of thing to check before you redistribute the build.

Active releases, and a test that targets the dice parser

The maintenance record is healthy. The releases are v2.21.0 on 2026-09-17, v2.20.1 on 2026-06-08 and v2.20.0 on 2026-06-04, and the last push was on 2026-09-17, the same day as the newest tag. The project is not archived.

The version in the package manifest matches the newest release, 2.21.0, and the licence field there records GNU. The manifest also carries a homepage pointing at the project site and a bugs URL pointing at the issue tracker.

The test setup is narrow and telling. The test script runs a single file, node test/dice_regex.test.js, and there is a test directory at the root. So the automated testing covers the dice formula recognition, which is the part of the extension most likely to break silently: if the regular expression that finds 2d10 + 3 in a description stops matching, nothing crashes, the icons simply stop appearing. A regression there would be invisible without a test.

The remaining tooling in the manifest is the gulp pipeline and its plugins, gulp-concat, gulp-rename, gulp-clean, cross-var for the version substitution in artefact names, and web-ext for building and running the extension, plus npm-run-all for sequencing the clean and build steps.

Editorial conclusion

Adopt Beyond20 if you play on Roll20 or Foundry VTT with a character managed on D&D Beyond and you are tired of transcribing modifiers, because the extension removes that step and adds formula detection on top. Do not adopt it if you use a different virtual tabletop, or if you are on a platform that has no store listing, since the extension is distributed through the Chrome Web Store and Firefox Add-ons only. Before you install, check three things: that you run Chrome or Firefox rather than another browser, since both store listings are named in the documentation, that you understand it works across two separate tabs rather than injecting into the VTT itself, and that the GPL v3 licence suits how you intend to use and redistribute it.

Frequently asked questions

How do I install Beyond20?

On Chrome, install it from the Chrome Web Store. On Firefox, install it from Firefox Extensions. Both listings are linked in the project documentation, and there is a developer mode path that loads the extension unpacked from a downloaded zip.

How does Beyond20 send rolls between D&D Beyond and Roll20?

You open the virtual tabletop in one tab and your D&D Beyond character sheet in another. When you select an item on the sheet, a Beyond20 button or B20 icon appears in the side panel, and the roll is sent to all Roll20 or Foundry VTT tabs that are open.

Can Beyond20 roll dice formulas found in a description?

Yes. If a spell, item, action or feat description contains a dice formula such as 2d10 + 3 or a modifier formula such as + 3, the text is underlined and a B20 dice icon appears next to it, and clicking it makes the roll in the Roll20 tab.

How do I build Beyond20 from source?

Run npm install and then npm run build in the source directory. The build script runs a clean step and then separate firefox and chrome build targets, and there are start scripts that run the built extension with web-ext run.

What licence is Beyond20 released under?

The extension is released under the GPL v3 licence, with the LICENSE file at the repository root. The options page html and css are under the MIT licence in a separate LICENSE.MIT file, and the condition icons are under a Creative Commons CC-BY 3.0 licence with sources listed in the conditions directory.

Official sources

  1. Issues
  2. kakaroto/Beyond20 on GitHub
  3. License: GPL-3.0
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/kakaroto-beyond20.svg)](https://hysenlabs.com/projects/kakaroto-beyond20)

Was this useful?