April 09, 2026
Foundry Virtual Tabletop - Version 14 - Stable 2 Release Notes
We are happy to announce that Foundry Virtual Tabletop Version 14 Stable 2 (14.360) is now available! This is just the first in an anticipated series of minor updates that addresses a few edge case bugs and polishes some rough spots in the user experience and API. There are no significant feature changes worth highlighting, although if you're interested in V14's experimental Particle Generator API there have been some nice non-breaking additions made there.
Because this is a minor patch update, if you already installed Version 14 Stable 1 (14.359) 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
- To improve the migration of legacy ActiveEffect, the
secondsproperty is now preferred over other duration properties when migrating to the new schema. (14112) - Fixed a bug where creating an Active Effect with no Expiry Event value selected set it to Turn Start. (14117)
- Restored
jointandfieldsparams forDataModel#validateto accommodate only performing field-level or joint-level validation. (14165)
Applications and User Interface
- The default Foundry VTT screen that is automatically created as part of the new user experience is now migrated to the latest schema. (14107)
- Changed what occurs when you change the level of a token or when you control a token on a different level. The camera no longer automatically centers on the token in these cases. (14113)
- In the Shape Configuration dialog, added some information to the hint text of the "Grid Based" option about the Grid Diagonals setting. (14120)
- Changed the default visibility of measured template regions from
OBSERVERtoALWAYS. (14166)
API Improvements
The Game Canvas
- Added a new octagon shape option for token drag ruler waypoints. (14104)
- Added a new protected hook
Region#_onAnimationStateChangewhich is called whenRegion#animationStatehas changed. (14141) - Made the private
Token##notInViewedLevelIndicatorpublicly available asToken#levelIndicator. (14143) - Added validation to
RegionLayer#placeRegion(s)to catch cases when the user attempts to place a restricted region that is included in more than one level. (14069) - Enhanced the
ParticleGeneratorAPI so that you can now easily define a mask by passing it at configuration time or by modifying theParticleGenerator#maskproperty during runtime. (14175) - Enhanced the
ParticleGeneratorAPI by separating outVFXEffect#configureReferencesas a new public method that can be optionally called beforeVFXEffect#playto take manual control over reference field resolution. (14176) - Enhanced the
ParticleGeneratorAPI by introducing the newVFXPointSourcePolygonFieldwhich makes it easy to incorporate a point source polygon as part of aVFXEffectpipeline (for physical collision masking, for example). (14177) - Enhanced the
ParticleGeneratorAPI by adding the newVFXParticleGeneratorComponent#pointSourceMaskfield which makes it easy to mask the area of a particle generator in aVFXEffectpipeline using a point source polygon (for physical collision masking, for example). (14178)
Bug Fixes
Documents and Data
- Fixed a bug where
ClientDocument.createDialogdid not pass arenderContextto render options. (13981) - Fixed a bug where the value of
phasewas reset for when making edits with the Active Effect Configuration dialog. (14147) - Fixed a bug where
_applyChangeUpgradewas still usingCONST.ACTIVE_EFFECT_MODES. (14148) - Fixed a bug with Compendium sidebar tab filtering where documents with
img: nullwere incorrectly populated with an object as theirimg. (14151) - Fixed a bug that occurred during drag operations into a compendium. Closing the overwrite confirmation dialog replaced the entry instead of canceling it as expected. (14152)
- Fixed a bug with
CompendiumCollection#importDocumentwhere it replaced an existing document without a confirmation dialog if the existing document was not loaded. (14156) - Improved validation to avoid passing invalid data to
super._cleanTypein cases whereObjectField#_cleanTypeis overridden. (14170) - To prevent undesirable side effects, dry runs on the server no longer call
_on*handlers. (14171) - Resolved an issue where regions containing invalid behaviors could not be updated or deleted. (14139)
- Fixed a bug where you could not replace a scene in a compendium with another scene that had the same ID. (14181)
Applications and User Interface
- Fixed a bug where saving or deleting a new keybinding automatically scrolled the window back to the top. (14014)
- Fixed a bug where setting the default Folder sheet for specific specific types was ignored for the creation window. (14102)
- Fixed a bug where pending waypoints were not rendered by the ruler if the movement was paused. (14115)
- Fixed a bug where players could see all of a scene's walls via the "Create Shapes from Controlled Walls" button. (14129)
- When no scene is viewed, the tabs at the top of the Placeables sidebar are now disabled to prevent throwing errors. (14150)
- Fixed a bug where resizing a detached window and then changing tabs could cause the window to resize to the minimum possible width and height. (14061)
- Fixed a bug where detached windows were missing the usual smooth minimizing/maximizing transition. (14067)
- Fixed a bug where
HTMLMultiSelectElementwas improperly displaying disabledoptions. (13612) - Fixed a bug where rebuilding adventures failed with an error. (14182)
The Game Canvas
- Added
RegionDocument#hidden. When a region is hidden, it is visible only to GMs and all of its behaviors are disabled. If the region is attached to a token, its hidden state automatically syncs with that token's hidden state. (14076) - Fixed a bug where a token's
levelwas not animated byToken##onUpdateAnimation. Also fixed a bug whereTokenDocument#levelwas incorrectly used instead ofTokenDocument#_source.level. (14111) - Prevented an error that was thrown when a player (non-GM) attempted to drag a token into unexplored fog, which caused the movement to fail. (14119)
- Fixed a bug where
DetectionModeincorrectly usedcanvas.levelinstead ofPointVisionSource#level. (14137) - Prevented an error thrown by
PrimarySpriteMesh#containsPointif the texture was invalid. This error was triggered by occlusion testing and crashed the canvas. (14138) - Resolved an issue where detaching an attached region mid-animation caused the animation state to become stuck. (14140)
- Fixed a bug where
DetectionMode#_testAnglecould incorrectly returntrueinstead offalseif the angle of the vision source was0. (14144) - Fixed a bug with
DetectionMode._testCollisionwhere it could return incorrect results if the angle was less than 360 and origin and destination were in the same level. (14145) - Fixed a bug where the vision polygon incorrectly returned an empty polygon if the vision angle was
0. The correct vision polygon in those conditions is a circle with radius equal to the external radius. (14146) - Fixed a bug where non-controlled visible tokens were always triggering occlusion, even if their disposition was Secret. (14161)
- Fixed a bug where
ClockwiseSweepEdgeConfigentries inPointSourcePolygonConfig#edgeTypeswere non-functional. (14164) - Fixed a bug with
TokenDocument#includedInLevelwhere it returned incorrect results when provided with aLevelargument. (14168)
Package Development
- Fixed a bug in the Setup screen where the "Requires/Incompatible Dependencies" badge tooltip of a world was not showing the missing or incompatible dependencies of the system. (14157)
Localization and Accessibility
- Fixed a bug where Compendium titles were not localized in
CompendiumDirectorydocument search results. (14048) - Fixed a bug where the Compendium sidebar was filtering based on the unlocalized version of the text. (13881)
Other Changes
- Deleted
icons/sundries/sports/baseball-white.webp, which was a duplicate oficons/sundries/sports/baseball.webp. (14116) - Resolved an issue where non-GM users failed to undo (CTRL+Z) the deletion of regions they own if the regions had a behavior. The region can now be successfully restored, but without any behaviors. (14089)
- Prevented an error with
CalendarData#formatwhich occurred if the first argument was not provided. (14160) - Fixed an off-by-1 error that occurred with
countLeapYearsat every leap year boundary. (14128) - Fixed a bug where dialogs spawned by detached ProseMirror editors were misaligned. (14125)
- Fixed a bug where you could not view the source HTML inside a detached ProseMirror window. (14122)
- Fixed a bug where you could not cancel source HTML editing inside a detached ProseMirror window. (14123)
- Fixed a bug where re-attaching a detached ProseMirror editor rendered an additional menu. (14124)