8.0.0 (2026-08-28)
⚠ BREAKING CHANGES
selectedandunselectedare removed fromlive.microphone.auto_unmute/auto_mute. A camera change ends any call and the microphone only carries audio during a call, so neither were useful.live.microphone.disconnect_secondsis removed. The microphone is released when a call ends, so there is no idle countdown to configure. Uselive.microphone.always_connectedto hold it open instead.- The
microphone_connectandmicrophone_disconnectactions are removed. The card owns the microphone lifecycle;microphone_muteandmicrophone_unmuteremain. callis removed fromlive.microphone.auto_mute, whose default is now[]. The microphone is muted when a call ends regardless of this option.microphone_unmutehas no effect outside a call. Nothing carries the audio at any other time, so the request is ignored rather than opening the microphone.condition: initializedis nowfalsewhenever the card is not usable, andtrigger: initializedfires each time the card starts up rather than only the first time. Setever: trueon either to keep the previous behaviour.- Automations now follow Home Assistant's
triggers:/conditions:/actions:model. Automations require atriggers:block andconditions:no longer wake an automation;actions_notis removed in favour of anif/then/elseaction; the nestedacc.trigger.*template paths and the ambientadvanced_camera_cardtemplate namespace are removed (use the top-leveltrigger.*surface and theaccalias); trigger-only condition forms (config, valuelesscamera/view/state) are no longer valid conditions; and template-condition vs template-trigger truthiness now follow HA. Existing configs are upgraded automatically where a faithful conversion exists; anything that cannot be converted is recorded under__UPGRADE_FAILURE__for manual migration. - The microphone condition previously bundled two unrelated signals: whether a two-way-audio session was connected and whether the microphone was muted. Connection state is now its own dedicated call condition, and microphone is reserved purely for mute state. Configs are upgraded automatically (the card rewrites affected conditions under overrides, elements, and automations).
- The
screensaverimage mode now shows a random image from picsum.photos instead of the embedded default image. If you previously setimage.mode: screensaver, change it toimage.mode: defaultto restore the previous behavior. - Requires configuration change (automatic upgrade offered) to move from (e.g.)
data_left_stoptodata_end_left - Changes the behavior of the
notcondition when there is more than one condition present. Users who desire the previous behavior should wrap their conditions in anandfirst. - Renames:
untrigger_secondstountrigger_delay_seconds media_typeandevents_typeare retired underlive,viewerandtimelineconfiguration sections, instead media type is associated (once) with the camera undermedia.
🚀 Features
Escapeends calls (#2488) (881ba51)- Add 'call' support to improve 2-way audio experience (#2486) (abcba88)
- Add 'doorbell' configuration profile (#2511) (406176e)
- Add
live.microphone.auto_mute/auto_unmute(#2482) (a68b665) - Add a simple mode to the visual card editor (#2588) (e29c082)
- Add ability to untrigger after fixed number of seconds (#2350) (47880e4), closes #2342
- Add automatic doorbell detection (#2507) (773cee9)
- Add card picker suggestion for camera entities (#2517) (b33c034)
- Add casting capability to
user_agentcondition (#2480) (9eb503d) - Add documentation links from editor (#2362) (6d5a76a)
- Add easy access to card from JS console for user debugging (#2502) (88fde79)
- Add event-based automation triggers (#2537) (a31816c)
- Add experimental rewrite of go2rtc live provider (MSE/WebRTC/MP4/MJPEG) (#2580) (c02c692), closes #2556 #2450
- Add hardened error handling and retries (#2451) (47bcce9), closes #1830 #2099
- Add microphone audio processing constraints (#2708) (3ee6b60)
- Add PIP (Picture-in-Picture) support (#2391) (c398562), closes #1657
- add problem detection framework for common problems (#2412) (ab683df)
- Add proxying support for images (#2427) (1cd5520), closes #2418
- Add severity media filter (#2323) (c03ddd9)
- Add support for Frigate reviews / detections [initial PR] (#2315) (fc32727)
- Add support for inbound "calls" from triggers (#2500) (15e335a)
- Add UI optional UI locking when microphone is hot (#2484) (be7e7d7)
- Align automations with Home Assistant triggers and conditions (#2527) (b701366)
- Allow 2-way audio detection to be skipped and timed (#2355) (a153766), closes #2313
- Allow disabling the call controls (#2615) (3b8835e), closes #2587
- Allow user generated notifications (#2401) (24c6b98)
- Answer or reject inbound calls from menu (#2620) (0f8593f), closes #2587
- Auto-resolve Frigate client_id from camera entity (#2475) (261a7e1)
- Automatically recover from frozen live streams (#2569) (fb1bbc7), closes #2099
- Compress related editor fields into grid rows (#2589) (f28b16a)
- Escape should dismiss overlay messages (#2324) (045d15d)
- Explicit answer/reject for inbound calls (#2504) (f397596)
- Implement support for gesture-based PTZ control (#2378) (ea86ad0), closes #1839
- Make
camerasoptional (#2343) (93f1f08) - Modernize the visual card editor. (#2586) (b6e1de5)
- Show the build date on the loading banner of unreleased builds (#2659) (5676908)
- Support HA event entities as triggers (#2506) (4b72fcd)
- Surface the provider's error cause in the media_unavailable notification (#2599) (448fa2d), closes #2592
- Trigger automations on call answered, rejected and hung up (#2591) (87ecbc7)
- Trigger cameras on HA bus events (#2512) (0a36358)
- Updated
screensaverimage mode fetches random images (#2430) (e2cceb5) - Use the card's own pan & zoom with the
webrtc-cardlive provider (#2630) (e9e6d9f), closes #2628
🐛 Bug Fixes
- Add support for Reolink
numberbased zooming (#2408) (95faddd), closes #2034 - Add editor support for go2rtc metadata fetch timeout (#2372) (d5e1e02)
- Add missing capabilities to editor (#2366) (87a85ce)
- Add support for synchronously reseting go2rtc sessions (#2478) (9d088d7)
- Always respect the returned MIME type (#2473) (31d0c93), closes #2449
- automations on microphone connect not working (#2403) (ee23cb2), closes #2314
- Avoid go2rtc renegotiation on camera selection change (#2483) (9a763db)
- Avoid potential call-manager race condition (#2508) (ef9c9c8)
- Button style issue introduced by HA
2026.3(#2392) (#2394) (8223cae), closes #2390 - Cancel the pending debounced resize when the media dimensions container disconnects (#2700) (2f74889), closes #2699
- Change the
notcondition to exactly match the HAnotcondition (#2387) (ecc8ecf), closes #2383 - Clear stale media unavailable errors when a camera recovers (#2627) (15b08db), closes #2576
- Clear the
initializedcondition state when the card is not usable (#2646) (17146c8), closes #2642 - Connect the microphone when an inbound call is answered (#2609) (#2612) (8f95354)
- connection: re-initialize camera managers and event subscriptions on reconnect (#2389) (a81d723)
- Correct status bar alignment in Safari (#2581) (e204ec1), closes #2578
- Correctly bind MJPEG stream URL in the
halive provider (#2305) (#2600) (cd53ebd) - Do not activate pan & zoom on a detached element (#2640) (51c0fab), closes #2633
- Don't allow gallery to scroll horizontally (#2428) (55732ea), closes #2424
- Don't detect audio from stale
webrtcconnection (#2429) (9535bb8), closes #2417 - Don't show
presetsmenu when there's a single preset (#2404) (ae8b113), closes #2398 - Download recordings with a video file extension (#2712) (8ee69be), closes #2711
- Ensure a bare
ptz_digitalaction resets the zoom (#2635) (a736f3d), closes #2632 - Ensure no camera outlives a failed initialization (#2657) (9f88aac)
- Error when a zoomable element is removed during zoom initialization (#2624) (231e308), closes #2410
- Exponentially back off initialization-error retries (#2579) (#2605) (f419798)
- Expose
galleryandmediaviews as media type agnostic (#2335) (21f9469) - Fix audio for cameras with mixed WebRTC/HLS capabilities (#2557) (937ba64), closes #2479
- Fix leaky Frigate subscriptions/unsubscriptions (#2513) (37df382)
- Fix off-by-one thumbnail for folder media (#2364) (504b027)
- Fix styling and severity in status bar (#2352) (282983c)
- Guard the ha provider MJPEG stream URL against a missing access_token (#2602) (6817d27), closes #2601
- Highlight folder icon for correct folder / media (#2560) (6a6d65d), closes #2128 #2129
- Hold the 2-way audio backchannel open for the shortest possible time (#2697) (11cc543), closes #2691 #2039 #2178 #2299 AlexxIT/go2rtc#1860 #2678
- Honor configured home preset / merge presets. (#2553) (5c97e55)
- Ignore startup triggers from cameras without the trigger capability (#2621) (8d44fce), closes #2103
- Improve
enstrings (#2431) (a1202e8) - Improve
media_queryretry behavior (#2603) (54f75be) - Improve folder icon rendering (#2467) (056a038)
- Improve review media filtering (#2322) (f4e905a)
- Improve visual styling for transmitting/triggering (#2490) (f21a462)
- Issue with height not adjusting (downwards) to aspect ratio (#2375) (40ad3b4), closes #2341
- Keep the notification popup open while its text is selected (#2706) (965f2b4)
- Keep the notification popup visible / centered (#2702) (0aebf3c), closes #2693
- Lock the grid when the UI is locked (#2489) (090138a)
- Lock thumbnails and timeline when UX is locked for calls (#2487) (9b75095)
- Log problems to the console as warnings (once) (#2414) (16ca8d7)
- Match state trigger/condition semantics to HA (#2565) (9f956fe), closes #2530
- Move upgrade button to top of editor (#2687) (858c5d0)
- Only report a live error from the visible ha-camera-stream player (#2596) (8c36637), closes #2583
- Preload should reliably preload initial load (#2466) (d8ad347)
- prevent infinite re-render loop from issue retry callbacks (#2550) (3fe5e40)
- prevent infinite resize loop in media grid Masonry layout (#2413) (3f5a35c)
- Prevent microphone auto-disconnect during calls and restore the removed microphone
connectedcondition (#2597) (5a549c0), closes #2590 - Prevent the media grid from collapsing when its cells are unchanged (#2608) (5f2c7f5), closes #2306
- Propagate review filtered status (#2370) (dd25e19)
- Reduce visual clutter on startup (#2709) (e6b93d5), closes #2584
- Release the microphone to the browser when a call ends (#2685) (85d6811), closes #2681
- Remove the microphone selection conditions (#2686) (c2f2586), closes #2679
- Remove the unnecessary item limit from folder media (#2688) (84b90bc), closes #2573
- Remove unused localization keys (#2432) (31f13f4)
- Render sub-labels for Frigate reviews (#2468) (591f466), closes #2438
- Report a go2rtc backchannel offer error as a failure rather than a missing capability (#2710) (543e5d0)
- Report and retry media failures for every camera in a grid (#2658) (c137f4c), closes #2637 #2099
- Report media failures once per failure (#2666) (5e199b5)
- Restore keyboard focus for
keytriggers (#2634) (#2639) (f240646) - Restore picture element actions on Home Assistant 2026.8+ (#2670) (45f88a8), closes #2663
- Seek to the start of review media (#2353) (7dbf058)
- Should faithfully use WebRTC card PTZ format
data_*(#2396) (1d81e03), closes #2385 - Should recover from an interrupted initialization (#2673) (a8aa9ec)
- Size the expanded dialog and grid columns to their content (#2611) (2a84f19), closes #2607
- Size the gallery fallback icon frame to fill the thumbnail box (#2705) (b2f3243), closes #2701
- Status actions should not be clickable when status bar is hidden (#2406) (ebe6b2f)
- Stop a released PTZ key ending another held key's movement (#2675) (70ca0a9), closes #2668
- Stop PTZ movement and browser key handling from fighting (#2674) (3808a1b), closes #2623
- Stop the automatic upgrade from discarding valid configuration (#2692) (1e03e6a), closes #2689
- Stop the live media frame collapsing while a stream loads (#2671) (98a0084), closes #2574
- Stop the webrtc-card provider recreating its player on every render (#2629) (70abb39), closes #2625
- Use auto_unmute as input to stream selection for HA (#2562) (3494706), closes #2479
- Various editor / diagnostic improvements (#2363) (df3614f), closes #2360 #2328
- Various tiny fixes/improvements (#2433) (eb72a97)
📚 Documentation
- Add config example for problematic doorbells (#2604) (0a763b7)
- Add special case warning for fullscreen condition (#2373) (753cf02)
- Add worked examples for showing a folder as a camera's media (#2521) (209c873), closes #2498
- Fix misnomer in docs (#2457) (94b1ec1)
- Improve clarity of
labelsandzonesparameters (#2380) (9ac7fa3) - Improve doc interlinking (#2402) (6c46e36)
- Include
reviewsin examples update (#2365) (5e867a8) - Various minor doc improvements (#2384) (db0a747)
- Various small documentation improvements (#2386) (526acf7)
🚨 Tests
- Add a browser based test harness (#2641) (e590f72)
- Add a test harness for the built card (#2653) (2d124fe)
- Add browser based tests for keyboard focus handling (#2647) (5d247d4)
- Add browser tests for the media viewing gallery and viewer (#2661) (673d8fe)
- Add full testing for the
frigateengine (#2419) (abf1d8d) - Add regression test for media info stability (#2571) (5662e48), closes #2563
- Add tests for localization (#2421) (050c2f7)
- Also run firefox & webkit automated tests (#2651) (18ea725)
- Clarify testing configuration (#2347) (c297bf8)
- Expand testing to cover 100% of camera manager files (#2420) (62fe655)
- Further improve test coverage (#2422) (9384785)
- Improve test coverage of various camera engine files (#2415) (415a3e0)
- Remove unnecessary
jsdomenvironment declarations (#2616) (a0fd464) - Silence superfluous console output during test runs (#2540) (fcef48e)
- Split browser test-utils (#2662) (8d8d486), closes #2660
- Split test utilities to improve test times (#2622) (ad89aa9)
- Split the test suite into isolation groups for faster runs (#2613) (c4c6058)
👷 Continuous Integration
- Add triage labels (priority, regression, fixed-pending-release) (#2555) (f1cf790)
- Upload the bundle treemap visualization browser-viewable (#2617) (eccf7f3)
🔨 Code Refactoring
- Accept unknown in errorToConsole to drop
as Errorcasts (#2541) (95f35bd) - Centralize template render type assertion (#2538) (5572ec7)
- Clone context when a view is cloned (#2493) (2acec49)
- Convert protected methods to private (#2358) (0a67df9)
- Convert the build scripts to TypeScript and group them (#2696) (2d7c86c), closes #2695
- Migrate config schema from Zod v3 to Zod v4 (#2357) (529500e)
- Refactor media loading manager for improved robustness (#2464) (bc36662)
- Replace Rollup with Vite (#2656) (80ec92e)
- Restructure condition evaluation into per-type evaluator classes (#2518) (12ae3b2)
- Stamp build information in as "defines" (#2654) (06bcfd5)
- Unify substream actions into substream_{on,off} (#2497) (f18e4cd)
- Use
toggleAttributenatively where possible (#2494) (48761f0)
🐎 Performance Improvements
- bundle: lazy-load the nunjucks template engine (#2535) (ea251ca), closes #2531
- Deduplicate concurrent Home Assistant registry list fetches (#2650) (4a7c1b6)
- grid: improve layout responsiveness and remove selection transitions (#2400) (4fceade)
- lazy-load js-yaml (~107KB) as needed (#2551) (d833edb), closes #2532
- Variety of small type and performance fixes (#2367) (497e6e8)
- Various rendering performance improvements (#2359) (46868ce)
🔧 Chores
- Add AI instructions. (0f8c758)
- Add missing close keyword: close #2438 (#2468) (8ebb88c)
- Add missing close keyword: close #2525 (#2553) (3a78a8d)
- Add missing close keyword: close #2529 (#2427) (3bb5ccd)
- Add support for
nextrelease branch (#2354) (d90b062) - Add typechecking and pruning to CI (#2543) (c8e7fdd)
- Add worktree deployment support (#2491) (3f0d2ef)
- Allow parallel rollup instances (#2499) (f4c686c)
- Compress AI instructions (#2434) (4bc787e)
- Create initial Claude permissions (#2369) (191b5a2)
- deps: bump actions/checkout from 4 to 6 (#2472) (489417a), closes actions/checkout#2248 actions/checkout#2286 actions/checkout#2298 actions/checkout#2311 actions/checkout#2301 actions/checkout#2226 actions/checkout#2238 actions/checkout#2305 actions/checkout#1971 actions/checkout#1977 actions/checkout#2043 actions/checkout#2356 actions/checkout#2327 actions/checkout#2286 actions/checkout#2248 actions/checkout#2301 actions/checkout#2226 actions/checkout#2305 actions/checkout#1971 actions/checkout#1977 actions/checkout#2043 actions/checkout#2044 actions/checkout#2194 actions/checkout#2224 actions/checkout#2236 actions/checkout#1941 actions/checkout#1946 actions/checkout#1924 actions/checkout#1180 actions/checkout#1777 actions/checkout#1872 actions/checkout#1739 actions/checkout#1697 actions/checkout#1774 actions/checkout#1776 actions/checkout#1732 #2356 #2328 #2327 #2314 #2311 #2298 #2286 #2248 #2238
- deps: bump actions/checkout from 6 to 7 (#2526) (1761db7), closes actions/checkout#2454 actions/checkout#2458 actions/checkout#2460 actions/checkout#2461 actions/checkout#2459 actions/checkout#2463 actions/checkout#2462 actions/checkout#2464 actions/checkout#2467 actions/checkout#2454 actions/checkout#2357 actions/checkout#2414 actions/checkout#2439 actions/checkout#2446 actions/checkout#2414 actions/checkout#2355 actions/checkout#2356 actions/checkout#2314 actions/checkout#2327 actions/checkout#2328 actions/checkout#2454 actions/checkout#2458 actions/checkout#2460 actions/checkout#2461 actions/checkout#2459 actions/checkout#2463 actions/checkout#2462 actions/checkout#2439 actions/checkout#2414 actions/checkout#2356 actions/checkout#2327 actions/checkout#2286 actions/checkout#2248 actions/checkout#2301 actions/checkout#2226 actions/checkout#2305 actions/checkout#1971 actions/checkout#1977 actions/checkout#2043 actions/checkout#2044 actions/checkout#2194 actions/checkout#2224 actions/checkout#2236 actions/checkout#1941 actions/checkout#1946 actions/checkout#1924 #2467 #2464 #2462 #2463 #2459 #2461 #2460 #2458 #2454
- deps: bump actions/upload-artifact from 4 to 7 (#2461) (afc2d44), closes actions/upload-artifact#754 actions/upload-artifact#762 actions/upload-artifact#764 actions/upload-artifact#754 actions/upload-artifact#719 actions/upload-artifact#744 actions/upload-artifact#745 actions/upload-artifact#681 actions/upload-artifact#712 actions/upload-artifact#727 actions/upload-artifact#725 actions/upload-artifact#734 #797 #796 #795 #764 #762 #754 #745
- deps: bump actions/upload-artifact from 6 to 7 (#2655) (fc8f958), closes actions/upload-artifact#754 actions/upload-artifact#762 actions/upload-artifact#764 actions/upload-artifact#754 #797 #796 #795 #764 #762 #754
- deps: bump crazy-max/ghaction-github-labeler from 5.0.0 to 6.0.0 (#2462) (97c63ed), closes crazy-max/ghaction-github-labeler#249 crazy-max/ghaction-github-labeler#246 crazy-max/ghaction-github-labeler#247 crazy-max/ghaction-github-labeler#248 crazy-max/ghaction-github-labeler#236 crazy-max/ghaction-github-labeler#240 crazy-max/ghaction-github-labeler#242 crazy-max/ghaction-github-labeler#239 crazy-max/ghaction-github-labeler#245 crazy-max/ghaction-github-labeler#229 crazy-max/ghaction-github-labeler#232 crazy-max/ghaction-github-labeler#228 crazy-max/ghaction-github-labeler#226 crazy-max/ghaction-github-labeler#223 crazy-max/ghaction-github-labeler#225 crazy-max/ghaction-github-labeler#207 crazy-max/ghaction-github-labeler#218 crazy-max/ghaction-github-labeler#215 crazy-max/ghaction-github-labeler#217 crazy-max/ghaction-github-labeler#205 crazy-max/ghaction-github-labeler#206 crazy-max/ghaction-github-labeler#212 crazy-max/ghaction-github-labeler#208 crazy-max/ghaction-github-labeler#204 crazy-max/ghaction-github-labeler#210 #249 #240 #239 #248
- deps: bump dessant/lock-threads from 5.0.1 to 6.0.0 (#2458) (a88e94a)
- deps: bump dessant/lock-threads from 6.0.0 to 6.0.1 (#2496) (326c8d4)
- deps: bump dessant/lock-threads from 6.0.1 to 6.0.2 (#2510) (ace3d1b), closes #55
- deps: bump hacs/action from 21.12.1 to 22.5.0 (#2471) (ad358da), closes hacs/action#29 hacs/action#30 #30 #29
- deps: bump release-drafter/release-drafter from 6.0.0 to 7.3.0 (#2477) (a90f70f), closes #1593 #1594 #1595 #1444 #1555 #1577 #1587 #1585 #1588 #1579 #1583 #1582 #1581 #1578 #1571 #1568 #1589 #1586 #1580 #1584 #1581 #1604 #1605 #1600 #1599 #1598
- deps: bump release-drafter/release-drafter from 7.3.0 to 7.3.1 (#2509) (3480a55), closes #1625 #1619 #1609 #1615 #1610 #1620 #1608 #1612 #1607 #1611 #1606 #1616 #1624 #1622 #1617 #1618 #1613 #1607 #1614 #1625 #1616 #1624
- deps: bump release-drafter/release-drafter from 7.3.1 to 7.4.0 (#2524) (8f4ebcc), closes #1558 #1629 #1627 #1634 #1633 #1632 #1629 #1634 #1633 #1632 #1627 #1558
- deps: bump release-drafter/release-drafter from 7.4.0 to 7.5.1 (#2547) (015fb18), closes #1640 #1636 #1639 #1637 #1640 #1636 #1637 #1639
- deps: bump release-drafter/release-drafter from 7.5.1 to 7.6.0 (#2585) (2400e20), closes #1649 #1645 #1646 #1642 #1650 #1648 #1644 #1667 #1654 #1653 #1661 #1656 #1663 #1662 #1655 #1660 #1669 #1670 #1641 #1657 #1666 #1659 #1658 #1660 #1642 #1667 #1657 #1666 #1654 #1653 #1661 #1656 #1659
- deps: bump release-drafter/release-drafter from 7.6.0 to 7.7.0 (#2636) (6807fd7), closes #1687 #1556 #1674 #1683 #1668 #1665 #1664 #1678 #1677 #1676 #1675 #1672 #1682 #1686 #1685 #1687 #1686 #1685 #1683 #1682 #1668 #1665 #1664
- deps: bump svenstaro/upload-release-action from 2.9.0 to 2.11.5 (#2460) (149fce4), closes #99 #147 #136 #142 #137 #99 #147 #136 #142 #137 #152 #151
- deps: bump volta-cli/action from 4 to 5 (#2459) (115fcc5), closes #168 #156 #155 #153 #152 #151 #148 #143 #125 #128 #116 #151 #168 #158 #157
- deps: bump ytanikin/PRConventionalCommits from 1.2.0 to 1.3.0 (#2469) (bb061a1), closes #24 #26 #25
- Don't use rollup serving by default (#2495) (0405992)
- Enable
noImplicitAnyacross the codebase (#2667) (a8ce6ac) - Enforce a few house rules via
eslint(#2539) (921d45e) - Enforce consistent type imports via @typescript-eslint/consistent-type-imports (#2545) (7dc2986)
- Enforce import order via @ianvs/prettier-plugin-sort-imports (#2542) (a96dc2e)
- Enforce interfaces for object types (#2544) (a87e5b8)
- Expand default Claude permissions slightly (#2503) (b9f09b7)
- Improve AI instructions (#2381) (37004f9)
- Merge branch 'main' into dev (#2676) (68b1062)
- Merge main changes into dev (no-op) (#2405) (ae90b1e)
- Migrate from @lit-labs/task to @lit/task (#2704) (60e01cf), closes #2703
- Minor formatting and AI instructions update (#2393) (d5b4025)
- Replace deprecated 'node' module resolution with 'bundler' and tighten compiler options (#2594) (2ca4aa9)
- Replace ts-prune with knip (#2595) (7d66c5f), closes #2593
- Run checks, tests and build as parallel jobs (#2614) (37b07f0)
- Small fixes to clean docs link checker results (#2505) (f1fad59)
- Standardize code, comments and docs on US-English spelling (#2707) (03d9df8)
- Switch coverage from
istanbulto thev8provider for speed (#2619) (ababe13) - Update ha-nunjucks to 1.6.2 (#2549) (c3d3dd3)
- Update vscode task to kill previous instance (#2379) (5dc5e45)
- Upgrade to Vitest 4 and regroup tests for performance (#2618) (0c3d46a)