NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3891 most downloaded on npm
A simple base class for creating fast, lightweight web components
Last release 9 months ago
23 Dec 2025
Release timing varies
gaps range from 2 weeks to 6 months
Nearly every release is documented
notes for 33 of 35 stable releases
23 versions withdrawn
withdrawn after publishing
9 years old
87 releases · first in 2017
Updated dependencies [`5057feeac96cc6eb3c5e5c1cb6c42bc01ac6aab1`, `ad23f26ae908a160d30ed2a939b322fe9cc2ee83`]:
#5044 0d0170e87b06edd8295a31893c820162d0f16a23 Thanks @ava-cassiopeia! - Make ClassInfo mutable
#4999 6c174c8d0ed0230ba765d699591d933d7ab5d4bb - Fix a bug in change detection with decorated standard private accessors.
Updated dependencies [5057feeac96cc6eb3c5e5c1cb6c42bc01ac6aab1, ad23f26ae908a160d30ed2a939b322fe9cc2ee83]:
One column per quarter.
Updated dependencies \[`3ac01aee`]:
#4988 6792b7ef Thanks @ADNolan! - Adjusted the comparison to use the name property of the _$resolve function and the resolveOverrideFn in private ssr support to prevent duplicated patching of the directive class.
#4976 a126d8df - Fix minor regression in property converters. fromAttribute may return either null or undefined.
Updated dependencies [3ac01aee]:
Updated dependencies \[`c9160405`, `3e2f87f6`, `4824c4ce`, `0a9bc720`]:
#4901 c9160405 Thanks @maxpatiiuk! - Dev mode warnings are now emitted on the next microtask after package import, allowing for a wider opportunity to suppress the warnings by consumers.
#4934 4824c4ce - Adds property option for useDefault. When set, the initial default value is not considered a change and does not reflect when reflect is set. In addition, when the attribute is removed, the default value is restored.
### Patch Changes - #4782 `99703a03` - Revert the Terser plugin for Rollup to rollup-plugin-terser from @rollup/plugin-terser due to a bug that preven
Updated dependencies \[`6c051d517bd92761787897b2c8c060ed419126e2`, `b9de4295489b0caf91069bfe21f640f3ab5e12bb`, `077a4b727d0d30540f1813bbbe66477790c980
#4893 6c051d517bd92761787897b2c8c060ed419126e2 Thanks @kyubisation! - Implement ShadowRoot and document in event path
#5265 1e85a64f2add060087e85d3aa456078e5c3793a2 Thanks @kyubisation! - Add configuration on LitElementRenderer for disabling SSR or calling connectedCallback on LitElement subclasses
#4894 baa780d2b78a4b792cf61b220b8e3e186739d48c Thanks @kyubisation! - Add DOM shim implementation for MutationObserver, ResizeObserver and IntersectionObserver
6c051d517bd92761787897b2c8c060ed419126e2, b9de4295489b0caf91069bfe21f640f3ab5e12bb, 077a4b727d0d30540f1813bbbe66477790c9805e, baa780d2b78a4b792cf61b220b8e3e186739d48c]:
### Patch Changes - #4646 `abf30b3e` - The value provided by the ref() directive will always be undefined when the element is disconnected.
### Patch Changes - #4570 `bd881370` - Fix the lit-html marker length to be consistently 9 characters.
Updated dependencies \[`1a32b61e`, `e901c582`, `57b00630`, `dca963f7`]:
57b00630 - Add "browser" export condition entrypoints to any package.json files with "node"
export conditions. This fixes Node test runners emulating browser environments that were incorrectly loading the
"node" entrypoints instead of the browser code.1a32b61e, e901c582, 57b00630, dca963f7]:
### Patch Changes - #4473 `9a4d569f` - Add a warning in dev mode when binding this.requestUpdate directly as an event listener. - #4413 `f60a3a2c` - R
Updated dependencies \[`949a5467`]:
#4387 bf551b5b - Ensure renderRoot exists before first update (#4268)
#4282 c7922a0c Thanks @MaxArt2501! - Fix a bug where accessing a @query decorated field with the cache flag set before the first update would result in null being cached permanently. null will no longer be cached before the first update and in DEV_MODE now raises a warning.
#4388 839ca0f8 - Fixes bug where adding or removing controllers during a reactive controller lifecycle would affect the execution of other controllers (#4266). Controllers can now be added/removed during lifecycle without affecting others.
Updated dependencies [949a5467]:
### Patch Changes - #4284 `89a5b088` - Allow null to be in the type of @query() decorated fields - #4306 `c28ebba1` - Update dependency version to ref
Migrate deprecated usage with a selector argument to use @queryAssignedElements. E.g.: @queryAssignedNodes('list', true, '.item') to @queryAssignedEle…
#3751 dfd747cf - Simplify lit-html attribute handling for standards-compliant browsers that iterate attributes in source order
#4254 1040f758 - Change the type of ReactiveElement.renderRoot and return type of ReactiveElement.createRenderRoot() to be HTMLElement | DocumentFragment to match each other and lit-html's render() method.
#4146 0f6878dc - Generated accessor for reactive properties now wrap user accessors and automatically call this.requestUpdate() in the setter. As in previous versions, users can still specify noAccessor: true, in which case they should call this.requestUpdate() themselves in the setter if they want to trigger a reactive update.
#3750 c3e473b4 - Use toggleAttribute() to simplify boolean attribute parts
#3850 7e8491d4 - Delete deprecated queryAssignedNodes behavior and arguments.
Migrate deprecated usage with a selector argument to use
@queryAssignedElements. E.g.: @queryAssignedNodes('list', true, '.item') to
@queryAssignedElements({slot: '', flatten: false, selector: '.item'}).
#3754 76795a18 - Remove UpdatingElement alias for ReactiveElement
#3765 92cedaa2 - Remove experimental hydrate modules. These are available from @lit-labs/ssr-client.
Updated dependencies \[`6b515e43`, `0f6878dc`, `2a01471a`, `2eba6997`, `d27a77ec`, `6470807f`, `09949234`]:
#4146 0f6878dc - Generated accessor for reactive properties now wrap user accessors and automatically call this.requestUpdate() in the setter. As in previous versions, users can still specify noAccessor: true, in which case they should call this.requestUpdate() themselves in the setter if they want to trigger a reactive update.
#4183 6470807f - Make the decorators work with the accessor keyword when experimentalDecorators is true.
Updated dependencies \[`be72f66b`, `dfd747cf`, `23c404fd`, `1db01376`, `6f2833fd`, `c3e473b4`, `92cedaa2`, `7e8491d4`, `23326c6b`, `f06f7972`]:
#3751 dfd747cf - Simplify lit-html attribute handling for standards-compliant browsers that iterate attributes in source order
#3754 76795a18 - Remove UpdatingElement alias for ReactiveElement
#3750 c3e473b4 - Use toggleAttribute() to simplify boolean attribute parts
#3765 92cedaa2 - Remove experimental hydrate modules. These are available from @lit-labs/ssr-client.
#3754 76795a18 - Remove re-export of decorators from main lit-element module
Updated dependencies \[`e2c50569`]:
### Patch Changes - #3766 `4431cbb8` - Fix styleMap initial render of mixed-case custom props
The modules in the original location have been marked deprecated and will be removed in a future version.
Updated dependencies \[`25962bf5`]:
25962bf5 Thanks @kyubisation! - Implement SSR event handling and an optional flag globalThis.litSsrCallConnectedCallback to call connectedCallback during SSR, if set to true.25962bf5]:
b95c86e5 - [SSR only] Reflect ARIA attributes onto server rendered Lit elements with attached internals during SSR and remove them upon hydration.Nothing published for this version
Nothing published for this version
Updated dependencies \[`1a32b61e`, `e901c582`, `57b00630`, `dca963f7`]:
#4515 dca963f7 - Fix a memory leak when patching directive constructors for SSR.
#4519 8d3e3057 - Fix a bug where server templates with attribute bindings on certain element tags like <td> used top-level would throw an error during server render.
Updated dependencies [1a32b61e, e901c582, 57b00630, dca963f7]:
### Patch Changes - #4421 `c7134a40` - Fix server template throwing when encountering an attribute binding on the html tag. This is now handled correc
Updated dependencies \[`bf551b5b`, `949a5467`, `c7922a0c`, `839ca0f8`]:
2c9d0008 - Added a devlog events system that may be used for debugging and visualizing Lit's internals.2c9d0008]:
### Patch Changes - #2370 `7453e365` - Replace square bracket links with the linkcode JSDoc tag. Editors will create a jump to definition hyperlink fo
### Patch Changes - #2384 `39b8db85` - Fix missing decorators/query-assigned-elements.js file
### Minor Changes - #4170 `04c8d65a` - Graduate @lit-labs/task to @lit/task, its permanent location. @lit-labs/task is now just a proxy for @lit/task,
49ecf623 - Add queryAssignedElements decorator for a declarative API that calls HTMLSlotElement.assignedElements() on a specified slot. selector option allows filtering returned elements with a CSS selector.### Patch Changes - #4161 `4fdc47cf` - Disambiguate TypeFunction type to fix type error when providing a task function making use of the abort signal.
### Patch Changes - #4070 `3be62b07` Thanks @mlcui-google! - Fix Task.render()'s return type always being undefined
3be62b07 Thanks @mlcui-google! - Fix Task.render()'s return type always being undefined### Major Changes - #4004 `5beb5f9a` - Adds the 'afterUpdate' option for autoRun to Task, and runs tasks by default in hostUpdate() instead of hostUpd
#4004 5beb5f9a - Adds the 'afterUpdate' option for autoRun to Task, and runs tasks by default in hostUpdate() instead of hostUpdated(). 'afterUpdate' is needed to run tasks dependent on DOM updates, but will cause multiple renders of the host element.
#4013 a5bf2507 - Add pluggable task args equality functions and deepArrayEquals. Breaking: this removes performTask() and shouldRun() protected methods.
Most users should no longer import directly from lit-element, and instead prefer importing LitElement from the lit packages. The default entry point for lit-element remains backward-compatible and includes all decorators. However, it's recommended to use import {LitElement} from 'lit'; and import decorators from lit/decorators as necessary. See the Upgrade Guide for more details.
UpdatingElement has been moved from the lit-element package to the @lit/reactive-element package and renamed to ReactiveElement. See the ReactiveElement API documentation for more details. In addition, the source for css-tag, and all decorators have been moved to @lit/reactive-element. However, all symbols are re-exported from both lit and lit-element packages.
The @internalProperty decorator has been renamed to @state.
Errors that occur during the update cycle were previously squelched to allow subsequent updates to proceed normally. Now errors are re-fired asynchronously so they can be detected. Errors can be observed via an unhandledrejection event handler on window.
The lib folder has been removed.
Rendering of renderRoot/shadowRoot) via createRenderRoot and support for static styles has moved from LitElement to ReactiveElement.
The createRenderRoot method is now called just before the first update rather than in the constructor. Element code can not assume the renderRoot exists before the element hasUpdated. This change was made for compatibility with SSR.
ReactiveElement's initialize method has been removed. This work is now done in the element constructor.
The static render has been removed.
For consistency, renamed _getUpdateComplete to getUpdateComplete.
When a property declaration is reflect: true and its toAttribute function returns undefined the attribute is now removed where previously it was left unchanged (#872).
The dirty check in attributeChangedCallback has been removed. While technically breaking, in practice it should very rarely be (#699).
LitElement's adoptStyles method has been removed. Styling is now adopted in createRenderRoot. This method may be overridden to customize this behavior.
LitElement's static getStyles method has been renamed to static finalizeStyles and now takes a list of styles the user provided and returns the styles which should be used in the element. If this method is overridden to integrate into a style management system, typically the super implementation should be called.
Removed build support for TypeScript 3.4.
Decorators are no longer exported from the lit-element module. Instead, import any decorators you use from lit/decorators/*.
lit-html has been updated to 2.x.
Support for running in older browsers has been removed from the default configuration. Import the platform-support module to support Shady DOM. Note also that Lit parts inside <style> elements are no longer supported. See Polyfills for more details.
For simplicity, requestUpdate no longer returns a Promise. Instead await the updateComplete Promise.
Removed requestUpdateInternal. The requestUpdate method is now identical to this method and should be used instead.
#2103 15a8356d - Updates the exports field of package.json files to replace the subpath
folder
mapping
syntax with an explicit list of all exported files.
The /-suffixed syntax for subpath folder mapping originally used in these
files is deprecated. Rather than update to the new syntax, this change replaces
these mappings with individual entries for all exported files so that (a) users
must import using extensions and (b) bundlers or other tools that don't resolve
subpath folder mapping exactly as Node.js does won't break these packages'
expectations around how they're imported.
renderOptions class field now exists on LitElement and can be set/overridden to modify the options passed to lit-html.static shadowRootOptions for customizing shadowRoot options. Rather than implementing createRenderRoot, this property can be set. For example, to create a closed shadowRoot using delegates focus: static shadowRootOptions = {mode: 'closed', delegatesFocus: true}.development Node exports condition. See Development and production builds for more details.f43b811 - Don't publish src/ to npm.css function now maintains a cache and will use a cached value if available when the same style text is requested.static get properties on an undefined superclass with @property on a subclass ([#890]https://github.com/Polymer/lit-element/issues/890));The /-suffixed syntax for subpath folder mapping originally used in these files is deprecated. Rather than update to the new syntax, this change repla…
#2103 15a8356d - Updates the exports field of package.json files to replace the subpath
folder
mapping
syntax with an explicit list of all exported files.
The /-suffixed syntax for subpath folder mapping originally used in these
files is deprecated. Rather than update to the new syntax, this change replaces
these mappings with individual entries for all exported files so that (a) users
must import using extensions and (b) bundlers or other tools that don't resolve
subpath folder mapping exactly as Node.js does won't break these packages'
expectations around how they're imported.
7adfbb0c - Remove unneeded matches support in @queryAssignedNodes. Update styling tests to use static bindings where needed. Fix TODOs related to doc links.724a9aab - Ensures dev mode warnings do not spam by taking care to issue unique warnings only once.Updated dependencies [`ff0d1556`, `5768cc60`, `69389958`, `5fabe2b5`, `52a47c7e`, `5fabe2b5`, `5fabe2b5`, `5fabe2b5`, `f05be301`, `5fabe2b5`, `56e8efd
c8fe1d4 - For minified class fields on classes in lit libraries, added prefix to stable properties to avoid collisions with user properties.6938995 - Changed prefix used for minifying class field names on lit libraries to stay within ASCII subset, to avoid needing to explicitly set the charset for scripts in some browsers.#1972 a791514b - Properties that must remain unminified are now compatible with build tools other than rollup/terser.
Updated dependencies [ff0d1556, 5768cc60, 69389958, 5fabe2b5, 52a47c7e, 5fabe2b5, 5fabe2b5, 5fabe2b5, f05be301, 5fabe2b5, 56e8efd3, 662209c3, a791514b, 5fabe2b5]:
Changes below were based on the Keep a Changelog format. All changes above are generated automatically by Changesets.
<!-- PRs should document their user-visible changes (if any) in the Unreleased section, uncommenting the header as necessary. -->
<!-- ## [x.y.z] - YYYY-MM-DD --> <!-- ## Unreleased --> <!-- ### Changed --> <!-- ### Added --> <!-- ### Removed --> <!-- ### Fixed -->
(Since 3.0.0-rc.1) Improves support for customizing observedAttributes by ensuring that ReactiveElement.observedAttributes is callable, allowing mixin
observedAttributes by
ensuring that ReactiveElement.observedAttributes is callable, allowing
mixins to directly reference it (#1835).Experimental modules may undergo breaking changes within otherwise non-major releases.
defer-hydration attribute handling to experimental-hydrate-support,
which helps coordinate ordered wakeup of custom elements during hydration.hydrate-support module to experimental-hydrate-support to reflect its experimental nature. Experimental modules may undergo breaking changes within otherwise non-major releases.(Since 3.0.0-pre.3) The renderOptions class field on LitElement is now public.
renderOptions class field on LitElement is now public.…export plus the decorators again. This undoes a breaking change in 3.0.0-pre.1 which moved the decorators to decorators.js.
(Since 3.0.0-pre.2) Renamed all decorator modules to use kebab-case filename convention rather than camelCase.
(Since 3.0.0-pre.2) Renamed platform-support to polyfill-support.
(Since 3.0.0-pre.2) Changed a new index.js file as the package entrypoint to export the main export plus the decorators again. This undoes a breaking change in 3.0.0-pre.1 which moved the decorators to decorators.js.
This new file is an upgrade helper: it's more backwards compatible, but immediately deprecated. It's recommended to import from 'lit-element/lit-element.js' or the new lit package with import {LitElement} from 'lit';.
[Breaking] Update and render callbacks will only be called when the element is connected to the document. If an element is disconnected while an updat
<!-- ### Added --> <!-- ### Removed --> <!-- ### Fixed -->
[Breaking] UpdatingElement has been renamed to ReactiveElement.
UpdatingElement has been renamed to ReactiveElement.updating-element package has been renamed to
@lit/reactive-element.@internalProperty decorator has been renamed to @state.unhandledrejection event handler on window.UpdatingElement has been moved to its own package. The updating-element, css-tag, and all decorators have moved to the updating-element package. For convenience, all decorators are re-exported in LitElement at lit-element/decorators and lit-element/decorators/*.lib folder has been removed.renderRoot/shadowRoot) via createRenderRoot and support for static styles has moved from LitElement to UpdatingElement.createRenderRoot method is now called just before the first update rather than in the constructor. Element code can not assume the renderRoot exists before the element hasUpdated. This change was made for compatibility with SSR.UpdatingElement's initialize method has been removed. This work is now done in the element constructor.render has been removed._getUpdateComplete to getUpdateComplete.reflect: true and its toAttribute function returns undefined the attribute is now removed where previously it was left unchanged (#872).attributeChangedCallback has been removed. While technically breaking, in practice it should very rarely be (#699).adoptStyles method has been removed. Styling is now adopted in createRenderRoot. This method may be overridden to customize this behavior.static getStyles method has been renamed to static finalizeStyles and now takes a list of styles the user provided and returns the styles which should be used in the element. If this method is overridden to integrate into a style management system, typically the super implementation should be called.lit-element module. Instead, import any decorators you use from lit-element/decorators/*.lit-html has been updated to 2.x.platform-support module to support Shady DOM. Note also that Lit parts inside <style> elements are no longer supported.requestUpdate no longer returns a Promise. Instead await the updateComplete Promise.css function has been changed to CSSResultGroup and is now the same as LitElement.styles. This avoids the need to cast the styles property to any when a subclass sets styles to an Array and its super class set a single value (or visa versa).css function now maintains a cache and will use a cached value if available when the same style text is requested.static shadowRootOptions for customizing shadowRoot options. Rather than implementing createRenderRoot, this property can be set. For example, to create a closed shadowRoot using delegates focus: static shadowRootOptions = {mode: 'closed', delegatesFocus: true}.development Node exports condition. See README.md for more details.requestUpdateInternal. The requestUpdate method is now identical to this method and should be used instead.static get properties on an undefined superclass with @property on a subclass ([#890]https://github.com/Polymer/lit-element/issues/890));Nothing published for this version
Nothing published for this version
Set type in package.json to "module"
cache: boolean argument to the @query decorator as a performance optimization for properties whose queried element is not expected to change. If cache is set to true, element DOM is queried when the property is first accessed, and the value is cached so it can be immediately returned on all subsequent property accesses. (#1013)selector: string argument to the @queryAssignedNodes decorator as a convenience to filter the assigned nodes by the given selector (#1016).requestUpdateInternal(name, oldValue, options) method has been added. This method is sometimes useful to call in a custom property setter to optimize performance. It is slightly more efficient than requestUpdate since it does not return the updateComplete property which can be overridden to do work.performUpdate() method may now be called to synchronously "flush" a pending update, for example via a property setter. Note, performing a synchronous update only updates the element and not any potentially pending descendants in the element's local DOM (#959).css tagged template function (#853).Nothing published for this version
Nothing published for this version
Nothing published for this version
Add TypeScript type declarations for older versions of TypeScript. We're currently testing back to TS 3.4. We can't commit to never breaking TypeScrip
Added a static getPropertyDescriptor method to allow easier customization of property accessors. This method should return a PropertyDescriptor to ins
getPropertyDescriptor method to allow easier customization of property accessors. This method should return a PropertyDescriptor to install on the property. If no descriptor is returned, no property accessor is created. (#911)render is always rendered, even if it isn't a TemplateResult. (#712)@queryAsync(selector) decorator which returns a Promise that resolves to the result of querying for the given selector after the element's updateComplete Promise resolves (#903).enableUpdating() to UpdatingElement to enable customizing when updating is enabled #860.@queryAssignedNodes(slotName, flatten) decorator to enable querying assignedNodes for a given slot #860.getStyles() to LitElement to allow hooks into style gathering for component sets #866.@internalProperty(options) decorator to define properties internal to an element. #881.UpdatingElement allows updates when properties are set after calling super.update().
LitElement renders when updates are triggered as a result of rendering (#549).eventOptions decorator will now survive property renaming optimizations when used with tsickle and Closure JS Compiler.finalize to initialize to be more lazy, and create stylesheets on the first instance initializing #866.render() introduced in (#712) (#917)Nothing published for this version
Elements should now override the new _getUpdateComplete method instead of the updateComplete getter, for compatibility with TypeScript ES5 output, whi
_getUpdateComplete method instead of the updateComplete getter, for compatibility with TypeScript ES5 output, which does not support calling a superclass getter (e.g.super.updateComplete.then(...)) due to TypeScript#338.css tagged template literals now allow numbers to be used in expressions (#488).
### Minor Changes - #4901 `c9160405` Thanks @maxpatiiuk! - Dev mode warnings are now emitted on the next microtask after package import, allowing for
#4901 c9160405 Thanks @maxpatiiuk! - Dev mode warnings are now emitted on the next microtask after package import, allowing for a wider opportunity to suppress the warnings by consumers.
#4934 4824c4ce - Adds property option for useDefault. When set, the initial default value is not considered a change and does not reflect when reflect is set. In addition, when the attribute is removed, the default value is restored.
5a60fbc6 Thanks @rivajunior! - export Options interfaceLitElement.renderRoot is now public readonly instead of protected.@query and @queryAll decorators will now
survive property renaming optimizations when used with tsickle and Closure JS
Compiler.### Patch Changes - #4520 `89c5bdfb` - Update typescript dependency
### Major Changes - #3850 `7e8491d4` - Remove transform for deprecated usage of queryAssignedNodes. - #4141 `6b515e43` - Update TypeScript to ~5.2.0,
#4146 0f6878dc - Generated accessor for reactive properties now wrap user accessors and automatically call this.requestUpdate() in the setter. As in previous versions, users can still specify noAccessor: true, in which case they should call this.requestUpdate() themselves in the setter if they want to trigger a reactive update.
#4254 1040f758 - Change the type of ReactiveElement.renderRoot and return type of ReactiveElement.createRenderRoot() to be HTMLElement | DocumentFragment to match each other and lit-html's render() method.
#3850 7e8491d4 - Delete deprecated queryAssignedNodes behavior and arguments.
Migrate deprecated usage with a selector argument to use
@queryAssignedElements. E.g.: @queryAssignedNodes('list', true, '.item') to
@queryAssignedElements({slot: '', flatten: false, selector: '.item'}).
#4027 c28cb6ed - - [BREAKING] Removed deprecated call signature for createComponent() taking multiple arguments. A single option object must be passed in instead.
Example:
- createComponent(React, 'my-element', MyElement, {onfoo: 'foo'})
+ createComponent({
+ react: React,
+ tagName: 'my-element',
+ elementClass: MyElement,
+ events: {onfoo: 'foo'},
+ })
forwardRef rather than creating a class component. This removes an extra React component of the same name showing up in the component tree.LitElement, ReactiveElement, and lit-html). See the Migration Guide for more details.unsafeCss to unsafeCSS for consistency with lit-html's unsafeHTML (#524)any outside of tests (#457)CSSStyleSheet is constructable (#527).Nothing published for this version
Fixed a bug causing duplicate styles when an array was returned from static get styles (#480).
static get styles (#480).[Maintenance] Added script to publish dev releases automatically (#476).
unsafeCss for composing "unsafe" values into css. Note, CSSResult is no longer constructable. (#451 and #471).styles property when extending a superclass that is never instanced. (#470).README: Fixed jsfiddle reference (#435).
@property decorators out of Closure Compiler renaming (#448).noAccessor flag should be set when a user-defined accessor exists on the prototype (and in this case, user-defined accessors must call requestUpdate themselves). (#454).static styles = css and styles correctly compose when elements are extended (#456).static styles are automatically flattened (#437).Fix references to @polymer/lit-element in README and docs (#427).
[Breaking] Changed NPM package name to lit-element
lit-elementNothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →