January 16, 2026
Foundry Virtual Tabletop - Version 14 - Prototype 3 Release Notes
Foundry VTT Version 14 is continuing to shape up as 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. You should always back up your User Data before trying a Prototype release.
Highlights
This is the final release of V14's Prototype phase and we've made some huge strides across our major epics for V14! Check out our Prototype 1 release notes for an overview of everything we're tackling. This release is packed with new features, API enhancements, bug fixes, and other changes so we recommend checking out the full patch notes. We've highlighted some major changes below for anyone looking for a quick overview of what has changed.
Level Up Your Scenes
Prototype 3 introduces phase 1 of our work on Scene Levels. It allows you to make multiple levels in a Scene, define their elevation ranges, make sublevels visible to upper levels, transport Tokens between levels with the new Change Level behavior, block off certain areas with the new Surface region, and provides a new Placeables tab in the sidebar for seeing the content of your Scene. The UI and UX of Scene Levels is not final but we wanted to get it in the hands of users to start testing while we continue to refine and improve things.
Shared Fog of War
Your party can now share their fog of war exploration! Every Scene can customize their Fog of War exploration mode with new options for Disabled, Individual, and Shared fog exploration that takes advantage of the new API for sharing fog of war updates and unionizing them on all users' machines. Here's what those new options do:
- Disabled: Prevents further fog of war reveals. Players will only be able to see what their Token's vision allows and any areas which were already revealed. This is the equivalent of unchecking V13's Fog Exploration option.
- Individual: The classic Fog of War exploration mode where each user can only see areas that they've explored.
- Shared: Players can see any area that they or other Players have explored.
Active Effects V2
Active Effects have continued to get more powerful as we have nearly cleared out all of the issues in our Active Effects V2 Epic!
Token Effects
It's now possible to make changes to a Token using Active Effects which makes it a breeze to have working torches, goggles that grant a new vision mode, a mask that disguises your Token with a new image, and so much more. The Actor now defines a tokenOverrides field which allows you to make changes to things like vision, detection modes, light emission, image, alpha, disposition, size, and more! This feature doesn't process changes of Token dimensions. A system desiring to do so can easily override TokenDocument#_onOverrideSize and make the change with any system-specific logic necessary.
Effect Expiration Gives Your AEs a Use By Date
We've expanded the functionality of Active Effect durations. They can now be defined in more than just seconds and can include an "expiry event" like at the start or end of a combat, turn, or round. Systems can expand these options by defining custom events and announcing their occurrence to the registry (via ActiveEffect.registry#refresh). Temporary Active Effects are also tracked in a new registry (ActiveEffect.registry) that can be used to track, update, and delete effects which have expired or changed.
Actor Data in Active Effect Values
Rounding out our Active Effect improvements is the ability to reference Actor data in the value field of an Active Effect! This has been a popular request which seems quite simple on its face but there were a lot of complicated edge cases which had to be considered during implementation.
World Creation Improvements
On the 3rd Prototype Kim Created the World (Creation Screen)
The World Creation screen has gotten a new coat of paint and functionality! Creating a World now gives you a live preview of your World title and background image selection. Game System selection is also now more visual with a filterable list of Game Systems to the right of your World details.
Start Playing Faster with Quick Start Adventures
Modules can now declare themselves as containing a Quick Start Adventure. These Adventures will appear in the World Creation screen and allow users to initialize their World with the Adventure's contents so you can get started playing faster!
Breaking Changes
Documents and Data
- The changes made by Active Effects can now reference actor data. (5841)
- Migrated
ActiveEffect#changestoActiveEffect#system#changes. (13740)
Applications and User Interface
- Allowed for indicating Active Effect duration using time units other than seconds and added expiry events to potentially end them early. (13332)
New Features
Architecture and Infrastructure
- Refactored
CollectionandSetto utilize native Iterator Helpers. (12522)
Documents and Data
- Changed the behavior of
_state.sourceinDataModel#cleanDatato guarantee that it only reports trustworthy existing model source data rather than treating new candidate data as existing source. (13453) - Provided a means of applying
DataField-guided Active Effect changes to preparedsystemdata. (13460) - Added the
subtractActiveEffectmode as a new, valid change type. (13613) - Added a registry of embedded
ActiveEffectsin order to track their durations and expired statuses. (13667)
Applications and User Interface
- Generalized the Scene Region legend as a new sidebar tab which provides granular ability to select and interact with canvas objects on any active canvas layer. (12717)
- Refined the ProseMirror menu to better accommodate the increased options added by modules or systems. (13120)
- Improved UX by visually disabling Prototype Token configuration fields that are currently overridden by a Prototype Token Override. (13404)
- Added a close button to the main menu so that the ESC key is no longer the only means of closing it. (13530)
- The configuration window for a Region is no longer opened automatically for Measured Template Regions. (13635)
- Combined the Send To Back and Bring to Front control buttons in the Placeable HUD into a single button. (13730)
The Game Canvas
- Added support for shared Fog of War exploration. (13672)
- Added support for targeting Token data with Active Effects, allowing them to modify properties such as light emitted (but not size on grid). (13461)
- Added the ability to animate Regions that are attached to Tokens. (13625)
- All grid space center points of a Token's shape are tested for visibility, occlusion, and Region containment instead of only performing these checks on the centerpoint of the token. (13633)
- Added a
Highlightmode to the Region Config. If set toCovered Grid Spacesit changes the highlighted area from their true shapes to the grid spaces on which a 1x1 Token would be contained within the Region. (13634) - Regions attached to Tokens now rotate with the Token. (13647)
- The
GridHexconstructor andshiftHexmethod are now required to respect cube coordinate identity and will throw an error for invalid cube coordinates. (13660) - The movement histories of all combatants are cleared on turn start. Previously only the movement history of the combatant that started its turn was cleared. (13686)
- The "Attachment" option has been moved from the Token Config to the Region Config. Added the
RegionDocument#attachedTokenfield and removed theTokenDocument#attachmentsfield. (13725)
Package Development
- Modules can now define a set of "Quick-Start" adventures to make it much easier to add their content to a new World. (10187)
- Created a World Creation screen to provide a richer interface with support for Quick-Start Adventures. (13704)
Localization and Accessibility
- Relocated some top-level entries in
en.jsonto prevent some common double localization issues. (13669) - Added the global
_localias ofgame.i18n.localizeto improve developer experience. (13680)
Other Changes
- Added
authorfield to Notes. Now notes that are not linked to a journal entry can only be updated by the author or a GM. Previously any user with theNOTE_CREATEpermission could update notes that were not linked to a journal entry. (13492) - The
Number#signedStringmethod now usesIntl.NumberFormat. (13662)
API Improvements
Documents and Data
- Incorporated the workflow to handle migrations for each
DataFieldas part of the existingDataField#cleanrecursion instead of requiring a separate recursive iteration. (13430) - Renamed the
documentTypeof the instructions passed tofoundry.documents.modifyBatchtodocumentName. (13658) - Added
TokenDocument#depth,TokenDocument#getMovementOrigin,TokenDocument#getVisionOrigin,TokenDocument#getLightOrigin,TokenDocument#getSoundOrigin, andTokenDocument#getListenerPosition. More details on what each of these does can be found in the issue. (13683) - Added a "Define Surface" region behavior, which allows users to configure the restriction of light, movement, sight, and sound through the bottom and/or top surfaces of the region. (13685)
Applications and User Interface
- Added an Autocompletion menu API for rendering an on-screen drop-down menu of keyboard-navigable options. Check the issue for an example. (13695)
- Added the
HTMLFormulaInputElementcustom element that behaves like a normal text input, but includes a button for spawning a modalFormulaEditorapplication that may also be used to edit the field's contents. Check the issue for an example. (13696) - Added the
FormulaEditorapplication to aid in formula input. It contains a bespoke ProseMirror editor optimised for editing formula strings and auto-completing them with human-readable labels. Check the issue for an example. (13697)
The Game Canvas
- Redesigned vision, zero-priority light, and sound sources so that they are no longer unbounded vertically. Even if a point is within the 2D shape of a source, it may still be unaffected by it depending on the point's elevation, the source's elevation, and the source's radius. (12740)
- Added support for plotting a Token movement that isn't immediately started. This introduces
TokenMovementOptions#plannedwhich causes the movement to not start untilTokenDocument#startMovementis called. It triggersTokenDocument#_onMovementPlannedandplanTokenrather than the normal movement hooks. (13639) - Game Master's can now choose a transition animation in Teleport Token Behaviors that will occur when Tokens are teleported to a different Scene. (13643)
- The
options.onMove/onRotateofRegionLayer#placeRegioncan returnfalseto get the default movement/rotation behavior. (13652) - Added an API to share fog updates and combine them for each client. (13726)
Localization and Accessibility
- Merged the previous functionality of
game.i18n.format()intogame.i18n.localize(). (13357)
Other Changes
- Added
RegionDocument.createTokenEmanation, which creates an emanation Region for a Token that is immediately attached to it. (13640) - Added
BaseShapeData#isAffectedByGrid, which istrueif the shape is affected by the grid it is in. (13645) - Added a
bidirectionaloption todiffObject. Turning on this option effectively hasdiffObjectcreate a "patch" (analogous to Unixdiff). Merging the patch into theoriginalobject will reproduceother. (13678) - When the Application cannot be rendered
ApplicationV2#_canRenderis no longer called and returns early instead. (13722)
Bug Fixes
Documents and Data
- Added revalidation for values that were changed by
ActiveEffects. (9468) - Fixed a bug where sometimes
ActiveEffectduration could be reported asnonewhen 1 turn was still remaining. (10526) - Resolved an issue where Documents with invalid
EmbeddedDocumentscould not be duplicated or copied & pasted. (10709) - Optional readonly data fields no longer cause an error. (13030)
- Added
DataModel#getFieldForProperty(propertyKey: string): DataField|void, which returns the field for the property of the Data Model instance. (13249) - Fixed a bug where the embedded data model instance within an embedded data model was incorrect. (13589)
- Batched Document modifications are broadcast to connected clients and not just the one that made them. (13656)
- Using CTRL+X - CTRL+V to cut and paste unlinked Tokens with an embedded document in their delta no longer fails. (13674)
- Subclass implementations of
_preCleanDataare now correctly called. (13698)
Applications and User Interface
- Fixed custom elements failing to restore focus to their primary inputs on re-render. (11511)
- Added light mode styles for horizontal rules (
<hr>elements). (13550) HTMLProseMirrorElementnow correctly only opens content links on a left/primary click rather than on a click with any mouse button. (13556)- Added light mode styling for ProseMirror chat message inputs. (13616)
- Resolved an issue where the fieldset legends in Region Behavior configuration dialogs were empty. (13618)
- Fixed the placement of prompt dialogs
ProseMirrormenus so that they no longer can spawn partially offscreen. (13619) - Fixed a bug where the "Add Page" button of a detached Journal Entry could not successfully add a page. (13620)
- Prevented errors that were previously occurring when the Actor sheet was opened while using a system that did not have Active Effects configured. (13628)
- Mouse click events are now registered immediately after initial load. (13655)
- Added
font-weight: boldon the::afterselector for duotone checkboxes which maintains size between checked and unchecked glyphs. (13708) - Clicking the 'Participant Status' label in
CombatantConfignow focuses on the correct input. (13714)
The Game Canvas
- Fixed a bug where triggering a scene transition while another one is ongoing broke the canvas. (13622)
- Resolved an issue where scene transitions revealed the scene to users that did not have a Token with vision. (13623)
- Fixed a bug where attempting to activate/view a scene that was configured to use a non-existent transition type caused the scene to fail to load entirely and also prevented other scenes from loading. (13630)
- Fixed a bug where off-screen pings were not displaying. (13560)
- Resolved an issue where moving a Token incorrectly triggered
TOKEN_ANIMATION_INevents for the Regions that are attached to it. (13624) - In cases where a Prototype Token field's value can be
null, they are now only overridden by global values when the current value isundefined. (13638) - Token's Light and Sight sources are updated on rotation even if Token Vision Animation is disabled. (13648)
- Shape constraints are updated when a Token with an attached restricted Region is moved. (13649)
RegionLayer#placeRegionpans the Canvas when the cursor is close to the screen's edge. (13651)- Creating a Region with a zero-angle semi-circle cone shape no longer crashes the canvas. (13653)
- The
TokenDocument#measureMovementPathmethod no longer throws an error if any waypoint has bothwidthandheightthat are not multiples of 0.5. (13659) - Fixed incorrect offsets being passed to
TokenMovementCostFunction. (13664), (13665) - Tokens with one dimension smaller than 0.25 now correctly occupy their grid space. (13666)
- Tokens are no longer blocked by walls when Unconstrained Movement is enabled. (13684)
TokenDocument#revertRecordedMovementnow uses thedisplacemovement action to undo the movement. (13724)
Localization and Accessibility
- Added missing localization for
CONTROLS.RegionRing. (13615) - Updated the localization for the Scene configuration dialog so that the it now correctly uses
MEASUREMENT.Pixelsinstead of the incorrectSCENE.Pixelsstring. (13617)
Other Changes
- Fixed a bug where
DocumentCollection#set,EmbeddedCollectionDelta#set, andEmbeddedCollectionDelta#deletereturnedvoidinstead ofthis/boolean. (13565) - Resolved an issue where
ProseMirroreditors in source edit mode did not submit their current content. (13605) - Fixed a bug where secret blocks nested within other secret blocks were not styled properly. (13631)
- When
options.snapisfalseTokenShapeData#moveno longer snaps the origin. (13644) TokenShapeData#originnow returns anElevatedPointinstead of aPoint. (13646)Document.shimDatais now prevented from triggering its own warnings. (13690)- Chat commands are now parsed correctly again. (13717)