September 26, 2025
Foundry Virtual Tabletop - Version 14 - Prototype 1 Release Notes

Greetings, Foundry Virtual Tabletop friends! Today marks the release of Version 14 Prototype 1, the very first release of the Version 14 update cycle! We have been working really hard behind the scenes on foundational work for this new generation of the software, and we are extremely pleased to begin sharing details with you all about what to expect over the coming months with high-level view of our plans for Version 14 and what it will bring.
WARNING: This is a Prototype release which is experimental and unstable. Do not use it to run an actual game and backup your Worlds before checking it out.
Remember, as happy as we are to show off some of what is coming, our primary focus with a Prototype release is designing and front-loading the more substantive changes to the API for our development community. This helps to share our overall vision and approach, showcases new capabilities and approaches, and helps to start the process of adapting to any breaking changes to the API.
About Version 14
This release represents the initial kick-off of a brand-new generation of Foundry Virtual Tabletop. We have some big goals and plans for Version 14 that are really exciting to our team, and we are confident will delight you when you get your hands on them.
Version 14 Epics
The largest and most significant features (ones we call "epics") in Version 14 are the following:
- Pop-out Applications
- The winner of our Version 14 Patreon Feature Vote, Foundry Virtual Tabletop now has built-in support for rendering
ApplicationV2
instances in a separate browser window! You can read more about pop-out applications below. - Scene Levels (v1)
- A brand-new framework for designing and playing interconnected multi-level scenes. We are working on an internal prototype for this, but it is not yet included in V14 Prototype 1.
- Active Effects (v2)
- We have begun work on a robust set of Active Effects improvements designed to provide a more powerful foundation for automation of effect duration and new ways to have Active Effects apply to Actors and Tokens. Some of this work is included in V14 Prototype 1, with more yet to come in later releases.
- Scene Regions (v2)
- A key focus of V14 Prototype 1 has been improvements to the UX of creating and managing Scene Regions with significant improvements to the tools used to draw, manipulate, and visualize regions.
- DataModel Performance Improvements
- We have invested a lot of time in V14 Prototype 1 on a set of simplifications and improvements to our
DataModel
infrastructure that is designed to make data cleaning, validation, and updates more streamlined, more powerful, and better for performance. These changes are mostly included in V14 Prototype 1 with a few more planned improvements slated for Prototype 2. - Scene Objects Sidebar
- One of the big planned UI/UX improvements for V14 is a new sidebar tab specialized in helping you to traverse the contents of the Scene which is currently rendered on the game canvas, making it easier to inspect that scene's contents of embedded documents distributed across the multiple levels of the Scene. This work is not yet implemented and will be coming in a later V14 prototype.
- ProseMirror Improvements
- We are prioritizing a suite of improvements to our text editing experience using ProseMirror that will make authoring Journal Entries and other HTML in Foundry VTT more powerful and easy. We will be removing TinyMCE from Foundry VTT in Version 14. We understand some of you are still fond of the legacy editor, but we hope that these ProseMirror improvements will help soften that blow. Expect these improvements coming mostly in V14 Prototype 2.
In addition to these epic-sized features, we are also shipping a huge number of smaller improvements that will be detailed individually in the following update notes.
Version 14 Timelines
We develop according to a phased development process which you can learn more about in the Versioning and Releases article. This is only the first prototype release for Version 14, so it's impossible to commit to a timeline for the overall generation. We can at least set some preliminary expectations to help guide content creators, developers, and users with what to expect.
We are anticipating at least one more Prototype release which will focus on the epics that have not yet been completed in Prototype 1. This process of prototyping Version 14 will likely take us through the end of November, after which point we would begin the phases of API Development (think "alpha test" feedback from our community developers) and User Testing (think "beta test" feedback from all users) before we reach a candidate for stable release.
Our best guess at the moment is the V14 may reach a stable release in January 2026.
Release Highlights
Version 14 Prototype 1 includes a huge number of individual features and updates, but some of the most noteworthy highlights are the following:
Pop-Out Applications
A long-desired feature for Foundry Virtual Tabletop users, especially those who have multiple monitors, has been the capability to pop-out certain components of the VTT into a separate browser window so that multiple screens can be effectively utilized. We have been internally tracking the objective to add this feature for years, but had not been able to prioritize it alongside other goals. We're thrilled to finally offer native pop-out support as a core service that the ApplicationV2
framework provides.
An important note: we invested our efforts in pop-out compatibility around the ApplicationV2
framework, so legacy applications still using the V1 Application framework may have extra incentive to upgrade to our new tooling.
Our team would like to thank and acknowledge KaKaRoTo and posnet for their creation and maintenance of the helpful PopOut! module which has served users admirably since the primordial pre-launch era of Foundry VTT Version 4!
Scene Regions (v2)
Scene Regions are a relatively new feature to Foundry Virtual Tabletop, but we are doubling down on the technical framework that they provide as a workhorse component for a lot of our future goals. At a general level, the ability to define an area of the scene which has some meaning or applies some behaviors is an essential concept for a huge range of tasks and features.
What was, arguably, lacking with our initial implementation of Scene Regions was some flexibility and quality of UX to make it easier to work with defining and manipulating regions as well as configuring them to accommodate a wider range of shapes needed for mechanics-based gameplay. We have invested a huge amount of effort during the V14 dev cycle so far on overhauling the way that geometric shapes are defined and manipulated on the canvas. These improvements directly benefit Scene Regions, but also extend beyond regions alone to bring UX parity to everywhere in the Foundry VTT canvas that deals with shapes including Tiles, Light sources, Sound sources, and Drawings. These improvements include:
- New shapes (cones and rays)
- Informative measurement displays
- Mouse-based UX to modify existing shapes
- Configurability of whether shapes are grid-based (e.g. "Fire Square") or use conventional geometry
- The ability to constrain shapes based on certain types of walls
- Much more!
There's still a lot of work to do in Version 14 before stable, but we are really proud of the additions so far that are surveyed in the below video.
In this video, you see several types of new handles and how they can modify each shape:
- Circle Handle ( )
- Typically located at the center of the shape, click it to drag the shape to a new location.
- Square Handle ( )
- Dragging this handle for one of the edges of a shape scales and resizes the shape in that direction.
- Triangle Handle ( )
- Click and drag this handle to rotate the shape.
Most significantly in Prototype 2, the Measured Templates layer (as you currently know it) will be going away in favor of specialized Scene Regions and behaviors, so much of our work in V14 Prototype 1 has been laying the groundwork for all the mechanically relevant shapes and options needed to support meaningful areas of effect. We are sure many of you have questions about how the Measured Templates redesign is going to work, we'll be sharing a lot more information about that in Prototype 2, so stay tuned!
Active Effects (v2)
Version 14 also affords our team to invest in a long-deserved upgrade to the Active Effect system that allows Actors and Items to benefit from duration-based modifiers to their attributes. This next generation of support for Active Effects includes a number of exciting features including:
- The ability to provide a Compendium pack of predefined Active Effects ready to be dragged-and-dropped.
- The ability to drop an Active Effect onto a Token on the canvas as a shortcut for applying it to the token's Actor.
- Greater control over the presentation of effect status icons.
- Final removal of the "legacy transferral" framework that was first deprecated in Version 12.
- A more robust data model for defining the duration and expiry condition of Active Effects (planned for Prototype 2).
- Core support for the automatic expiration of Active Effects once they pass their allowed duration (planned for Prototype 2).
- The capability for Active Effects to apply changes to Token properties like vision, size, or light emission (planned for Prototype 2).
DataModel Performance Improvements
Each major version we also prioritize some strategic infrastructure, backend, or API investments that reinvest into our core software. One of these main focus areas in Version 14 is a suite of improvements to the workhorse DataModel
class that powers almost every persisted data structure (Documents and more!) across Foundry Virtual Tabletop.
Over the years since the DataModel
class was designed, we ended up with some closely related, but separate workflows for data cleaning, migration, sanitization, and validation. In Version 14 we have been able to implement some streamlined workflows for DataModel#updateSource
and DataModel.cleanData
, two of the model's most important functions, that economize the work they do while making the model more performant and robust against a range of previously poorly-supported edge cases. We have some preliminary benchmarking results which are very encouraging (negative percentage changes mean "faster"):
Operation | V14 Change |
---|---|
Document Construction | -9.45% |
Local Updates | -2.81% |
Persisted Creation | -25.86% |
Persisted Updates | -9.69% |
These changes will be mostly transparent to API developers unless you are implementing advanced DataModel
features or implementing highly customized DataField
types. For developers who are affected by these API changes, we are on hand to help you understand them and plan the updates you'll need to make to support V14!
A related feature that should make developers happy is the ability to batch multiple disparate Document modification operations into a single serialized database transaction!
Breaking Changes
As with each major generation of Foundry Virtual Tabletop, there are some aspects of the software that our team has needed to change in order for it to work in the best possible way. Sometimes these changes are needed to improve stability or performance. Sometimes they are areas where we need a more powerful underlying design for our own future goals and needs. Sometimes they are needed to open up new opportunities for community developers using the API.
Version 14 does not have a massive set of breaking changes (although there may be more breaking changes that emerge during the rest of the Prototype phase). You can view the full list of Version 14 breaking changes on our project board here: https://github.com/orgs/foundryvtt/projects/67/views/8.
Expiring Deprecation Periods
When we do need to make breaking changes, whenever possible we try to help ease the transition offering backwards-compatible support for a set "deprecation period" and to clearly communicate when this period will end.
With the arrival of Version 14, we have now reached the end of the deprecation period for some items and the legacy code is no longer supported.
- Completed the scheduled retirement of backwards compatible support for
CONFIG.ActiveEffect.legacyTransferral
, deprecated since V11. (13280) - Completed the scheduled retirement of backwards compatible support for a large assortment of changes that have been deprecated since V12. See the linked issue for details. (13436)
Documents and Data
- When modifying a
DataModel
viaupdateSource
, the special operation keys (-=
and==
) are now deprecated in favor of newDataFieldOperator
values. (13090) - Added anchor (
anchorX
,anchorY
) toRectangleShapeData
and changed the pivot from (x + (width / 2)
,y + (height / 2)
) to (x
,y
). (13298) - Consolidated data cleaning and preprocessing activities under the umbrella of
DataModel.cleanData
along with a more robust set ofoptions
that can fine tune cleaning behavior. (13406) - Changed the mesh position for Tiles so that it is now equal to the
(x, y)
position of theTileDocument
. The "Anchor X/"Y" option has been added to the Tile Config. (13442)
Applications and User Interface
- Added support for scene control layers that include no tools. This change means that
SceneControls#tool
andGame#activeTool
can now be null if and only if there are no tools in the current control layer. (12966) - Applied the new Shape editing UX for Regions to Tiles to standardize the way that they are created and edited in the canvas. (13376)
- Applied the new Shape editing UX for Regions to Drawings to standardize the way that they are created and edited in the canvas. (13377)
- Applied the new Shape editing UX for Regions to Ambient Lights to standardize the way that they are created and edited in the canvas. (13378)
- Applied the new Shape editing UX for Regions to Ambient Sounds to standardize the way that they are created and edited in the canvas. (13379)
The Game Canvas
- Fixed a bug where darkness sources were incorrectly being blocked by open doors and and by walls that do not block light. The same change also resolved an issue where proximity (attenuation) was not functioning. (13416)
ClockwiseSweepPolygonConfig#edgeOptions
has been deprecated in favor of the improvedClockwiseSweepPolygonConfig#edgeTypes
. (13440)
Other Changes
- Changed
parseHTML
so that it now returnsnull
in cases where it previously returned the (previously undocumented) value ofundefined
. (13145) ContextMenuEntry#icon
now accepts class names as valid input. It still accepts strings that are directly parsable into HTML elements as it did previously. (13146)- Changed styling for
<code>
so that it typically remains an inline element and only usesdisplay: block
when it is assigned theblock
class. (13330) - Renamed
foundry.data.regionShapes.RegionPolygonTree
tofoundry.data.PolygonTree
and extended thePolygonTree
API. (13443)
New Features
Architecture and Infrastructure
- Made shader statics lazy to avoid early evaluation at module load. (13345)
- Upgraded dependencies for Version 14 Prototype 1. (13447)
Documents and Data
- Incorporated the workflow to sanitize each
DataField
as part of the existingDataField#clean
recursion instead of requiring a separate recursive iteration. (13423) - Promoted
ActiveEffects
so that they are now primary documents rather than exclusively embedded documents. For example, anActiveEffect
can now be stored directly inside Compendium packs like Items and no longer require an Actor to store it. (11957) - Changed
MacroData#author
so that it is now nullable. (13105) - Improved Regions by adding the
ownership
field, theREGION_CREATE
permission, and the "Always to Observers" region visibility option. (13270) - Added two new types of Region shapes: lines and cones. (13272)
- Added a new "Display Measurements" option to Regions. (13273)
- Added the ability for all types of region Shapes (except polygons) to be "grid-based," meaning that they can now conform to the grid's metric (non-Euclidean). (13373)
- Added two new helpers (
#extendFields
and#removeFields
) toSchemaField
to easily add or remove fields. (13384) - Incorporated the work required to
_addTypes
during data model cleaning into the individual field-levelDataField#clean
recursion rather than requiring a separate recursive loop. (13422)
Applications and User Interface
- Added functionality to properly render any
ApplicationV2
instance in a separate browser window. (230) - Added a scroll bar to the "Status Effect" window. (3175)
- Certain Active Effects can now be displayed as status icons even if they do not have a finite duration. (5695)
- Added support for an HTML-only editor similar to the markdown editor. (9447)
- Added the ability to move the individual Shapes of Regions by dragging their translation handle on the canvas. (10757)
- Added a new "Only on Region Layer when Unlocked" region visibility option to help reduce visual clutter in the Regions layer. (11211)
- When an unlinked token is first created, its initial name is now set to match the name of its synthetic actor. (11544)
game.items.fromCompendium
is now called when dropping Items onto Actor sheets. (13166)- Changed the context menus for chat cards to use
fixed
positioning to match the standard behavior of all other sidebar context menus. (13236) - Added a configuration application for Region shapes. (13271)
- Added a standard header control button to
DocumentSheet
to open the Ownership Configuration of the Document. (13327) - Added HTML syntax highlighting while editing chat macros in
MacroConfig
. 13448 - Added translate, resize, and rotate controls to edit the individual Shapes of Regions on the canvas. (13375)
The Game Canvas
- Added multiple destination region support to the Teleport Token region behavior. Options are included to either force a token to teleport randomly or to allow the user to choose a destination (with or without learning the names of the possible destinations). (12842)
- Added support for dragging and dropping Active Effects directly onto Tokens to modify their associated Actor. (13226)
- Added a
visited
,rendered
, andculled
status forSpriteMesh
. (13292) - Added the "Adaptive Attenuation" and "Natural Attenuation" coloration techniques for light sources. (13346)
- Added new "Is Restricted", "Restriction Type", and "Restriction Priority" options to Regions that allow their individual Shapes to be constrained by walls with various properties. (13365)
Package Development
- Added a new configuration option to designate a temporary directory for the
.zip
archives of downloaded packages to better support hosting providers with limited user-level storage quotas. (6254)
Other Changes
- All user permissions that are irrevocable for Gamemaster users are now also irrevocable for Assistant Gamemasters, with the exception of
FILES_UPLOAD
,MACRO_SCRIPT
, andSETTINGS_MODIFY
. (13296)
API Improvements
Architecture and Infrastructure
- Worked around a Firefox-specific bug by adjusting custom element implementations so that they re-apply their prototype when adopted into a new Document. (13321)
Documents and Data
- Added a means of batching
Document
write requests across multiple collections. (11898) - During
TokenDocument#_initializeSource
,source.delta
is now ignored ifsource.actorLink
istrue
. CheckingactorLink
is now preferred when possible over testing for the existence ofdelta
. (12997) - Added support so that
ActorDelta
s can benull
in cases where no delta is required. (13097) - Improved the
DocumentCollection#importDocument
method so that if the provided document ID already exists it now prefers retaining the existing Document_id
where possible. It also now prompts the user whether to replace the existing document, create the provided document as a new item, or to cancel importing it. (13098) - Allowed
DataModel#updateSource
to accept anotherDataModel
as its change, using the source data from that other model to apply changes. (13358) - Introduced new
DataModel
update lifecycle functions forDataModel#_updateDiff
andDataModel#_updateCommit
. (13360) - Enabled validating a
DataField
that hasrecursive
structure non-recursively, only validating the structure of the "outer field" without individually validating its child elements. (13362) - The
changes
provided toupdateSource
are now consistently cloned so that all aspects of that workflow can now confidently mutate changes without contaminating the original input. (13363)
Applications and User Interface
- Added support to
ApplicationV2
's for triggering click actions upon middle mouse button click (auxclick
). (12531) - Changed the
ApplicationV2
"kebab" (three vertical dot) header control menu so that it now uses an implementation of the standardContextMenu
. (13290) - Added a new boolean
active
parameter to theSceneControl#onToolChange
callback:(event: Event, tool: SceneControlTool, active: boolean) => void
. (13450)
The Game Canvas
- Added an option to the Teleport Token behavior to place the teleported tokens in the destination region relative to their entry position in the origin region. (11115)
- Added an option to the Teleport Token behavior to place the teleported tokens in the center of the destination region. (11195)
- Added an option to the Teleport Token behavior to disable snapping when placing the teleported token at its destination position. (11245)
- Added
Scene#gridlessGrid
which is the gridless version ofScene#grid
. (13263) - Moved the
isDoor
andisOpen
getters from theWall
PlaceableObject
to theWallDocument
class. (13352) - Added
BaseGrid#getRectangle
,BaseGrid#getLine
, andBaseGrid#getEllipse
. (13372) - Added
CONST.EDGE_SENSE_TYPES
,CONST.EDGE_RESTRICTION_TYPES
,CONST.EDGE_DIRECTIONS
, andCONST.EDGE_DIRECTION_MODES
. (13441)
Package Development
- Added context to the
render
invocation forhotReload
so that apps can easily determine the file that changed to trigger the re-render. (9100)
Dice and Cards
- Boolean values in
Rolls
are now evaluated as numbers (0
forfalse
and1
fortrue
). (12139)
Other Changes
- Created an API for spawning a pop-out window with an appropriate environment for rendering
ApplicationV2
apps. (13128) - Added hooks when a pop-out window is opened to allow downstream packages to perform bootstrapping. (13130)
- Adjusted
TooltipManager
to activate tooltips in the appropriate browser Document. (13131) - Extended the
ApplicationV2
API to allow for rendering in a popped-out window. (13132) - Added the
ApplicationV2.instances
generator which yields all instances of the Application type. (13269) - Assorted Hot Reload improvements for Version 14 - including some reductions in scope. (13285)
RegionShape
has been deprecated in favor of client-side mixins ofBaseShapeData
subclasses with many new properties and methods. (13297)- Added
t0
values to the (previously undocumented) object returned byfoundry.utils.quadraticIntersection
. (13322) - When a
FilePicker
is launched from a document viaDocumentSheetV2.#onEditImage
, that document is now included in the options passed to theFilePicker
. (13380) - Adjusted the order of the
preSync
andsync
processes for handlebars to better support nested template parts. (13411) - Added the new
foundry.utils.isPlainObject
helper. For the purposes of this utility, a "plain object" is one with an immediate prototype ofObject
ornull
. (13435)
Bug Fixes
Documents and Data
- Fixed a bug where core fields inside
TypedSchemaField
andTypedObjectField
were not sanitized. (12612) - Expanded support for operating on Sets via
ActiveEffect
s. (8804) - Improved support for Actor sheet drag/drop handling when
legacyTransferral
is disabled. (10372) - Resolved an issue where types of
TypedSchemaField
were included in the changes sent to the server even if a document was updated withdiff: false
and they did not change. (11865) - Fixed a bug where calling
DataModel#validate
withclean: true
brokeEmbeddedCollection
references. (13036) - Added missing validation for the following ID fields:
BasePackage#languages.system/module
,BaseWorld#system
, andBackupData#system
. (13148) - When a
TokenDocument
is deleted and it is linked to a synthetic Actor,Actor#_onDelete
is now called to properly clean up that synthetic Actor. (13275) - Fixed a bug which could cause the update data passed to
DataModel#updateSource
to fail to be expanded if dot-notation keys existed somewhere in its structure, but not at the top level. (13359) - Fixed a bug where
setProperty
failed when traversing objects with explicitlyundefined
values. (13383)
Applications and User Interface
- Fixed a bug where the "Enter Message" placeholder text in the chat message input area jumped downwards when the
MainMenu
opened. (13339) - Fixed a bug where application layouts could briefly shift when a Font Awesome icon triggered a font load. (13424)
The Game Canvas
- Removed the last remaining core assignment for
ActiveEffectData#origin
. Any implementation of this property is now entirely deferred to the system level. (9960) - Fixed a bug where the mechanical changes of an Active Effect on an unlinked Token's synthetic Actor were (temporarily) no longer applied when you changed any attribute of that Actor. (13420)
Package Development
- Resolved an issue where handlebars could not be hot-reloaded successfully if templates were loaded via object format (example:
loadTemplates({ myTemplate: path })
). (9950) - Enabled hot reloading for CSS files that were loaded via
@import
and not declared in the package manifest. (9958)
Localization and Accessibility
- Fixed a bug where the
{{formGroup}}
helper localized twice when used in combination withDataModel.LOCALIZATION_PREFIXES
. (11776) - Prevented double-localization from occurring in the context menu options of the Player List. (12464)
- Prevented double localization that was occurring for some
StringField
form group options. (12706)
Other Changes
- Fixed bug where hot reloading a newly activated module did not function unless you first returned to the Setup screen and relaunched the world. (13287)
- Improved validation for Embedded Document updates so that they now also validate that the resulting collection is jointly valid. (13349)
- Redesigned
foundry.utils.objectsEqual
asfoundry.utils.equals()
that generalizes equality testing across any type of value instead of simply objects. (13353) - Changed
ClientDocument.fromDropData
behavior to avoid setting world Document UUIDs to_stats.compendiumSource
. (13369)
Unreleased Version 13 Fixes
Along with all the Version 14 changes, a few minor Version 13 bug fixes and improvements got bundled up and sent along for the ride. These changes will be included in a forthcoming Version 13 Stable 8 release, but they are also included in V14 Prototype 1.
New Features
- Re-prioritized the sound played when a door changes state from
OPEN
toLOCKED
so that the closing sound is played instead of the locking sound. (13407) RegionBehaviorConfig
now utilizes the form support of anySchemaField
subclasses if they have their own#_toInput
override. (13412)
Bug Fixes
- Fixed a bug where the combat turn marker was only refreshed for active combat encounters. Turn markers are now also properly handled when viewing inactive combat encounters. (13351)
- Resolved several issues with Tours of the Setup screen. (13355)
- Fixed a bug where setting ownership to "None" or "Hidden" at the folder level failed to hide packs within that folder from non-GM users. (13364)
- Fixed a bug where the polygon workflow for Drawings and Regions could no longer be cancelled using the Dismiss keybinding (ESCAPE) after right-clicking to remove a point. (13370)
- Fixed a bug in the
TokenConfig
dialog where changes to the associated actor were not appearing in token previews. (13381) - Added scrolling to the tabs of the
TileConfig
dialog so that the sheet is still usable when multiple modules are affecting it. (13385) - Fixed a bug where
game.toggleCharacterSheet
was incorrectly only checking for anAppV1#minimized
state. It now also checks forAppV2#_minimized
as expected. (13414) - Added missing compendium title localization to the "Toggle Edit Lock" dialog. (13415)
- Resolved an issue where
Drawing#text
was not destroyed on redraw which used to result in duplicate or stale text elements. (13446)