• WEB-1796: Fixes Image Orientation for rotated images sent via Safari
  • WEB-1785: Fixes rendering of Product Choices that have no selections
  • WEB-1782: Adds headers to help server identify clients causing problems


  • Fixes identity metadata so that it is always an Object even when there is no value in the object
  • Adds Property Type for UI Components of type: Object
  • replaceableContent can now be set as an attribute and will be converted to Object: <my-widget replaceable-content='{"name": "value"}'></my-widget>
  • WEB-1765: Adds presend() method to all Message Type Models so that messages created from Models can be previewed in the Message List.
  • Fixes rendering of Date Sent for messages that were presend() before they were send()
  • Refactors imports for Messaging Models/Components into src/ui/messages/index and src/ui/messages/index-lite (typical apps do not use this directly)
  • WEB-1772: No longer pings to check if server is available unless client is ready and authenticated
  • WEB-1763: No longer requires all imports follow the same path; one component may import @layerhq/webxdk and another @layerhq/webxdk/index-lite without generating conflicts or duplication
  • Replaceable Content: Increases priority of DOM nodes with layer-replaceable-name="foo" within your HTML over widget.replaceableContent = {foo: nodes}; if both are used, the DOM nodes with the attribute will be used and the other ignored.
  • WEB-1762: Use passive scroll listeners
  • WEB-1783: text/plain and legacy messages from Layer UI/Atlas now render in the Conversation List


  • Adds logging mode for doing timing; Layer.init({ appId, logLevel: Layer.Constants.LOG.TIMING })
  • Changes message-type-response-summary reset() to not unregister registered states
  • Adds better validation of localStorage before using it
  • WEB-1755: Refactors Emoji Support:
    • The Emoji text processor no longer parses for :smile: and :-); it is now used solely for those wanting Twemoji’s standard emojis that work cross platform and provides consistent emojis across all platforms. This continues to be an optional part of the build; included for those who use import '@layerhq/web-xdk' and left out for those who do import '@layerhq/web-xdk/index-lite'.
    • The Compose Bar now detects :smile: and :-) and translates them into Emoji characters that can be understood by Android and iOS native apps. This is currently handled via remarkable-emoji.
  • Adds CONTRIBUTING.md guidelines for submitting PRs to this repository.
  • WEB-1756: Google Maps API Key is now an input to Layer.init({ appId, googleMapsKey: 'my-key' }); without this, Location Messages will not work. Previously there was an undocumented hack to make this work.
  • WEB-1757: isCurrentParticipant is now recalculated any time the participant list changes, and triggers change events when its value changes
  • Replaceable Content:
    • on searching child nodes now ignores Text Nodes
    • now correctly finds layer-replaceable-name in browsers that require the Webcomponents Polyfill.
  • Tweak to button height styling prevents raw JS sample app from having unexpected Button Heights


  • WEB-1731: Adds AltMIMETypes
    • A Model can represent more than one MIME Type
    • A Model can represent the same MIME Type but with different version numbers in the version string
  • WEB-1731: Adds versioning for the Response Summary class, enabling backwards compatability with prerelease structures
  • Fixes Toast Notification CSS to prevent overflow


  • Merges UI and SDK into a single repository
  • Redefines all UI Components
  • Adds a system for defining Message Types
  • Provides a library of Message Types
  • Provides a system for Interactive Messages
Upgrade Guide Previewing Messages