Register

Release 14.365

Version 14 Stable

July 15, 2026

Foundry Virtual Tabletop - Version 14 - Stable 7 Release Notes

Release Notes for Foundry Virtual Tabletop Version 14 Stable 7
Foundry VTT Version 14 Stable 7 (14.365), as shown with our own Crucible game system and a newly released battlemap from Ember Early Access.

As Version 14 matures the pace of updates is naturally starting to slow down, but today's release of Foundry Virtual Tabletop Version 14 Stable 7 (14.365) brings a significant collection of bug fixes and improvements.

We are especially excited to report that Foundry is now fully signed with Apple, so our macOS-using friends will now be able to smoothly install this build of Foundry VTT and all subsequent builds without any scary-looking security warnings.

As part of this process, our Windows installers have migrated to a new code signing certificate. A consequence of this change is that for the next couple of days you may be prompted with a Windows Defender warning that the software is unrecognized.

Please understand that this is expected (and unavoidable) when making this kind of certificate change and it is safe to click Run Anyway to proceed with the installation.

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.

The (temporarily) expected warning from Windows Defender that may display when installing the Windows or Windows Portable build of V14 Stable 7.
The (temporarily) expected security warning

New Features

Architecture and Infrastructure

  • Added Mac OS code signing + notarization. (6051)

Applications and User Interface

  • When dragging a translation handle of a tile/drawing, all controlled tiles/drawings are now moved rather than only the one being dragged. (14557)
  • Using W, A, S, or D keyboard keys to move in the x-y plane no longer causes elevation snapping, and changing elevation using the Q or E movement keys no longer causes xy-position snapping. (14614)
  • Added ApplicationV2#_refit to allow apps to explicitly control when they need to refit their rendered application or their host window (if detached). (14575)

The Game Canvas

  • Position and dimensions of the fog texture and light cache texture are now set based on CanvasVisibility#explorationRect if it is defined. (14589)
  • Added the ability to use FADE occlusion to primary canvas objects that are inside containers. (14599)

API Improvements

Applications and User Interface

  • Added options.scroll to control whether the chat log automatically scrolls to the bottom when the message is created. (13202)

The Game Canvas

  • Added the concreteOnly option to Actor#getDependentTokens which limits the results to tokens that exist in their parent scene, excluding ephemeral/unpersisted tokens. This will be the default option in V15. (14559)
  • Added WallDocument#_onEdgeChange. Removed priorLevels and changedTypes options from WallDocument#initializeEdge, which are no longer necessary. (14588)
  • Made ClockwiseSweepPolygon##rayDistance2, ClockwiseSweepPolygon##addInternalEdgeCollisions, and ClockwiseSweepPolygon##edgeTypes protected. (14590)
  • Added PointEffectSource#_getPolygonBackend(): typeof PointSourcePolygon. (14591)
  • Made Token##testCulled protected. (14592)
  • Added BaseEffectSource#_couldShapesChanges. (14593)
  • Added PrimaryCanvasObject#inPrimary and PrimaryCanvasContainer#inPrimary, which is true if the object/container is in canvas.primary or in a container that is in the primary group. (14594)
  • Added PrimaryCanvasContainer#sortLayer. (14595)
  • PrimaryCanvasContainer now propagates its elevation to its children automatically to enforce the requirement that its children must not have a different elevation. (14596)
  • PrimaryCanvasParticleContainer now extends from PrimaryCanvasContainer. (14597)
  • Added PrimaryCanvasGroup#objects: PrimaryCanvasObject[], which contains all primary canvas objects that are currently in the primary group or in a container that is in the primary group. (14598)
  • Added support for KTX2 textures with premultiplied alpha. (14605)

Other Changes

  • Added the ability to create chat messages that are not pushed to the notification feed. (13078)
  • Added support for compendium item art mapping. (13600)
  • Added Level#updateRegionShapeConstraints, which updates the shape constraints of all Regions in this Level the current User is designated for. (14586)
  • Made some requested improvements to the renderChatInput hook. Render options are now passed through to it and the notifications element is now also included for convenience. (13282)
  • Added new, overrideable API to ActiveEffect to evaluate whether a change should be applied. (13931)
  • Improved clarity of the instructions for migrating legacy deletion/replacement keys. (14611)

Bug Fixes

Documents and Data

  • Fixed a bug where ActiveEffect change priorities were always prepared as 0 if not specifically set to a different value. (14511)
  • Fixed a bug where a roll table with an inferred formula could not be rolled from within a locked compendium. (13394)
  • Fixed a bug where _replace/_del operators nested inside _replace were not applied. (14573)
  • Fixed a bug where ClientDocument.fromDropData was incorrectly able to modify the _stats.duplicateSource of world documents. (14602)
  • Fixed a bug where users were incorrectly able to create pages in journal entries that they did not own. (14604)
  • Added validation to prevent a rare but impactful edge case where CalendarData.formatDuration threw an error for durations considered invalid by Intl.DurationFormat. (14613)

Applications and User Interface

  • Fixed a bug where detaching a region from a token and then adding multiple levels via region configuration dialog caused the update to be silently lost. (14514)
  • Fixed a bug where unknown Active Effect change types could prevent the Active Effect Configuration dialog from rendering. (14524)
  • Resolved an issue where the levels in Token HUD and Change Level behavior dialogs were incorrectly sorted alphabetically instead of their level order. (14537)
  • Fixed a bug where the Grid Configuration tool always showed the Initial Level of the scene, even when viewing a different level. (14538)
  • Fixed a bug with chat bubble styling for /me text that sometimes made it hard to read. (14464)
  • Fixed a bug where the default audio/video capturing device was used instead of the configured one. (14544)
  • Improved the styling of the token HUD's effects menu so that it fits its contents better. (14410)
  • Fixed a bug where {scene}, {token}, and {region} were not replaced in custom dialogs of the Teleport Token behavior. (14554)
  • Fixed a bug where calling ApplicationV2#renderChild from a detached window left a blank window behind upon reattachment. (14293)
  • Fixed a bug where HTMLHueSelectorSlider#_refresh() was not evaluating child range values. (14565)
  • Fixed a bug with revealing Secret blocks where Observers could incorrectly see the GM-only "Hide" button. (14539)
  • Fixed a bug that occurred when attempting to detach a window that was already detached. (14418)
  • Fixed a bug where the Placeables tab showed the unfiltered placeable count instead of the count after the current filter was applied. (14329)
  • Improved spatial awareness when rendering fixed-position context menus such as the Levels Filter in the placeables tab. (14304)
  • Used the newly added ApplicationV2#_refit to help resolve a bug where typing in the chat popout did not 'grow' the popout, and in some cases caused the Enter key to not send messages. (14575)
  • Fixed a bug in the Show To Players dialog where the "Toggle Controls" button was autofocused instead of the "Show Players" button. (14583)
  • Fixed a bug in Show To Players dialog where the "Change Ownership" field was incorrectly displayed to non-GMs even though they could not change ownership. (14584)
  • Fixed a bug where detaching/reattaching an application called the render workflow but did not actually re-render application parts. This sometimes caused hooks or extensions to erroneously insert new elements multiple times in Application#_onRender. (14417)
  • Fixed a bug where the last file location was always a broken link when using S3. (13502)

The Game Canvas

  • Fixed a bug with canvas.environment.globalLightSource.data.level where it would not update properly. (14490)
  • Fixed a bug where visibility was not always refreshed when a movement-blocking wall or surfaces changed. (14491)
  • Fixed a bug where random adjectives were not prepended before the incrementing number was appended. (14535)
  • Fixed a bug that occurred during non-sight blocking wall updates where token visibility was not updated even though it could have changed due to non-sight-based detection modes. (14540)
  • Fixed a bug where the interaction workflow for Regions was not canceled when CTRL+Z was pressed while drawing a second shape, resulting in a harmless error. (14513)
  • Fixed a bug where the preview movement path was measured without properly considering Token#_getDragMeasureOptions and #_getDragTerrainOptions in Token##updatePlannedMovement. (14552)
  • Fixed a bug where teleporting or spawning tokens failed with an error if the token did not fit in the destination region. (14553)
  • Fixed a bug where players erroneously received "You cannot switch Scenes until resources finish loading for your current view" warning when using Change Level regions. (14556)
  • Fixed a bug where tokens could incorrectly be able to pass through grid-aligned solid walls (while moving left to right and top to bottom) if they could not see the wall itself. (14561)
  • Fixed a bug where movement was not properly snapped when changing levels via the Change Level region behavior. (14578)
  • Prevented an error that occurred when pausing the game for players that had the canvas disabled. (14567)
  • Fixed a bug where ClockwiseSweepPolygon#_edgeTypes.outerBounds.mode was incorrect for non-sight-based polygons. (14585)
  • Depth is no longer unnecessarily rendered for primary canvas containers that are not visible or are otherwise not renderable. (14600)
  • Fixed a bug where the Edge constructor incorrectly initialized Edge#id if passed an object option of type Document. (14601)

Package Development

  • Resolved an issue where modules with a non-standard VERSION string displayed poorly. (12886)

Localization and Accessibility

  • Corrected the DialogV2.prompt's default ok label. It is now "COMMON.Confirm" rather than just "Confirm". (14545)

Other Changes

  • Fixed a bug where reimporting an adventure could fail with an error if the adventure contained an actor delta with a new embedded document. (14516)
  • Fixed a bug where KeyboardManager#_activateListeners was not called as part of the detached window harness. (14564)
  • Fixed a mistake in the condition that determines the user that is designated to update the shape constraints of the Region. (14587)
  • Fixed a bug where _stats.duplicateSource and _stats.exportSource were not cleared when a document was added to an Adventure using the file browser. (14603)

Documentation Improvements

  • Fixed the API documentation of FilePickerConfiguration#favorites. (14574)
  • Adjusted the description of Combat._sortCombatants to indicate that it actually decides turn order, not just the displayed order. (14579)