Release notes

What’s new

Content Development

Data Binding Performance Tracing

Starting from this release, the performance of each data binding attribute can be inspected in the “Performance” tab of the Chrome Inspector.

For more details, see the documentation for Enhanced Performance Tracing

Core

Simple Filters

We’ve enhanced how CSS filters are processed in Prysm. Previously, each filter (like brightness, sepia, etc.) would generate its own texture, which could quickly add up in complex DOM trees—especially when stacking multiple filters.

With this update, filters without any opacity effects (like transparency or alpha changes) are now intelligently merged into a single color matrix operation. This reduces texture creation, saves memory, and significantly improves rendering performance-especially in deeply nested or filter-heavy documents.

Note that the following filters would still create a texture:

  • blur
  • coh-axis-blur
  • drop-shadow

Rendering

Global GPU Resources Pool

With this version of Prysm, several of the internal rendering caches are getting merged into a single one - the global GPU resources pool. Previously, the Prysm’s rendering library had multiple caches that had to be adjusted and fine-tuned individually. Now there is a single such cache that can be controlled with a single target GPU memory number. For more information, see the “Global GPU Resources Pool” in the documentation on Internal Caches.

Releasing of the user background and global backdrop mask textures

Previously, Prysm was not releasing the Global Backdrop Filter Mask and the User Background textures properly upon the destruction of the corresponding. cohtml::ViewRenderer of a given cohtml::View. Now, when calling cohtml::ViewRenderer::Destroy, both of those textures will be destroyed through a renoir::BRC_DestroyTexture command in the rendering backend. For more information on the specifics, see the corresponding documentation for both of the features:

Removed support for explicit resource state transitions generated by the rendering library

We have deprecated the renoir::RendererCaps::SupportsResourcesStateTransitions field and the BRC_TransitionTextureState, BC_TransitionTextureState and BC_TransitionDSTextureState rendering backend commands as a result of dropping the support for explicit resource state transitions generated by Renoir. These state transitions will continue to be handled entirely in the backends.

Unreal Engine

New delegates for modifying Library, System and View options

The Prysm integration for Unreal Engine now provides new ModifyLibraryParams, ModifySystemSettings, and ModifyViewSettings delegates for modifying all Prysm Library, System and View options.

ModifyLibraryParams, ModifySystemSettings, and ModifyViewSettings delegates are located inside ICohtmlPlugin.h, and are called right before creating a Prysm Library, System and View, passing a pointer to the already populated settings.

Migration guide

Changes to binding of 64-bit integer values

Starting from this release, all 64-bit integer values are bound to JavaScript as BigInt. In previous versions Number was used if the value fits in Number.MAX_SAFE_INTEGER, otherwise BigInt. If your code counts on the old behavior, you can restore it by changing the View setting: Int64BindingMode to Int64BindingModeType::Mixed, however this is not recommended and the option will be removed in future releases.

Changelog

Version 2.0.0.0


Released 10 Oct 2025
APIAdded ViewSettings::Int64BindingMode to control how to expose int64_t values to JavaScript
APIRemoved support for the backend commands for resource state transitions
FeatureIntroduced a Global GPU Resources Pool that unifies several internal caches for GPU resources. For more information, see the Internal Caches page in the documentation
FeatureEarly flex gap property support behind developer option --use-compatibility-yoga
FeatureAdded Inspector performance trace events for data binding
EnhancementIntroduced a Simple Filters feature that allows non-standard but optimized rendering of elements with color filters
EnhancementAdded command line arguments pass through for Player startup scripts
EnhancementEnhanced the release of the user background and the global backdrop filter mask to avoid leaks. For more information, see the pages on the Backdrop Filter and the Global Backdrop Filter
EnhancementEnhanced string conversion for background-repeat and mask-repeat style properties to match the web standard behavior
EnhancementEnhanced the debug marker support in Unity’s C# backend. Submitted markers are now properly visualized in graphics debugging tools like RenderDoc
EnhancementImproved styling performance with complex selectors in some cases
EnhancementImproved warnings for JS Styling via el.style.prop and el.style.someFunc()
EnhancementAdded a warning when setting invalid value using the el.style.setProperty JS API
EnhancementImproved warning message with more information when setting invalid values
EnhancementLog warning when trying to remove a non-existing property via el.style.removeProperty()
EnhancementEnhanced warnings for unsupported all property operations to be more descriptive
EnhancementAdded support for binding int64_t values as BigInt in JavaScript
EnhancementAdded support for using rem units on non-inline SVG root’s ‘width’ and ‘height’ presentation attributes
EnhancementAdded --position-x and --position-y options to the Player to control its starting window position
EnhancementsetInterval DOM API now supports the default value of 0 for omitted delay argument
EnhancementSupport for the Performance Monitor tab in DevTools
EnhancementThe performance monitor panel in the Inspector visualizes the top level profiling markers
EnhancementImplemented Depth-Stencil resolve to color texture for the OpenGL, Metal, and Nintendo Switch backends. The GPU tessellator now uses one texture less on those backends
EnhancementEnabled all GPU markers in the backends for the Debug and Development configurations
APIUnreal EngineRemoved the bConfigureForCustomEffectsAndCompositorAPI option
EnhancementUnreal EngineImproved error message for incorrectly configured views using Custom Effects
EnhancementUnreal EngineAdded support for Custom Effects with Unreal Engine Material Additive Blend Mode
EnhancementUnreal EngineAdded support for Vulkan Shader Model 6
EnhancementUnreal EngineIntegrated internal profiling markers into Unreal Insights
EnhancementUnreal EngineAdd ICohtmlPlugin::OnGetDataStorageProvider delegate for providing implementation of the cohtml::IDataStorageProvider
EnhancementUnreal EngineAdd Delegates to modify LibraryParams, SystemSettings and ViewSettings
FixPrevent custom expressions are not supported warning from appearing when trying to set a property to an invalid value that is not a custom expression value
FixFixed the type name of dynamic properties with the Safe Data Binding enabled
FixFixed a race condition when creating a ScriptCompiler in a worker thread
FixFixed getting inline styles with custom expressions in them for el.style properties and el.style.getPropertyValue()
FixFixed a bug where setting inline style for property fails if the old or new inline style for the property is using a custom expression value
FixFixed default computed style for ‘animation-delay’ and ‘transition-delay’ to now return 0s instead of just ‘0’
FixFixed the string serialization of ‘animation-timing-function’ and ‘transition-timing-function’ for the ‘step-end’ value to be ‘steps(1)’ instead of ‘steps(1, end)’, in line with browsers, since ‘end’ is the default value and should be omitted
FixFixed the default value for mask-repeat to be repeat instead of no-repeat, as per the standard
FixFixed reifying of mix-blend-mode in CSSTOM from color-Burn to color-burn
FixFixed reifying of background-repeat so that, for more than 1 comma separated values, we return CSSStyleValue as CSSTOM doesn’t currently support it
FixRemoved commas between color components in computed style of color(coh-scrgb ...) color value since this type of color value accepts only whitespace as a delimiter between color components
FixFixed text-align sometimes not working when parent container grows because of sibling
FixStop logging getProperty warning for non-existent property when removeProperty() was called instead
FixFixed JS Styling bugs for el.style.prop and el.style.someFunc() and el.style.cssText APIs
FixFixed default inline styles for properties to return empty strings instead of default computed styles for shorthand or undefined for longhand properties
FixFixed setting el.style.prop as null, now treated as setting to empty value and will remove the inline property declaration
FixFixed an assert when trying to remove all property inline style by setting it to empty style value
FixRemoved leading whitespace in el.style.cssText for the inline styles
FixRemoved xlink:href from the css properties as it is not a css property. It’s usage as an attribute is unaffected
FixRemoved non-standard unused css property percent
FixFixed JS APIs for modifying/getting styles not working for missing properties
FixFixed coh-font-fit not being recognized as a valid property when using it with el.style functions (getPropertyValue/setProperty/removeProperty) and the CSSTOM el.attributeStyleMap functions (get/set/delete/has)
FixFixed not being able to style coh-simple-opacity from JS via el.style.cohSimpleOpacity/via the functions of el.style/via the functions of el.attributeStyleMap for CSSTOM
FixFixed not being able to style backdrop-filter from JS via el.style.backdropFilter
FixFixed not being able to style coh-enable-backdrop-filter from JS via el.style.cohEnableBackdropFilter
FixFixed not being able to style coh-partitioned from JS via el.style.cohPartitioned
FixFixed SVG images without specified id attribute having an empty id attribute instead
FixFix crash when unloading an svg used as an image before it has fully loaded
FixFixed setInterval and setTimeout to work with non-positive delays correctly
FixFixed line height not being applied to <input type='button'> elements with a value attribute
FixFixed textarea and input elements with empty text not being sized correctly
FixFixed an issue in the Vulkan backend related to creating compute shaders and causing a hang on some Android devices
FixFixed an issue in the PS5 backend leading to a crash when drawing multiple views
FixFixed justify-content space-around failing to align for absolute children
FixFixed percent offsets on absolute elements sometimes resolving to negative values
FixUnreal EngineFixed a crash when accessing nullptr element of TObjectPtr<> C-style array bound through the CohtmlUTypeBinder
FixUnreal EngineFixed a crash upon uninitialization when destroying the FileSystemWriter implementation
FixUnreal EngineFixed FSlateApplication::Get() assert during OnDisplayMetricsChanged on MacOS
FixUnreal EngineFixed leaking User Background textures when a view gets destroyed before a WrapUserTexture call is received for them