@lwc/engine-server
9.5.3 · 27 Oct 2026MIT173.6k / weekRepositoryHomepagenpmAtom feed
380 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 7.x
7.1.5
10 Oct 2024Reading the note…
7.1.4
5 Sep 2024Reading the note…
7.1.3
13 Aug 2024Reading the note…
7.1.2
17 Jul 2024Reading the note…
7.1.1
17 Jul 2024Reading the note…
7.1.0
10 Jul 2024engine-dom: Warn for
insertBeforewith 1 argAdd
data-lwc-host-mutatedduring SSR
What's Changed
engine-dom: Warn for
insertBeforewith 1 argAdd
data-lwc-host-mutatedduring SSR
7.0.5
9 Jul 2024Reading the note…
7.0.4
8 Jul 2024Reading the note…
7.0.3
3 Jul 2024Reading the note…
7.0.2
2 Jul 2024Reading the note…
7.0.1
28 Jun 2024Reading the note…
7.0.0
19 Jun 2024- breaking
Booleans, numbers, and functions are no longer directly stringified, but are stripped instead.
- breaking
Arrays and objects are no longer stringified, but instead follow class object binding semantics.
- breaking
LWC v7.0.0 contains breaking changes. Please read carefully below if you are upgrading from v6.
If you are upgrading from v5, please upgrade to v6 first.
Note
LWC v7 corresponds to Salesforce release Winter '25 (API version 62).
New features
Class object binding for more ergonomic
classes in templatesthis.stylefor a more ergonomic way to change component styles at runtimethis.hostElementfor an alternative tothis.template.hostthat works in light DOM
Breaking changes
Class object binding
Note
On the Salesforce Lightning platform, this change only applies to components with an API version of 62 or above.
Class object binding is a new feature that makes it more ergonomic to render
classattributes in your LWC components. As part of this feature,classrendering has changed for some uncommon use cases.If you are using a dynamic
classin your template:<template> <div class={myClass}></div> </template>Then the rendering of this
classmay change if you were previously definingmyClassas something other than a string,null, orundefined.For example, consider if
myClassis a boolean:export default class extends LightningElement { myClass = false }Old behavior:
This renders:
<div class="false"></div>
New behavior:
<div class=""></div>
This change applies to booleans, numbers, functions, arrays, and objects. Below is a table summarizing the change:
Type Example Rendered (old) Rendered (new) Boolean trueclass="true"class=""Number 1class="1"class=""Function () => {}class="() => {}"class=""Array ["a", "b"]class="a,b"class="a b"Object { a: true }class="[object Object]"class="a"In short:
- breaking
Booleans, numbers, and functions are no longer directly stringified, but are stripped instead.
- breaking
Arrays and objects are no longer stringified, but instead follow class object binding semantics.
This may break a component if it is using a CSS selector like these:
.false {} .true {} [class="1"] {}Or if it is using
querySelectoror other traversal techniques that rely on the class name:this.template.querySelector('.false') this.template.querySelector('.true') this.template.querySelector('[class="1"]')In rare cases, this can also cause breakages across component boundaries. For example, if you have a global stylesheet relying on light DOM or synthetic shadow DOM, and thus the ability to pierce inside of components you don't own, then the above CSS selectors would break in that case as well.
To resolve any breakages:
- breaking
- breaking
In cases where you want to render a value as a string (e.g.
class="false"orclass="1"), convert it to a string usingString(value).
This change may also require updating snapshots, e.g. in Jest tests.
New this.style property
Note
On the Salesforce Lightning platform, this change only applies to components with an API version of 62 or above.
Components can now access their
CSSStyleDeclarationusingthis.style:renderedCallback() { this.style.color = 'red' }This is a breaking change if the component uses
this.styleas an expando:renderedCallback() { if (!this.style) { this.style = "foo" } }In the above case, the component author may assume that
this.styleis initiallyundefined, and then set it to a new value ("foo"). After this change, the above code will not work as expected, becausethis.styleis initially truthy rather thanundefined.To resolve this, set a class property on the component, initialized to
undefined, rather than using an expando:+ style = undefined renderedCallback() { if (!this.style) { this.style = "foo" } }You may also rename your
this.styleexpando to something else (e.g.this.customStyle).New this.hostElement property
Note
On the Salesforce Lightning platform, this change only applies to components with an API version of 62 or above.
Components can now access
this.hostElementas a convenient alternative tothis.template.host:renderedCallback() { console.log(this.template.host) // <x-component> console.log(this.hostElement) // <x-component> }Additionally, this works in light DOM components to access the "host" element (similar to the
:hostCSS pseudo-class in light DOM scoped styles). This provides an ergonomic way to access the rootHTMLElementobject in either light DOM or shadow DOM components.Similar to the new
this.styleproperty, this is a breaking change if you are usingthis.hostElementalready as an expando. Refer to thethis.stylerelease notes for a resolution.Improved TypeScript types
Note
This change only applies to component authors using TypeScript, which is not yet fully supported.
The TypeScript definitions for the
lwcpackage are greatly improved, to more closely match the ground truth of the actual APIs forLightningElement,createElement, etc. at runtime. You may need to adjust your TypeScript code or version to adapt to the new typings.Summary
- breaking
The minimum supported version of TypeScript is v5.4.5.
- breaking
The only supported compiler target is
"ESNext". - breaking
ContextValuehas been renamed toWireContextValue. - breaking
ContextConsumerhas been renamed toWireContextConsumer. - breaking
Contextualizerhas been renamed toWireContextProvider. - breaking
StylesheetFactoryhas been renamed toStylesheet. - breaking
StylesheetFactorieshas been renamed toStylesheets. - breaking
StringKeyedRecordhas been removed. Instead, use the typeRecord<string, any>. - breaking
ShadowSupportModehas been removed. Instead, use the string values"any","reset", or"native". - breaking
WireAdapteris now a generic type with a default type parameter. - breaking
WireAdapterConstructoris now a generic type with a default type parameter. - breaking
All decorators can now be used with the new decorator implementation introduced in TypeScript v5 as well as the old, experimental implementation.
- breaking
this.templateis now possibly null, reflecting the state for components using light DOM. - breaking
this.template.hostin aLightningElementis now typed asHTMLElement, rather than the broaderElement. - breaking
The return type of
createElementhas been updated to reflect the fact that the element created contains the@api-decorated props from the component definition.A new helper type,
LightningHTMLElement, has been introduced to provide an easy way of accessing the return type.const cmp: LightningHTMLElement<MyComponent> = createElement('my-component', { is: MyComponent });WARNING: Due to limitations of TypeScript, this new type incorrectly contains all props defined on the component, not just decorated props. Only decorated props are accessible at runtime.
- breaking
Importing from
"lwc"now provides module definitions for HTML/CSS imports. The module definitions are also available by directly importing a new package,@lwc/types.
Common breakages and fixes
Breakage Fix HTML imports ( import myComponent from './my-component.html')Import @lwc/typesorlwc/typessomewhere in your project. I.e.:import '@lwc/types'.StringKeyedRecordReplace with Record<string, any>or similar.ContextValueRenamed to WireContextValue, but it's really justRecord<string, any>, so you could use a more precise type instead.ContextConsumerRenamed to WireContextConsumerContextualizerRenamed to WireContextProvidercreateElementUse type assertion to cast to HTMLElement & MyComponentApiDecoratedProps. You have to define your own interface to get the@apidecorated props, because TypeScript can't detect that. (You can use your component class, but that includes all component andLightningElementprops, not just component@apidecorated props, so it's not ideal.)this.templateis possibly undefinedUse optional chaining ( ?.) or non-null assertion (!.)Cannot find name ClassMemberDecoratorContext(or other decorator type)Use TypeScript v5.4.5 Other type errors? Use TypeScript v5.4.5 @lwc/template-compiler API changes
Note
This change only affects direct consumers of the
@lwc/template-compilernpm package, who are using thecompileAPI.Due to a refactoring of the
@lwc/compilerand@lwc/template-compilerpackages, the@lwc/template-compilercompilefunction now requires the component's file name (i.e. thenamespaceandnameoptions) when compiling the template.To resolve the breaking change, add the new options. For example:
import { compile } from '@lwc/template-compiler' compile({ ...previousOptions, // Assuming the component is `<x-foo>`: namespace: 'x', name: 'foo', })What's Changed
lightning-element: Expose hostElement property
Put
this.hostElementbehind API version 62Allow access to host CSSStyleDeclaration via this.style
Template class object binding
types: Update types for v7
- 6.x
6.7.2
14 Jun 2024Reading the note…
6.7.1
12 Jun 2024Reading the note…
6.7.0
11 Jun 2024Expose the registered component class as a const declaration to allow hmr hooks for class @W-15890472
Skip hydration validation when static parts have static classes
6.6.7
10 Jun 2024Reading the note…
6.6.6
5 Jun 2024Reading the note…
6.6.5
30 May 2024Reading the note…
6.6.4
24 May 2024Reading the note…
6.6.3
8 May 2024Reading the note…
6.6.2
3 May 2024Reading the note…
6.6.1
1 May 2024Reading the note…
6.6.0
29 Apr 2024Lwc compiler errors on .jsx/.tsx files
New compiler targeting SSR
playground: Add important features to playground @W-15545976
What's Changed
Lwc compiler errors on .jsx/.tsx files
New compiler targeting SSR
playground: Add important features to playground @W-15545976
6.5.3
23 Apr 2024Reading the note…
6.5.2
17 Apr 2024Reading the note…
6.5.1
11 Apr 2024Reading the note…
6.5.0
30 Mar 2024Maintenance only: docs, tests, build or refactoring. Nothing changes in how you use it.
6.4.5
5 Jun 2024Reading the note…
6.4.4
30 May 2024Reading the note…
6.4.3
30 May 2024Reading the note…
6.4.2
24 May 2024Reading the note…
6.4.1
28 Mar 2024Reading the note…
6.4.0
28 Mar 2024Apply static parts optimization to dynamic attributes
Fix iframe onload with static content optimization
Remove unnecessary nullish coalescing
Observable changes
HTML elements with
classandstyleattributes may render with additional whitespace. This is due to an optimization to improve the render time of Lightning Web Components.This change is exactly the same as what we've reported in previous releases, and can be fixed by avoiding anti-patterns for styling components. E.g.:
/* Don’t do this */ document.querySelector('[class="highlight yellow"]'); /* Do this instead */ document.querySelector(".highlight.yellow");The difference now is that this change may be seen in more components than before.
What's Changed
Apply static parts optimization to dynamic attributes
Fix iframe onload with static content optimization
Remove unnecessary nullish coalescing
Apply static parts optimization to dynamic style
synthetic-shadow: Optimize recursivelySetShadowResolver
template-compiler: Support
keyin static contentOptimize
createUpgradableConstructorApply static parts optimization to dynamic class attributes
Support arguments for FACE callbacks
engine-core: Fix warnings for invalid keys
engine-core: Optimize
patchClassAttributeError accessing tagName on fragment
Apply static parts optimization to dynamic text
Children and childNodes not returning top-level slotted children
Add signals as dependency
6.3.4
19 Mar 2024Reading the note…
6.3.3
15 Mar 2024Reading the note…
6.3.2
12 Mar 2024Reading the note…
6.3.1
8 Mar 2024Reading the note…
6.3.0
7 Mar 2024template-compiler: Avoid mutating the ast when binding complex template expressions
Event listener not being invoked for native web components
Support generating inlined sourcemaps when transforming js file…
What's Changed
template-compiler: Avoid mutating the ast when binding complex template expressions
Event listener not being invoked for native web components
Support generating inlined sourcemaps when transforming js file…
template-compiler: Avoid discarding text content whitespace for complex expressions
6.2.1
28 Feb 2024Reading the note…
6.2.0
21 Feb 2024Signals implementation v1
Add reporting for shadowSupportMode
Add default exports to
lwc@W-13710298
Contains signal implementation in LWC and a few other bug fixes.
What's Changed
Signals implementation v1
Add reporting for shadowSupportMode
Add default exports to
lwc@W-13710298
6.1.1
6 Feb 2024Reading the note…
6.1.0
2 Feb 2024Use more helpful error message for invalid render() return value @W-14785069
Allow computed properties in @wire if they are constants or primitives @W-14785085
What's Changed
Use more helpful error message for invalid render() return value @W-14785069
Allow computed properties in @wire if they are constants or primitives @W-14785085
6.0.0
17 Jan 2024- breaking
Old behavior: the error is caught.
- breaking
New behavior: the error is uncaught.
- breaking
x-a
Note
These release notes are for the Lightning Web Components framework in open source only. If you use Lightning Base Components, Lightning Web Security, or other Salesforce products on the Lightning platform, see the Summer '24 release notes.
LWC v6.0.0 contains breaking changes. Please read carefully below if you are upgrading from v5.
If you are upgrading from v4, please upgrade to v5 first.
Note
LWC v6 corresponds to Salesforce release Summer '24 (API version 61).
Summary of new features
Form-Associated Custom Elements (FACE) and Element Internals are now supported.
Breaking changes
Native custom element lifecycle
Note
This change currently only applies to consumers of the LWC open-source project outside of the Salesforce Lightning platform.
Previous versions of LWC used a synthetic (polyfill) system to call the
connectedCallbackanddisconnectedCallbackcomponent lifecycle hooks. This was originally designed for legacy browsers such as Internet Explorer 11. Such browsers are no longer supported, and LWC v6 uses the native browser APIs instead.Important
Native vs synthetic custom element lifecycle is not the same as native vs synthetic shadow DOM. They are two entirely separate concepts.
This change may affect the firing of
connectedCallbackanddisconnectedCallbackhooks in your components, since the previous implementation did not perfectly align with the browser standard. Most commonly, this will occur in unit tests, or when manually creating components using thelwc.createElement()API. The new behavior also fixes common memory leaks caused bydisconnectedCallbacknot firing consistently.Native custom element lifecycle also unlocks support for Form-Associated Custom Elements (FACE) and Element Internals.
Changes you may see to
connectedCallbackanddisconnectedCallbackbehavior:New behavior when disconnected from the DOM
Note
This situation will probably only occur when writing tests that do not connect elements to the DOM.
LWC components now only fire
connectedCallbackwhen they are actually connected to the DOM. If they are disconnected from the DOM (i.e. they are not inside thedocument), thenconnectedCallbackwill not fire.For instance, if you are testing for an event to be fired from a
connectedCallback, this would previously work:export default class Foo extends LightningElement { connectedCallback() { this.dispatchEvent(new CustomEvent('foo', { bubbles: true, composed: true })) } }const element = createElement('x-foo', { is: Foo }) const div = document.createElement('div') div.addEventListener('foo', () => { console.log('received foo event!') }) div.appendChild(element) // triggers connectedCallbackIn the above example,
received foo event!would be logged to the console.After this change, the above no longer triggers the
connectedCallback, nor the event.Instead, you must ensure the element is connected to the DOM:
document.body.appendChild(div)
Once the element is in the DOM tree,
connectedCallbackwill fire as expected.New error behavior
Note
This situation will probably only occur if you are writing tests to capture errors thrown in
connectedCallback/disconnectedCallback. Most component authors should never have to deal with this.Errors thrown by
connectedCallbacks anddisconnectedCallbackare dispatched globally, rather than locally when elements are added/removed from the DOM.For example, let's say you have a component that throws an error in
connectedCallback:export default class Foo extends LightningElement { connectedCallback() { throw new Error('foo') } }And then you expect to be able to catch the error synchronously on
appendChild:const element = lwc.createElement('x-foo', { is: Foo }) try { document.body.appendChild(element) } catch (error) { console.log('caught error', error) }- breaking
Old behavior: the error is caught.
- breaking
New behavior: the error is uncaught.
The solution is to use a global
errorlistener:const listener = (error) => { console.log('Caught error', error) } try { window.addEventListener('error', listener) document.body.appendChild(element); } finally { window.removeEventListener('error', listener) }If you're using
@lwc/jest-*, then you can use the newtoThrowInConnectedCallbackAPI which will handle this logic for you.Note
Events dispatched in
connectedCallbackanddisconnectedCallbackare unaffected by this change.New timing behavior in native shadow DOM
The timing of
connectedCallbackhas changed slightly to align with native browser standards, when using native shadow DOM.For example, the timing of when
connectedCallbackfires in child components relative to parent components has changed. Consider this DOM tree:<x-a> #shadow-root | <x-a-child> </x-a> <x-b> #shadow-root | <x-b-child> </x-b> <x-c> #shadow-root | <x-c-child> </x-c>
Old behavior: the order of
connectedCallbacks firing is:- breaking
x-a - breaking
x-b - breaking
x-c - breaking
x-c-child - breaking
x-b-child - breaking
x-a-child
New behavior: the order of
connectedCallbacks firing is:- breaking
x-a - breaking
x-a-child - breaking
x-b - breaking
x-b-child - breaking
x-c - breaking
x-c-child
Note that, with the new behavior,
connectedCallbackfires in standard DOM depth-first tree-traversal order. (The old behavior was defined by the synthetic lifecycle polyfill, and did not follow the standard.)The relative timing of
renderedCallbackhas also changed due the new nativeconnectedCallbacktiming. For example, consider this DOM tree:<x-grandparent> <x-parent> <x-child></x-child> </x-parent> </x-grandparent>(Note that, in the above example, the
<x-parent>and<x-child>are slotted, not part of the shadow roots of their containers.)Old behavior: the order of lifecycle hooks firing is (example):
Component Lifecycle hook grandparent connectedCallback parent connectedCallback child connectedCallback child renderedCallback parent renderedCallback grandparent renderedCallback New behavior: the order of lifecycle hooks firing is (example):
Component Lifecycle hook grandparent connectedCallback grandparent renderedCallback parent connectedCallback parent renderedCallback child connectedCallback child renderedCallback Note that the above only applies to native shadow DOM. In synthetic shadow DOM, the ordering is the same, regardless of native vs synthetic custom element lifecycle (example). The same is true of light DOM (example).
In general, your components should not rely on the particular timing of
connectedCallbackorrenderedCallbackacross components. In case they do, please update to match the new timing behavior, or make your code agnostic to any particular timing.Note that the timing of
disconnectedCallbackhas not changed, except as noted elsewhere in these release notes.Shadow roots may be null after appending to disconnected elements
Consider this case:
<!-- app.html --> <template> <x-child></x-child> </template>
const elm = createElement("x-app", { is: App }) const div = document.createElement('div') div.appendChild(elm) console.log(elm.shadowRoot.querySelector('x-child'))Old behavior: logs the
<x-child>component, because thediv.appendChildtriggered the rendering of the child element.New behavior: logs
null, becausedivis disconnected from the DOM, preventing triggering of rendering.The resolution is to append the element to an element that is actually connected to the DOM. For example, in the above case:
document.body.appendChild(div);
New timing behavior during list rendering
Before LWC v6, certain scenarios with
for:eachwould not result inconnectedCallback/disconnectedCallbackfiring on components inside the iteration, even if the components were actually disconnected and re-connected to the DOM (for example, during list reordering).In LWC v6,
connectedCallback/disconnectedCallbackwill accurately fire to reflect that the underlying framework has removed and re-inserted elements into the DOM. This may be disruptive for components that do not correctly handle additionalconnectedCallback/disconnectedCallbackinvocations, or that have significant performance overhead for these callbacks.For example, if you have the iteration:
<template for:each={items} for:item="item"> <x-item key={item}></x-item> </template>... and if the
itemsarray is originally[1, 2, 3, 4]and later changes to[3, 4, 2, 1], then you would see the following callbacks being invoked after the list order changes:Old behavior: none of
connectedCallback,disconnectedCallback, norrenderedCallbackfire after reordering. (Demo)New behavior:
disconnectedCallbackfires and thenconnectedCallbackfires for list items 1 and 2 after reordering, because these items have been removed and re-inserted into the end of the list by the LWC framework. (Demo)This also affects
renderedCallback. Previously, you may have relied onrenderedCallbackfor your setup logic anddisconnectedCallbackfor your teardown logic. (For example: setting up event listeners or subscribing to a store.) Previously, this might work for some use cases. However, in LWC v6, your component may firedisconnectedCallbackand thenconnectedCallbackif it is inside of a list that is reordered – without firingrenderedCallback(if the data bindings inside the component did not change).For example, consider a list that is reordered from
[1, 2]to[2, 1]. In both cases, before reordering,connectedCallbackandrenderedCallbackare fired for items 1 and 2. However, after reordering, the following occurs:Old behavior: no lifecycle callbacks fire after reordering. (Demo)
New behavior:
disconnectedCallbackfires and thenconnectedCallbackfires for item 1. Additionally,renderedCallbackfires for item 1 but does not fire for its children. (Demo)A best practice is to do your setup logic in
connectedCallbackand teardown logic indisconnectedCallback. These two callbacks are perfect mirrors of each other – unlikerenderedCallback, which may fire multiple times if the component data changes, and may not fire during a simple list reordering.Fixed light DOM slot remapping
Note
On the Salesforce Lightning platform, this change only applies to components with an API version of 61 or above.
In previous versions of LWC, light DOM
<slot>s do not correctly remap with differentnames. This bug is fixed in LWC v6, but it may cause a breaking change if you rely on quirks of the previous behavior.The breaking changes are:
Slot attributes are no longer rendered
In LWC, light DOM slots are virtualized. This means that they do not rely on the native browser
<slot>elements orslotattributes at runtime, when the component is actually rendered to the DOM.Previously, your light DOM elements may have rendered with actual
slotattributes. As of LWC v6, theseslotattributes will not render. For example, consider this template:<template> <!-- this child is light DOM --> <x-child> <div slot="foo">hello</div> </x-child> </template>Previously this would render to the DOM as (demo):
<!-- Previous rendered content --> <div slot="foo">hello</div>
In LWC v6, this renders as (demo):
<!-- New rendered content --> <div>hello</div>
If you are relying on the presence of the
slotattribute (e.g. in a CSS selector or usingthis.querySelector()), then your code may break because theslotattribute is no longer present in the rendered DOM.For light DOM components, you are recommended to avoid CSS selectors or
this.querySelector()to match based on theslotattribute. Instead, you can uselwc:refor choose another CSS selector.For example, do not rely on CSS selectors like this:
// Don't do this const foo = this.querySelector('[slot="foo"]');Instead, use
lwc:ref:<x-child> <div slot="foo" lwc:ref="foo">hello</div> </x-child>const foo = this.refs.foo;
This may also change your Jest snapshots, which will need to be updated.
Strict light DOM slot forwarding
In previous versions of LWC, light DOM components that "wrap" a shadow DOM component were able to forward to the correct slot in the shadow DOM component without explicitly including a
slotattribute.For example, you may have a light DOM component like this:
<!-- x-slottable-light --> <template lwc:render-mode=light> <x-slottable-shadow> <slot name="foo"></slot> <slot></slot> </x-slottable-shadow> </template>In LWC v5, this would forward the
fooand default slots from<x-slottable-light>into<x-slottable-shadow>. However, this is actually a mistake, because proper slot forwarding should require aslotattribute on the<slot>element:<!-- x-slottable-light --> <template lwc:render-mode=light> <x-slottable-shadow> - <slot name="foo"></slot> + <slot name="foo" slot="foo"></slot> <slot></slot> </x-slottable-shadow> </template>In LWC v6, you must update your code to use the proper
slotattribute as shown above, or else the slotted content will not render correctly.- breaking
Demo in LWC v5 (working but should not work)
- breaking
Demo in LWC v6 (non-working)
- breaking
Demo in LWC v6 with corrected code (working)
Lifecycle callbacks accurately fire during list rendering
Before LWC v6, certain scenarios in list rendering would not result in
connectedCallback/disconnectedCallbackfiring on components inside the list, even if the components were actually disconnected and re-connected to the DOM (for example, during list reordering).In LWC v6,
connectedCallback/disconnectedCallbackwill accurately fire to reflect that the underlying framework has removed and re-inserted elements into the DOM. This may be disruptive for components that do not correctly handle additionalconnectedCallback/disconnectedCallbackinvocations, or that have significant performance overhead for these callbacks.For example, if you have the list:
<template for:each={items} for:item="item"> <x-item uid={item} key={item}></x-item> </template>... and if
itemsis originally[1, 2, 3, 4]and later changes to[3, 4, 2, 1]Demo of LWC v6 behavior compared to LWC v5 behavior.
Standard shadowrootmode attribute in SSR
Note
This change only applies to consumers using SSR (Server Side-Rendering), via the
renderComponent()API.In SSR, the attribute used to mark declarative shadow DOM roots has changed to match the latest browser standards. Instead of
shadowroot, the attribute is nowshadowrootmode.This may be a breaking change for you if you have a polyfill that is detecting the
shadowrootattribute rather thanshadowrootmode. It will also change your Jest snapshots, which will need to be updated.Old format:
<x-foo> <template shadowroot="open"> <div>Hello world</div> </template> </x-foo>New format:
<x-foo> - <template shadowroot="open"> + <template shadowrootmode="open"> <div>Hello world</div> </template> </x-foo>All changes
engine-dom: Use native lifecycle callbacks
engine-server: Use standard shadowrootmode attribute
- 5.x
5.3.0
10 Jan 2024template-compiler: Exclude comments from static parts when
lwc:preserve-commentsis disabled
What's Changed
template-compiler: Exclude comments from static parts when
lwc:preserve-commentsis disabled
5.2.2
3 Jan 2024Reading the note…
5.2.1
20 Dec 2023Reading the note…
5.2.0
12 Dec 2023Log shadow mode through engine reporting API
Add flag for forced shadow migrate mode
What's Changed
Log shadow mode through engine reporting API
Add flag for forced shadow migrate mode
5.1.0
17 Nov 2023Remove string.prototype.matchAll polyfill
What's Changed
Remove string.prototype.matchAll polyfill
5.0.10
20 Mar 2024Reading the note…
5.0.9
14 Feb 2024Reading the note…