May 05, 2026
Foundry Virtual Tabletop - Version 14 - Stable 3 Release Notes
We are extremely proud to announce the release of Foundry Virtual Tabletop Version 14 Stable 3 (14.361)! This is the second Stable update patch for Version 14, and it brings over 100 combined bug fixes and iterative improvements!
Because this is a "minor" patch update, if you already installed Version 14 Stable 1 (14.359) or Stable 2 (14.360), you will not need to do a complete reinstallation.
WARNING: 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.
New Features
Documents and Data
- The Change Level behavior can now restrict the movement action(s) used to change the level. (14097)
- Added option to include or exclude Tokens in a Region if they are located at that Region's top elevation (defaults to excluded). (14299)
- Improved the behavior when deleting a Level. Deleting a Level now also deletes all Tokens in it and all other placeables that only exist within that Level. (14090)
- Added a new
Combat#namefield which allows combat encounters to be assigned a name. If set, this name is now displayed at the top of the combat tracker. (14302) - Added support for including a Rollable Table's description in its
@Embedrepresentation. (14310) - Fixed a bug where
AdventureImporterV2did not hydrate itsdocumentproperty, onlyadventure. (14334)
Applications and User Interface
- You can now begin a document drag-and-drop operation by dragging the Document UUID Link button in any
DocumentSheetV2header. (10825) - Changed the icon of the "Toggle Visibility State" in the Token HUD from the "mystery man" icon to
fa-eye( )/fa-eye-slash( ) for consistency with the icons used in the Combat Encounters tab. (14106) - The Change Level and Teleport Token behaviors are now allowed until the token exits their region. (14184)
- All foreground textures above surfaces are now occluded while the Highlight Objects key is pressed ( ALT by default). (14232)
- Walls that block neither movement, sight, light, or sound are now colored gray and grouped in the "Blank Walls" category of the Wall layer controls. (14244)
- The Lock/Hide/Delete context menu option in the Placeables tab now can now lock or hide all controlled placeables. (14256)
- Renamed the "Game Settings" sidebar tab to "Settings". (14098)
- Added the "Duplicate" context menu option to entries in the placeable tab. (14242)
- In the Prototype Token Configuration dialog, the Token image is now displayed next to the image path for convenience. (10317)
The Game Canvas
- Restored the pre-V14 snapping behavior of the Polygon drawing tool. (14227)
- Added optional
shaderClasssupport toParticleGenerator. (14241) - Locked placeables can no longer be changed using the Placeables Palette. (14223)
- Prevented surface exposure from incorrectly revealing areas that were neither visible nor explored in certain cases. (14270)
- Ensured that a dropped token does not end up above the ceiling of the viewed level. (14298)
- Added shape sampling support to
ParticleGeneratorwhich allows many new possibilities possible visual effects. (14306) - Changed the way the elevation of the token affected by a Change Level behavior is handled. Instead of maintaining the relative elevation to the token's level, the token now always arrives at the base elevation of the destination level. (14322)
- An exception has been added to the way occlusion is applied by surfaces that are located at the top of three-dimensional Regions. The occlusion is now only applied if the Token is also at or above the Region's bottom elevation. (14325)
- Fixed a bug where a scene's surfaces were not updated when the scene was not viewed and a Define Surface behavior was activated, deactivated, or if its boundary was changed. This caused
Scene#getSurfacesto return incorrect results. (14331)
Security
Foundry VTT now serves HTML files with a "text/plain" content type and such files can still be used in downstream processing like template rendering. However, as a security precaution when static HTML files are accessed directly by the Electron client or browsers they will no longer render as HTML.
Note: Rendering served client-side HTML directly was never an intended workflow, but certain rather unorthodox modules or systems may be potentially affected by this change.
Package Development
- Added information about the verified version of packages to the Install Module and Install System dialogs. (12932)
Localization and Accessibility
- Updated combat-related labels in favor of "Combat" or "Combat Encounter" instead of "Encounter". (13702)
Other Changes
- Updated most NPM dependencies to the latest versions. (14301)
API Improvements
Documents and Data
- Added an API to the
SceneManagerto allow configuring the available levels. (14234)
Applications and User Interface
- To reduce clutter in the developer's console, the "Synchronized Server Time" log message is now sent as a verbose log message rather than a standard log message. It is now also gated behind setting
CONFIG.debug.timetotrue.(14142) - Added a duration label for the total duration of the active effect, not just time remaining. (14220)
The Game Canvas
- Added an optional origin field to the
VFXSingleImpactComponentwhich auto-rotates the impact sprite appropriately. (14198) - Added the
preCommitoption toRegionLayer#placeRegion(s)andTokenLayer#placeTokens, which can be used to cancel the creation of the tokens or regions or any other necessary pre-placement modifications. (14202) - Limited the ability to trigger occlusion/fading via hovering the cursor over a surface/tile to occur only in visible or explored areas. (14269)
- To improve draw order in leveled scenes,
DoorMesh#sortLayeris now set to toSCENEand both thesortandzIndexof level textures are set to0. (14279)
Other Changes
- Improved the API for
ApplicationV2dialogs by adding_getFrameButtonswhich factors out the addition of sheet header buttons (for example, "Copy ID" or "Import from Compendium"). (13663) - To provide additional information for scene transitions, the next Scene and Level that are about to be drawn are now passed to the
canvasTearDownhook,SceneManger#_onTearDown,CanvasGroup#tearDown, andCanvasLayer#tearDown. (14277) - Add
Math.nextAfter,Math.nextDown, andMath.nextUp. (14308)
Bug Fixes
Documents and Data
- When the Apply Active Effect behavior is changed, the active effect is now properly reapplied to all tokens inside the region. (14190)
- Fixed a bug where
ActiveEffectConfigdid not handle presses of the Save button in the prose-mirror element. (14218) - Fixed a bug where Active Effects in compendiums were not indexed. (14246)
- Fixed a bug where
BaseTile.migrateDatafailed to migrate theNONEocclusion mode properly. (14250) - Fixed a bug where
ActiveEffectRegistry#refreshcould throw an unhandled exception on theturnEndevent if there was no combatant. (14253) - Fixed a bug where rewinding combat did not refresh Active Effects. (14271)
- Fixed a bug where turn-based effect durations could behave erratically. (14248)
- Fixed a bug where
TokenDocument#_priorOverrideswas not cleared when#actorLinkwas updated totrue. (14297) - Fixed a bug where Document subtypes with a field marked as
gmOnlycould no longer be created by players. (14252) - Fixed a bug by improving
EmbeddedCollectionFieldandEmbeddedCollectionDeltaFieldto more robustly handle changes from and to the tombstone state as part of an update workflow. (14284) - Fixed a bug where
RollTablemigration incorrectly updatedTableResult. (14312) - Fixed a bug where the compendiums sidebar search was not matching entries containing certain words (stopwords). (14278)
- Fixed a bug where nullable
TypedSchemaFieldproperties could not be set to null. (14323)
Applications and User Interface
- Fixed a bug where keyboard bindings failed to move Tiles and Drawings, but then intentionally disabled this behavior again by default. It can be re-enabled)using
PlaceablesLayerOptions#keyboardMovableObjects. (14208) - Fixed a typo where there was a missing space between "Warning:" and "This operation cannot be un-done." (14212)
- Fixed a bug where the Token HUD elevation input clipped values greater than 2 digits. (13609)
- Fixed a bug where disabled text areas used an unthemed color. (14193)
- Fixed a bug where duplicating a playlist failed with an error. (14207)
- Fixed a bug where the Region Palette could be incorrectly toggled on when changing tools. (14225)
- Fixed a bug where detached chat logs had non-functional input. (14191)
- Fixed a bug where the chatlog text input permanently disappeared if the chatlog was popped out, detached, and then forcibly closed. (14210)
- Fixed a localization issue where
DocumentUUIDFieldwas not applying its configured pre-localized placeholder. (13917) - Fixed a bug where Mouse transitioning from
data-tooltipto emptydata-tooltipwitharia-labelrenders empty tooltip. (14154) - Fixed a bug where the wall palette's position was reset when the user clicked one of the a wall preset buttons. (14172)
- Fixed a bug where the highlight pip did not render when a preset button was pressed while the Select tool was active. (14243)
- Fixed a bug where
BasePlaceableHUDtoggled active palette too early for palettes that were injected into the render hook. (14267) - Fixed a bug where using one of the Select tools to create a new box selection with SHIFT held down incorrectly released the previously controlled placeables. This bug only occurred if the "Left-Click to Release Objects" setting was enabled. (14273)
- Fixed a bug where the elevation was not rounded in ruler waypoint labels. (14289)
- Fixed where the ordered list styling in journals cut off values that were more than 2 digits long. (9753)
- Fixed a bug where the expected confirmation dialog did not appear when a player entered a region with the Teleport Token behavior. (14319)
- Fixed a bug where
<document-tags>did not properly stop propagation. (14320)
The Game Canvas
- Fixed a bug where Unlinked preview tokens used for
TokenConfighad theirActiveEffects applied twice. (14183) - Prevented Tokens from moving if their current movement action/level is invalid/does not exist and no explict valid movement action/level is explicitly passed with the waypoints. (14169)
- Fixed a bug where where
TOKEN_EXIT/BEHAVIOR_UNVIEWED/BEHAVIOR_DEACTIVATEDwere not triggered when a Region was deleted. (14189) - Fixed a bug where double-clicking text drawings caused them to be created and then immediately deleted. (13629)
- Fixed a bug with the movement animation for a token with an attached region where the region could be prematurely rendered at the token's destination for a single frame. (13894)
- Fixed a bug where surfaces did not block vision within the same level and where surfaces included only in the level of the vision source did not prevent vision of tokens in other levels. (14200)
- Fixed a bug where
TokenDocument#getVisibilityTestPoints,#getContainmentTestPoints,#getOcclusionTestPoints, and#getOccupiedGridSpaceOffsetscaused a warning to be logged if called outside of canvas bounds. (14215) - Fixed a bug where Tokens outside the elevation range of the token's level could sometimes see tokens in other levels that they shouldn't be able to. (14230)
- Fixed a bug where the edge of a wall was not reinitialized if it did not currently have a restriction type set. (14231)
- Fixed a bug where surface exposure did not update immediately when a surface was occluded by hovering. (14236)
- Fixed a bug with fractional auto-spawn rates in
ParticleGenerator. (14240) - Fixed a bug where Map notes were not interactable after first joining the game. (14251)
- Fixed a bug where surface occlusion could fail to occur if the token's elevation was too close to the top elevation of the level the token was in. (14260)
- Fixed a bug where
ClockwiseSweepPolygon.testCollisionpolluted the passedconfig.boundaryShapesarray. (14261) - Fixed a bug where darkness sources were always rendered as if they were at 0 elevation even if they were not. (14262)
- Fixed a bug where the game froze when controlling or releasing large groups of placeables. (14222)
- Fixed a bug where tokens in other levels contributed to shared fog exploration. (14118)
- Fixed a bug where
DrawingConfigcould show the wrong author. (14272) - Fixed a bug where Surface occlusion could incorrectly affect Radial and Vision occlusion. (14295)
- Fixed a bug where the canvas crashed when the base shape type of one of a Region emanation's shapes was changed. (14307)
- Fixed a bug where Canvas can be crashed by tokens in a deleted level that was visible from the viewed level. (14179)
- Fixed the target container for
ParticleGeneratorweather effects. (14288) - Fixed a bug where
DoorMesh.animateSliderisked being called before theWallDocumentedges were initialized. (14324)
Package Development
- Fixed a bug where World creation with a system that has incompatible required dependencies is not prevented. (14155)
Dice and Cards
- Fixed a bug where
Roll.createdid not invokedefaultImplementation. (13710) - Fixed a bug where rolling with the "Private to Gamemasters" mode also hid results from rolling player. (14258)
- Fixed a bug where the escape characters for comparators in chat messages (
>,>=,<,<=) broke roll formulas. (14275) - Fixed a bug where manual coin flips (
dc) did not accept0. (13694)
Localization and Accessibility
- Resolved an issue where the
HTMLDocumentTagsElementplaceholder was not localized correctly. (14287)
Other Changes
- Fixed a bug where Successful modifications in a batch before a modification errors after all dry runs succeeded are not broadcast to other clients. (14174)
- Prevented an error with
ChatLog#updateMessagethat occurred if the chat log was popped out and then closed. (14153) - Fixed a bug where closing a detached chat log did not restore the Chat Message input area. (14192)
- Fixed a bug where you could not pop out the chatlog if it had been detached and closed. (14209)
- Fixed a bug where attempting to delete a Scene's only Level threw an unhandled exception. (14290)
- Fixed a bug where the text editor removed the
classattribute fromimgelements. (14257) - Fixed a bug where the
EmbeddedCollectionField#_cleanTypemethod did not properly specify the embeddedmodelas part ofinnerStatepassed to_cleanElement. This resulted in incorrect server-side sanitization behavior. (14314)