March 18, 2025
Foundry Virtual Tabletop - Version 13 - Testing 3 Release Notes
We're excited to bring you Foundry VTT V13 Testing 3, the third release in the Feature Testing phase of our development cycle. This build is primarily focused on correcting bugs, improving the Foundry VTT API, and streamlining user experience based on feedback from our community.
This may be the last chance to check things out and provide actionable feedback before Stable hits!
WARNING: This Testing update is intended for those dedicated users who wish to test the new features provided in Version 13. It is not intended for use in weekly games or in games with heavy use of add-on modules. The goal for this build is to collect preliminary testing feedback from developers and users, not to power actual game sessions!
Update Highlights
Building Towards Greatness
Foundry VTT V13 Testing 3 introduces two new build options:
A Dedicated Node.js Build
This is now the lightweight, cross-platform version of Foundry VTT that should be used. It does not include an electron client, and all cross-platform dependencies are included.
Another benefit of this change is that the Linux build no longer needs to carry any cross-platform dependencies.
The Windows Portable Build
This new build type allows Windows users to conveniently test out new versions of Foundry VTT without disrupting their primary installation.
Before testing out a new major version of Foundry VTT, taking a Snapshot is recommended. At a minimum, you should always backup all your important Worlds!
Once your data is safely backed up, here's how to use the Windows Portable build try out the new Foundry VTT version:
- Triple-check that you backed up your data
- Download the Windows Portable build of the version to test
- Extract the downloaded file
- In the extracted folder, double-click the
Foundry Virtual Tabletop.exefile to launch it
WARNING: The Windows Portable build currently uses the same Foundry VTT User Data Folder as your "real" version of Foundry VTT. We strongly recommend creating and using a new Foundry VTT User Data Folder to test with instead.
Configuring a Dedicated "Test" Foundry User Data Folder
There are two different ways to create and use a test folder. First, create a new folder somewhere (for example, D:\Foundry_VTT_User_Data_Test). You can then tell Foundry VTT to use this new test user data folder in one of two ways:
-
The Foundry VTT Setup Screen
The simplest way to ensure that you do not accidentally affect your real data while testing is to change the Foundry User Data Folder manually before testing, but it may be easy to forget this step.
-
Windows shortcut
You can create a Windows shortcut that points to your portable
"Foundry Virtual Table Top.exe". You can then add a launch parameter to the end of the shortcut's target to automatically use your new test User Data folder like.For example, your shortcut's target might be:
"Foundry Virtual Tabletop.exe" --dataPath="D:\Foundry_VTT_User_Data_Test".
Token Drag Moving Forward
Based on user feedback, we have made some further refinements to the Token Drag Movement and Distance Measurement user experience.
- Right-clicking now only removes a single waypoint instead of cancelling the entire process.
- Instead, you can now use the ESC key to cancel the entire process.
- You can no longer remove the last waypoint using the keyboard (formerly ALT+F by default) because it ended up feeling awkward in practice.
We have also implemented a new labelling system for these two tools using HTML and CSS. These labels are designed to be as simple as possible and to be easily extended by our community developers.
Example 1: Simple Movement with Waypoints
At first, only the total movement displays. When using waypoints, the amount of movement past the last waypoint is also added (in parentheses).
In this example, the monk takes a corner as they head towards a cave.
Example 2: Complex Movement
If elevation is non-zero at any point of the move, the current elevation and the amount of change after the last waypoint are also added (in parentheses).
In this example, the monk first steps 5 feet down off a rock, descends an additional 20 feet to the road below, and then turns and heads into the cave.
Migrating Toward Modern Architecture + Documentation Galore
This release marks an important milestone for us: all JavaScript files have now been migrated to ESM under a single foundry.mjs module entrypoint, capstone-ing a multi-year modernization effort. Additionally, extensive effort was dedicated to fixing and improving API documentation throughout the software.
Oonts! Oonts! Oonts! Oonts!
On a much sillier note, you can now use the new Sound-Reactive Pulse animation to configure lights so they pulse in sync with your in-game audio. You can even set lights to react exclusively to bass, mid-tones, or treble—because... why not?
Additionally, for module developers, we've exposed a brand-new AudioHelper API, providing real-time audio analysis data so you can build even more immersive and audio-reactive experiences.
Breaking Changes
Applications and User Interface
- Added
ApplicationV2#_createContextMenuand deprecatedContextMenu.createforApplicationV2instances. Rationalized Document context menu hook signatures. (12335)
Architecture and Infrastructure
- Moved TinyMCE deprecation window forward from v15 to v14. (12330)
New Features
Architecture and Infrastructure
- Converted
PackageConfigurationtoApplicationV2, includingCategoryFilterApplication. (9976) - Implemented a portable (Electron) Windows build option. (12276)
- Performed additional dependency updates for V13 Testing 3, including Electron 35. (12331)
- Completed migration of all JavaScript files to ESM under a single foundry.mjs module entrypoint. (12343)
- Implemented a new cross-platform headless
Node.js(zip file) build option. (11755)
Documents and Data
- Fixed a bug where clicking the Update Roll Table button caused enrichers in the table description to become baked-in HTML instead. (12308)
Applications and User Interface
- Changed the window title of the "Update Notes" app to match the title of the notes themselves. (9949)
- Resolved a discrepancy in the Chrome browser between calendar pickers in the World edit config in the Setup screen and their in-World counterparts. (10043)
- When a User joins a World, their
/joincredentials can now be saved by a browser's password manager. (11674) - Updated deprecated Font Awesome icon names. (11862)
- Extended the
createDialogforJournalEntryPageto allow selecting aJournalCategoryas part of page creation. (12247) - Changed the main part of the
CombatTackerConfigdialog to allow for easier extension and better scrolling behavior. (12250) - Fixed a bug where the
AppV1window header was misaligned. (12251) - The Force Snap to Grid Vertices button toggle now universally controls grid snapping behavior across all layers, not just the active one. (12283)
- Resolved an issue where tags in
<string-tags>used--color-border-dark-3, which is not defined. (12286) - Added a "Clear Movement Histories" button to the Combat Tracker to clear the movement history of all Combatants in the viewed Combat encounter. (12326)
- Added server configuration support for a Electron fullscreen window preference. (12332)
- Right-clicking during both Distance Measurement and Token Drag Movement now only removes a single waypoint at a time. (12336)
- Token Drag Movement and Distance Measurement operations can now both be canceled by pressing the Escape key. (12338)
- Improved the presentation style of Ruler waypoint labels to use the HTML HUD container and more informative semantics. (12350)
The Game Canvas
- Implemented a texture loader enhancement that leverages memory-based texture eviction and source pinning. (10618)
- Changed the rendering of other users' cursors so that they now always render at the same size regardless of the current canvas zoom level. (12226)
- Added a “Sound-Reactive Pulse” light animation type using the new audio analysis API. (12294)
- Removed config-based toggling for KTX2/Basis loaders and enabled them by default. (12314)
Package Development
- Blocked uploads (via GUI only) into certain
/systems,/modules, and/worldspaths to help enforce best practices. (8467) - Improved error reporting when encountering a corrupt archive during package installation. (12069)
- Changed the "update available but for future core version" notification message so that it is treated as an informational notice instead of a warning. (12231)
Other Changes
- The
Settingssidebar no longer accessesSettingsConfigat the deprecatedglobalThislocation. (12255)
API Improvements
Documents and Data
- Added
Combat#clearMovementHistories,Combatant#clearMovementHistory, andCombatantGroup#clearMovementHistoriesto help manage movement history. (12296)
Applications and User Interface
- Added
DialogV2.input, a utility helper to generate a dialog for user input. (9894) - Converted
BackupListtoApplicationV2. (11323) - Converted
BackupManagertoApplicationV2. (11324) - Converted
CameraViewstoApplicationV2. (11327) - Converted
SetupApplicationConfigurationtoApplicationV2. (11388) - Converted
UpdateNotestoApplicationV2. (11395) - Converted
WorldConfigtoApplicationV2. (11397) - Added audio context analysis features to
AudioHelper. (12293) - Added
"input"as a dialog type forDialogV2.query. (12295) - Moved all buttons in the Combat Tracker that apply to the viewed Combat encounter into a context menu. (12327)
The Game Canvas
- Added event handlers to
InteractionLayerfor the following keybindings: Delete, Cycle View, Copy, Paste, Select All, Dismiss, Undo, and Highlight Objects. (11270) - Added
MeasuredTemplate#testPointto test whether a point is contained within the template shape. (11558) - Added a public function to update Region containment for all Tokens within a Scene or a subset of those Tokens. (11561)
- Exposed the movement data of the
TokenDocumentasTokenDocument#movement. (12240) - Added
CombatTracker#_shouldHighlightToken(token: Token): boolean, which determines whether a Token is highlighted if its Combatant is hovered in the Combat Tracker. (12282) - Added support for KTX2 compressed textures. (12300)
- The animation speed of a moving Token is now modified based on terrain difficulty. (12309)
- Added
PlaceableObject#_initializeDragLeft/RightandPlaceableObject#_finalizeDragLeft/Right. (12351)
Localization and Accessibility
- Added
i18ndebugging to report missing keys. (12347)
Other Changes
Bug Fixes
Architecture and Infrastructure
- Fixed a bug where backups would fail silently if they ran out of disk space. (10859)
- Fixed a bug where important "function" keybindings such as F5, F11, and F12 were not functioning in the Electron app. (12262)
Documents and Data
- Added missing documentation to
TourStepfor thesidebarTab,layer, andtoolproperties. (12065) - Fixed a bug where
DataModel#validatedid not validate values of forced replacement (==) keys. (12219) - Resolved an error that was thrown when creating a
CombatantGroup. (12269) - Fixed a bug where attempting to update multiple scenes could fail if some were cached and others were not. (12280)
- Added
CombatantGroupandJournalEntryCategorytoCONST.EMBEDDED_DOCUMENT_TYPES. (12288) - Fixed a bug where calling
Combat#rollInitiativewith{updateTurn: false}still updated the combat turn. (12311) - Calling
Combat#resetAllno longer changes which combatant is currently taking their turn. (12312) - Restored the ability to use type
filePicker: "folder"in a setting to allow users to pick a directory path. (12321) - Improved the support for
CombatantGroups in the variousCombat#_on*DescendantDocumentsfunctions duringCombat##onModifyCombatants. (12322) - Fixed a bug where removing an entry from a
TypedObjectFieldin a Document will fail data migration if the removedTypedObjectFieldcontained innerTypedObjectFields. (12324) - Fixed a bug where
SchemaField#migrateSourcedid not migrate values of forced replacement (==) keys. (12329)
Applications and User Interface
- Fixed some bugs with AV Dock rendering. (11929)
- Removed the Sheet Config header button that was incorrectly included in the Document Ownership Configuration window. (12146)
- Changed the View Documentation window so that it now opens in a standard browser tab instead of an iframe, indirectly resolving an issue involving cookie configuration. (12153)
- Fixed a bug where Documents in compendium packs were missing their import buttons. (12182)
- Prevented an error that occurred when switching to a non-core category of Scene controls. (12258)
- Fixed a bug where updating a
ChatMessagebefore the notification faded caused the notification to become permanent. (12290) - Fixed a bug where
textareabackground colors were not updated and did not respect light / dark mode. (12317) - Fixed a bug where the "Welcome to Foundry Virtual Tabletop" tour crashed on step 2. (12319)
- Improved deprecation handling for the
onClickfunction inSceneControls. (12320) - Fixed a bug where
ui.chat.render()failed to re-render the chat. (12323) - Fixed a bug where the
defaultboolean property onDialogV2buttons was not respected. (12325) - Non-core FolderConfig registrations are no longer ignored (12030)
- Fixed a bug where
ActorSheetV2#_onRenderincorrectly constructedDragDropwithpermissioninstead ofpermissions. (12354)
The Game Canvas
- Fixed a bug where movement cost modification was not applied to the first grid square if the region's shape was aligned with the grid. (12266)
- Removed square-grid-like wall snapping on gridless maps. (12281)
- Fixed a bug where movement cost modification did not apply to the first grid hex if the region's shape was aligned with the grid. (12291)
- Fixed a bug where
CanvasVisibilityincorrectly extendedCanvasLayerinstead ofCanvasGroupMixin(PIXI.Container). (12310) SoundsLayerno longer uses the deprecatedonClickfor its "Clear All" button. (12353)
Package Development
- Restored the ability to hot reload CSS. (11939)
Dice and Cards
- Improved the rendering of Roll flavor text. (12271)
Localization and Accessibility
- Resolved an issue where
EmbeddedDataFieldswere not being localized withLOCALIZATION_PREFIXESas expected. (11805) - Added
DOCUMENT.CombatantGroupandDOCUMENT.CombatantGroupstoen.json. (12289) - Fixed localization string for embedded Roll Tables (
"TABLE.ACTIONS.Draw", which should be "Range" in English). (12302)
Other Changes
DocumentSheetV2titles now automatically refresh when their Document is renamed. (11761)- Corrected some
CalendarDataschema issues. (12249) - Improved the styling of the chat log when it is popped out. (12273)
- Contents of an inactive ProseMirror editor overflow when using
{{ formGroup }}. (12275) - Added a missing CSS selector for
AppV1Journal Entry navigation. (12303) - Resolved an issue where nested tables were incorrectly not showing the results of subtables. (12346)
Documentation Improvements
The extent of the API Documentation work that was completed for this release was extremely signficant and isn't fully captured by the items here. Overall, the API documentation is in a much better place after V13 Testing 3.
Documents and Data
- Fixed a typo in the description of
ActiveEffect#active. (11585)
Applications and User Interface
- Renamed "Wall Direction" to "Restriction Direction". (10298)