Register

Release 14.370

Version 14 Stable

November 02, 2026

Foundry Virtual Tabletop - Version 14 - Stable 12 Release Notes

Foundry VTT Version 14 Stable 12, as shown with the newly released alpha version of the Daggerheart Core Rulebook.
Foundry VTT Version 14 Stable 12, as shown with the newly released alpha version of the Daggerheart Core Rulebook module.

We strongly recommend updating to today's release of Foundry VTT Version 14 Stable 12 (14.370) even more than we usually do. If you are already on Version 14, you should update to grab some important security fixes for upstream software (node.js) that are included in today's release.

On a more fun note, along with the usual bug squashing today's release also includes some nice UI improvements!

User Password Configuration
Players can now set and change their own passwords directly in their own User Configuration dialog.
New Scene Region (and Measured Template) Shape: the Grid Space
The new Grid Space Tool allows you to select individual Grid Spaces that you want to include (or exclude) in a Region, allowing granular control over what is included. With Measured Template Mode deactivated, GMs can even edit existing Regions and create new Grid Space Shapes that are Holes, allowing possibilities like a Careful Fireball to exclude allies or to rule that the tipped over table does, in fact, provide total cover.

INFO: 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.

Breaking Changes

We have decided to classify one change to CalendarData#onUpdateWorldTime as a breaking change for additional visibility even though it is a minor change and technically a bug fix. We do recognize that some users may have already created implementations based on its current, incorrect state and we apologize for any disruption here. If you might be affected by this change, please see the issue below for more information.

  • Fixed a bug where CalendarData#onUpdateWorldTime was not receiving the deltaTime parameter as expected. (14864)

New Features

Documents and Data

  • adventureImports and other select core settings are now exposed before the init hook so that packages can condition their initialization and configuration depending on the game environment. (14849)
  • Added Document _stats for Levels.(14916)
  • Added a new Token#_createMesh method and createTokenMesh hook. (14942)

Applications and User Interface

  • In the Compendium sidebar tab, added a tooltip to the eyeball icon that displays when the Compendium pack is set to be hidden from Players or Trusted Players. (9983)
  • Improved invitation links by clarifying the scope of the refresh button and causing it to refresh all addresses. (14840)
  • In the Invitation Link dialog, the "Internet" entry is now explicitly called out as the IPv4 address. (14841)
  • If one is not otherwise specified, a TileDocument#name is now automatically created in _preCreate based on the texture's filename.(14918)
  • Added functionality to the User Configuration dialog to allow Users to set, wipe, or change their own password without assistance from the GM. GMs can still set user passwords as before in the User Management screen, but they now also have the additional option to use the new fields in the User Configuration dialog to easily wipe or change individual user passwords. (5409)
  • Added a new "Draw Grid Spaces" tool to the Region Layer which allows you to create Shapes that add or remove geometry to Regions one grid space at a time. The first grid space selected is the "origin" of the region, and adjacent grid spaces automatically combine. (14924)
  • In the Region Placeables tab, GMS now always see all Player-owned regions grouped together under a dedicated category for convenience. (14327)

Package Development

  • After resetting the user passwords for a World from the Setup screen, the World now first launches into User Permissions Screen to allow you to configure passwords again to match the behavior when creating a new World. (14863)

API Improvements

Documents and Data

  • Allowed SceneManager#_loadSceneTextures to be async to help determine the textures to load. (14911)

Applications and User Interface

  • Multi-checkbox fields that are created using the formGroup helper now have a columns property with a default value of 3 columns. (12772)
  • Added support for multi-root ProseMirror inserts. (14922)

The Game Canvas

  • Added CONFIG.Region.templateModeConfig to allow systems to configure Measured Template Mode. (14101)
  • Added a new CONFIG option to make all shapes created in Measure Template Mode grid-based (CONFIG.Region.templateModeConfig.gridBased). (14386)

Dice and Cards

  • Added DiceTerm#minValue, DiceTerm#minResult, and DiceTerm#maxResult. (14905)
  • Closing the Roll Resolution dialog with the X button no longer accepts the entered values without checking whether they are within the possible range. (14906)

Bug Fixes

Documents and Data

  • Fixed a bug where NumberField values of null that were prepared as Infinity could not be set by ActiveEffects. (14799)
  • Fixed a bug where the choices option was ignored when rendering a SetField's input. (14746)
  • Fixed a bug where the Macro editor lost scroll position when the Execute Macro was clicked after modifications were made. (12955)
  • Fixed a bug with ClientDocument#toCompendium() where _clearFieldsRecursively was incorrectly clearing the base document rather than the child object. (14847)
  • Ensured that Data Models in EmbeddedDataField#_updateDiff are once again always constructed with a parent. (14398)
  • Fixed a bug where DataModelValidationError#getAllFailures always returned {}. (14489)
  • To resolve an issue where non-GMs could fail to import from a compendium with "replace" enabled, the ownership of existing documents is now preserved inside compendiums. (14450)
  • Fixed a bug that could occur with Journal Pages that contained secret blocks. If such a Journal Page or its parent Journal Entry were updated (such as by hiding or revealing the secret block) while showing the entry to players, the entire Journal Page incorrectly displayed as blank for players with less than Observer permissions. (14678)
  • Updated the core migrateData implementations so that they now correctly handle ForcedReplacement data operators. (14854)
  • VFXReferenceObjectField can now to omit the deltas object without causing an error. (14909)
  • Fix a bug in Combatant#_preDeleteOperation which incorrectly referenced static Combatant.turn instead of Combat#turn. (14912)
  • Fixed a bug where a pack's index would become polluted upon the actual retrieval of the document if its indexed fields included embedded paths. (14576)
  • Fixed a bug where no pages were rendered when viewing a Journal Entry located in a compendium and the user only had LIMITED ownership. (14926)
  • Fixed a bug where ActorDelta#getUserLevel was not returning the compendium's permission level if the ActorDelta was inside a compendium. (14927)

Applications and User Interface

  • Fixed a bug where the ESC key closed all applications. Applications that are popped out to another browser window are now correctly kept open. (14694)
  • Fixed a bug where dragging a translation handle could also move other controlled objects that were locked. (14832)
  • Fixed a bug where Scroll position was not retained in the Token HUD. (14640)
  • Fixed a bug where the Placeable Palette was not re-rendered after Levels were created, updated, or deleted. (14831)
  • Fixed a bug where the Chat Message Mode buttons stole keyboard focus when they were clicked. Also resolved the same issue for the Token HUD's Assign Status and Movement Action buttons as well. (13608)
  • Fixed some issues with handling Placeables in invalid Levels. (14834)
  • Fixed a bug that occurred when creating a new World using an Adventure modules quickstart where the world-id was incorrectly shown as the data path. (14837)
  • Fixed a bug where calling Sound#play while the sound was stopping had no effect. (14839)
  • Fixed a bug where Sound#_stop never called AudioBufferSourceNode#stop. (14763)
  • Fixed a bug where freehand and polygon Drawings could not be controlled by clicking them with the mouse. (14682)
  • Prevented an error that occurred when starting to drag a file in the File Picker with tileSize: false. (14536)
  • Fixed a bug where Sound#stop did not actually stop the sound if the sound was paused. (14844)
  • Fixed the CSS for TOC header indentation levels of level2 and level3 Journal Pages. (14846)
  • Fixed a bug where Journal Page links did not always scroll the table of contents to the selected page. (14793)
  • Fixed a bug where the focus outline of <code-mirror> rendered over the autocompletion tooltip. (14856)
  • Fixed a bug where the "Largest Texture" line in the Support Details report could contain an incorrect size. (12824)
  • Fixed a bug where Token targets were cleared when switching to a different Level in the same Scene. (14869)
  • Fixed a bug where the Token HUD did not open after right-clicking a Token located in a different Level. (14870)
  • Fixed a bug where double left- or right-clicking a Token on an un-viewed Level did not open its Actor's Sheet or Token Configuration dialog as expected. (14681)
  • Corrected an error with icon names by replacing modfiy with modify. (12995)
  • Fixed a bug where the "Filter by Level" state was not shared between different placeable types in the Placeables tab. (14328)
  • Fixed a bug where the "Filter by Level" filter was not cleared when the viewed Scene was changed or when a Level in the filter was deleted. (14915)
  • Resolved an issue where the CameraViews interface was obscured by the collapsed sidebar when it was docked to the right side of the interface. (13975)
  • Fixed a bug where the icon displayed in Journals for linked Playlists no longer changed to indicate that the Playlist was currently playing. (14336)
  • Fixed a bug where a JournalEntryPage sheet could not be moved or resized if it was the child of a parent detached JournalEntry sheet and the main Foundry VTT window was minimized. (14440)
  • Fixed a bug where deleting a folder of compendium documents caused the folder's contents to display unfoldered in the root of the parent compendium instead of deleting the contained compendiums as expected. (14233)
  • Fixed a bug where it was still possible to cut & paste a locked placeable object in certain circumstances. (13293)
  • Fixed a bug with folder filtering where folders that were somewhat adjacent to matching folders were included in the results, even though they did not match the search filter themselves. (14471)
  • Fixed a bug where ChatLog#updateTimestamps stopped at the first unresolvable message (return instead of continue). (14929)
  • Resolved an issue where <input type="url"> was not styled consistently with other inputs. (14937)
  • Fixed a bug with the Regions Placeables Tab where the eye icon (indicating that a region is "visible to some players") did not always display as expected for GMs. (14938)
  • Player-authored note should always show the eye icon ("Visible to some players") for the GM in the notes tab even if the a journal (page) is configured without player access. (14939)

The Game Canvas

  • Fixed a bug where fog failed to save for previously explored Scenes after resizing them. (14532)
  • Fixed a bug where setting the VFX particle generator container (VFXParticleGeneratorData#config.container) could crash the canvas. (14534)
  • Fixed some errors that were caused by placeable updates occurring while the Scene was still loading. (14845)
  • Fixed a bug where players with at least two owned Tokens on a Scene could see hidden tokens after the scene had loaded. (14880)
  • Fixed a bug where the resource bar was not redrawn upon first update of an unlinked token in a session. (14878)
  • Fixed a bug where VFXEffect#play did not resolve immediately when its timeline was empty. (14907)
  • Fixed a bug where special effects for Ambient Sounds (such as the lowpass filter) incorrectly persisted when moving a Token out of the sound's radius and into the radius of another Ambient Sound that was configured to use the same audio file but is not applying any special effects. (11963)
  • When dropping a Tile from the FilePicker, the realized texture width and height is now used instead of the baseTexture dimensions. (14917)
  • Fixed a bug where programmatically releasing the control of a Token that was being dragged did not cancel the drag operation. (14923)
  • Fixed a bug where player-authored Notes in the Note Placeables tab were not always showing the eye icon to the GM ("Visible to some players") when the associated Journal Page was configured to not allow Player access. (14939)
  • Prevented an error that occurred when the client still attempted to create initial Chat Messages even if the first User to login into a new World was not a GM. (14944)
  • Compendium pack does not become visible/hidden in sidebar to other users when the ownership of the pack is changed such that the pack now should be visible/hidden. (14945)

Package Development

  • Fixed a bug where creating a new World via the Quickstart method of an incompatible module was not prevented and failed after world creation with an error. (14458)
  • Fixed a bug where the confirmation dialog created when creating a Snapshot underestimated the disk space required. (14776)
  • Fixed a bug where Gamemaster users that were not correctly authorized as an administrator user received an 401 error when attempting to edit a World's configuration. (14933)

Dice and Cards

  • Fixed a bug where synchronous evaluation of coin and fate dice terms yielded incorrect results. (14857)
  • Fixed a bug where Manual Fate dice rolls (df) did not accept correct roll results. (14547)
  • Fixed a bug where the updateData parameter for Cards#pass was merged into the Card data without applying operators, causing instances of _del and _replace to linger instead of being processed against the source data of the Card object. (14627)
  • Fixed a bug where coin and fate die types were missing from the Dice Configuration dialog. (14860)
  • Fixed a bug where certain Dice modifiers were not working correctly: XdYk0, XdYkX, XdYd0, XdYdX, XdYcs, XdYcf, XdYdf, XdYsf. (14581)
  • Rolling Xd0 fails with an error with manual fulfillment. (14871)
  • Fixed a bug where rolling did not function as expected with (-X)dY terms. (14881)
  • Fixed a bug where ParentheticalTerm did not serialize its inner roll property. (14900)

Localization and Accessibility

  • Added missing localization in the tooltip for selecting a page category in the text editor. (14931)

Other Changes

  • Fixed a bug where the areas of wall-constrained Regions could become empty when viewing a different Level. (14835)
  • Fixed a bug where Shape constraints were not re-computed when a wall-constrained region was moved to a different level. (14836)
  • Fixed a bug where changeTab calls made during rendering could block access to that tab. (14815)
  • Fixed a bug where foundry.utils.timeSince always returned an erroneous value when it was provided with a timestamp over a month prior. (14512)
  • Adventure configuration now uses the Adventure Importer V2 by default when an Adventure is initially created. (14515)
  • Fixed a bug where the World time was excessively precise. The World time is now an integer value instead. (14866)
  • Protected the FilePicker against the absence of an actively drawn scene. (14908)
  • Fixed a bug where ApplicationV2 Item/Actor sheets with width: "auto" prevented the DocumentSheetConfigV2 from moving away from the left side of the window. (12007)
  • Fixed a bug where collectionSortingModes setting was incorrectly using directory collection class names as keys. (12621)
  • Fixed a bug where the ProseMirror editor threw an error if it was toggled while its content was scrolling. (13795)
  • Fixed a bug where the Chat Log locked up at the top of the log instead of scrolling as expected when the log was filled with messages. (14435)
  • Fixed a bug where you could not expand the Roll of a popped-out Chat Message. (14457)
  • Fixed a bug where FilePicker favorites did not retain the correct respective path for each s3 bucket. (13307)
  • Fixed a bug where the onRender hook for custom enrichers was incorrectly called an extra time when the enriched element was moved. (13558)
  • Fixed a bug where messages containing iframes could crash Foundry VTT. (14517)

Documentation Improvements

  • Corrected the documentation of TimeComponents#hour to correctly state that it contains the "number of hours completed within the day" rather than the "number of hours completed within the year." (14858)
  • Corrected the documented type of Notification#update. (14934)
  • Fixed the documentation for BaseGrid#getCenterPoint so that it no longer incorrectly claims that the center point lies in the plane of the bottom face of the 3D grid space. (14941)