logo HB

Changelog for Hummingbird

Version – released 8 October 2018 see blog post

Feature Added support for video playback. Currently support includes

  • VP8 and VP9 as video codecs
  • Vorbis as audio codec
  • WebM as container
  • Seeking, looping, autoplaying
  • Audio playback (with volume control)
  • Transparent videos
  • Decoding on a worker thread
  • The video playback is an optional feature you need to opt-in for by including an extra binary in your project. See the docs and the new samples in the native package for more details.
Feature Improved CPU rendering performance on mobile devices by ~30%.
Feature Added support for texture atlasing. Users can now provide one texture containing multiple textures during resource loading. Check the newly added Sample_TextureAtlasing for an example implementation.
FeatureWindows Added a tool capable of producing atlases out of a list of textures. Find it under Tools/AtlasCreator.exe. Check the docs, the newly added Sample_TextureAtlasing for an example usage or run with –help for more information..
Feature Added support for events to the data binding system. You can now use all standard mouse and keyboard events as data binding attributes (data-bind-click, data-bind-keydown). Event handlers bound in this way get access to a couple of new variables that allows you to work with other bound data. For example this allows you to bind a different click handler for each element in a data-bind-for. See the docs for further details.
FeatureUE4Experimental Added support for Android. Check the docs for more information.
FeatureUE4Experimental Added support for iOS. Check the docs for more information.
FeatureUE4 Added video and audio playback support.
FeatureUE4 Added support for texture atlasing to the plugin. Use the extended context menus on folders and files in the content browser or go to Hummingbird –> Launch Atlas Preview to open the atlas editor. The atlas editor allows you to create, remove and inspect atlases, modify each atlas’s properties or the textures in it.
Enhancement Added support for binding pointers to vectors and vectors of pointers. Previously, if your objects contained either you weren’t able to send them to JS via TriggerEvent or CreateModel.
Enhancement Added support for binding std::map and std::unordered_map.
EnhancementImportant Enhanced the example resource handlers in our samples – they are now able to process range requests (requests for chunks of the file instead of the entire file). Users of the native SDK should update their resource handlers with these or similar changes to efficiently use video.
Enhancement Added documentation about the usage of Preact.js in Hummingbird.
Enhancement Added documentation about the usage of Anime.js in Hummingbird.
Fix Fixed a crash when setting an animation property on a Node that has no animations.
Fix Fixed a bug that caused the animation fill mode to not be applied when set from JS on a running animation because the code did not check for changes.
Fix Fixed a bug which caused pages that contain a lot of SVG files to sometimes not load any of the SVGs.
Fix Fixed a bug which caused borders with small gradients to not render the edges of the border.
Fix The DirectX11 backend will now compile without warnings.
Fix Fixed a crash in the DirectX12 backend when used with shape morphing.
Fix Fixed a bug which would cause the OpenGL backend to render random bytes instead of text after a resize in some cases.
Fix Fixed a bug which would case the window.load event to not be fired if an image element is added to the DOM tree and later removed before the actual image was loaded.
Fix Fixed a memory leak in the image cache which would cause some image data to leak if they get removed from the tree and later re added.
Fix JavaScript errors thrown inside handlers of engine.on events will now be reported correctly. Previously, if you had the setup engine.on("foo", bar) and bar threw, the exception would be silenced without any visible traces.
FixXB1 Fixed a bug which caused the positions of some elements in the UI on Xbox One to be slightly different compared to other platforms.

Version – released 23 August 2018

Feature Added support for CSS media queries. Media queries enable UI authors to specify different rules for different display devices e.g. when the game’s UI should change appearance when ran on PCs with different resolutions. Attributes like the screen’s resolution, maximum dimensions and aspect ratio can be used to control which rules are in effect.
FeaturePS4 Added support for PS4 SDK 5.5.
FeatureUE4 Added support for Unreal Engine 4.20.
Enhancement C++11 lambdas can now be used as event handlers when transfering data between JS and C++. (i.e. can be passed to cohtml::MakeHandler)
Enhancement The data binding system can now work with pointers (both raw and smart pointers) and vectors of pointers. Previously, only vectors of object values and references could be bound.
EnhancementUE4 The data binding system can now work with Unreal Engine’s pointers (both raw and smart pointers / TUniquePtr, TSharedPtr) and vectors of pointers.
Enhancement Some DOM JavaScript functions (e.g. document.querySelector) will now throw exceptions instead of failing silently and returning empty results. We’ll add exception support to all functions, step by step, over a couple of other releases.
Enhancement The scripting system now uses the ES6 promises for everything. Previously, functions like engine.call and engine.trigger used an old implementation based on the Promises/A+ standard.
Fix Booleans values used in the data binding system will now correctly convert to either “true” or “false” in places that expect strings (e.g. data-bind-value).
Fix Fixed a minor memory leak when using data-bind-if inside data-bind-for and the data model was created through the JS API (i.e. engine.createModel).
Fix The data binding documentation was updated to exclude any outdated references and incorrect examples.
Fix Creating data binding models from C++ before the page has loaded and without calling cohtml::View::SynchronizeModels will no longer break the bindings. They’ll now be properly evaluated.
Fix Failing to convert a JavaScript object into a C++ object when calling engine.call or engine.trigger will now properly throw an error. Previously, it would fail silently.
Fix Fixed rendering distortions when using shadows (e.g. text-shadow) on elements which require downscaling (e.g. elements that have transform: scale with a multiplier less than 1).
Fix Fixed parsing the background-position: <top> <bottom> shorthand. Previously, the bottom part would be ignored.

Version – released 17 July 2018 – see blog post

Feature Added support for shape morphing. Shape morphing allows you smoothly animate between distinct shapes which enables some amazing visual effects to be achieved. See the blog post for more details.
Feature Added support for iOS 9. iOS now uses ChakraCore as a JavaScript virtual machine instead of JavaScriptCore. The latter is still used on all other non-JIT platforms (PS4, XB1, Switch, UWP).
Feature Extended the CSS property filter with a new custom value. The standard CSS value blur() is limited to being unidimensional; the new custom value coh-axis-blur(, ) solves this problem allowing you to specify separate blur values across both dimensions.
Feature overflow-x and overflow-y are now distinct CSS properties. Previously, only the combined overflow property was supported. This allows you to scroll in one direction while blocking scrolling in the other.
Feature Added native support for the <button> element.
Feature Added a new sample – Minimal Hello Hummingbird contains the bare minimum of code one needs to write to integrate Hummingbird into an application. For this reason, the sample doesn’t attempt to be platform independent and only works on Windows with DirectX11.
Enhancement Data binding expressions will now issue more errors upon invalid usage to aid debugging. Some examples include:

  • Invalid syntax
  • Using a non-existent property of some data model
  • Unsupported cases like using more than one data binding expression in the same data binding attribute (e.g. data-bind-value=”{{model.x}} + {{model.y}}”)
Enhancement UI screens with a lot of data binding will see big performance improvements – the improvement is roughly equal to the ratio between the number of elements generated through data-bind-for and the total number of DOM elements.

(data-bind-for injects special hidden elements for easier state management and the latter used to have their styles / layout computed even though they were never displayed and they didn’t affect other nodes).
Enhancement The custom Web Animations method animation.playFromTo now takes a function as optional third argument to be called after the animation completes.
Enhancement Added support for the background CSS shorthand. Previously, all of its parts (e.g. background-color, background-image, background-size, etc.) were supported but only when specified separately.
Enhancement <input> elements now have white background and black border as their default styles.
Enhancement The documentation now contains information about which CSS selectors are supported.
Enhancement The MacOS versions of the Hummingbird Launcher and Player, used for exploring and testing Hummingbird’s capabilities and performance were brought up to speed with their Windows counterparts. Dragging and dropping, reloading the page and all other shortcuts work as expected.
Enhancement The Hummingbird player now has 2 extra arguments (--width / --height) that you can use to specify the initial resolution of the application.
Enhancement All of our samples on all supported platforms now show how to correctly implement loading assets whose names contain non-ASCII characters. Previously, the samples only supported ASCII characters even though the library itself supported UTF8 URLs.
EnhancementUE4 Greatly improved the quality of in-world UIs (UIs attached as materials to in-world objects like planes and cubes). They are no longer affected by lightning and won’t look washed away / dimmed depending on how the light falls on it.
Fix Fixed UTF8 encoding of several special characters when used in URLs. Most notably, the equals sign (=) was not being encoded correctly which lead to inability to use query parameters in URLs.
Fix Element on<event> (e.g. onclick, onmousedown) handlers will now be invoked correctly. Previously, only event handlers attached through element.addEventListener would be invoked.
Fix SVG elements containing the property transform will now be rendered correctly in all cases. Previously, if the transform value was both scaling and translating the element, the translation would be incorrectly applied.
Fix Elements with clipping overflows (e.g. overflow: hidden; or overflow: scroll) now correctly block mouse/touch events from hitting their children that are in the clipped region.
Fix Having two different structural data binding attributes on the same element (e.g. having data-bind-for and data-bind-if) will no longer result in a crash. This is still unsupported but will instead log an error message.
Fix Having an element with data-bind-value which contains at least one child which also has a data binding attribute will no longer result in a crash. This is still unsupported but will instead log an error message. This is unsupported since data-bind-value replaces all of the element’s children with the text contents of the data-bind-value.
Fix Calling engine.updateWholeModel(obj) when obj is not an actual model will no longer result in a crash. This is still invalid API usage but will instead log an error message.
Fix When using data-bind-class with a value that starts as a non-empty string and later becomes an empty string, old classes will be correctly removed. Previously, setting the value to an empty string wouldn’t do anything.
Fix Added a virtual destructor to SystemCacheStats.
Fix Refreshing the Hummingbird page while connected with the DevTools will no longer cause the DevTools page to freeze.
FixMacOS Highlighting elements in the DevTools’ Elements panel will now work as expected on MacOS. Previously, the blue overlay that shows what element is hovered was not visible on Mac specifically.
FixUE4 Fixed a potential memory stomp in most Hummingbird plugin objects caused by attempts to write to freed memory.
FixUE4 Fixed a memory stomp when the data binding system tried to access FString objects with length greater than 16.
FixUE4 Live views used as background-image will now work correctly; previously, only <img> elements would work with live views.

Version – 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 – 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 – 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 – 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 – 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 Enhanced ES6 support to platforms where it was previously missing (PS4, XB1). Please note that ES6 modules are not supported.
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 – 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 – 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 – 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
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