v0.8.9

Improved CodecPipeline error behaviour for unknown messages

refactor

When the CodecPipeline can't find a match for a message it can now optionally passthroughNoMatch, warn (the default), or error.

v0.8.8

Updated to Electron 11.3.0

chore

The template now runs Electron 11.3.0.

Reduced allocations for binary protocol

refactor

The binary protocol now has reduced allocations resulting in lower garbage collection pressure and better performance.

v0.8.7

Fix for handshake screen not being full height

bug

In some circumstances the handshake loading screen wouldn't be full height, this is now fixed.

v0.8.6

Prevent multiple clicks on Connection Cards

bug

Connection cards without a loading screen can no longer be clicked multiple times to skip to the device page.

Process Type Log

feat

Each process console will now display in the console what process type it is.

Only warn on unidentified messageIDs for codecs

refactor

By default, if the codec pipeline can't encode or decode a packet, it will warn instead of throwing an error.

Printer inline styling

feat

Printers now allow for inline styling via the style prop.

Improved Printer Performance

feat

Printers are now imperatively updated, avoiding a React render loop, increasing performance for frequent updates.

v0.8.5

TriggerDomain time accessor

bug

The TriggerDomain accessor is now passed the current time.

v0.8.4

Fixed dll building

bug

A package was preventing the shared dll from building, this is now resolved.

v0.8.3

Scale accessor for 3D ControlledGroup

feat

The ControlledGroup component now supports scale being modified by hardware.

v0.8.2

3D Renderer

feat

3D Renderer components. Read the docs here.

v0.8.1

Hook Intellisense documentation

docs

All hooks now have intellisense documentation inline.

v0.8.0

Loggers have access to accessors

feat

CSV and other loggers have access to accessors now.

New Data Transformer API

refactorBREAKING

The Data Transformer API has been revamped.

Improved Chart Performance

refactor

Charts of all types now allocate less and are therefore more performant.

Microsecond timing

featBREAKING

Timing is now done using a global @electricui/timing package, and is now accurate to the microsecond instead of the millisecond.

Chart Axis Performance Improvements

refactor

Chart Axes are now more performant to render.

X-Y Plots

feat

X-Y Plots are now supported.

Better hot reloading

refactorBREAKING

Hot reloading, especially on the transport context, has been improved.

The logic for this has been moved to @electricui/core, and may now be updated without modifying the template.

Interval requester

refactorBREAKING

Interval Requesters no longer retry forever if messages don't reach hardware. They now attempt up to acceptableConsecutiveFailures=10 times before giving up.

v0.7.34

Regression fix for builds

bug

Builds had a regression where the app-builder binary wasn't marked as executable. This has been fixed.

v0.7.33

LineChart color fix

bug

Fixed a regression in the automatic colors functionality for LineCharts.

v0.7.32

Next channel now follows latest

bug

If a release on latest is ahead of one on next, the next channel will use the latest release.

v0.7.31

NodeUSB linux regression

bug

On the upcoming Electron v11 branch, NodeUSB wouldn't build, this has been rectified.

v0.7.30

THREE colourspace correction discrepancy resolved

bug

Removes automatic colour space management which caused an incorrect shift on input colours (as they were in the correct colourspace to begin with).

LineChart lines now support opacity

feat

The opacity prop accepts a number from 0 to 1 to control line translucency.

v0.7.29

Custom connections page 'no devices' text

feat

Allows custom control over the text displayed when no devices could be found during search.

Pass a noDevicesText string into the Connections component to modify the default.

v0.7.28

v0.7.27

VerticalAxis Tick count & Tick values properties added

feat

VerticalAxis (y axis) now supports a tickCount property to explictly control the number of vertically drawn ticks.

tickValues allows manually setting an explicit set of tick values.

TimeAxis Tick count control

feat

TimeAxis (x axis) now supports a tickCount property to explictly control the number of horizontally drawn ticks.

v0.7.26

node-abi update for Electron v11

chore

node-abi update.

Test coverage for dynamic RealTimeDomain window (xaxis) resizing

test

Test coverage to prevent regressions

Fixed RealTimeDomain window auto-range selection issue

bug

The RealTimeDomain property window accepts an array of window timescales to allow the LineChart to automatically increase it's x-axis domain over longer periods.

It was incorrectly only using the smallest window in the array. It should now auto-range across the array values correctly.

Thick Line shader refactor

refactor

The shader used by LineChart to increase the width of plotted lines has been refactored.

Fixed missing Serialport types

bug

The template had missing serialport types, which meant the transport-manager/config/serial.tsx would throw linter warnings around baudRate configuration.

v0.7.25

Forced webpack resolution to v4

bug

The new resolver was grabbing webpack 5 instead of the required v4.

v0.7.24

v0.7.23

feat

The Dropdown component is now available.

RadioButton and NumberInput refactor

refactor

RadioButtons and NumberInputs have been refactored to use our hooks API internally.

TextInput maxLength prop

feat

TextInput components now take a maxLength prop to limit the length of text enterable into the field.

Stable yarn.lock files between operating systems

refactor

yarn.lock files will now be stable between operating systems. Prebuilt native dependencies will be fetched in a post-install step and their cache keys are now stored separately to the yarn.lock.

getDeviceAcceptableTransportKeys hook

feat

The getDeviceAcceptableTransportKeys hook can now be used to grab the acceptable transport keys for a device.

ColorPicker depth test

bug

ColorPickers can no longer be manipulated 'though' a modal over the top of them. Previously they didn't do a depth test and unintended behaviour resulted.

CSVLoggers no longer use Electron remote

refactor

CSVLogger components and hooks no longer use Electron's remote module for file dialog opening. They now have a dedicated IPC channel.

Codecs can optionally error if no codec matches

refactor

The CodecPipeline can now optionally error if no codecs match.

v0.7.22

Batch message datasource updates

refactor

Multiple charts rendered by the same datasource will have their updates batched in the same React pass.

React 17

chore

React 17 is now supported.

v0.7.21

Package bumps

chore

Some minor package bumps.

v0.7.20

Poll error when no devices attached

bug

Fixes a bug with polling when no devices are attached

v0.7.19

THREE Dispose console warn bug

bug

THREE will no longer complain that Scene has no dispose method.

v0.7.18

Yarn v2.2.2

chore

Yarn has been updated to v2.2.2

v0.7.17

Electron v10.1.3

feat

Electron v10.1.3 is now supported.

New Codecs API

refactorBREAKING

The codecs API has been refactored.

The old API received the entire message and a callback to push any amount of messages up the pipeline.

  1. export type LEDSettings = {
  2. glowTime: number
  3. enable: number
  4. }
  5. export class LEDCodec extends Codec {
  6. filter(message: Message): boolean
  7. encode(
  8. message: Message<LEDSettings>,
  9. push: PushCallback<Message<Buffer>>) {
  10. }: void
  11. decode(
  12. message: Message<Buffer>,
  13. push: PushCallback<Message<LEDSettings | null>>,
  14. ): void
  15. }

The new API reduces the functionality to only transform a payload to and from a Buffer.

The Pipelines API still has the capability to have the forking behaviour that was available here if need be, but this vastly simplifies the usual use case.

  1. export type LEDSettings = {
  2. glowTime: number
  3. enable: number
  4. }
  5. export class LEDCodec extends Codec {
  6. filter(message: Message): boolean
  7. encode(payload: LEDSettings): Buffer
  8. encode(payload: Buffer): LEDSettings
  9. }

Line Chart Thickness

feat

Line charts now support lines thicker than 1px.

Device Manager Proxy refactor

refactorBREAKING

The device manager proxy has had some of it's methods refactored to match the signature of the real device manager.

Cancellation Tokens

featBREAKING

Instead of timeouts, CancellationTokens are now used across the entire ElectricUI API surface.

They allow for hard deadlines for tasks, as well as user based cancellation at any point in the lifecycle.

  1. const cancellationToken = new CancellationToken()
  2. cancellationToken.deadline(10_000)
  3. setTimeout(() => cancellationToken.cancel(), 5_000)

v0.7.16

Fixed transport console not showing

bug

The transport console will now open correctly.

Electron v9.1.0

feat

Electron v9.1.0 is now supported.

v0.7.15

Monospace fonts for Statistics

feat

Monospace fonts are now the default for statistic values.

Electron v9.0.0

feat

Electron v9.0.0 is now supported.

v0.7.14

Filter tty serial paths by default

refactor

Serial comPaths in Linux that start with /dev/ttyS will be filtered by default in the latest template.

Prompt to use workspace TypeScript version in template

feat

The latest version of VSCode allows for a prompt to switch to the workspace version of TypeScript. This has been added to the template.

v0.7.13

Wait For Reply calls now include a description

refactor

Wait For Reply calls can now optionally include a description that's calculated on request instead of the textual form of the closure used to validate incoming messages. This aids in debugging when the calls fail.

All internal usages of the Wait For Reply calls have been annotated with a debug message to help with tracking down message failures.

v0.7.12

Electron Builder removal

refactorBREAKING

The Electron Builder dependency has been removed due to an upstream problem preventing installations on certain Windows platforms.

v0.7.11

New useProduceHint hook

feat

The new useProduceHint hook can be used to send Hints from the user interface to the transport manager. For example it can be used to supply a websockets URI for the WS transport without any external hint producer.

Removed timezone support from timeseries

refactorBREAKING

The timeseries dependency Pond.js relies on moment-timezone. In our gradual effort to refactor the timeseries system timezone support has been removed.

This is a breaking change but should not affect anyone during regular usage of the timeseries API.

Race connections on inital connect

refactor

If a device has multiple connections available upon first connection, they will be raced instead of waiting for all to complete connection before starting the handshake procedure.

Device primary connection hooks

feat

Two new hooks have been added. The useDevicePrimaryConnectionHash and the useDevicePrimaryConnectionTransportKey hook.

They can be used to find the connection hash and the transport key of the primary connection method of a device, respectively.

They use the CONNECTION_METADATA_RANK_KEY="connectionRank" metadata key of the connection in order to determine the primary connection, with rank #0 being the primary connection.

v0.7.10

Pin errors against components

refactor

The Blueprint Electric UI components will now pin their write errors against the components in the React tree, allowing for greater ease of debugging.

Slider twitch bug

bug

Sliders will now hold optimistic state until the packet has either been explicitly confirmed, or in the case of no-ack packets, written, or a rejection or timeout.

This prevents sliders from displaying the 'old' hardware state for a frame after releasing them.

v0.7.9

Heartbeat Startup

bug

The heartbeat startup sequence now immediately returns on a successful heartbeat, instead of waiting 2 seconds for heartbeat #2 to return (in the case of the default startup sequence).

v0.7.8

Undefined MessageID Guard

feat

An Undefined MessageID Guard has been added to the template's default set of pipelines.

MessageIDs that have not been seen before, without type information from the hardware will explicitly error when sent to hardware.

This should guard against spelling mistakes in messageIDs.

v0.7.7

Handshake Refactor

refactor

The handshake will now request items individually if it steps into the 'individual request mode'.

Handshake tests now cover 100% of lines, statements and branches within the module.

v0.7.6

Transport Manager now displays the correct debug interface

bug

The transport manager will now display the Blueprint style debug interface by default.

v0.7.5

Heartbeats are no longer retried

bug

Heartbeat messages are no longer automatically retried by the FIFO message queue. They are now considered 'one shot' messages.

Other 'one shot' messages can be added to the FIFO message queue with the oneShotMessageIDs option.

This change will make the consecutive heartbeats counter more sensitive to delivery failures.

v0.7.4

IPC Ping race condition

bug

In some cases the heartbeat between the IPC would arrive in the UI window before the UI window received the location of the transport window, causing a race condition. This has now been resolved.

v0.7.3

Transport Manager Debug Interface Rework

refactor

The transport manager's debug interface has been reworked. It now imports from components-desktop-blueprint instead of components-desktop and as a result requires the Blueprint styling.

If you aren't using the Blueprint styling let us know.

v0.7.2

HTML-Loader fix

bug

The pinning of the downstream dependency html-loader caused a bug that prevented installation, this is now resolved.

v0.7.1

Bug fix for IPC message serialisation

bug

A bug was fixed with IPC message serialisation that resulted in some operations relating to cross process promises failing.

v0.7.0

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.

v0.6.14

Updated serialport

refactor

Serialport is now 8.0.6 across all platforms.

v0.6.13

Fixed serialport grabbing incorrect version on Windows

bug

Serialport on windows will now grab the correct version.

v0.6.12

Fixed poor charts performance when at large window sizes

bug

The upstream chart plugin had poor behaviour when the window was large enough that full date text could be displayed in the labels. This patch forces shorter labels at all resolutions resulting in a performance improvement.

v0.6.11

Error

bug

The UI will no longer error upon first poll if no devices are detected.

v0.6.10

React 16.12.0

feat

The template now uses React v16.12.0.

React Refresh

feat

The template now uses React Refresh, a safer and more reliable hot module reload methodology. Applications will now display a loading spinner in the bottom right corner when compiling the hot reload.

v0.6.9

Stricter default codecs

bug

Default codecs will now throw if they receive input payloads that are not null, number or number arrays for encoding.