August 14, 2026
Foundry Virtual Tabletop - Version 14 - Stable 8 Release Notes
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.
Alright everybody! Another release in our stable release cycle, Foundry Virtual Tabletop Version 14 Stable 8 (14.366), pairs our usual assortment of bug fixes with a satisfying amount of spring late summer cleaning. The dev team has taken the opportunity to work through some long-standing requests, several of which have been sitting patiently in our backlog for quite some time, with a particular focus in this release on server administration and the login experience. (Partly to prepare for our upcoming v14.5). Alongside those you will find improvements to how package listings are retrieved, a few accessibility refinements, and the usual scattering of API additions for our developer community. A few quick highlights for those looking for the TLDR:
Package Delivery!
The star of the show this time around: package installation is now better, faster, and features an all-around more complete user experience. The entire package index now gets delivered to clients as a single, Cloudflare-cached download of around 700kb (which should address any slow connection issues), and now gets served paginated instead of all at once for a smoother experience. Not only that, the new package index format allows us to know what the latest version of a package for your given core version is. If an author has a v15 release and a v14 release for a package, and you're still on v14, you would get that v14 update now rather than getting an error saying that a newer version of Foundry is required.
On top of that, package filtering got a considerable expansion of functionality, with new filters that allow you to search by required game system, content provider, or package author, premium content packages, and whether or not those packages are ones you already own. These filters and tags can be combined to create a more refined search, and even allow toggling exclusions.
Window Cleaning
A bit of a big change for those who have been using Foundry VTT for a long time: the Windows installer no longer defaults to a location within Program Files, instead favouring a location within the user's application data folder. This choice was made in an effort to resolve long-running prompts for users to launch with administrator rights and, hopefully, to calm Windows down a little bit on some of the persistent issues we've seen related to file permissions. In addition, the Windows Portable build has had its Electron data folder moved within the portable installation, so that running one no longer has any effect on the currently installed Foundry VTT.
New Login Experience
The setup screen now allows authenticated administrators to shut down a running server directly. The world login page has also received some attention, with user selection now becoming a text input which provides autocompletion of usernames. In addition, logging on the server-side has become a little more verbose, now recording both client session IP addresses and failed login attempts using an unknown username.
New Features
Architecture and Infrastructure
- The IP address of client sessions is now recorded in the server log, making it easier to identify unwanted connection attempts without consulting external firewall logs. (8406)
- Failed authentication attempts which use an invalid username are now recorded in the debug log. (12075)
- Authenticated administrators can now shut down the running server directly from the Setup screen. (5086)
- The log lines emitted whenever a hook callback was registered or unregistered are now gated behind
CONFIG.debug.hooks. (14617) - Windows portable builds now use a separate local
ElectronDatafolder contained within the portable installation. (14031)
Documents and Data
- Active Effects are now able to enrich the replacement data from the dedicated
ActiveEffect#getReplacementDatamethod. (14531)
Applications and User Interface
- Restoring a backup now prompts the user with the option to create a backup of the current world state beforehand, so that the state prior to the rollback can be recovered. (14449)
- Fixed a bug where the "Public as Character" message mode caused nearly all chat messages to be posted as speech bubbles. Chat bubbles now default to appearing only for messages which contain no rolls. (14607)
- User selection on the world login page is now a text input that provides autocompletion of usernames. (5628)
- When a world has only one user, that user is now preselected in the dropdown on the world login page. (13872)
- Invitation Links now display both IPv4 and IPv6 addresses. (6870)
- For links into a view that require authentication, the original target URL is now preserved when an unauthenticated user is redirected to the login page, allowing the user to reach their intended destination instead of redirecting to
server.url/game. (8512) - The Windows installer no longer defaults to installing within
Program Filesand now installs toUserProgramFiles (%LOCALAPPDATA%\Programs)instead. (8865) - Scene Navigation entries now have tooltips clarifying each scene's visibility state. (12962)
Package Development
- The repository list of available packages is now displayed in paginated batches rather than all at once, reducing the delay before the Module tab is populated and improving reliability for users whose connection could not retrieve the full list. (12648)
- More than one category can now be selected at a time in the package installation window. (13998)
- The package installer now indicates which game system a package or world requires. (9871)
- Added filters for Premium Content on the package installation screen, including the ability to filter by content you own. (6264)
- Package update checks now use the website package repository instead of the upstream manifest, so updates offer the most recent version compatible with your Foundry version. (7547)
Dice and Cards
- Rolling a formula which uses an invalid die denomination such as
1danow reports a clear error message rather than throwing an uncaughtTypeError. (14570)
Localization and Accessibility
- Added a solid background behind the Chat Log, gated on the existing photosensitivity setting, which removes the flickering that scrolling between bright chat cards and the transparent gaps between them could produce for photosensitive users. (14566)
API Improvements
Architecture and Infrastructure
- As part of working toward our standalone updater,
Updater.checkhas been tidied up to remove some dead code and provide more informative error messages. (6013)
Documents and Data
CompendiumCollection#setnow correctly returns itself rather than the associatedCompendiumFolderCollectionwhen passed a Folder document. (14636)
Applications and User Interface
- Added
HTMLAutocompleteTagsElement, an<autocomplete-tags>custom element which provides a text typeahead for selecting multiple values. (14644) - Relaxed the visibility of
ContextMenu##onClickItemto protected, allowing subclasses ofFilterMenuto bind additional events. (14546)
The Game Canvas
Bug Fixes
Documents and Data
- "Draw Result" right-click option on a Roll Table in the sidebar now functions as expected instead of throwing an error. (14624)
- Changing a Document's type with
ForcedReplacementno longer results in system data model issues as a result of an empty diff. (14229) - Fixed a bug where changes made to a base Actor using a forced replacement did not correctly propagate to synthetic Actors. (14394)
- User names are now required to be unique, as intended. (14652)
- Compendium collections without explicit GM/assistant-GM ownership levels no longer result in incorrect permission checks. (13484)
- Fixed a bug that caused the Files APIs to fail to decode URI components in file paths. (13217)
Applications and User Interface
- Occlusion Mode tag labels in Tile Palette now display correctly, rather than appearing empty. (14619)
- The Palette no longer incorrectly displays
<Multiple Values>for two placeables that are both in the same levels if the order of levels is different. (14620) - Scene Navigation now displays a pointer cursor when hovered. (14623)
- Fixed a bug that caused the notification reporting an invalid admin password to remain on screen even after a subsequent successful login. (11439)
- Fixed a bug that caused radio buttons to render incorrectly in chat messages if another sidebar tab was active when they were rendered. (13673)
- Radio inputs in an indeterminate state now render properly rather than not rendering at all. (14642)
- "Auto-zoom" to token using chat now takes token size into account. (13437)
- Complex terms such as
@attrnow recurse to extract their labels inside of theFormulaEditor. (14255) - Fixed a bug where the
changeevents dispatched by<file-picker>and<formula-input>reported the inner input as their target rather than the custom element itself. (14647) @Embeds no longer produce malformed output if preceded by a whitespace character. (14662)- Fixed a bug where the
.dice-rollelement in a chat message always displayed a pointer cursor even when it had no associated action. The cursor style is now applied based on the[data-action]selector instead. (14555) - Fixed a bug that caused deletion of a card deck to still post a message to chat even when
chatNotificationwas set tofalse. (10319)
The Game Canvas
- The Create Shapes from Controlled Walls button in the Region Config no longer incorrectly claims that the controlled walls do not form a closed loop. (14618)
TOKEN_MOVE_WITHINno longer unnecessarily triggers for the movement segment up to where the region boundary is crossed. (14641)- Corrected the spelling of
CanvasEdge#initialize. (14656)
Package Development
- Fixed a bug where updating a module which was incompatible with only one of several listed system requirements produced a warning implying that it was incompatible with all of them. (14606)
- Fixed a bug that resulted in the installation progress bar jumping erratically between values when installing larger packages. (11772)