All versions since 0.13.0
0.13.0
Every component instance now knows where it was written. On the dev server,
custom elements in html templates and in index.html carry their line and
column, so the Components, Timeline and Updates views and the source overlay
can open the template tag that rendered a given instance, not only the class
behind it. The overlay tooltip becomes a readout that lights up the row a
click will open. Nothing needs action to upgrade, but tests that match
attributes exactly will see the new dev-only data-lit-source.
Added
- Jump to where a component instance is rendered. The Components panel
shows a “Rendered at” link next to the declaration that opens the
htmltemplate, orindex.html, at the line and column of the tag that created this instance. To make that possible the dev server stamps adata-lit-sourceattribute on those elements whilesourceOverlayis on; production builds never get it. - The source overlay opens the call site too. Its tooltip shows a
“rendered at” row under the declaration, and Ctrl/⌘+Shift+click opens it.
Library elements picked with
hosts: 'lit'have no declaration, so Ctrl/⌘+click opens their call site instead.onSelectreceives the newcallSite, and a customEditorConfig.urlgets an optionalcolumn. - The overlay shows which file a click will open. Holding Ctrl/⌘ lights up the declaration row, now marked with the Components tab’s cube, and adding Shift lights up the “rendered at” row.
- Timeline and Updates link to where an element is rendered. A selected span, and the updates of a single instance, show a “Rendered at” link next to the source link.
- The Settings tab says why a feature is on or off. The HMR, Source
Overlay and Timeline headers now tag their enabled or disabled pill with
(option)or(env)when your config set it, like the rows below them.
Changed
- The overlay tooltip is a readout, not a control. The pointer never settled on it long enough to click, so its open icons are no longer buttons and the pointer passes through to the page underneath, which can now be picked there too.
Fixed
- A snapshot from
lit-devtools devno longer promises HMR or source links. The frozen panel now offers what the host that recorded the session could do, instead of assuming the Vite plugin.
Removed
- The overlay tooltip’s copy button. It sat out of the pointer’s reach; the path is still shown in the tooltip and in the Components panel.
0.14.0
Lit Inspector now runs in Firefox. Every release carries a Firefox build next to the Chrome one, with the same Lit tab; sites are enabled from its toolbar popup, because Firefox doesn’t let DevTools ask for access. Performance tracks reach browsers without Chrome’s custom tracks as User Timing marks, the Timeline opens in Tracks, and the extension has a new icon. Nothing needs action to upgrade.
Added
- Lit Inspector for Firefox. GitHub releases now include
lit-inspector-<version>-firefox.zip, a Firefox 140+ add-on with the same Lit tab, loaded fromabout:debugginguntil it’s on addons.mozilla.org. Enable a site from the Lit Inspector toolbar popup; since Firefox can’t name a port in site access, enablinglocalhost:5173covers every port onlocalhost. - Performance tracks in Firefox, Safari and older Chrome. Where the
browser has no custom tracks, the performance tracks setting (formerly
chrome performance tracks) writes Lit’s updates and input as User Timing
marks named
lit:…, which show in the Firefox Profiler’s Marker Chart next to the browser’s own work. Its help and “Where to find them” link follow the browser.
Changed
- The Timeline opens in Tracks. A first visit shows the recording as lanes on a shared time axis instead of the list; switch with List | Tracks, and the panel remembers your choice.
- Lit Inspector has a new icon. The extension’s toolbar button, DevTools tab and panel header show a magnifying glass in Lit’s blues.
- The pick tooltip shows the component icon everywhere. In the browser
extension and with
lit-devtools dev, the tooltip over a picked component has the same component icon as under the Vite plugin, not just the tag name.
Fixed
- The Lit tab notices a site enabled from another window. Enabling or disabling Lit Inspector for a site in one DevTools window now updates the Lit tab in every other window on that site, and Enable on this site no longer asks for access the extension already has.
0.15.0
Lit Inspector is on the Chrome Web Store, and the Timeline now explains itself:
every update records what caused it, a column of rails draws the chain from a
click or a parent render through @lit/task runs to the re-render, and a time
range can be selected, summarised and shared as a link. The Components tab
shows a component’s slots, parts, context, Lit’s warnings and tags that were
never defined, and its details pane can be filtered, folded, expanded and
copied from. Nothing needs action to upgrade.
Added
- Lit Inspector is on the Chrome Web Store. Install it with Add to Chrome instead of loading an unpacked zip, and Chrome keeps it up to date. Firefox still loads the zip from the GitHub release.
- Updates know what caused them. The cause is recorded at the
requestUpdatecall that scheduled an update, so the Updates tab reads “after click (412, 88)” or “after my-parent update” instead of guessing from timing, and the Timeline details pane names the cause with a show link to it. - The Timeline draws why each update ran. A column beside the list connects an update to the row that caused it: the parent whose render set a property on it, or the click, key or custom event whose handler requested it. Rows stay in time order, each chain has its own colour, and hovering a row highlights its chain.
@lit/taskruns show in the Timeline’s cause chain. A task run is a row of its own, from the update or handler that started it to when it settled, and the re-render it asks for hangs from it, so a click, the fetch it started and the render that showed the result read as one chain.- Select a time range in the Timeline. Shift+drag on the tracks, or drag the time ruler, to see which layers fired and which components updated in that stretch, then zoom to it or filter the list to it. Drag either edge, or Tab to it and use the arrow keys, to adjust it a tick step at a time; Shift moves five.
- Share a Timeline range as a link. Copy link in the range summary gives an
address with
#tab=timeline&range=<start>-<end>that opens the Tracks on that stretch, including in an exported snapshot. - Coding agents can summarise a window of the Timeline. The new
lit_range-summaryMCP tool takes a start and an end fromlit_recent-eventstimes and returns which layers fired and which components updated between them. - See a component’s slots and parts. The Components tab lists each slot
with what is assigned to it, flags empty, fallback, forwarded and duplicate
slots, and shows in red the children no slot takes. Turn on Anatomy to draw
the slots and
::partexports on the page; hovering a row in the Slots or Parts table pulses that region and fades the others. - See parts forwarded with
exportparts. The Parts list and the Anatomy overlay now include parts a nested component re-exports, marked forwarded, and show the outer name whenexportpartsrenames one. - See which provider a Lit context consumer reads from. The Components
details pane now shows each
@lit/contextprovider and consumer with its key and value, links a consumer to its provider and a provider to its consumers, and selects the element when you click a link. - Record the custom events your components dispatch. The new Custom events layer on the Timeline, off by default, shows each event’s type, flags and detail next to the component that dispatched it.
- Lit dev-mode warnings show up. Mistakes Lit warns about, like scheduling
an update from inside
updated(), record awarningevent in the Timeline naming the component, including ones issued before recording started. A component Lit has warned about gets a warning chip and a Warnings section in the Components tab, with Lit’s message and a link to its explanation; agents get the same list from the component details tool. - Updates that
shouldUpdatevetoes leave a trace. A refused update records anupdate skippedevent in the Timeline with the property keys that changed, and the Updates tab counts each component’s refused updates and marks them in its list. - Components that were never defined show up in the tree. A custom tag on the page with no definition, from a missing import or a typo, is listed with a “not defined” chip instead of being left out; selecting it explains what is missing and links to the template that renders it. Agents see it in the list-components tool too.
- Property options show on the Properties rows. A custom
hasChangedorconverter,noAccessor,useDefaultandattribute: falseeach get a badge, so you can see how a property is declared without opening the source.lit_component-detailslists the same options for agents. - Filter the Components tree. A box in the toolbar narrows the tree to elements whose tag or class name matches, keeps their parents for context, and restores your expanded branches when cleared.
- Filter the details pane. A box under the tag name narrows properties, state, attributes, instance fields, slots and parts to rows whose name or value matches, and stays set as you select other components.
- Details sections fold, and remember it. Properties, State, Attributes, Instance, Slots and Parts each fold on their heading, show how many rows they hold, and stay folded as you select other components.
- Expand values in the details pane. Objects, arrays, Maps and Sets open
level by level from a caret, so values nested past the preview limits are no
longer cut off, and open levels follow the value as it changes. Maps and Sets
also preview their first entries, such as
Map(2) {"a" => 1, "b" => 2}. - Values in the details pane are syntax-coloured and pretty-printed. Strings, numbers, keywords and keys are coloured like code, and objects or arrays too wide for a line show one entry per line.
- Changed values light up in the details pane. When the selected component updates, each row whose value changed briefly highlights, so you can see what an interaction touched.
- Copy a value from the details pane. Hover a row for a copy button that puts the value, as shown, on the clipboard.
- Shift-hover a tree row to outline every instance of that component. The page shows each element with the same tag in a dashed box, and the tree marks their rows.
Changed
- Timeline list rows group by update. Each component update is one collapsed row showing its duration and changed properties; expand it to see its phases, skips, warnings and events from the same update.
- The Timeline’s detail pane is resizable and easier to scan. Drag its top edge to give a selected event more room; the height sticks. A header shows the event’s name, layer, time and duration, and the facts below line up in a compact grid with pretty-printed data and any recorded error.
- The Components details header is compact. The class and template locations, and the render root, now sit in a three-line block under the tag name, and a status shows next to the tag only while an update is pending or the first render has not happened.
- Long values in the details pane get the full width. Objects and long strings move to their own line instead of wrapping in a narrow column, badges follow the value, and arrays, dates and DOM nodes are tagged with their type.
- Task status shows as a coloured dot in the details pane. Instance rows name their kind in a quiet tag after the name instead of outlined chips, a task’s status is green, amber or red, and attribute values show as quoted strings.
- Details sections are easier to tell apart. A thin rule and more space now separate Properties, State, Attributes, Instance, Slots and Parts.
- The Anatomy toggle is remembered. Leaving it on keeps it on after the panel reloads.
Fixed
- The Slots table follows light-child changes. Changing a child’s
slotattribute, or adding or removing children, now updates the selected element’s slots without a re-render or a re-select. - Timeline ticks line up with the marks. With many lanes and a scrollbar, the time ruler was offset from the marks by the scrollbar’s width, and the range edges could block clicks on marks beneath them.
- The Timeline range no longer overshoots the tracks. With many lanes and a vertical scrollbar, the shaded range’s right edge stopped a few pixels past the last mark; it now ends where the marks do.
- Long strings in the details pane wrap under their own text. A string that wraps inside a pretty-printed object now continues indented under its line instead of at the left edge of the value.
0.16.0 Latest
Lit Inspector and the browser’s own DevTools now hand off to each other:
sourcemaps tell the extension where components are defined, the Elements and
Sources panels link to and from the Lit tab, and custom elements from other
libraries keep their place in the tree. The dev server can connect your
project to Chrome’s Sources panel for editing, the panel got a calmer, more
readable look, and a Fernhouse shop example gives the DevTools something to
explore. Editing a @provide component no longer leaves its consumers stale.
Nothing needs action to upgrade.
Added
- Custom elements from other libraries show up in the Components tree. A defined element that isn’t a Lit component is listed where it sits, marked “not Lit”, instead of being flattened away, so the tree keeps the page’s real structure. Selecting one shows its attributes and slots with a note on why it has no properties, the browser’s Elements panel selects its own row, and the Anatomy tables link to it. Agents see it in the list-components tool too.
- The extension finds component sources through the page’s sourcemaps. On pages without the plugin that ship sourcemaps, Lit Inspector shows where each component is defined in the details pane, the Updates view and the Timeline’s span details.
- Lit Inspector and the browser’s DevTools hand off to each other. The details pane’s Reveal in Elements button selects the element in the Elements panel, picking a node in the Elements panel selects its component (or the nearest Lit element around it), and in Chrome the defined and Rendered at links open the file in Sources at that line, also on pages built with the Vite plugin.
- Edit components in Chrome’s Sources panel and save to disk. The dev
server now answers Chrome DevTools’ workspace request, so DevTools offers to
connect your project folder. Turn it off with
devtoolsWorkspace: falseor point it at another folder with a path. - Lit warnings get their own Timeline layer and stand out. Toggle them apart from the Lifecycle layer; a warning issued during an update folds under it, and turning the layer on mid-recording brings in earlier warnings. Warning rows are tinted, selecting one shows its message and a link to the explanation on lit.dev, and components Lit warned about carry a chip in the tree, counted in the Components tab.
- Source locations in lit-devtools dev. On pages that ship sourcemaps, the
standalone panel shows where each component is defined, in the details
pane, the Updates view and the Timeline’s span details. Load
lit-devtools.js in
<head>so it sees the app’s defines. - A Fernhouse shop example to explore the DevTools on. A small Lit plant shop with context, slots and parts, a task and custom events, runnable locally or on StackBlitz, with a production build for Lit Inspector.
Changed
- A calmer component tree with keyboard navigation. Tags read as plain text with the selection clearly marked, the inspector’s values line up across sections, and arrow keys move through and fold the tree.
- A clearer Timeline. An empty timeline says what to do and offers Record, layer chips show plainly whether they’re on, and the lane filter in Tracks no longer looks like a second set of layers.
- Updates reads as a table. Counts and times sit under named columns, and a bar under each total shows which components cost the most.
- A tidier Settings tab. Status pills and origin tags no longer shout or look clickable, and values line up from section to section.
Fixed
- Context consumers keep updating after you edit their provider. Editing
a component that uses
@provideno longer leaves its@consumechildren stuck on the value they had before the edit. - Lit Inspector names the right file for decorated components. On bundled production builds, the defined link no longer points every component at the same unrelated module.
- Flash on update skips components that didn’t re-render. A component
whose
shouldUpdatereturned false no longer flashes, since nothing on the page changed. - Quiet text in the panel is readable. Timestamps, labels and counts in muted grey, and links in the dark theme, now meet WCAG AA contrast.
- Bundled Phosphor icons carry their licence. The npm package, the JSR package and the Lit Inspector extension now ship THIRD_PARTY_NOTICES.md with the full MIT notice for the Phosphor icons they include.