Mojo Pipes for IPC communication

refactor

The internal IPC system has been rewritten to use the internal Mojo pipes system in Chromium instead of named pipes which had connection issues on Windows.

Window display delay

refactor

The UI windows will no longer be displayed before the transport process is ready to accept connections, improving perceived performance.

Yarn PnP

feat

Package management is now handled by Yarn PnP, this reduces the dependency size on disk by several hundred megabytes. Template instantiation should also be faster.

The native dependency management has also been improved.

Incremental compilation for fast hot reloads

feat

Various packages (including their CSS) have been moved into a 'vendor bundle' which will be compiled on first run of the program.

Hot reloads as a result will only have to compile against developer code, resulting in an order of magnitude faster builds.

Electron 8

refactor

Electron has been updated to version 8. V8 is now also v8. Node is now v12.13.0.

Improved message timestamping

refactor

Previously timing of Message arrival was timed by the UI thread. When the UI had 'jank', this would result in late times for incoming messages. Messages are now timed by the transport thread, and that time is stored in the timestamp field of the metadata object.

Performance marks for time based debugging

feat

Debugging connection behaviour can be difficult given its time dependent nature. Performance marks have now been added for several of the connection functions in order to better establish timing information between them.

Heartbeat exponential backoff startup

feat

The heartbeat metadata reporter will now use an exponential backoff startup sequence to establish initial heartbeat data upon connection. It can be configured with the exponentialBackoffStartup option.

Attachment delays for Arduinos

feat

Some Arduinos will restart upon connection. If the developer doesn't wish to make hardware changes to prevent this, a new attachmentDelay option is available for the serial transport to delay connection for a period of time.

Setting this to 2000ms allows for most Arduinos to complete their restart sequence before Electric UI conducts search packets.

Strict typing of Developer State

feat

Developer state can now be globally strictly typed in the typedState.ts file. Documentation coming soon.

All functional accessors will now return correct types for fetched variables.

Many components also now use discriminated unions to ensure compile-time prop compliance where writers are required with functional accessors.

New writer API

refactorBREAKING

The object based writer API has been removed and replaced with a functional writer API.

<Button writer={{ rgb: { red: 255 } }}>Set Red</Button>

...is now...

<Button writer={state => (state.rgb.red = 255)}>Set Red</Button>

This fixes several problems with deep merging, making the mutation semantics more obvious.

Arrays of structures are now supported with all components.

<Button writer={state => (state.rgb[32].red = 255)}>Set LED 32 to Red</Button>

This is a breaking change.

New hooks API

refactor

All internal components have been refactored to use a new hooks API. Performance has been greatly improved for UIs that have many components that don't update together often.

The 'other half' of the public hooks API has also been completed. Writing from a custom component to a device is now simplified. The main new hooks are:

  • useWriteState
  • useCommitState
  • usePushMessageIDs

New accessor and writer documentation is available here, and all new hook documentation is available here.

Chart Annotations

feat

Charts now support horizontal and vertical line annotations. Docs are available here.

RollingStorage Manager

feat

All consumers of the new DataSource API can have their events persist with the new RollingStorageRequest API. Docs are available here.

High performance Charts API

feat

A from-scratch charting implementation has been developed. Documentation is available here.

Features include massively increased performance, achieving 165fps in any reasonable circumstances, the ability to plot a million points, the ability to consume ~100k Events per second.