New in version 0.24.0

Released one year ago

Please remember to uno clean your projects after upgrading Fuse.


  • Fix issue where the ValueChanged on <TextInput /> would fire when the textinput lose focus on iOS
  • Worked around an issue where TextInput controls were slow to activate the first time it's done when debugging an app using Xcode.


  • Cleaned up object lifetime bugs related to multiple <JavaScript> tags in the same ux:Class.
  • Fixed bug where bundled modules evaluated every save when required with ".js".
  • onValueChanged subscriber lifetime cleanup
  • Observable/parameter subscriber lifetime cleanup
  • Observable.onValueChanged(module, callback) - now expects module as first argument to tie the subscription to the lifetime of the module. Omitting the argument will still work but is deprecated and will leak.
  • this.onParameterChanged(function(param) {..}) deprecated (leaky). Use the new `this.Parameter.onValueChanged(module, function(param) {..}) instead.
  • All ScriptMethods now require a Fuse.Scripting.Context as the first argument.T
  • Added Node.findData(key) method which returns an observable of the data at key from the parent data context. Can be used to access inherited "global" data from pages/components.

Image async and WhileBusy

  • during loading images will now mark their nodes (and ancestors) as busy
  • use the WhileBusy to do something while loading
  • file image sources can also be loaded asynchronously now (previously it was only synchronous). Using MemoryPolicy="UnloadUnused" will use the asynchronous loading. The default setting of MemoryPolicy="PreloadRetain" will still use synchronous loading, though it isn't really "preloading" anymore.
  • SwipeNavigate now uses the parent of the gesture itself, not the navigation parent, to determine the swipe size. In most cases this shouldn't affect anything. If it does then place your SwipeNavigate inside the panel with the correct size, or set the LengthNode to the desired element.
  • Added PageControl.ActiveIndex and VisualNavigation.ActiveIndex. ActiveIndex is a two-way bindable property suitable for JavaScript to get and set the page, as well as respond to page changes.
  • A Router may now be used within a UX tree already containing a Router. This ends the path chain for the current router and allows distinct navigation for components.
  • Navigator gains the properties Reuse and Retain to control the lifetime of pages
  • NavigationControl.IsReusable is deprecated. Use Reuse and Retain instead


  • Add support for native LinearGradient in NativeViewHost on Android and iOS
  • Add support for native Ellipse shape inside NativeViewHost on Android and iOS

Native views

  • Fix issue where Android views would not rotate around the correct point
  • Fix issue where some native views would not forward input events to fuse on iOS
  • Fix issue where transforms on iOS could end up being incorrect
  • Fix issue where Circles with Strokes would not display correctly on Android
  • Add support for Opacity for elements inside <NativeViewHost />
  • Add support for ClipToBounds for elements inside <NativeViewHost />
  • Fix issue where <TextInput /> sometimes would not render correctly on older versions of iOS
  • Fix issue where setting Visibility to Collapsed or Hidden would not affect native views
  • Fix issue where Circles with Strokes would not display correctly on iOS

Data context improvements

  • Added support for multiple data objects per node. This fixes problems/ambiguities/bugs related to e.g. having multiple <JavaScript> tags per node, <JavaScript> directly on children of <Each>, <Select> etc.
  • As a result, Node.DataContext no longer exist, because there might be more than one data-contexts. For code where there were only one data-context, you can use Node.GetFirstData() as a replacement. Otherwise, you can use Node.GetLocalData to get all data-contexts, to figure out which one you need.

Triggers inside Each

  • Fixed data context bugs with triggers, Match/Case and StateGroup when used directly inside an Each tag.
  • Uno: WhileValue no longer implements IValue, but WhileTrue/False implements IToggleable, which means <Toggle /> still works on them.


  • The ScrollView.PropertyChanged event, and associated types, have been removed. Use the standard property changed system instead.
  • ScrollView public properties now generate property changed events


  • Several fixes were made to how Transform dynamically updates when using a RelativeTo and RelativeNode
  • The transform hierarchy has a new RelativeTransform layer from which some classes (Scaling, Translation) are now derived
  • The Transform.RelativeNode property is no longer available in other transform classes. It was not used in those anyway so it can be safely removed from your code.
  • The ITransformMode has changed to be more generic in how it handles subscriptions. If you're derived from this you'll need to implement the new interface and manually subscribe to events.
  • IResizeMode is no longer a ITransformMode. Resize subscribes to the Placed events of both the Target and RelativeNode


  • IViewport split into IViewport, IRenderViewport and common base ICommonViewport. This better tracks the intent of each viewport and identifies where they are being used. This was done since most locations that needed these could not provide the full interface previously, nor could they even define the fields correctly. If one of the fields you need is missing then please contact Fuse support to help with migration.
  • Viewport can now be used at an arbitrary location in the UX tree, not just as the root element
  • Viewport.Flatten has been removed, use Mode="RenderToTexture" instead.
  • Added IViewport.WorldToLocalRay
  • Visual.WindowToWorldRay has been removed, use Viewport.PointToWorldRay instead
  • Visual.WindowToLocal has been made non-virtual. As it can't reasonably be implemented by a derived class we assumed nobody has actually done this. Please contact Fuse support to help with migration if you did.
  • DefaultShading.Viewport is renamed to RenderViewport to avoid name collisions.
  • Trackball has a new default forward vector of 0,0,1 instead of 0,0,-1. This accounts for a normalization of our 3D space. This can be modified with the ForwardVector property.


  • Apps built in preview mode had before a postfix in the package/bundle name, so that a preview build and normal build could be differentiated, and live next to each other at the same time. Instead an optional project property replaces this feature. Called PreviewPackageName for Android, and PreviewBundleIdentifier for iOS. Eg.
    "Android": {
    "Package": "com.example.fuse",
    "PreviewPackage": "com.example.fuse.preview"
    "iOS": {
    "BundleIdentifier": "com.example.fuse",
    "PreviewBundleIdentifier": "com.example.fuse.preview"


  • Fuse.CacheFramebuffer is not longer exposed as a part of the public API. It was never meant as a visible part of the product. If you're using this, you'll have to implement similar functionality on your own.
  • Animating Text.Color and Stroke.Color does not generate a run-time warning anymore.
  • Effects: Fixed a bug where mask-textures didn't align properly with the element they were on, if the element itself was translucent but had non-translucent children.
  • StatusBar: Fix issue where setting a color on <Android.StatusBarConfig Color="#..." /> would not work
  • Fuse.Reactive: Fix an issue where the maximum call stack size was exceeded during the message-pump for Observables
  • Image: ResampleMode=Mipmap has been deprecated. This has effectively been the same as ResampleMode=Linear for a long time, and apps should use the latter instead. We now generate a warning if you use the former.
  • Fuse.Camera/Fuse.CameraRoll: Correct captured image orientation to EXIF values if available on Android. This solves camera orientation issues on Samsung devices.
  • Launcher: LaunchCall now works with telephone numbers containing spaces
  • GeoLocation: Fix spelling of property name auhtorizationRequest to authorizationRequest
  • Cycle: Add Cycle.FrequencyBack to control speed when returning to rest state
  • Text Rendering: Fixed a bug where text was being truncated/ellipsized on iOS when it shouldn't have been due to rounding errors.