Register

Release 14.361

Version 14 Stable

May 05, 2026

Foundry Virtual Tabletop - Version 14 - Stable 3 Release Notes

Release Notes for Foundry Virtual Tabletop Version 14
A scene-level enabled Ember encounter against an ornery translucent amphibian, shown in Version 14 Stable 3.

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#name field 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 @Embed representation. (14310)
  • Fixed a bug where AdventureImporterV2 did not hydrate its document property, only adventure. (14334)

Applications and User Interface

  • You can now begin a document drag-and-drop operation by dragging the Document UUID Link button in any DocumentSheetV2 header. (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 shaderClass support to ParticleGenerator. (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 ParticleGenerator which 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#getSurfaces to 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 SceneManager to 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.time to true.(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 VFXSingleImpactComponent which auto-rotates the impact sprite appropriately. (14198)
  • Added the preCommit option to RegionLayer#placeRegion(s) and TokenLayer#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#sortLayer is now set to to SCENE and both the sort and zIndex of level textures are set to 0. (14279)

Other Changes

  • Improved the API for ApplicationV2 dialogs by adding _getFrameButtons which 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 canvasTearDown hook, SceneManger#_onTearDown, CanvasGroup#tearDown, and CanvasLayer#tearDown. (14277)
  • Add Math.nextAfter, Math.nextDown, and Math.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 ActiveEffectConfig did 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.migrateData failed to migrate the NONE occlusion mode properly. (14250)
  • Fixed a bug where ActiveEffectRegistry#refresh could throw an unhandled exception on the turnEnd event 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#_priorOverrides was not cleared when #actorLink was updated to true. (14297)
  • Fixed a bug where Document subtypes with a field marked as gmOnly could no longer be created by players. (14252)
  • Fixed a bug by improving EmbeddedCollectionField and EmbeddedCollectionDeltaField to more robustly handle changes from and to the tombstone state as part of an update workflow. (14284)
  • Fixed a bug where RollTable migration incorrectly updated TableResult. (14312)
  • Fixed a bug where the compendiums sidebar search was not matching entries containing certain words (stopwords). (14278)
  • Fixed a bug where nullable TypedSchemaField properties 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 DocumentUUIDField was not applying its configured pre-localized placeholder. (13917)
  • Fixed a bug where Mouse transitioning from data-tooltip to empty data-tooltip with aria-label renders 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 BasePlaceableHUD toggled 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 TokenConfig had their ActiveEffects 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 #getOccupiedGridSpaceOffsets caused 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.testCollision polluted the passed config.boundaryShapes array. (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 DrawingConfig could 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 ParticleGenerator weather effects. (14288)
  • Fixed a bug where DoorMesh.animateSlide risked being called before the WallDocument edges 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.create did not invoke defaultImplementation. (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 accept 0. (13694)

Localization and Accessibility

  • Resolved an issue where the HTMLDocumentTagsElement placeholder 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#updateMessage that 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 class attribute from img elements. (14257)
  • Fixed a bug where the EmbeddedCollectionField#_cleanType method did not properly specify the embedded model as part of innerState passed to _cleanElement. This resulted in incorrect server-side sanitization behavior. (14314)

Documentation Improvements

Other Changes

  • Fixed incorrect animation paths in the Particle Generator example macros. (14188)
  • Fixed an API documentation issue where the ClientDocument#permission jsdoc had an out-of-date @example. (13976)
  • Fixed an API documentation issue where the return signature of Journal.show was incorrect. (13796)