logo HB

Changelog for Hummingbird


Version 1.11.0.2 – released 14 June 2018 – see blog post


Feature The DevTools’ Elements panel now supports modifications! Modifications allow you to add, edit and remove DOM elements and mutate CSS styles without reloading the page and with a simple click of a button. Quickly check what’s the exact color variation you want to use for this element’s background.
Feature The DevTools’ Element panel now allows you to find elements on the page much faster. Hovering over the element definition in HTML will render a blue overlay on top of the element. Conversely, click the ‘Select element’ button to visually select any part of the UI and the DevTools will show its HTML definition.
Feature Added support for blend modes via the CSS property mix-blend-mode.
Feature SVGs can now be used as masks (e.g. mask-image: url(mysvg.svg);). Previously, only simple shapes like polygons were usable.
Feature Added support for gradients (both linear and radient) in SVGs. Previously, gradients were only supported as CSS values.
Feature Added support for the CSS property letter-spacing.
Feature Added support for password fields via <input type="password">
Feature Added support for hex colors in CSS (e.g. color: #RRGGBB and color: #RRGGBBAA).
Feature Added support for CSS Object Model (CSSOM).
Feature Added a HTTP(S) module and a sample demonstrating how to add HTTP support to Hummingbird’s resource handling. The sample works only on Windows but is easily extendable to other platforms.
Feature Added HTTP(S) support to the Windows version of the Hummingbird Player.
Feature Several performance optimizations applied across the board for specific underperforming scenarios.
FeatureUE4 Added HTTP(S) support to the Hummingbird plugin.
FeatureUE4 Added a new level to our Unreal Engine 4 sample game. The level is a mini SciFi FPS game with HUD. It is a more detailed example of how to hook up UE4 objects with your UI. In particular, it shows data bound minimap, nameplates, game timers, ammo counters, kill count.
API Added new method – cohtml::View::FreeRenderingResources which allows you to clean any rendering resources owned by the given view (e.g. vertex / index buffers). This is an extension to the existing cohtml::System::FreeRenderingResources which allows only system-wide resources to be cleaned.

With the proper combinations of both methods now all resources owned by Hummingbird can be freed. This is usually only needed on platforms which force the game to release all GPU objects at some point in time (e.g. when suspending an application). Any freed resources will be recreated if a call is made to cohtml::View::Reload / cohtml::View::LoadURL.
Enhancement Added DevTools server for MacOS. This allows you to use the DevTools for applications running on MacOS. Same limitations as the console versions apply (no JS execution / debugging is possible; only the Elements and Performance panels work).
Enhancement Added drag and drop support for HTML files to the MacOS version of the Hummingbird player.
Enhancement Added support for the stroke-linecap attribute in SVG images.
Enhancement Added support for the stroke-linejoin attribute in SVG images.
Enhancement Added support for the stroke-miterlimit attribute in SVG images.
EnhancementAPI Improved the performance of data binding color values. Previously, colors would be evaluated through JavaScript which introduces unneeded overhead. To take advantage of the performance improvement, you need to implement TypeToElementType<T> for your own color types and specify the newly added ElementType::ET_Color.
EnhancementUnity3D Added a new property to the Hummingbird component allowing you to specify whether complex CSS selectors should be enabled.
Fix All URLs used in HTML / CSS / JavaScript files are now treated as UTF8. Previously, only ASCII characters were allowed in URLs. For this to take effect, it also requires that your cohtml::ResourceHandler implementation correctly reads file names encoded in UTF8. See the updated demo implementation in our samples.
Fix Fixed a crash when creating a data binding model out of a pointer aligned on an odd address. This is still unsupported but will now result in an error message instead of crash.
Fix Fixed a rare rendering artefact which would cause parts of an element to be rendered several pixels away of their correct positions when a CSS animation was running on the transform property.
Fix The CSS property text-align is now inherited (e.g. values given on the parent element are propagated to its children) as per the standard.
Fix background-size: cover; now works as expected. Previously, it would act as background-size: contain.
Fix Unsupported pseudo classes in CSS selectors will no longer cause the parsing process to stop. Previously, any CSS rule after an unsupported rule (e.g. div:focus) would not be processed.
Fix CSS animations on the transform property now also support animations when the transform value is a matrix (e.g. transform: matrix(1, 0, 0, 1, 0, 0);). Previously, animations would only work on transform functions (e.g. transform: rotate(45deg);).
FixAndroid Fixed a crash when reinitializing the library on Android due to some Android-specific thread-local storage not getting properly cleaned up.
FixUE4 The Hummingbird UMG widget is now DPI aware.
FixUE4 Fixed a crash in the Hummingbird plugin when an attempt was made to load a nonexistent Unreal texture.
FixUnity3D All mouse input events will now be processed as expected. Previously, some events weren’t sent to Hummingbird at all (e.g. mousemove) and others didn’t behave correctly when several Hummingbird components were present in the scene at the same time.

Version 1.10.0.4 – released 08 May 2018


Feature The DevTools Elements panel is now active! Use it to inspect the DOM tree and the computed CSS styles applied to your elements. This version only supports read-only operations – you will be able to modify the DOM and styles in 1.11.
Feature Complete support for CSS gradients.
Feature Support for jQuery 2.x.
Feature Support for Android 4.2. Previously, Android 4.4 was our minimal requirement.
Feature Support for 32-bit UWP.
Feature All URLs processed by Hummingbird will now be URL encoded. This means that if you are passing URLs containing whitespaces or other invalid characters you will need to decode them.

A new function –cohtml::Library::DecodeURLString – was added that does all of the heavy lifting which you need to call in your cohtml::IAsyncResourceHandler implementation. See our samples for reference.
APIBreakingChange cohtml::LocalizationManager was renamed to cohtml::ILocalizationManager to be aligned with the rest of our public interfaces.
Feature Our native and UE4 packages now contain a set of kits. Kits are entire UI screens that demonstrate what Hummingbird is capable of and how to use it in different scenarios and genres. They are meant to be a learning resource for content creators and come with their own documentation. We plan on introducing many other kits with the next releases but this one in particular contains the following kits:



Each of the kits is available as a .fla file to be opened in Adobe Animate and as an exported HTML file.

Feature Added a Hummingbird Launcher app. The Launcher will serve as the starting point of everyone working with Hummingbird and currently allows you to:

  • Preview our newly introduced kits
  • Preview our C++ / UE4 Samples
  • Test your own pages in the Hummingbird Player
  • Get quick links from your desktop to all useful links (Docs, Support, Changelog)
Feature The Hummingbird player on Windows has never looked better than now! Use the F1, F5 and F12 keyboard shortcuts to respectively go to our docs, reload the page or open the DevTools. Additionally, several new command line arguments were introduced:

  • --log-verbosity controls how verbose the Hummingbird logging system should be. Now defaults to info, used to default to debug
  • --debugger-port controls on which port should our DevTools listen. Defaults to 9444.
  • --input controls whether mouse interactions should send actual mouse events to Hummingbird or simulate touches. Useful when testing the UI of a mobile game on a desktop platform.



The MacOS version of the player is still missing these improvements but will catch up in 1.11.

Feature The Hummingbird Player and Launcher are now packaged in our UE4 installations. Find them in the same directory you installed our sample game.
Enhancement cohtml.WindowsDesktop.dll and our development apps now contain versioning info.
Enhancement You can now enable complex CSS selectors from the HummingbirdView component settings from the Unity3D editor.
Fix Client code linking against our SDK with enabled RTTI will now link properly. Previously, the linker would complain about missing RTTI info in some of our public classes.
Fix The CSS property box-shadow will now be properly parsed in all cases. Previously, some corner cases were not processed properly (e.g. rgba colors).
Fix The CSS property font-family will now be properly parsed in all cases. Previously, font family names that contained quotes would erroneously include the quotes in the font name.
Fix The CSS property transform: translate will now correctly work with percentage units. Previously, they were not parsed at all.
Fix Fixed a bug which would cause :hover selectors to stop working after the page is refreshed.
Fix Event handlers for global events (like mouse events) will now correctly be fired on the document and window. Previously, an event listener attached to the document or window would never be fired.
Fix Calling querySelect / querySelectAll will no longer issue a false warning.
Fix Fixed a crash caused by the presence of a <noscript> element in the page.
Fix Fixed a crash caused by an animation’s time being set to NaN through JavaScript.
Fix Data binding expressions that depend on a global model will now be updated in the same frame they are processed. Previously there was a 1-frame delay so if you had several nested data bound elements, it used to take several frames to show their contents.
Fix Fixed a rare case in which data bound elements whose models were interdependent would cause Hummingbird to enter an infinite loop.
Fix Fixed a crash at exit when a data-bind-for would loop over an array containing null items.
Fix Clicking on messages printed to the DevTools console will now lead you to the correct line in the source file responsible for that message. Previously, clicks led you to one line after the line in question.
Fix The DevTools will now connect on PS4. Previously, a crucial component of the DevTools was not getting uploaded to the dev kit and thus connection was impossible.

Version 1.9.0.6 – released 3 April 2018see blog post


Feature Added support for Nintendo Switch.
Feature Added support for 64-bit Universal Windows Platform (UWP).
Feature Added support for the CSS property text-align on all HTML elements except input fields (<input>, <textarea>). All forms (left, right, center, justify) of text alignment are supported.
FeatureAPIBreakingChange Added support for Input Method Editor (IME). Implement this API to allow players to write in input fields in Chinese, Japanese, Korean and others. The engine can now tell Hummingbird when text is being composited and Hummingbird will also notify the engine whenever something important IME-related happens (e.g. the user cancels the composition).

This is a breaking change – it adds new methods to cohtml::IViewListener which you’ll need to implement in your own view listener.
Feature Our native packages now contain a set of samples which focus on how to integrate specific features of the SDK into your engine. Our next releases will focus on adding many more samples as standalone apps instead of having all of the sample code in one place. This release contains the following samples:

  • HelloHummingbird – introduces the new sample infrastructure and just loads a single page
  • Nameplates – shows how to send data from C++ to JavaScript. In particular,it shows how to control the states of several nameplates (position, health, mana) in a straightforward way.
  • Localization – shows how to implement your version of cohtml::LocalizationManager and integrate Hummingbird’s localization system with your engine’s.
  • FallbackResources – Hummingbird has a feature which allows you to load cooked files in place of uncooked files (e.g. automatically load .dds textures even if the HTML file is referring to a .png). The sample demonstrates how to extend your implementation of cohtml::IAsyncResourceHandler to achieve that.
FeaturePS4 Added support for SDK 5.0.
FeatureUE4 Added support for UE4 4.19.
APIBreakingChange The renoir::Texture2D::IsDynamic boolean property has been removed. The same data is now accessible via the renoir::Texture2D::Props bitset (check for renoir::ImageProperties::IMP_Dynamic). This change will only affect you if you are using a custom renoir::RendererBackend implementation; if you are using one of the provided backends you don’t have to do anything about it.
Enhancement Our dev tools now run on all consoles (PS4, XB1, UWP). Due to limitations in the JavaScript Virtual machine, only the panels that don’t require JS execution will operate correctly on these platforms. At this moment, this only includes the ‘Performance’ panel.
Enhancement The Hummingbird Player application now supports drag & dropping HTML files on Windows. Dragging and dropping will cause the application to load the HTML page immediately.
Enhancement The Hummingbird Player application now takes a --root argument which allows you to specify the root directory used for coui:// URLs.
Enhancement The docs about HTML / CSS / JS Event support have been updated and are now available on the website under the Supported HTML section. They are no longer available as standalone PDF files.
EnhancementAPI You can now specify what texture filtering mode you want the SDK to use for preloaded images. This allows you to preserve pixelized details on your images if your game requires so. See the new property cohtml::IAsyncResourceResponse::UserImageData::TextureFiltering.
Enhancement Optimized event handling time by 50%. Depending on the complexity of your page this could mean an improvement of up to 15% in overall frame time.


Previously, we would keep asking the JS VM whether each of our elements had an event handler attached and whether we should fire it which proved to be very expensive on events that are fired often (like mouse events).
Enhancement The data binding system will now detect and report many more instances of invalid usage, greatly improving debugging.
Enhancement Extended the support for Web Animations. We now support seeking, reversing and specifying playback rate on the Animation object . (i.e. currentTime, playbackRate, reverse). Although usable from your JavaScript, we envision those functions will be mostly used through the Adobe Animate Exporter.
Enhancement You can now run different views on different ‘Layout’ worker threads. Previously, when integrating our task system with your engine you were allowed to only schedule ‘Layout’ tasks from a single thread (even when using multiple views).
EnhancementiOS Our iOS build now has bitcode support enabled.
Fix Fixed a crash caused by attempts to reparent nodes (detach from the DOM tree and attach to a new parent) from JavaScript.
Fix Fixed a crash caused whenever a <script> element would attempt to remove itself from the DOM tree during its own execution.
Fix Fixed a bug that caused GIF images to animate faster than they were supposed to when the GIF file didn’t specify frame duration.
Fix Fixed a bug which prevented the inspector from working while two or more views were running simultaneously.
Fix Fixed a series of warnings that the inspector triggered anytime it connected to a View.
Fix Fixed a bunch of minor instability issues with the Hummingbird Player (crashes, inconsistent input problems)
Fix Fixed a bug which caused the gamepad API to stop working after you refresh the page.
FixU3D Fixed a crash on a few Android devices caused by Unity3D telling us that the device was GLES3 capable when in fact it was only GLES2 compatible.

Version 1.8.0.1 – released 22 February 2018see blog post


Feature Added support for DirectX 12. We added a separate sample solution / project demonstrating that on Windows. DX12 is now the default renderer in our samples on Xbox One.
Feature Extended support for Chrome’s Developer Tools with the ‘Console’ panel. Console messages (e.g. from console.log or console.error) will now be displayed. You can type arbitrary JavaScript and Hummingbird will evaluate it and print the result. To access the tools, open Chrome and go to http://localhost:9444 after launching your game.
Feature Extended support for Chrome’s Developer Tools with the ‘Performance’ panel. You can now profile your UI and inspect what parts of the page are the most demanding.To access the tools, open Chrome and go to http://localhost:9444 after launching your game.
Feature Extended the data-bind-for syntax. It now supports passing the index of the current element, as well as an iterator for the element itself. Briefly, this allows you to use this syntax data-bind-for="index, it: {{myModel.myArray}}". See the docs for more info.
Feature Extended the standard CSS filter property with a new custom keyword. coh-color-matrix allows you to specify a color matrix which will be applied to the element and to achieve some effects that are not otherwise doable with standard CSS filters.
FeatureUE4 Support for UE4 4.19, Preview 3.
FeatureUE4 Added support for live views and preloaded images to the UE4 plugin. This allows you to easily achieve some impressive effects like displaying a 3D avatar of the player in the UI.
See the newly added LiveViewMap which shows how to have the feed from two cameras displayed within the UI.
FeatureUE4 The data binding system can now be used from Blueprints. You can create and update data models and synchronize the game and the UI without ever leaving Blueprints.
FeatureUE4 Unreal types (UCLASS / USTRUCT) are now automatically exposed to JavaScript. Previously, you would have had to describe them to the SDK by writing a CoherentBind function for each of your classes. This is now done automatically.
Fix The data binding system now ignores whitespace in data bind attributes. Previously, it would fail to interpret attributes correctly if they contained whitespaces.
Fix The CSS property transform-origin now works as expected with non-percentage values.
Fix Fixed a crash caused by clicking on text input past the final character after a certain number of characters were previously deleted.
Fix Added a virtual destructor to the cohtml::Library interface.
FixUE4 Fixed a bug causing the ‘Add HUD’ button in the Hummingbird menu to add a HUD page without visible text.

Version 1.7.0.3 – released 6 February 2018see blog post


Feature Added support for GIF images in <img> tags.
Feature Added support for the <nav>, <header>, and <footer> elements.
Feature Added support for attributes on DOM elements, including the dataset API used for setting data-* attributes.
Feature Added support for 3D transforms, transform-origin, and perspective-origin. Completed support for transform (previously it was missing support for the matrix2d syntax).
Feature Added support for complex CSS selectors. The SDK now works correctly with the following selectors:

Support for this feature is hidden behind the ViewSettings::EnableComplexCSSSelectorsStyling flag and is turned off by default as it has performance implications.

Feature Added support for the inherit keyword in CSS rules.
Feature Added partial support for the WebAnimations API.
Feature Added support for the History API.
Feature Added support for the Location API.
Feature Added support the Text and CharacterData interfaces which allows text nodes in the DOM to be manipulated from JS.
Feature Added support for Node.getFirstChild and Node.getLastChild.
Feature Added support for the MutationObserver API.
Feature Added support for document.querySelector and document.querySelectorAll.
Feature The data binding system now allows you to bind to the CSS properties class, background-image, and transform. This allows you to synchronize more data between the UI and the game. See the blog post linked above for examples. The relevant data-binding attributes are data-bind-class, data-bind-class-toggle, data-bind-background-image-url, and data-bind-transform2d attributes.
Feature The data binding system now supports structural data binding via the data-bind-if and data-bind-for attributes. Together they allow you to generate elements in the page dynamically, directly from your data. See the blog post / documentation for further information.
Feature Added support for data binding using pure JavaScript objects. This allows UI developers to use the system without corresponding C++ models which is especially helpful for mocking and for data that’s computed / stored in JS. See the docs for further information.
Feature Added initial support for Chrome’s Developer Tools. Open Chrome and go to http://localhost:9444 after launching your game to access the tools. Currently only the ‘Source‘ panel works which serves as a JS debugger. You can set breakpoints, add watches, inspect values and the callstack and follow the code’s execution.
FeatureUE4 Added support for Unreal Engine 4.18
Enhancement Improved performance by drastically improving cache locality in some of our computationally intensive systems like animation playback and event dispatching.
Enhancement Expanded the existing JS interface for the Document by adding items from the standard.
Enhancement Added ES6 support to platforms where it was previously missing (PS4, XB1)
Enhancement Added canvas support to platforms where it was previously missing (PS4, XB1, iOS, MacOS)
Enhancement Improved library compatibility on Android – all symbols in our third party dependencies are now hidden in a namespace so they won’t clash with versions of the same libraries the engine is using.
EnhancementAPI Added new public method (cohtml::View::ShowElementAABBs) allowing users to visualize the bounding boxes of all elements on the page.
Enhancement Added support for console.time and console.timeEnd
Enhancement The cohtml::Library interface now supports reinitialization. Previously, it was unsupported to deinitialize and create a second instance of the library.
Fix The JS event ‘touchend’ will now be properly dispatched. Previously, only ‘touchstart’ and ‘touchmoved’ were dispatched.
Fix Fixed multiple bugs in the <input> and <textarea> elements caused by incorrect calculation of text size.
Fix The :hover CSS pseudoselector is now correctly applied to all hovered elements in the DOM tree. Previously, only the topmost element would receive this style but not his ancestors.
Fix Fixed a major memory leak on platforms using V8 (Windows, Android) caused by garbage collection being run very rarely.
Fix Fixed a crash in engine.call on platforms using JavaScriptCore (PS4, XB1, iOS, MacOS).

Version 1.5 – released 22 August 2017 – see blog post


Feature Added live view support. Live views allow you to show 3D scenes in the UI (picture-in-picture) e.g. show a player’s 3D avatar or an item in the UI.
Feature Added CSS filter support. CSS filters allow you to apply postprocessing effects on any element in the page e.g. blur or grayscale.
Feature Added a new, nonstandard, display mode for layout – display: simple which greatly simplifies the layout algorithm used by Hummingbird and results in much faster frame time. See the docs for more details.
FeatureUE4 Introduced a plugin for UE4 closely resembling the GT plugin. It features:

  • Creating UI for HUDs and for in-world surfaces via AHUD / actor components
  • Slate and UMG support
  • Full keyboard, mouse and gamepad support
  • Localization support
  • Blueprint support for all of the above
  • Performance metrics via stat Hummingbird / stat HummingbirdMemory
  • Console commands (e.g. hb.reload to reload all Hummingbird views)
  • In-editor menu for setting up common system properties
  • Supports Windows, PS4 and XboxOne
  • Comes in a separate installer (or .zip archive if you’d rather)
  • Separate docs
  • A sample game for versions UE4.16+.

Version 1.3.0.0 – released 26 June 2017


Feature Significantly improved the CSS layout algorithm. Added support for percent (%) values on positions and sizes.
Feature Significant improvements in the SVG renderer. SVGs now look better, take less memory and are rendered more efficiently.
Feature Added support for declarative data-binding. Developers can bind values in the HTML to their data-model in C++.
Feature Added gamepad support and API for using gamepads directly in Hummingbird.
Feature Implemented the innerHTML JavaScript property on DOM nodes.
Enhancement Improved the performance of Hummingbird during style changes.

Version 1.1.1.0 – released 20 Feb 2017


Fixed Crash on closing Unity game on MAC
Fixed Animations look choppy on Motorola G (3rd gen) with OpenGL ES 3
Fixed Toggling the display property from block to none breaks the layout
FixedUnity Strategy game (cards game) sample – cards pop-up descriptions do not occur on tocuh event
Fixed Fix nodes position when an node is changed from hidden to visible
Fixed JS GetClassNames return name with trailing ws

Version 1.1.0.7 – released 11 Jan 2017

FeatureNative Added JS debugger for Android and Windows
FeatureUnityNative Added support for compressed image formats on mobile – ASTC, ETC1, ETC2
FeatureNative Added support for pre-loaded images
FeatureNative Added support for fallback image formats – in development users can use PNG but in shipping the library automatically loads ETC/DDS etc.
FeatureNative Added support for a “onload” event and resource load tracking
EnhancementNativeUnity Coherent Editor 1.5.3.4
EnhancementUnityNative Added back and forth buttons to the samples
EnhancementUnity Added support for Unity 5.5
Fixed SVG Opacity does not work as expected
Fixed Bug in the MOBA sample – the potions randomly disappear
FixedUnity On low end devices the input events do not work
Known Issues The resourses in Mad Rabbits Sample and Moba Main Menu Sample load slowly
Known Issues On Motorola G (3rd gen) with OpenGL ES 3, the animations look choppy
Known Issues Problem with animations when fired with onload event
Known Issues Crash on attaching the debugger to a page flooding with console.log()
Known Issues In particular cases, the keyboard input could cause a crash


Version 1.02 – released 16 Nov 2016

FeatureNative Added debugger shared object to the Android apk
FeatureUnityNative The global context logic removed from JSC
Fixed Error in the backend when running Multiple views on gles2
Fixed SVG polygon renderer on iOS
Fixed MOBA sample – bug with the On/OFF music button
Fixed MOBA sample – MainMenu fixed
FixedUnity Unity documentation indexes
FixedUnity Mad Rabbits sample – crash on exit on iOS
FixedNative Menu sample – js error on toggling menu
Fixed Unity Logging in Unity does not work


Version 1.0 – released 08 Nov 2016

FeatureUnityNative Support for OpenGL ES 2 & OpenGL ES 3 on Android and iOS
FeatureUnityNative Support for input related tags
FeatureUnityNative Support for @font-face rule
FeatureUnityNative Support for keyframe animations
FeatureUnityNative Support for text shadow and box shadow
FeatureUnityNative Support for masks
FeatureUnityNative Support for 9-slice and rounded borders
FeatureUnityNative Support for text input and touch events
FeatureUnityNative Support for multiple views
FeatureUnityNative Support for SVG images (Tiny specification)
FeatureUnityNative Support for reloading pages in the UI
FeatureUnityNative Devtools integration in development, console log printing working on Android and Windows