Register

Release 14.369

Version 14 Stable

October 08, 2026

Foundry Virtual Tabletop - Version 14 - Stable 11 Release Notes

Release Notes for Foundry Virtual Tabletop Version 14
Welcome to the Foundry Virtual Tabletop update notes

We are excited to announce another update, Foundry VTT Version 14 Stable 11! This release is on the larger side, and in addition to containing numerous small bugfixes it also brings some new and interesting features!

The biggest of these new features is the automatic generation of SSL certificates, taking something that previously required some technical know-how to setup and smoothing out the process considerably. See the Update Highlights section below for more information.

While this is categorized as a stable release there is always a possibility of unexpected bugs or compatibility issues. As with any time you update the core software, be sure to perform a complete backup of your user data to minimize any risk of data loss.

Update Highlights

While some nice quality of life and API improvements are also included in this patch, native HTTPS support is by far the biggest new feature.

Automatic certificate generation

These days, more and more newer browser features and APIs require a secure context. The built-in A/V functionality of Foundry VTT runs on one of these APIs, for example. Configuring your Foundry VTT instance to run in this secure context has typically required some technical knowledge or following somewhat lengthy guides. With this release, a simple one-click workflow handles that whole process for you.

This process still comes with various networking challenges and limitations, but it is now possible for the software to automatically provision a certificate signed by a trusted third-party, non-profit organization, LetsEncrypt. Even if that fails, Foundry VTT will still automatically provision a self-signed certificate for you which offers the same secure context benefits, only without the same level of automatic browser trust.

Foundry VTT has offered the ability to provide your own SSL certificates for many years now, but this can be a rather inconvenient process and was often a significant barrier.

In Version 14 Stable 11, you now have the ability to conveniently generate an SSL certificate right within Foundry VTT, making it much easier to add (optional) native HTTPS support for your games. When this is properly configured, the invitation links that you send to your players will start with HTTPS instead of HTTP and their connections to your server will be encrypted.

To host connections via HTTPS anywhere on the web, an SSL certificate is needed for security. Foundry VTT is no different, but it can now attempt to automatically set one up for you for free by requesting a "signed bare-IP certificate" from a trusted certificate authority (courtesy of a non-profit organization called LetsEncrypt). If this is not successful, Foundry VTT then creates a "self-signed" certificate as a fallback, which works but has some drawbacks.

Known Limitations

This new feature automatically creates your SSL certificate for you which makes things much easier, but there are some limitations based your network and you will likely need to do some additional https://foundryvtt.com/article/port-forwarding. You can use the LetsEncrypt external certificate in the following circumstances:

IPv4 and UPnP
Most users (especially in the US) have IPv4 internet, and UPnP is a common form of automatic networking but it may not be available to you. In ideal circumstances, if your router supports UPnP, your instance will be automatically provisioned with a LetsEncrypt certificate with no further work required from you.
IPv4 and Port Forwarding(most US users)
In this case, you can generate an SSL certificate from within Foundry VTT, then add an additional explicit port forwarding rule for port 80. You will be required to open port 80 in your firewall as well.
IPv6 and Port Forwarding
You can use the external certificate if your ISP provides IPv6 and you have opened port 80 & 30000 in both your router and your operating system's firewall (like WIndows Defender).

Note: As when self-hosting, port forwarding is not possible if your ISP is using something called CGNAT.

If you cannot use the external certificate, Foundry VTT will still automatically create a "self-signed certificate" that will allow HTTPS connections, but your players will see a somewhat scary "back to safety" message when they try to connect which may be undesirable, but can be safely ignored.

Creating the SSL Certificate

First, please remember that it is absolutely not necessary to enable HTTPS and you can continue to run your games exactly like you always have. If you do decide to check it out, though, please read through the information here carefully.

To host your games using HTTPS, you will need to configure the new SSL Certificate settings in the Configuration menu of the Setup screen.

V14 Stable 11 HTTPS Setting 2
The new SSL Certificate Settings, which are necessary to enable HTTPS connections

A full Knowledge base article on how to set up this feature is coming soon, so keep an eye out.

New Features

Architecture and Infrastructure

  • Consider providing HTTPS natively with both self-signed and CA-provided certificates. (12702)

Applications and User Interface

  • Like their more privileged brethren, limited-ownership users are now permitted to use the Draw Result button in roll tables (but only when drawing with replacement). (14214)
  • Added a new filter to the Placeable tab that filters out locked or hidden objects. (14460)
  • Fixed a bug where the (Un)Locked status of a Region was not accessible in its configuration menu. (14518)
  • In the Placeable tab, changed the filters for boolean values (such as Restricts Light/Weather, Is Darkness Source, etc.) from checkboxes to select menus that have the values Any/Yes/No. This change allows the filters to hide Placeables with negative values. (14791)
  • Improved the tooltip text for disabled Upload controls in certain contexts. (13100)
  • Added the ability to toggle the locked state of popped-out compendiums. (12497)
  • Improved invitation links by automatically checking for IPv6 reachability and explicitly labelling the IPv4 link. (14714)
  • Improved the logic for determining the IP address/interface so that invitation links now contain a better guess at the local IP. (6555)

Package Development

  • Cleaned manifest data is now used for signature generation. (14039)
  • Removed the recommendation to install the Simple Worldbuilding system. (14777)

API Improvements

Applications and User Interface

  • Added support to ContextMenu so that it can now set a configured CSS class. (12854)

Bug Fixes

Documents and Data

  • Fixed a bug where Placeables objects were not correctly repositioned when the Scene was resized. (14159)
  • Prevented errors that were thrown during ModifyMovementCostRegionBehaviorType preparation in /stream view because movement actions were not initialized. (14778)
  • Fixed a bug where RollTableSheet's table-element styling polluted the table elements of drawn results. (13356)
  • Fixed a bug where getSubFolders produced incorrect result when called on a Compendium Pack's Folder instance. (13397)
  • Restored the conditional assignment of Combat#previous so that it can provide better tracking when prior turns have combat events dispatched. (14775)
  • Fixed a bug where Region shapes were not properly scaled when the Scene was resized. (14158)
  • Fixed a bug where NumberField#_castChangeDelta always coerced null to 0, even if field was nullable. (14794)
  • Prevented a race condition involving [.pageId#anchor] links. (14755)
  • Fixed a bug where changes to roll-table descriptions could not be saved using the in-editor Save button. (13756)
  • Fixed various misspelled icon file names and deleted duplicated icons. (14802)
  • Fixed a bug where ObjectField#clean did not migrate legacy deletion/replacement keys. (14806)
  • Fixed a bug where ForcedReplacement proxy did not trap deleteProperty. (14808)
  • Fixed a bug where updating any field in _stats reset the _stats.createdTime to the current time. (14812)
  • Fixed a bug where ArrayField/SetField#_castChangeDelta did not cast Array deltas correctly. (14813)
  • Fixed a bug where attempting to edit a document in a locked Compendium Pack caused the error to be logged twice in the console. (14814)
  • Fixed a bug where ForcedReplacement did not always fully replace embedded collections as expected. (14373)

Applications and User Interface

  • Fixed a bug where the document-tags element threw an error when attempting to add an embedded document from within a Compendium Pack. (13395)
  • Fixed a bug where the Force Snap To Grid Vertices toggle did not affect translation handles. (14708)
  • Fixed a bug where TableResultConfig did not save the range for the result. (14750)
  • Fixed a bug where <range-picker> did not retain focus after rendering (with handlebars and AppV2). (13553)
  • Fixed a bug where AudioBufferCache#expire unlinked entries but never deleted them from the Map. (14723)
  • Fixed a bug in Dialogs where an input of type file was stripped of the multiple attribute. (13409)
  • Fixed a bug where context menus attached to buttons were always automatically disabled because of a core CSS rule that blocked pointer events. (12786)
  • Fixed a bug where the Video page type did not provide a scrollbar when one was needed. (14774)
  • Fixed a bug where Players were incorrectly able to (un)lock and hide their Tokens via the Tokens tab. (14780)
  • Fixed a bug where OS/Browser theme changes overrode the configured theme. (12265)
  • Fixed a bug where camera controls were cut-off for un-docked cameras when their nameplates were hidden. (13396)
  • Embedded document sheets don't get re-rendered when the pack their parent document is in changes lock state. (11972)
  • Fixed a bug where Esc also closed un-docked camera views. (13399)
  • Deleting messages from the chat log does not trigger loading previous batches of messages. (11510)
  • Fixed a bug where the order of Combats in the Combat Tracker could change after reloading. (14541)
  • Fixed a bug with Scene Navigation where the viewed level was not automatically scrolled into view when the Scene was viewed. (14692)
  • Fixed a bug where FilterMenus became permanently displayed in certain circumstances. (13884)
  • Fixed a bug where Active Effects in Compendium Packs do not have the Apply Effect to Actor option available in their configuration dialog. (14817)

The Game Canvas

  • Fixed a bug where Token movement waypoint positioning could incorrectly toggle door states. (14737)
  • Fixed a bug with the Canvas where the current view position and initial view position were not adjusted when the Scene was resized. (14533)
  • Fixed a bug where Token visibility was not updated immediately after changing th Actor's permission to Observer. (14766)
  • Prevented CanvasDocument#_onDeleteOperation from throwing an error when the canvas was disabled and consequently the documents[0].layer was null. (14663)
  • Fixed a bug where Ambient Light sources emitting darkness did not render in Chromium browsers and could freeze Firefox browsers if they touched a Wall. (14767)
  • Fixed a bug that occurred when a player controlled no Tokens where only their Owned Tokens were listeners. Now the Tokens they can Observe are also listeners (14790)
  • Fixed a bug where Token bars did not refresh after updating after they were changed via code. (14730)
  • Fixed a bug that occurred with Token Vision was enabled where players were incorrectly able to perceive sounds from the perspective of Tokens that did not have vision enabled. (14803)
  • Fixed a bug where attempting to import a simple Scene with at least one Wall threw an error and prevented the Scene from rendering until manually refreshed. (14810)
  • Fixed a bug where the Teleport Token transition animation played again when the canvas was re-drawn. (14811)
  • Fixed a bug where Actor#getDependentTokens was incorrectly still returning the Tokens of ephemeral/unpersisted Scenes when called with {concreteOnly: true}. (14830)

Package Development

  • Fixed a bug where Compendium Packs did not appear in the declared order when the sorting for packFolders was set to manual. (10542)
  • Reloaded module with pack folders load unfoldered when root folder deleted . (11800)
  • Fixed a bug where a World still loaded incompatible related modules without warning or immediate issue. (13525)
  • Fixed a bug where updates to a module or system could leave its set of documentTypes stale and cached. (14796)
  • Fixed a bug that occurred while editing modules where users were unable to delete relationships. (13709)

Dice and Cards

  • Fixed a bug where deterministic PoolTerms always incorrectly returned a result equal to the sum of all terms in the pool. (11599)

Localization and Accessibility

  • Added missing localization for the text displayed when clicking the “Return to Setup” button. (14666)
  • Fixed an incorrect error notification that displayed when the confirmation code of a Restore Backup/Snapshot request was invalid. (14772)
  • Fixed localization for DOCUMENT.Token PrototypeTokenConfig#_canRender. (14679)

Other Changes

  • Prevented the Display Scrolling Text Behavior from throwing an error when it was configured to only fire once. (14742)
  • 1ms future chat timestamp renders as “11m 364d ago”. (14664)
  • Fixed a bug where AdventureExporter could silently duplicate an Adventure under a new ID. (14765)
  • Fixed a bug where menu entries passed incorrect click targets to _onClickAction. (14315)
  • Fixed a bug where registerSheet or unregisterSheet could create invalid entries that may fail later when it was called with requested types that were not defined in the World. (14798)
  • Fixed a bug (again) where the same user could log in twice without disconnecting the first session and without displaying a warning message. (14728)
  • Fixed a bug with ContextMenu where eventListeners were non-functional when an empty string was passed as the selector. (13781)
  • Fixed a bug where Application bounds clamping was calculated incorrectly for Applications with a scale value set. (13885)
  • Fixed a bug where setProperty(object, key, undefined) did not set the property if the key did not already exist in the object. Fixed a bug where entries with undefined values in flattened objects disappeared after expandObject/expandObjectInPlace. (14809)
  • Fixed a bug where the Allow Choice option of Regions with the Teleport Token behavior prevented players from teleporting across multiple scenes. (14816)
  • Fixed a bug where errors during database operations could put the server document cache into an invalid state. (14820)
  • Fixed a bug where RegionBehavior#active was still true when BEHAVIOR_DEACTIVATED was triggered during Scene deletion. (14829)

Documentation Improvements

The Game Canvas

  • Fixed a bug where VisionMode#animate was a property of type (this: PointVisionSource, dt: number) => void instead of an instance method. (13227)

Other Changes

  • Made the options of DocumentCollection#importDocument optional. (14635)
  • Added the missing documentation for SceneData#levels and SceneData#initialLevel. (14797)
  • Fixed the comments for CONST.EDGE_SENSE_TYPES which were previously reversed. (14825)