New in version 1.4.0

Released 5 months ago

Please remember to uno clean your projects after upgrading Fuse.


  • Native date and time pickers on Android and iOS
  • All new Fuse dashboard
  • Images that have associated Exif data will automatically be rotated
  • Added Restart to the Viewport menu to reset all state in your app
  • Fixed several issues with the installers for Android tools and Sublime plugin


  • Introduced Fuse.Controls.DatePicker class, which wraps native date pickers on Android and iOS. See the DatePicker class documentation for more details.
  • Introduced Fuse.Controls.TimePicker class, which wraps native time pickers on Android and iOS. See the TimePicker class documentation for more details.
  • Images that have associated Exif data with the orientation tag will automatically be rotated so that they are displayed in the correct orientation
Pro feature: CameraView
  • The CameraView API has been replaced by a new and revamped version
  • Promised based JS API that can fail gracefully. Makes for a much better experience both in production and while coding in preview
  • Introducing <CameraView.CapturePhotoImageSource /> and <CameraView.PhotoLoaded /> . An ImageSource that can be used to display instant preview when you capture a photo. The CameraView.PhotoLoaded trigger will fire whenever a preview of a captured photo is ready.
  • This is a breaking change. The previous implementation will not be supported. For the time being you can find the previous implementation in Fuse.Deprecated.CameraView but we strongly advise you to migrate to the new implementation.
  • Please check the updated documentation and the example app for reference.
  • Known issue: If you use CameraView.PhotoCaptureImageSource on iPhone 6 and older you will only be able to capture one photo - additional attempts will fail with an error. This will be fixed in the next release.
  • Fixed issue on android where placeholder text on a <TextInput IsPassword="true" /> would be drawn as password dots
  • Invoke now takes an Action<Scripting.Context>. This is the first step in refactoring our scripting layer to make sure code does not evaluate JS on the wrong thread
  • The Observable property has been removed from Context & IThreadWorker
  • Fuse.Reactive.JavaScript has been renamed to Fuse.Scripting.JavaScript & the separate VM packages are now subdirectories of this package
DesktopApp Updates
  • Fixed an issue about certain event not triggering a proper update and redraw on desktop preview/build
  • LinearRangeBehavior now correctly responds to UserStep values, providing quantized input
  • Fixed RangeControl.RelativeValue to properly update when bound in UX
  • Allowed Minimum to be less than Maximum on RangeControl making it easier to do left-to-right 100..0 ranges.
  • Fixed a defect in position calculations in LinearRangeBehavior. It now uses the immediate Element parent for bounds calculation as opposed to the RangeControl.
  • Added UserStep support to Android and iOS native Slider
  • Exported the methods goBack, goForward, reload and stop for use in FuseJS
  • Fixed regression in 1.3 that broke WebView when using URISchemeHandler
  • Fixed a NullReferenceError that could happen while using ScrollViewPager in preview
  • Fixed bug on Android where setting TextWrapping="NoWrap" would force the TextView to be single line. New behavior is to instead allow the view to scroll horizontally instead of automatically wrapping the text.
  • Added native support, meaning it can be used by images inside a NativeViewHost.
  • Fixed bug in Video where playback actions, like Play, used before the video was initialized would end up getting swallowed.
  • Added some JavaScript methods to Video to make it easier to control playback from JavaScript, as well as obtaining information the video duration.
  • Made Video.Duration and Video.Position property-bindable.
  • Fixed a bug where UX expressions that produce two component floats did not expand to four compoent floats the same same way as literals did.
Fuse.Reactive framework changes (Uno-level)
  • These are breaking changes, but very unlikely to affect your app:
    • The DataBinding, EventBinding and ExpressionBinding class constructors no longer take a NameTable argument.
    • The Name and This expression classes has been removed. The UX compiler will now compile these as Constant expressions that contain the actual objects instead.
    • The IContext interface no longer contains the NameTable property.
    • The Fuse.IRaw interface removed (now internal to the Fuse.Reactive.JavaScript package). Had no practical public use.
    • The Fuse.Reactive.ListMirror class is no longer public. This was never intended to be public and has no practical public application.
    • Added detailed docs for many of the interfaces in the Fuse.Reactive namespace.
    • The Fuse.Reactive.IWriteable interface has changed (breaking!). The method signature is now bool TrySetExclusive(object) instead of void SetExclusive(object). Unlikely to affect your code.


  • Fixed a regression causing iOS apps not to be accepted to the Store apparently due to use of push-notifications even though they are not used in the project.* IObservable and IObservableArray no longer push their initial value on Subscribe.
Tool updates
  • Fixed an issue where some users had to log in again every time Fuse started
  • When starting Fuse 1.4 for the time, you will be logged out even if you were logged in with a previous version
  • New and improved dashboard
  • Fixed an issue on macOS where we kept polling for the installation status of Sublime and the Sublime plugin even after closing the Setup Guide window. This would cause a Fuse icon to appear and disappear periodically in the Dock, stealing focus from other applications
  • Fixed an issue that made Fuse crash on macOS when clicking a menu item, when running various software with access to control the computer (like Moom, EVE and possibly others).
  • Fixed console output so errors are written to stderr and other output to stdout
  • Fixed so the logger names in fuse.log correspond more closely to the source of the message
  • Added new command fuse unoconfig which prints the current Uno configuration. fuse preview now also accepts a flag --print-unoconfig which will print the current Uno configuration before starting preview
  • Removed Ant from fuse install android, as it is no longer used
  • Added Restart to the Viewport menu
  • Fixed an issue where fuse install android would fail on macOS with case sensitive file systems
C++ backend
  • The following unused entities were removed from Uno/Memory.h:
    • uGarbageCollect()
  • The following unused entities were removed from Uno/ObjectModel.h:
    • uArray::Copy()
  • Added NewGuid() & ToByteArray() to Guid.
  • Added support for customizing settings.gradle by using [Require Gradle.Settings="include ':something'"].
Uno compiler
  • We now check that finally clauses don't contain illegal control flow. break, continue and return are not allowed in finally clauses.