Upgrades: an extension upgrade updates the installed extension in place instead of reinstalling it. Your edits to what it installed are kept, and items it no longer ships are removed only if you left them unchanged.
Upgrades: services update their stored data themselves when a new version starts, one step at a time, and an interrupted step resumes after a restart.
Upgrades: an extension's services finish installing their new version on their own when they restart, so an upgrade no longer depends on which instance answers first.
Upgrades: a field or type an extension retires is kept for one more release and then removed. Explorer hides retired fields and types, and the schema editor marks them.
Cloud: nodes run the latest extension versions in the catalog and update to each new one automatically.
Usage: each service reports the memory it uses for each tenant separately from the memory all tenants share, and CPU that belongs to no tenant is reported as shared.
API keys: an administrator issues API keys, can make one that never expires, and can disable a key or change its scope, all from one window.
Logs: each log line shows its time, level, message and details in separate columns, and every service logs when it starts and stops.
Apps: dialogs size to their content and keep their buttons in a footer, toolbars wrap their actions instead of squeezing the search box, and icon-only actions carry a name for screen readers.
Bug Fixes
Cloud: cloud tenants can issue and use API keys.
Backup and restore: restoring a configuration keeps each service's upgrade progress consistent, so no data step is skipped or repeated.
Device Manager: a change to an integration's mapper or endpoint type takes effect without restarting the service.
Alarms: a tenant's alarm evaluator is released when its last alarm is removed.
Clustering: nodes resynchronising after a disconnect converge on the same names, order and write times.