November 20, 2025
Foundry Virtual Tabletop - Version 14 - Prototype Release Notes
Foundry VTT Version 14 is shaping up to be one of our most feature-rich releases to date, and there's a lot to be excited about in this prototype build. As a reminder, V14 is focused on a lot of key pillars including Scene Levels, Active Effects (V2), Scene Regions (V2), ProseMirror Improvements, and the winner of our Patreon Community Prioritization Poll: Pop-out applications. While not all of these features saw user-facing changes in this release, many of them did!
WARNING: This is a Prototype release which is experimental and unstable. Do not use it to run an actual game and backup your User Data before checking it out.
Highlights
There are so many great things in this update it's hard to choose which particular pieces are most important to highlight, so we'll encourage you all to read the more comprehensive list of changes below, but here's a few key changes to shout out:
A Smooth Transition of Power
Swapping scenes has never looked this good. Gone are the sudden jarring black screens while a scene loads, and in their place scenes now load with a clean, smoothly animated transition. While this means that by default scenes now smoothly animate a fade-in and fade-out when swapping between them, you can also configure each scene with a custom transition (from a list of 14 options) to maximize the impact of your dramatic reveal.
ProseMirror Ascendancy
Some of the most common requests we get from Foundry VTT users are for new features or changes to the ProseMirror editor used for Journal Pages and a lot of our other Rich Text Fields. This release brings a whole suite of changes to ProseMirror to make it more convenient than ever to edit your adventures and chronicle your campaign including new ways to manage images and tables, the ability to change font size and color, add collapsible sections of text, and for the discerning power users there's now a way to insert custom inline and block HTML Templates that you've defined and use them conveniently via a configurable dropdown. We've even converted the default chat entry box to a new inline ProseMirror editor.
You Got Your Measured Templates in My Scene Regions
Scene Regions also received a sweeping set of changes in this prototype release. Forget Measured Templates, they're gone, dead, they are no more, they have ceased to be, they are an ex-Document. Instead you'll find all the functionality you used to use Measured Templates for nestled happily into the Scene Regions menu, and Scene Region shape functionality has gained a lot of UX improvements as a result. Regions also got a couple of new Shapes in the form of Rings and Emanations. Regions can now also be attached to a token, and will move with them, carrying the behaviors along for the ride, something we're sure Aura and Emanation enjoyers will love. For the power user, the previous ability to execute a call to place a measured template with a mouse click is now nestled under a new function allowing placement of a scene region instead. In addition to all of these cool features, interacting with Regions and Shapes has never been easier with new handles for resizing, rotating, and dragging shapes.
Known Issues
- Scene Fog of War Textures are not rendering properly.
- Panning a scene after a transition is prevented until a token has been hovered.
Breaking Changes
Documents and Data
TokenDocument#detectionModesis now aTypedObjectField. (12976)- Field and joint validation steps have moved from
DataModel#updateSourceinto the main_updateDiffworkflow and now happens as part of a single depth-first recursive pass. (13421) EffectChangeData#valuehas been deserialized and is now stored as the JSON parse result of the entered value, or failing that, the string value itself. (13463)
Applications and User Interface
- The
MeasuredTemplateDocument type has been absorbed by the Scene Regions framework, and the Scene Regions framework has been updated with new additional features and behaviors as necessary to provide parity with the previous functionality of Measured Templates. (13089)
The Game Canvas
- Changed
TokenMovementActionConfig#getAnimationOptionsfrom(token: Token) => ...to(token: TokenDocument) => .... (13337)
Package Development
- The legacy system
template.jsonspecification has entered its deprecation period, requiring system types to either have an unspecified schema or a schema defined via aTypeDataModel. (13429)
New Features
Architecture and Infrastructure
- Timestamp creation is now a server-side function and provides a unified time rather than relying on each individual client to create its own timestamps. (13033)
- The NEDB dependency used for migration of older database files has swapped to a forked version which upgrades
underscore. (13142) - The server-side architecture now uses Express 5. (13454)
- The
abstract-leveldependency has been updated to v3.x. (13507) - A number of other software dependencies have been upgraded, for more information please see: (13601)
Documents and Data
- Many features of Active Effects (V2) have been implemented, but development in this area is still ongoing. (5842)
- Many features of Scene Regions (V2) have been implemented, but development in this area is still ongoing. (13367)
- Scene Regions now support a new Active Effect region behavior which can be used to apply Active Effects to tokens as they enter a Scene Region. (10748)
- The Teleport Token and Toggle Behavior Scene Region Behaviors now use relative UUIDs and therefore no longer break if their scene is exported with a different ID. (12228)
DataModelvalidation now provides UUID or parent Document context when an embedded Document has errors. (12513)ActiveEffect#originis now aDocumentUUIDFieldinstead of aStringField.(13214)- Active Effect changes now support application
phases, which can be used to leverage precise data preparation timing and avoid priority competition. (13426) - The Active Effects
EffectChangeData#modehas migrated and is now a string#type. (13566)
Applications and User Interface
- Scenes can now be configured with optional Scene Transitions, allowing for a more elegant animated experience when moving between scenes. (13091)
- The chat entry box now uses an inline ProseMirror editor. (524)
- ProseMirror no longer trims empty
<i>or<span>elements such as those used to insert FA icons. (8403) - ProseMirror now uses the ProseMirror Details plugin to provide convenient collapsible text sections. (9621)
- In order to improve the behavior of creating and editing tables in ProseMirror, the ProseMirror editor now uses the ProseMirror-Tables-Sections plugin. (13117)
- It is now possible to adjust font size and color via ProseMirror menu options. (13118)
- ProseMirror unordered lists have been restyled to more closely align with the behaviour of previous TinyMCE unordered lists. (7928)
- The ProseMirror insert image tool can now assign an optional caption to an inserted image. (8601)
- Controlled Scene Region Shapes as well as complete Regions may now be copied and pasted. (10849)
- The Teleport Token confirmation dialog message can now be customized when configuring that Region Behavior. (11470)
- The Region Config "Is Restricted" section has been revisited for improved UX. (13473)
- In cases where a Region contains only a single shape that is not a hole, the shape configuration is now displayed directly in the Region Config window. (13510)
- Origin and control handles of polygon shapes for Canvas placeables have been revisited and redesigned for an improved UX. (13451)
- Pressing DEL while hovering a control handle now only deletes that shape and not the entire region. (13470)
- Using the mouse wheel while hovering over a region shape's control handle now rotates the shape. (13474)
- Rectangle shapes on Canvas placeables (Tiles in particular) are now resized proportionally when the resize handle is dragged unless the ALT key is held while resizing. (13471)
- When dragging a Token the ruler now provides a visualization of the last waypoint before the move would move into an unreachable space. (13139)
- Compendium applications now provide a copy ID button similar to other Document types which copies the compendium pack identifier to clipboard when clicked. (9848)
- The Document Issues section of the Support Details window now provides the ability to delete invalid Documents. (11098)
- The Support Details Document Issues tab now lists invalid Embedded Documents as well. (12515)
- The panning and movement keybindings are now two separate sets of keybindings. (13308)
The Game Canvas
- The Region Layer now has a new Measured Template Mode toggle. (13508)
- Regions can now be attached to Tokens. When a token is moved, all its attached regions are moved with it. (13586)
- Regions now support for Emanation shape (
EmanationShapeData) and Token shape (TokenShapeData). (13320) - Regions now support a Ring shape (
RingShapeData) and we have added a Ring shape tool to the Region Controls. (13374) - The Illumination Layer is now rendered at 50% resolution for improved performance unless Performance Mode is set to Maximum. (12991)
Package Development
- The new localization string
PACKAGE_AVAILABILITY_CODES.REQUIRES_CORE_UPGRADE_UNKNOWNprovides a more clear error message in cases where the website is unreachable during attempted package updates. (12712) - In favor of Adventure Documents, it is no longer possible to install World packages from the Setup menu. (12716)
- Compatibility warnings displayed when attempting to upgrade modules now include system version numbers. (13455)
- We have added the new
DataField#placeholderproperty, which is automatically localized byLOCALIZATION_PREFIXES. (12847)
API Improvements
Documents and Data
Document.createnow usesthis.implementationinstead of justthis. (13532)- Relative UUID syntax has been expanded and now supports referencing target Documents relative to a parent of the origin Document. To support this, we have a added
foundry.utils.buildRelativeUuidand added arelativeoption toDocumentUUIDField. (13543) - Resolved some lingering issues with
TypedSchemaFieldunit tests which were still asserting some unwanted behaviors. (13576) Document#persistedis a new boolean that can be used to identify if a Document has been persisted. A Document is persisted if it has a non-null UUID that resolves to a Document usingfromUuidfunctions. (13591)- The
DatabaseOperationobject now includes thedocumentNameof the modified Document. (13013) CONFIG.statusEffectshas been changed fromStatusEffectConfig[]to{[id: string]: StatusEffectConfig}with backwards compatibility. (13122)ClientDocument#onEmbednow calls a newly addedTypeDataModel#onEmbed, providing ability for developers to specify specific callback actions that should be taken when the embedded HTML for a given Document is added to the DOM. (13204)- Added
User.queryManywhich allows for sending the same same query to multiple users. (12998) - The sender ID or instance for any given User-query is now passed to the receiving handler. (13418)
CalendarData#onUpdateWorldTimeis a new hook that allows the currently active world calendar to implement an awaited workflow that is performed before downstreamupdateWorldTimehooks are called. (13514)
Applications and User Interface
AppV2#_canRendernow includes whether or not it is the first time the Application has rendered. (13585)- The new
JournalEntrySheet#viewedPageDocumentsgenerator can be used to iterate over theJournalEntryPageDocuments that are currently in view. (13496) - It is now possible to attach custom classes for the ProseMirror Editor by way of a global
classattribute that has been added to all nodes and marks in the schema. For more information please see: (8901) - Foundry VTT-provided ProseMirror plugins now have an associated PluginKey instance which should allow other developers to retrieve a plugin's state via its global PluginKey. For more information please see: (8925)
HTMLProseMirrorElement#savecan now be subclassed. For more information please see: (11157)- It is now possible to insert
inlineorblockHTML Templates via a ProseMirror menu option if they have been configured configured via the API. For more information please see: (13119)
The Game Canvas
- It is now possible to provided simplified configuration data for Token Movement types via
CONFIG.Token.movement.actions. For more information please see: (12934) -
RegionDocument#teleportToken(s)and#spawnTokensnow support a newavoidOccupied: boolean(default:true) option that changes the random placement method to avoid already occupied grid spaces if possible. (13164) RegionDocument#teleportTokensis a new function that can be used to teleport multiple tokens at the same time. (13165)RegionLayer#placeRegionis a new function that can be called to place a region with a single shape at the cursor. A number of parameters are supported as part of this function, for more information please see: (13536)RegionDocument#spawnTokensis a new function that can be used to create one or more tokens in a region. (13163)Scene#moveTokensis a new function that can be used to move or resize multiple tokens. For more information please see: (13580)TokenDocument#movenow resolves when the entire movement has finished instead of when the first checkpoint is reached.TokenMovementData#finished: Promise<boolean>andTokenMovementOperation#finished: Promise<boolean>have been added to support this. (13572)TokenMovementData/Operation#animation.{started: Promise<void>; ended: Promise<void>; duration: number}have been added, to provide promises for when the movement animation starts/ends and the duration of the animation for a given movement. (13573)- Token movement measurement options can now be configured using the new
TokenMovementData#measureOptions, additional supporting functions and properties have also been added. For more information please see: (13127) - The
layerClassproperty of Canvas DocumentCONFIGentries is now deprecated and will be removed in the future. (13268) - The Canvas Document
confirmBeforeCreation,renderSheetAfterCreation, andcontrolObjectAfterCreationlayer options have moved to thePlaceablesLayer. (13445) - Changing the padding for a scene now moves Scene Region shape positions relative to the padding adjustment as expected. (13594)
- We have added a new
preRenderHook that allows for modification of rendering data. (10397)
Package Development
Bug Fixes
Documents and Data
- The source passed to the
DataModelconstruction inEmbeddedDataField/EmbeddedDocumentField/ActorDeltaField/TypeDataField#initializeis no longer unnecessarily cleaned and migrated. (12863) DataModelinstance properties of readonly, getter, and embedded collection fields are now enumerable. (13019)- Corrected an issue which caused configured Scene Ambience sounds to continue playing when the scene was no longer active. (13413)
-
submitDatainDocumentSheet#_prepareSubmitDatais no longer mutated as a result ofDocument#validateoperations. (13458) - Creating a
ForcedReplacementof an existingForcedReplacementnow absorbs the target value rather than nesting operators. (13459) - Corrected an issue which caused failures when using
DataFieldOperatorsto replace anObjectFieldor modify its contained keys within aTypeDataFieldsystem structure. (13466) - Creating a new Scene within a World that does not have a currently active Scene now activates it once more. (13469)
- Corrected a styling issue which caused ProseMirror Image nodes to fail to respect center alignment. (13481)
- ProseMirror Imagelink nodes now preserve attributes as expected. (13482)
- Corrected an issue which caused
TypedObjectFieldto fail to clean properly if it containedSchemaFieldvalues. (13546) - The
getDocumentsquery now supports undefined paths. (13567) - Corrected an issue which caused
TypedObjectFieldwithrequired: falseornullable: trueto incorrectly initializeundefinedornullto{}. (13570) - To correct some inconsistencies between
Document#cloneandDataModel#clone, both now usestrict: falseandDocument#clonenow allows overridingparentandpack. (13571) - Invalid embedded Documents in
ActorDeltaare now dropped. (13574) - Corrected an issue which caused an inversion of logic for
DataModel.cleanData, which would copy the source data if thecopyoption wasfalseinstead oftrue. (13575) - The undesirable side effect of
DataModel#validateon a set of theoretical changes modifying the recordedinvalidstate of theDataModelinstance has been corrected. (13577), (13578)
Applications and User Interface
- Corrected an issue which prevented ProseMirror from reverting Headers to standard block paragraphs from the GUI menu. (9965)
- Corrected an issue that prevented the adding of multiple Detection Modes to a given Token, it no longer throws a Duplicate ID error. (12980)
- Available playlists in the Scene Configuration window are now sorted in alphabetical order. (13223)
- Corrected an issue which caused
Folder.createDialogto return a promise that never resolves. (13545) - ProseMirror KeyMaps now respects multiple open windows and should only trigger the keyed response in the currently active window. As part of this change
foundry.prosemirror.defaultPluginsis now deprecated. If your ProseMirror instance requires some pre-built plugins, you can retrieve such a list viafoundry.applications.ux.ProseMirrorEditor.buildDefaultPlugins(). (10139) - The ProseMirror schema now uses
block*for stub block elements. (10212) - ProseMirror no longer incorrectly shifts the nesting order for HTML elements contained within a
<cite>element. (10347) - ProseMirror now supports
<div>elements containing definition lists. (11872) - As part of work on our Detached Windows framework, an issue which caused ProseMirror editors to fail to render during reparenting has been corrected. (13143)
game.clipboard.copyPlainTextcan now be invoked in Detached Window contexts. (13452)- Corrected an issue which caused certain apps to no longer be scrollable when functioning as a Detached Window. (13486)
- Corrected an issue which caused
foundry.utils.polygonCentroidto return invalid results for cases of polygons with 1 or 2 points. (13489) - Corrected a styling issue for AppV2 journals which caused empty paragraph tags to fail to display an appropriate space. (13547)
- Corrected an issue which prevented the selection of a default
DocumentSheetif the Document subtype contained a.. (13582)
The Game Canvas
- Corrected an issue which prevented invalid embedded Documents from being deleted in
ActorDeltaif the token's base actor had been deleted. (13498) - Corrected an issue which caused movement animations to desynchronize when moving Multiple tokens at the same time, especially in cases where the group of moving tokens entered regions with
TOKEN_MOVE_IN/_OUT/_WITHINorTOKEN_ENTER/_EXITevent subscriptions. (13563) - Corrected an issue that required a reload in order to see a change in Scene Foreground Image elevation when updating the foreground elevation on a given scene. (13595)
Documentation Improvements
- Some of the setting buttons in the Game Settings, their labels, and hints have been updated to address some general issues with consistency. (13342)