November 02, 2026
Foundry Virtual Tabletop - Version 14 - Stable 12 Release Notes
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#onUpdateWorldTimewas not receiving thedeltaTimeparameter as expected. (14864)
New Features
Documents and Data
adventureImportsand other select core settings are now exposed before theinithook so that packages can condition their initialization and configuration depending on the game environment. (14849)- Added Document
_statsforLevels.(14916) - Added a new
Token#_createMeshmethod andcreateTokenMeshhook. (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#nameis now automatically created in_preCreatebased 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#_loadSceneTexturesto be async to help determine the textures to load. (14911)
Applications and User Interface
- Multi-checkbox fields that are created using the
formGrouphelper now have acolumnsproperty with a default value of 3 columns. (12772) - Added support for multi-root
ProseMirrorinserts. (14922)
The Game Canvas
- Added
CONFIG.Region.templateModeConfigto allow systems to configure Measured Template Mode. (14101) - Added a new
CONFIGoption to make all shapes created in Measure Template Mode grid-based (CONFIG.Region.templateModeConfig.gridBased). (14386)
Dice and Cards
- Added
DiceTerm#minValue,DiceTerm#minResult, andDiceTerm#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
NumberFieldvalues ofnullthat were prepared asInfinitycould not be set byActiveEffects. (14799) - Fixed a bug where the
choicesoption was ignored when rendering aSetField'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_clearFieldsRecursivelywas incorrectly clearing the base document rather than the child object. (14847) - Ensured that Data Models in
EmbeddedDataField#_updateDiffare once again always constructed with a parent. (14398) - Fixed a bug where
DataModelValidationError#getAllFailuresalways 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
migrateDataimplementations so that they now correctly handleForcedReplacementdata operators. (14854) VFXReferenceObjectFieldcan now to omit the deltas object without causing an error. (14909)- Fix a bug in
Combatant#_preDeleteOperationwhich incorrectly referenced staticCombatant.turninstead ofCombat#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
LIMITEDownership. (14926) - Fixed a bug where
ActorDelta#getUserLevelwas not returning the compendium's permission level if theActorDeltawas 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-idwas incorrectly shown as the data path. (14837) - Fixed a bug where calling
Sound#playwhile thesoundwas stopping had no effect. (14839) - Fixed a bug where
Sound#_stopnever calledAudioBufferSourceNode#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#stopdid not actually stop the sound if the sound was paused. (14844) - Fixed the CSS for TOC header indentation levels of
level2andlevel3Journal 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
modfiywithmodify. (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
CameraViewsinterface 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
JournalEntryPagesheet could not be moved or resized if it was the child of a parent detachedJournalEntrysheet 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#updateTimestampsstopped at the first unresolvable message (returninstead ofcontinue). (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#playdid 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 thebaseTexturedimensions. (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
updateDataparameter forCards#passwas merged into the Card data without applying operators, causing instances of_deland_replaceto 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
Xd0fails with an error with manual fulfillment. (14871) - Fixed a bug where rolling did not function as expected with
(-X)dYterms. (14881) - Fixed a bug where
ParentheticalTermdid 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
changeTabcalls made during rendering could block access to that tab. (14815) - Fixed a bug where
foundry.utils.timeSincealways 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
FilePickeragainst the absence of an actively drawn scene. (14908) - Fixed a bug where
ApplicationV2Item/Actor sheets withwidth: "auto"prevented theDocumentSheetConfigV2from moving away from the left side of the window. (12007) - Fixed a bug where
collectionSortingModessetting was incorrectly using directory collection class names as keys. (12621) - Fixed a bug where the
ProseMirroreditor 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
FilePickerfavorites did not retain the correct respective path for each s3 bucket. (13307) - Fixed a bug where the
onRenderhook 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#hourto 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#getCenterPointso that it no longer incorrectly claims that the center point lies in the plane of the bottom face of the 3D grid space. (14941)