Register

Release 14.360

Version 14 Stable

April 09, 2026

Foundry Virtual Tabletop - Version 14 - Stable 2 Release Notes

Release Notes for Foundry Virtual Tabletop Version 14
Foundry VTT Version 14 Stable 2, shown with the Marlstone Manor map in our own groundbreaking Ember digital roleplaying game, now available in Early Access!

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 seconds property 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 joint and fields params for DataModel#validate to 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 OBSERVER to ALWAYS. (14166)

API Improvements

The Game Canvas

  • Added a new octagon shape option for token drag ruler waypoints. (14104)
  • Added a new protected hook Region#_onAnimationStateChange which is called when Region#animationState has changed. (14141)
  • Made the private Token##notInViewedLevelIndicator publicly available as Token#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 ParticleGenerator API so that you can now easily define a mask by passing it at configuration time or by modifying the ParticleGenerator#mask property during runtime. (14175)
  • Enhanced the ParticleGenerator API by separating out VFXEffect#configureReferences as a new public method that can be optionally called before VFXEffect#play to take manual control over reference field resolution. (14176)
  • Enhanced the ParticleGenerator API by introducing the new VFXPointSourcePolygonField which makes it easy to incorporate a point source polygon as part of a VFXEffect pipeline (for physical collision masking, for example). (14177)
  • Enhanced the ParticleGenerator API by adding the new VFXParticleGeneratorComponent#pointSourceMask field which makes it easy to mask the area of a particle generator in a VFXEffect pipeline using a point source polygon (for physical collision masking, for example). (14178)

Bug Fixes

Documents and Data

  • Fixed a bug where ClientDocument.createDialog did not pass a renderContext to render options. (13981)
  • Fixed a bug where the value of phase was reset for when making edits with the Active Effect Configuration dialog. (14147)
  • Fixed a bug where _applyChangeUpgrade was still using CONST.ACTIVE_EFFECT_MODES. (14148)
  • Fixed a bug with Compendium sidebar tab filtering where documents with img: null were incorrectly populated with an object as their img. (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#importDocument where 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._cleanType in cases where ObjectField#_cleanType is 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 HTMLMultiSelectElement was improperly displaying disabled options. (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 level was not animated by Token##onUpdateAnimation. Also fixed a bug where TokenDocument#level was incorrectly used instead of TokenDocument#_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 DetectionMode incorrectly used canvas.level instead of PointVisionSource#level. (14137)
  • Prevented an error thrown by PrimarySpriteMesh#containsPoint if 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#_testAngle could incorrectly return true instead of false if the angle of the vision source was 0. (14144)
  • Fixed a bug with DetectionMode._testCollision where 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 ClockwiseSweepEdgeConfig entries in PointSourcePolygonConfig#edgeTypes were non-functional. (14164)
  • Fixed a bug with TokenDocument#includedInLevel where it returned incorrect results when provided with a Level argument. (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 CompendiumDirectory document 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 of icons/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#format which occurred if the first argument was not provided. (14160)
  • Fixed an off-by-1 error that occurred with countLeapYears at 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)

Documentation Improvements

Documents and Data

  • Improved the API documentation for ActorData so that its typedef no longer incorrectly includes a reference to tokenOverrides. (14135)
  • Improved the API documentation for EffectChangeData so that its typedef no longer refers to the numerical mode instead of the string type. (14136)