<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://developers.trackunit.com/changelog/</id>
    <title>Trackunit IrisX - Change Log</title>
    <updated>2026-05-12T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://developers.trackunit.com/changelog/"/>
    <subtitle>New APIs, SDK updates and platform changes.</subtitle>
    <icon>https://developers.trackunit.com/img/favicon.ico</icon>
    <rights>Copyright © 2026 Trackunit Corporation.</rights>
    <entry>
        <title type="html"><![CDATA[Improved: DateField locale formatting and picker behavior]]></title>
        <id>https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/</id>
        <link href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/"/>
        <updated>2026-05-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[DateField in @trackunit/react-form-components now displays, parses, and hints dates using the user's regional locale while continuing to emit canonical YYYY-MM-DD values to consumers.]]></summary>
        <content type="html"><![CDATA[<p><code>DateField</code> in <code>@trackunit/react-form-components</code> now displays, parses, and hints dates using the user's regional locale while continuing to emit canonical <code>YYYY-MM-DD</code> values to consumers.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-changed">What changed<a href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/#what-changed" class="hash-link" aria-label="Direct link to What changed" title="Direct link to What changed" translate="no">​</a></h2>
<p><code>DateField</code> now uses the browser's region-qualified locale, such as <code>en-GB</code>, <code>en-US</code>, or <code>da-DK</code>, for visible date formatting and placeholders. This means users see date formats that match their regional preference, for example <code>dd/mm/yyyy</code> in the United Kingdom and <code>mm/dd/yyyy</code> in the United States.</p>
<p>Change and blur events still expose canonical date-only values through <code>event.target.value</code>, so existing integrations can continue storing and sending <code>YYYY-MM-DD</code> values.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-datefield-options">New DateField options<a href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/#new-datefield-options" class="hash-link" aria-label="Direct link to New DateField options" title="Direct link to New DateField options" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="locale"><code>locale</code><a href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/#locale" class="hash-link" aria-label="Direct link to locale" title="Direct link to locale" translate="no">​</a></h3>
<p>Override the locale for a specific field when a fixed regional format is required.</p>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">DateField</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">label</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Start date</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">locale</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">en-GB</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="openonfocus"><code>openOnFocus</code><a href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/#openonfocus" class="hash-link" aria-label="Direct link to openonfocus" title="Direct link to openonfocus" translate="no">​</a></h3>
<p>Open the date picker automatically when the input receives focus, for example when users tab through a form.</p>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">DateField</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">label</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Start date</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">openOnFocus</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="onpickerclose"><code>onPickerClose</code><a href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/#onpickerclose" class="hash-link" aria-label="Direct link to onpickerclose" title="Direct link to onpickerclose" translate="no">​</a></h3>
<p>Run logic when the calendar picker closes, without waiting for the input itself to blur. The callback receives the canonical value and a close reason: <code>apply</code>, <code>clear</code>, <code>cancel</code>, or <code>outside</code>.</p>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">DateField</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">label</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">Start date</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f">  </span><span class="token tag attr-name" style="color:#00a4db">onPickerClose</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript" style="color:#00009f">event</span><span class="token tag script language-javascript punctuation" style="color:#393A34">,</span><span class="token tag script language-javascript" style="color:#00009f"> reason</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag script language-javascript" style="color:#00009f">    </span><span class="token tag script language-javascript keyword" style="color:#00009f">if</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript" style="color:#00009f">reason </span><span class="token tag script language-javascript operator" style="color:#393A34">===</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript string" style="color:#e3116c">"cancel"</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript keyword" style="color:#00009f">return</span><span class="token tag script language-javascript punctuation" style="color:#393A34">;</span><span class="token tag script language-javascript" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag script language-javascript" style="color:#00009f">    </span><span class="token tag script language-javascript function" style="color:#d73a49">validateDate</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript" style="color:#00009f">event</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">target</span><span class="token tag script language-javascript punctuation" style="color:#393A34">.</span><span class="token tag script language-javascript property-access" style="color:#00009f">value</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">;</span><span class="token tag script language-javascript" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag script language-javascript" style="color:#00009f">  </span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"></span><br></div><div class="token-line" style="color:#393A34"><span class="token tag" style="color:#00009f"></span><span class="token tag punctuation" style="color:#393A34">/&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="picker-accessibility">Picker accessibility<a href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/#picker-accessibility" class="hash-link" aria-label="Direct link to Picker accessibility" title="Direct link to Picker accessibility" translate="no">​</a></h2>
<p>The DateField calendar picker has improved focus handling and keyboard navigation. Keyboard users can move between dates with arrow keys and commit the focused date from the picker.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="popover-focus-support">Popover focus support<a href="https://developers.trackunit.com/changelog/2026/05/12/datefield-locale-picker-behavior/#popover-focus-support" class="hash-link" aria-label="Direct link to Popover focus support" title="Direct link to Popover focus support" translate="no">​</a></h2>
<p><code>PopoverContent</code> in <code>@trackunit/react-components</code> now supports an <code>initialFocus</code> prop for cases where popover content should receive focus when opened.</p>]]></content>
        <category label="Improved" term="Improved"/>
        <category label="Fixed" term="Fixed"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[AEMP ISO Faults: localized fault descriptions via Accept-Language]]></title>
        <id>https://developers.trackunit.com/changelog/2026/05/06/aemp-iso-faults-accept-language/</id>
        <link href="https://developers.trackunit.com/changelog/2026/05/06/aemp-iso-faults-accept-language/"/>
        <updated>2026-05-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The AEMP ISO Diagnostic Trouble Codes time-series endpoint now honors the Accept-Language request header when enriching fault codes with descriptions.]]></summary>
        <content type="html"><![CDATA[<p>The AEMP ISO Diagnostic Trouble Codes time-series endpoint now honors the <code>Accept-Language</code> request header when enriching fault codes with descriptions.</p>
<p>When an <code>Accept-Language</code> header is provided, the language is threaded through to the fault interpretation lookup, so the returned <code>CodeDescription</code> is localized to the caller's preferred language (for example, <code>Accept-Language: da-DK,da;q=0.9,en;q=0.8</code> returns Danish descriptions) — but only if a translation for that language actually exists for the given fault code.</p>
<p>If no translation exists for the requested language — or if the header is omitted — the response falls back to the fault code's default description (typically English). The set of available languages depends on what the OEM provides and varies by manufacturer; common languages include English (<code>en</code>), German (<code>de</code>), French (<code>fr</code>), Italian (<code>it</code>), Spanish (<code>es</code>), Dutch (<code>nl</code>), Polish (<code>pl</code>), and Japanese (<code>ja</code>).</p>
<blockquote>
<p>📝 GET: <code>/15143/-3/Fleet/Equipment/ID/{oemISOIdentifier}/Faults/{startDate}/{endDate}/{pageNumber}</code></p>
</blockquote>
<p>Get diagnostic trouble codes time-series, with fault descriptions localized via the <code>Accept-Language</code> header.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Improved: useModal now supports sheet mode and container scoping]]></title>
        <id>https://developers.trackunit.com/changelog/2026/04/20/modal-sheet-mode/</id>
        <link href="https://developers.trackunit.com/changelog/2026/04/20/modal-sheet-mode/"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[useModal in @trackunit/react-modal has been updated with sheet mode support and container scoping. Modals can now automatically adapt to a sheet presentation when rendered inside a narrow container.]]></summary>
        <content type="html"><![CDATA[<p><code>useModal</code> in <code>@trackunit/react-modal</code> has been updated with sheet mode support and container scoping. Modals can now automatically adapt to a sheet presentation when rendered inside a narrow container.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-to-usemodal">Changes to <code>useModal</code><a href="https://developers.trackunit.com/changelog/2026/04/20/modal-sheet-mode/#changes-to-usemodal" class="hash-link" aria-label="Direct link to changes-to-usemodal" title="Direct link to changes-to-usemodal" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-return-values">New return values<a href="https://developers.trackunit.com/changelog/2026/04/20/modal-sheet-mode/#new-return-values" class="hash-link" aria-label="Direct link to New return values" title="Direct link to New return values" translate="no">​</a></h3>



































<table><thead><tr><th>Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td><code>mode</code></td><td><code>"card" | "sheet"</code></td><td>Current presentation mode</td></tr><tr><td><code>dismiss</code></td><td>function</td><td>Programmatically dismiss with options</td></tr><tr><td><code>onCloseComplete</code></td><td>function</td><td>Callback fired after close animation finishes</td></tr><tr><td><code>container</code></td><td>element</td><td>The scoping container element</td></tr><tr><td><code>stack</code></td><td>array</td><td>Modal stack state</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="removed-return-values">Removed return values<a href="https://developers.trackunit.com/changelog/2026/04/20/modal-sheet-mode/#removed-return-values" class="hash-link" aria-label="Direct link to Removed return values" title="Direct link to Removed return values" translate="no">​</a></h3>
<ul>
<li class=""><code>depthFromFront</code> — removed</li>
<li class=""><code>stackSizeAtOpen</code> — removed</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-prop-container">New prop: <code>container</code><a href="https://developers.trackunit.com/changelog/2026/04/20/modal-sheet-mode/#new-prop-container" class="hash-link" aria-label="Direct link to new-prop-container" title="Direct link to new-prop-container" translate="no">​</a></h3>
<p>Pass a <code>container</code> element to <code>useModal</code> to scope the modal to that element. When the container's width is less than 480 px, the modal automatically switches to sheet mode.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="updated-modaldismissoptions">Updated: <code>ModalDismissOptions</code><a href="https://developers.trackunit.com/changelog/2026/04/20/modal-sheet-mode/#updated-modaldismissoptions" class="hash-link" aria-label="Direct link to updated-modaldismissoptions" title="Direct link to updated-modaldismissoptions" translate="no">​</a></h3>
<p><code>ModalDismissOptions</code> now extends the shared <code>DismissOptions</code> type from <code>@trackunit/react-components</code>, aligning dismiss behaviour across overlay components.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Removed: SwipeableDrawer from @trackunit/react-drawer]]></title>
        <id>https://developers.trackunit.com/changelog/2026/04/20/remove-swipeable-drawer/</id>
        <link href="https://developers.trackunit.com/changelog/2026/04/20/remove-swipeable-drawer/"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[SwipeableDrawer, DrawerPuller, and useSwipeHandlers have been removed from @trackunit/react-drawer. The react-swipeable peer dependency is also gone.]]></summary>
        <content type="html"><![CDATA[<p><code>SwipeableDrawer</code>, <code>DrawerPuller</code>, and <code>useSwipeHandlers</code> have been removed from <code>@trackunit/react-drawer</code>. The <code>react-swipeable</code> peer dependency is also gone.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration">Migration<a href="https://developers.trackunit.com/changelog/2026/04/20/remove-swipeable-drawer/#migration" class="hash-link" aria-label="Direct link to Migration" title="Direct link to Migration" translate="no">​</a></h2>
<p>Replace <code>SwipeableDrawer</code> with the new <code>Sheet</code> component from <code>@trackunit/react-components</code>.</p>
<p><strong>Before:</strong></p>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">SwipeableDrawer</span><span class="token imports"> </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/react-drawer"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">SwipeableDrawer</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">open</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript" style="color:#00009f">open</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">onClose</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:#393A34">=</span><span class="token tag script language-javascript punctuation" style="color:#393A34">{</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript arrow operator" style="color:#393A34">=&gt;</span><span class="token tag script language-javascript" style="color:#00009f"> </span><span class="token tag script language-javascript function" style="color:#d73a49">setOpen</span><span class="token tag script language-javascript punctuation" style="color:#393A34">(</span><span class="token tag script language-javascript boolean" style="color:#36acaa">false</span><span class="token tag script language-javascript punctuation" style="color:#393A34">)</span><span class="token tag script language-javascript punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">children</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">SwipeableDrawer</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p><strong>After:</strong></p>
<div class="language-tsx codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-tsx codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> </span><span class="token imports maybe-class-name">Sheet</span><span class="token imports punctuation" style="color:#393A34">,</span><span class="token imports"> useSheet </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/react-components"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> sheet </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">useSheet</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token tag punctuation" style="color:#393A34">&lt;</span><span class="token tag class-name" style="color:#00009f">Sheet</span><span class="token tag" style="color:#00009f"> </span><span class="token tag spread punctuation" style="color:#393A34">{</span><span class="token tag spread operator" style="color:#393A34">...</span><span class="token tag spread" style="color:#00009f">sheet</span><span class="token tag spread punctuation" style="color:#393A34">}</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">children</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain-text"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain-text"></span><span class="token tag punctuation" style="color:#393A34">&lt;/</span><span class="token tag class-name" style="color:#00009f">Sheet</span><span class="token tag punctuation" style="color:#393A34">&gt;</span><br></div></code></pre></div></div>
<p>Use <code>useSheet</code> for open/close state management instead of manual <code>open</code>/<code>onClose</code> props. See the <a class="" href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/">Sheet component changelog</a> for the full API.</p>]]></content>
        <category label="Removed" term="Removed"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[New: Sheet component in @trackunit/react-components]]></title>
        <id>https://developers.trackunit.com/changelog/2026/04/20/sheet-component/</id>
        <link href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A new Sheet component is now available in @trackunit/react-components. It provides a bottom-sheet UI with snap points, gesture support, and container-scoped rendering — suitable for mobile and responsive layouts.]]></summary>
        <content type="html"><![CDATA[<p>A new <code>Sheet</code> component is now available in <code>@trackunit/react-components</code>. It provides a bottom-sheet UI with snap points, gesture support, and container-scoped rendering — suitable for mobile and responsive layouts.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-exports">New exports<a href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/#new-exports" class="hash-link" aria-label="Direct link to New exports" title="Direct link to New exports" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sheet-component"><code>Sheet</code> component<a href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/#sheet-component" class="hash-link" aria-label="Direct link to sheet-component" title="Direct link to sheet-component" translate="no">​</a></h3>
<p>A bottom-sheet overlay with snap points and gesture-driven open/close/expand behaviour.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="usesheet-hook"><code>useSheet</code> hook<a href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/#usesheet-hook" class="hash-link" aria-label="Direct link to usesheet-hook" title="Direct link to usesheet-hook" translate="no">​</a></h3>
<p>Manages open/close state and dismiss options for a <code>Sheet</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="usesheetsnap-hook"><code>useSheetSnap</code> hook<a href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/#usesheetsnap-hook" class="hash-link" aria-label="Direct link to usesheetsnap-hook" title="Direct link to usesheetsnap-hook" translate="no">​</a></h3>
<p>Controls the snap point of an open sheet: dock, fit, expand, or close.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="useoverflowborder-hook"><code>useOverflowBorder</code> hook<a href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/#useoverflowborder-hook" class="hash-link" aria-label="Direct link to useoverflowborder-hook" title="Direct link to useoverflowborder-hook" translate="no">​</a></h3>
<p>Detects top/bottom scroll overflow in a container and applies CSS border classes — useful for indicating scrollable content inside a sheet.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="shared-overlay-dismissible-types">Shared overlay-dismissible types<a href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/#shared-overlay-dismissible-types" class="hash-link" aria-label="Direct link to Shared overlay-dismissible types" title="Direct link to Shared overlay-dismissible types" translate="no">​</a></h3>
<p>The following types are now exported from <code>@trackunit/react-components</code> and shared across overlay components:</p>
<ul>
<li class=""><code>CloseReason</code></li>
<li class=""><code>DismissOptions</code></li>
<li class=""><code>OnBeforeCloseFn</code></li>
<li class=""><code>OnCloseFn</code></li>
<li class=""><code>OnOpenChangeFn</code></li>
<li class=""><code>OnOpenFn</code></li>
<li class=""><code>UseOverlayDismissibleProps</code></li>
<li class=""><code>UseOverlayDismissibleReturn</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="sheet-specific-types-and-constants"><code>Sheet</code>-specific types and constants<a href="https://developers.trackunit.com/changelog/2026/04/20/sheet-component/#sheet-specific-types-and-constants" class="hash-link" aria-label="Direct link to sheet-specific-types-and-constants" title="Direct link to sheet-specific-types-and-constants" translate="no">​</a></h3>
<ul>
<li class="">Types: <code>SheetProps</code>, <code>UseSheetProps</code>, <code>UseSheetReturnValue</code>, <code>SheetDefaultSize</code>, <code>SheetVariant</code>, <code>SheetSnapActions</code>, <code>SheetState</code>, <code>SheetGeometry</code></li>
<li class="">Constants: <code>SHEET_TRANSITION_DURATION</code>, <code>SHEET_TRANSITION_DURATION_MS</code>, <code>SHEET_TRANSITION_EASING</code></li>
</ul>]]></content>
        <category label="Added" term="Added"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[trackunit/react-widgets 2.13.4 - Interactive WidgetKPI]]></title>
        <id>https://developers.trackunit.com/changelog/2026/03/24/react-widgets-widget-kpi-interactive/</id>
        <link href="https://developers.trackunit.com/changelog/2026/03/24/react-widgets-widget-kpi-interactive/"/>
        <updated>2026-03-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The WidgetKPI component now supports an onClick prop, making KPI cards interactive with a hover effect, chevron indicator, and keyboard accessibility.]]></summary>
        <content type="html"><![CDATA[<p>The <code>WidgetKPI</code> component now supports an <code>onClick</code> prop, making KPI cards interactive with a hover effect, chevron indicator, and keyboard accessibility.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-change">Breaking Change<a href="https://developers.trackunit.com/changelog/2026/03/24/react-widgets-widget-kpi-interactive/#breaking-change" class="hash-link" aria-label="Direct link to Breaking Change" title="Direct link to Breaking Change" translate="no">​</a></h3>
<p><strong><code>WidgetContent</code> padding has changed</strong> for KPI widgets using the <code>onClick</code> prop. If your widget previously used <code>padding="responsive"</code>, you should update it to <code>padding="none"</code> — the <code>WidgetKPI</code> component now handles its own padding internally.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Iris Apps now use Vite instead of Rspack]]></title>
        <id>https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/</id>
        <link href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/"/>
        <updated>2026-02-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Iris Apps have been migrated from Rspack to Vite as the build system. Vite provides near-instant dev server startup, fast HMR using native ES modules, and optimized production builds.]]></summary>
        <content type="html"><![CDATA[<p>Iris Apps have been migrated from Rspack to <a href="https://vitejs.dev/" target="_blank" rel="noopener noreferrer" class="">Vite</a> as the build system. Vite provides near-instant dev server startup, fast HMR using native ES modules, and optimized production builds.</p>
<p>Affected packages:</p>
<ul>
<li class=""><strong>@trackunit/iris-app-sdk-vite</strong> — new package, replaces <code>@trackunit/iris-app-sdk-rspack</code> for build and serve</li>
<li class=""><strong>@trackunit/iris-app-sdk-rspack</strong> — deprecated for Iris Apps, will be removed in a future version</li>
</ul>
<p>Old executors removed:</p>
<ul>
<li class=""><strong>@trackunit/iris-app:build</strong> — removed (was already deprecated)</li>
<li class=""><strong>@trackunit/iris-app:serve</strong> — removed (was already deprecated)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-update-all-trackunit-dependencies">Step 1: Update all Trackunit dependencies<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#step-1-update-all-trackunit-dependencies" class="hash-link" aria-label="Direct link to Step 1: Update all Trackunit dependencies" title="Direct link to Step 1: Update all Trackunit dependencies" translate="no">​</a></h2>
<p>Make sure you are on the latest Trackunit dependencies:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npx npm-check-updates </span><span class="token string" style="color:#e3116c">"/@trackunit/"</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-u</span><br></div></code></pre></div></div>
<p>Then install:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> @trackunit/iris-app-sdk-vite </span><span class="token parameter variable" style="color:#36acaa">-D</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-update-projectjson">Step 2: Update <code>project.json</code><a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#step-2-update-projectjson" class="hash-link" aria-label="Direct link to step-2-update-projectjson" title="Direct link to step-2-update-projectjson" translate="no">​</a></h2>
<p>Replace the Rspack executors with the Vite equivalents.</p>
<p><strong>Before:</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"targets"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"build"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"executor"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/iris-app-sdk-rspack:build"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"options"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"rspackConfig"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"apps/{app-name}/rspack.config.ts"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"outputPath"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"dist/apps/{app-name}"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"outputs"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"{options.outputPath}"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"serve"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"executor"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/iris-app-sdk-rspack:serve"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"options"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"rspackConfig"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"apps/{app-name}/rspack.config.ts"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p><strong>After:</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"targets"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"build"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"executor"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/iris-app-sdk-vite:build"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"options"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token property" style="color:#36acaa">"outputPath"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"dist/apps/{app-name}"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"outputs"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"{options.outputPath}"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"serve"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"executor"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/iris-app-sdk-vite:serve"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"options"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Key changes:</p>
<ul>
<li class="">Executor changed from <code>@trackunit/iris-app-sdk-rspack</code> to <code>@trackunit/iris-app-sdk-vite</code></li>
<li class="">The <code>rspackConfig</code> option is removed — Vite works with zero config by default</li>
<li class="">Optionally, you can add a <code>viteConfig</code> option if you need custom configuration (see Step 3)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-replace-rspackconfigts-with-viteconfigts">Step 3: Replace <code>rspack.config.ts</code> with <code>vite.config.ts</code><a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#step-3-replace-rspackconfigts-with-viteconfigts" class="hash-link" aria-label="Direct link to step-3-replace-rspackconfigts-with-viteconfigts" title="Direct link to step-3-replace-rspackconfigts-with-viteconfigts" translate="no">​</a></h2>
<p>Delete your existing <code>rspack.config.ts</code> file.</p>
<p>If you had no customizations in your rspack config (i.e., it just returned the default configuration), you can skip creating a vite config entirely — it works out of the box.</p>
<p>If you need custom configuration, create a <code>vite.config.ts</code> in your app root:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> defineConfig</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> UserConfig </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"vite"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">defineConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">configuration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> UserConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">Promise</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">UserConfig</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> configuration</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>You can extend the default configuration by spreading and adding your overrides:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> defineConfig</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> UserConfig </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"vite"</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">defineConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">async</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">configuration</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> UserConfig</span><span class="token punctuation" style="color:#393A34">)</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">Promise</span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">UserConfig</span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword" style="color:#00009f">return</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">configuration</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        define</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token operator" style="color:#393A34">...</span><span class="token plain">configuration</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">define</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">            __MY_CUSTOM_FLAG__</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>Then reference it in your <code>project.json</code>:</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"serve"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"executor"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/iris-app-sdk-vite:serve"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"options"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"viteConfig"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"apps/{app-name}/vite.config.ts"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"build"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"executor"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"@trackunit/iris-app-sdk-vite:build"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token property" style="color:#36acaa">"options"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"viteConfig"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"apps/{app-name}/vite.config.ts"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token property" style="color:#36acaa">"outputPath"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"dist/apps/{app-name}"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-remove-tailwindconfigjs-if-present">Step 4: Remove <code>tailwind.config.js</code> (if present)<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#step-4-remove-tailwindconfigjs-if-present" class="hash-link" aria-label="Direct link to step-4-remove-tailwindconfigjs-if-present" title="Direct link to step-4-remove-tailwindconfigjs-if-present" translate="no">​</a></h2>
<p>If your app has a <code>tailwind.config.js</code> file, delete it. Tailwind CSS v4 is now configured automatically by the Vite plugin using PostCSS — no manual Tailwind config is needed.</p>
<p>See the <a class="" href="https://developers.trackunit.com/changelog/tailwind-4-upgrade/">Tailwind 4 upgrade changelog</a> for more details on the Tailwind migration.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-clean-up-old-dependencies">Step 5: Clean up old dependencies<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#step-5-clean-up-old-dependencies" class="hash-link" aria-label="Direct link to Step 5: Clean up old dependencies" title="Direct link to Step 5: Clean up old dependencies" translate="no">​</a></h2>
<p>Remove unwanted packages from your NX's <code>package.json</code> (if present):</p>
<ul>
<li class=""><code>@trackunit/iris-app-webpack-plugin</code></li>
<li class=""><code>@trackunit/iris-app-sdk-rspack</code></li>
<li class=""><code>@rspack/core</code></li>
<li class=""><code>@rspack/dev-server</code>,</li>
<li class=""><code>copy-webpack-plugin</code></li>
<li class=""><code>css-loader</code></li>
<li class=""><code>esbuild-loader</code></li>
<li class=""><code>style-loader</code></li>
<li class=""><code>postcss</code></li>
<li class=""><code>postcss-loader</code></li>
<li class=""><code>json-loader</code></li>
<li class=""><code>webpack</code></li>
<li class=""><code>webpack-cli</code></li>
<li class=""><code>webpack-dev-server</code></li>
</ul>
<p>Then install to update your lockfile:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-6-verify">Step 6: Verify<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#step-6-verify" class="hash-link" aria-label="Direct link to Step 6: Verify" title="Direct link to Step 6: Verify" translate="no">​</a></h2>
<p>Run serve and build to verify everything works:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># Start dev server</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx nx run </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">app-name</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">:serve</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Production build</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx nx run </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">app-name</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">:build</span><br></div></code></pre></div></div>
<p>The dev server will start on a port in the range 22220–22229 and print a link to open your app:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">✨ Iris App is now started, check it out ✨</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">https://new.manager.trackunit.com/goto/iris-app-dev</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="new-executor-options">New executor options<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#new-executor-options" class="hash-link" aria-label="Direct link to New executor options" title="Direct link to New executor options" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="serve-options">Serve options<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#serve-options" class="hash-link" aria-label="Direct link to Serve options" title="Direct link to Serve options" translate="no">​</a></h3>



































<table><thead><tr><th>Option</th><th>Type</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>viteConfig</code></td><td>string</td><td>—</td><td>Path to custom Vite config file (optional)</td></tr><tr><td><code>port</code></td><td>number</td><td>auto (22220-22229)</td><td>Dev server port</td></tr><tr><td><code>host</code></td><td>string</td><td><code>localhost</code></td><td>Dev server host</td></tr><tr><td><code>skipTypeChecking</code></td><td>boolean</td><td><code>false</code></td><td>Skip TypeScript type checking during dev</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="build-options">Build options<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#build-options" class="hash-link" aria-label="Direct link to Build options" title="Direct link to Build options" translate="no">​</a></h3>





























<table><thead><tr><th>Option</th><th>Type</th><th>Default</th><th>Description</th></tr></thead><tbody><tr><td><code>viteConfig</code></td><td>string</td><td>—</td><td>Path to custom Vite config file (optional)</td></tr><tr><td><code>outputPath</code></td><td>string</td><td>—</td><td>Output directory (required)</td></tr><tr><td><code>skipTypeChecking</code></td><td>boolean</td><td><code>false</code></td><td>Skip TypeScript type checking during build</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="bundle-analysis">Bundle analysis<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#bundle-analysis" class="hash-link" aria-label="Direct link to Bundle analysis" title="Direct link to Bundle analysis" translate="no">​</a></h2>
<p>To analyze your bundle size, set the <code>BUNDLE_ANALYSE</code> environment variable:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token assign-left variable" style="color:#36acaa">BUNDLE_ANALYSE</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">true npx nx run </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain">app-name</span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain">:build</span><br></div></code></pre></div></div>
<p>This generates a <code>stats.html</code> file in the output directory using <a href="https://github.com/btd/rollup-plugin-visualizer" target="_blank" rel="noopener noreferrer" class="">rollup-plugin-visualizer</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="troubleshooting">Troubleshooting<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#troubleshooting" class="hash-link" aria-label="Direct link to Troubleshooting" title="Direct link to Troubleshooting" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cors-errors-during-development">CORS errors during development<a href="https://developers.trackunit.com/changelog/2026/02/26/migrate-from-rspack-to-vite/#cors-errors-during-development" class="hash-link" aria-label="Direct link to CORS errors during development" title="Direct link to CORS errors during development" translate="no">​</a></h3>
<p>The Vite dev server automatically sets CORS headers for Trackunit domains. If you see CORS errors:</p>
<ol>
<li class="">Verify the Vite server is running</li>
<li class="">Check that "Use Local Apps" is enabled in developer settings</li>
<li class="">Ensure no proxy is interfering with requests</li>
</ol>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[trackunit/iris-app v1.11.45 - NX upgraded to v22.4.4]]></title>
        <id>https://developers.trackunit.com/changelog/2026/02/19/iris-app-v1-11-45-nx-upgrade/</id>
        <link href="https://developers.trackunit.com/changelog/2026/02/19/iris-app-v1-11-45-nx-upgrade/"/>
        <updated>2026-02-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this version of our Iris App SDK, we have upgraded NX to v22.4.4.]]></summary>
        <content type="html"><![CDATA[<p>In this version of our Iris App SDK, we have upgraded NX to v22.4.4.
Make sure to upgrade your extensions to the latest version of NX.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npx nx migrate </span><span class="token number" style="color:#36acaa">22.4</span><span class="token plain">.4</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx nx migrate --run-migrations</span><br></div></code></pre></div></div>
<p>Please refer to <a class="" href="https://developers.trackunit.com/docs/apps-and-extensions/overview/iris-app-sdk-reference/maintaining-your-app/">Maintaining Your Application</a> for more information.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Tailwind upgraded from v3 to v4]]></title>
        <id>https://developers.trackunit.com/changelog/tailwind-4-upgrade/</id>
        <link href="https://developers.trackunit.com/changelog/tailwind-4-upgrade/"/>
        <updated>2026-02-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this version we upgraded the foundation for our tailwind to use tailwind 4.1.18 instead of 3.x.]]></summary>
        <content type="html"><![CDATA[<p>In this version we upgraded the foundation for our tailwind to use tailwind 4.1.18 instead of 3.x.</p>
<p>Effected packages:</p>
<ul>
<li class="">@trackunit/css-core - contains the generated css file to use</li>
<li class="">@trackunit/css-tailwind - deprecated, just remove it from your package.json</li>
<li class="">@trackunit/css-tailwind-custom-properties-plugin - deprecated, just remove it from your package.json</li>
</ul>
<p>Also, many of the React libraries have changed, so make sure to update all Trackunit dependencies.</p>
<p>Use this command to make sure you are updated with all latest Trackunit dependencies</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npx npm-check-updates </span><span class="token string" style="color:#e3116c">"/@trackunit/"</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-u</span><br></div></code></pre></div></div>
<p>Now you need to install the latest tailwind dependencies</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> @tailwind/postcss@4.1.18 --save-dev</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> tailwindcss@4.1.18 --save-dev</span><br></div></code></pre></div></div>
<p>After this the 'serve' command will use the correct tailwindcss/postcss and all Trackunit dependencies are updated.</p>
<p>For more information on how it might effect your own tailwind classes in your codebase - check this <a href="https://tailwindcss.com/docs/upgrade-guide" target="_blank" rel="noopener noreferrer" class="">Migration guide</a></p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Assets API v2]]></title>
        <id>https://developers.trackunit.com/changelog/2026/01/15/assets-api-stable-version-v2/</id>
        <link href="https://developers.trackunit.com/changelog/2026/01/15/assets-api-stable-version-v2/"/>
        <updated>2026-01-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Released stable version v2 of Assets API.]]></summary>
        <content type="html"><![CDATA[<p>Released stable version v2 of Assets API.</p>
<p>The Assets API v2 builds on the foundation of v1 with expanded querying, improved asset lifecycle management, and enhanced flexibility. In addition to onboarding, offboarding, and updating asset specifications, v2 introduces advanced filtering and pagination, asset querying by multiple identifier types, asset hiding and unhiding, and dedicated support for asset notes. The API also streamlines telematics device attachment flow, providing a more consistent and scalable way to manage assets across accounts and fleets. For more information, see the updated endpoint documentation.</p>
<p>Below a list of all available endpoints:</p>
<blockquote>
<p>➕ GET: <code>/asset/v2/assets</code></p>
</blockquote>
<p>Get assets</p>
<blockquote>
<p>➕ GET: <code>/asset/v2/assets/{assetId}</code></p>
</blockquote>
<p>Get asset</p>
<blockquote>
<p>➕ POST: <code>/asset/v2/assets</code></p>
</blockquote>
<p>Create assets</p>
<blockquote>
<p>➕ PATCH: <code>/asset/v2/assets</code></p>
</blockquote>
<p>Update assets</p>
<blockquote>
<p>➕ DELETE: <code>/asset/v2/assets/{assetId}</code></p>
</blockquote>
<p>Delete asset</p>
<blockquote>
<p>➕ POST: <code>/asset/v2/assets/query</code></p>
</blockquote>
<p>Query assets by identifiers</p>
<blockquote>
<p>➕ PATCH: <code>/asset/v2/assets/hidden</code></p>
</blockquote>
<p>Hide or unhide assets</p>
<blockquote>
<p>➕ PATCH: <code>/asset/v2/assets/note</code></p>
</blockquote>
<p>Update asset note</p>
<blockquote>
<p>➕ POST: <code>/asset/v2/assets/notes/query</code></p>
</blockquote>
<p>Fetch asset notes</p>
<blockquote>
<p>➕ POST: <code>/asset/v2/assets/{assetId}/telematics-devices</code></p>
</blockquote>
<p>Attach telematics device</p>]]></content>
        <category label="Added" term="Added"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[trackunit/iris-app v1.7.96 - Node upgraded to v24]]></title>
        <id>https://developers.trackunit.com/changelog/2025/11/26/rackunitiris-app-vxxxxx-node-upgraded-to-v24/</id>
        <link href="https://developers.trackunit.com/changelog/2025/11/26/rackunitiris-app-vxxxxx-node-upgraded-to-v24/"/>
        <updated>2025-11-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this version of the App SDK, we have upgraded Node to the current LTS version 24.11.1. Make sure to upgrade your workspace to at least that version.]]></summary>
        <content type="html"><![CDATA[<p>In this version of the App SDK, we have upgraded Node to the current LTS version 24.11.1. Make sure to upgrade your workspace to at least that version.</p>
<p>If using volta, you can install the latest LTS version of Node by running:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">volta </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> node@lts</span><br></div></code></pre></div></div>
<p>or by adding the following to your root package.json</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockTitle_OeMC">package.json</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token property" style="color:#36acaa">"volta"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token property" style="color:#36acaa">"node"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"24.11.1"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<p>Otherwise, you can download the latest LTS version of Node from the Node.js website.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[trackunit/filters-filter-bar v1.7.90 - Filter URL Synchronization]]></title>
        <id>https://developers.trackunit.com/changelog/2025/10/06/filters-filter-bar-v1-7-90/</id>
        <link href="https://developers.trackunit.com/changelog/2025/10/06/filters-filter-bar-v1-7-90/"/>
        <updated>2025-10-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Filter URL Synchronization]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="filter-url-synchronization">Filter URL Synchronization<a href="https://developers.trackunit.com/changelog/2025/10/06/filters-filter-bar-v1-7-90/#filter-url-synchronization" class="hash-link" aria-label="Direct link to Filter URL Synchronization" title="Direct link to Filter URL Synchronization" translate="no">​</a></h2>
<p>Filter states are now automatically synchronized with URL parameters, allowing users to bookmark or share filtered views. When filters are applied, the URL updates to reflect the current filter state, and the filters are restored when navigating back to that URL.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-change">Breaking Change<a href="https://developers.trackunit.com/changelog/2025/10/06/filters-filter-bar-v1-7-90/#breaking-change" class="hash-link" aria-label="Direct link to Breaking Change" title="Direct link to Breaking Change" translate="no">​</a></h3>
<p><strong>TanStack Router is now required</strong> for Iris app extensions using the filter bar.</p>
<p>Your app entry point must be wrapped with TanStack Router's <code>RouterProvider</code>. See the <a href="https://github.com/Trackunit/iris-app-with-router-example/blob/main/libs/context-test/src/index.tsx" target="_blank" rel="noopener noreferrer" class="">iris-app-with-router-example</a> for a complete implementation example showing how to set up the router in your Iris app extension.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Set custom fields values using definition key]]></title>
        <id>https://developers.trackunit.com/changelog/2025/09/04/custom-fields-def-key/</id>
        <link href="https://developers.trackunit.com/changelog/2025/09/04/custom-fields-def-key/"/>
        <updated>2025-09-04T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We enhanced the endpoint for setting custom field values to support definition keys as an alternative to definition UUIDs. This improvement eliminates the need to hardcode UUIDs in your integration code, making your implementations more maintainable and readable.]]></summary>
        <content type="html"><![CDATA[<p>We enhanced the endpoint for setting custom field values to support definition keys as an alternative to definition UUIDs. This improvement eliminates the need to hardcode UUIDs in your integration code, making your implementations more maintainable and readable.</p>
<blockquote>
<p>➕ POST: /api/custom-fields/v1/set-values/</p>
</blockquote>
<p>Set custom field values</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Deprecation of Day Range Picker Popover Component]]></title>
        <id>https://developers.trackunit.com/changelog/2025/06/24/day-ranger-picker-popover/</id>
        <link href="https://developers.trackunit.com/changelog/2025/06/24/day-ranger-picker-popover/"/>
        <updated>2025-06-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[The DayRangePickerPopover component is being deprecated in favor of the new DayRangeSelect component. The new DayRangeSelect component replaces it with all the same functionality but with a more user friendly user experience.]]></summary>
        <content type="html"><![CDATA[<p>The <code>DayRangePickerPopover</code> component is being deprecated in favor of the new <code>DayRangeSelect</code> component. The new <code>DayRangeSelect</code> component replaces it with all the same functionality but with a more user friendly user experience.</p>]]></content>
        <category label="Removed" term="Removed"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[trackunit/iris-app v1.3.155 - NX upgraded to v21.1.3]]></title>
        <id>https://developers.trackunit.com/changelog/2025/06/12/iris-app-v1-3-155-nx-upgrade/</id>
        <link href="https://developers.trackunit.com/changelog/2025/06/12/iris-app-v1-3-155-nx-upgrade/"/>
        <updated>2025-06-12T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this version of our Iris App SDK, we have upgraded NX to v21.1.3.]]></summary>
        <content type="html"><![CDATA[<p>In this version of our Iris App SDK, we have upgraded NX to v21.1.3.
Make sure to upgrade your extensions to the latest version of NX.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npx nx migrate </span><span class="token number" style="color:#36acaa">21.1</span><span class="token plain">.3</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx nx migrate --run-migrations</span><br></div></code></pre></div></div>
<p>Please refer to <a class="" href="https://developers.trackunit.com/docs/apps-and-extensions/overview/iris-app-sdk-reference/maintaining-your-app/">Maintaining Your Application</a> for more information.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Bluetooth tag configuration API v1]]></title>
        <id>https://developers.trackunit.com/changelog/2025/05/29/bluetooth-tag-configuration-api-v1/</id>
        <link href="https://developers.trackunit.com/changelog/2025/05/29/bluetooth-tag-configuration-api-v1/"/>
        <updated>2025-05-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Released stable version v1 of Bluetooth tag configuration API. For more information, see the documentation and introduction of the endpoints.]]></summary>
        <content type="html"><![CDATA[<p>Released stable version v1 of Bluetooth tag configuration API. For more information, see the documentation and introduction of the endpoints.</p>
<p>Below is a list of all available REST endpoints:</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="kin-challenge">KIN Challenge<a href="https://developers.trackunit.com/changelog/2025/05/29/bluetooth-tag-configuration-api-v1/#kin-challenge" class="hash-link" aria-label="Direct link to KIN Challenge" title="Direct link to KIN Challenge" translate="no">​</a></h2>
<blockquote>
<p>➕ POST: <code>/v1/kin-challenge/sign</code></p>
</blockquote>
<p>Sign KIN Challenge</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="utilization-profiles">Utilization Profiles<a href="https://developers.trackunit.com/changelog/2025/05/29/bluetooth-tag-configuration-api-v1/#utilization-profiles" class="hash-link" aria-label="Direct link to Utilization Profiles" title="Direct link to Utilization Profiles" translate="no">​</a></h2>
<blockquote>
<p>➕ POST: <code>/v1/utilization-profiles/search</code></p>
</blockquote>
<p>Search Utilization Profiles</p>
<blockquote>
<p>➕ GET: <code>/v1/utilization-profiles/{profileId}</code></p>
</blockquote>
<p>Get Utilization Profile</p>
<blockquote>
<p>➕ PUT: <code>/v1/utilization-profiles/{profileId}/acknowledge-desired/{deviceId}</code></p>
</blockquote>
<p>Acknowledge Desired Utilization Profile</p>
<blockquote>
<p>➕ PUT: <code>/v1/utilization-profiles/{profileId}/acknowledge-reported/{deviceId}</code></p>
</blockquote>
<p>Acknowledge Reported Utilization Profile</p>]]></content>
        <category label="Added" term="Added"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[GraphQL Asset Clusters]]></title>
        <id>https://developers.trackunit.com/changelog/2025/05/16/gql-asset-cluster/</id>
        <link href="https://developers.trackunit.com/changelog/2025/05/16/gql-asset-cluster/"/>
        <updated>2025-05-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Released asset clustering in the GraphQL API.]]></summary>
        <content type="html"><![CDATA[<p>Released asset clustering in the GraphQL API.</p>
<p>The new <code>assetClusters</code> field supports obtaining clusters of assets based on their current location. Useful for drawing a map of clusters of assets.</p>
<p>It accepts the same <code>AssetFiltersInput</code> as the <code>assets</code> search field, so they can easily be combined if needed.</p>
<blockquote>
<p>➕ GQL: <code>Query.assetClusters</code></p>
</blockquote>
<p><a class="" href="https://developers.trackunit.com/docs/reference/graphql-api/graphql-api-introduction/">See all relevant GQL documentation</a></p>
<p><img decoding="async" loading="lazy" src="https://cdn.statically.io/gh/Trackunit/developer-hub/master/changelogs/gql-asset-cluster.png" alt="map with some asset clusters" class="img_ev3q"></p>]]></content>
        <category label="Added" term="Added"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fleet Data Health API v1beta1]]></title>
        <id>https://developers.trackunit.com/changelog/2025/05/01/fleet-data-health-api-v1beta1/</id>
        <link href="https://developers.trackunit.com/changelog/2025/05/01/fleet-data-health-api-v1beta1/"/>
        <updated>2025-05-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Released beta version v1beta1 of Fleet Data Health API. For more information, see the documentation and introduction of the endpoints.]]></summary>
        <content type="html"><![CDATA[<p>Released beta version v1beta1 of Fleet Data Health API. For more information, see the documentation and introduction of the endpoints.</p>
<p>Below is a list of all available REST endpoints:</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="issue-api">Issue API<a href="https://developers.trackunit.com/changelog/2025/05/01/fleet-data-health-api-v1beta1/#issue-api" class="hash-link" aria-label="Direct link to Issue API" title="Direct link to Issue API" translate="no">​</a></h2>
<blockquote>
<p>➕ GET: <code>/v1beta1/assets/{assetId}/issues</code></p>
</blockquote>
<p>Get issues by asset</p>
<blockquote>
<p>➕ GET: <code>/v1beta1/issues</code></p>
</blockquote>
<p>Get issues</p>
<blockquote>
<p>➕ GET: <code>/v1beta1/issues/{issueId}</code></p>
</blockquote>
<p>Get issues</p>]]></content>
        <category label="Added" term="Added"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Compaction App API v1]]></title>
        <id>https://developers.trackunit.com/changelog/2025/04/23/compaction-app-api-v1/</id>
        <link href="https://developers.trackunit.com/changelog/2025/04/23/compaction-app-api-v1/"/>
        <updated>2025-04-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Released stable version v1 of Compaction API. For more information, see the documentation and introduction of the endpoints.]]></summary>
        <content type="html"><![CDATA[<p>Released stable version v1 of Compaction API. For more information, see the documentation and introduction of the endpoints.</p>
<p>Below is a list of all available REST endpoints:</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="filter">Filter:<a href="https://developers.trackunit.com/changelog/2025/04/23/compaction-app-api-v1/#filter" class="hash-link" aria-label="Direct link to Filter:" title="Direct link to Filter:" translate="no">​</a></h2>
<blockquote>
<p>➕ GET: <code>/api/compaction/v1/compactions/trips/{tripId}/filter</code></p>
</blockquote>
<p>Get Trip Filter</p>
<blockquote>
<p>➕ PUT: <code>/api/compaction/v1/compactions/trips/{tripId}/filter</code></p>
</blockquote>
<p>Update Trip Filter</p>
<blockquote>
<p>➕ DELETE: <code>/api/compaction/v1/compactions/trips/{tripId}/filter</code></p>
</blockquote>
<p>Delete Trip Filter</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="searches">Searches:<a href="https://developers.trackunit.com/changelog/2025/04/23/compaction-app-api-v1/#searches" class="hash-link" aria-label="Direct link to Searches:" title="Direct link to Searches:" translate="no">​</a></h2>
<blockquote>
<p>➕ POST: <code>/api/compaction/v1/compactions/searches</code></p>
</blockquote>
<p>Create Saved Search</p>
<blockquote>
<p>➕ GET: <code>/api/compaction/v1/compactions/searches</code></p>
</blockquote>
<p>Get All Saved Searches</p>
<blockquote>
<p>➕ GET: <code>/api/compaction/v1/compactions/searches/{searchUUID}</code></p>
</blockquote>
<p>Get Saved Search</p>
<blockquote>
<p>➕ PUT: <code>/api/compaction/v1/compactions/searches/{searchUUID}</code></p>
</blockquote>
<p>Update Saved Search</p>
<blockquote>
<p>➕ DELETE: <code>/api/compaction/v1/compactions/searches/{searchUUID}</code></p>
</blockquote>
<p>Delete Saved Search</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="trips">Trips:<a href="https://developers.trackunit.com/changelog/2025/04/23/compaction-app-api-v1/#trips" class="hash-link" aria-label="Direct link to Trips:" title="Direct link to Trips:" translate="no">​</a></h2>
<blockquote>
<p>➕ GET: <code>/api/compaction/v1/compactions/trips/{tripId}</code></p>
</blockquote>
<p>Get Compaction Trip</p>
<blockquote>
<p>➕ DELETE: <code>/api/compaction/v1/compactions/trips/{tripId}</code></p>
</blockquote>
<p>Delete Compaction Trip</p>
<blockquote>
<p>➕ GET: <code>/api/compaction/v1/compactions/trips/{tripId}/compactions</code></p>
</blockquote>
<p>Get Compaction Datapoints</p>
<blockquote>
<p>➕ GET: <code>/api/compaction/v1/compactions/trips/{tripId}/compactions/summarized</code></p>
</blockquote>
<p>Get Summarized Compaction</p>
<blockquote>
<p>➕ POST: <code>/api/compaction/v1/compactions/trips</code></p>
</blockquote>
<p>Get Compaction Trips</p>]]></content>
        <category label="Added" term="Added"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[trackunit/iris-app v1.3.38 - NX upgraded to v20.5.0]]></title>
        <id>https://developers.trackunit.com/changelog/2025/03/18/iris-app-v1-3-38-nx-upgrade/</id>
        <link href="https://developers.trackunit.com/changelog/2025/03/18/iris-app-v1-3-38-nx-upgrade/"/>
        <updated>2025-03-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[In this version of our Iris App SDK, we have upgraded NX to v20.5.0.]]></summary>
        <content type="html"><![CDATA[<p>In this version of our Iris App SDK, we have upgraded NX to v20.5.0.
Make sure to upgrade your extensions to the latest version of NX.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npx nx migrate </span><span class="token number" style="color:#36acaa">20.5</span><span class="token plain">.0</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npx nx migrate --run-migrations</span><br></div></code></pre></div></div>
<p>Please refer to <a class="" href="https://developers.trackunit.com/docs/apps-and-extensions/overview/iris-app-sdk-reference/maintaining-your-app/">Maintaining Your Application</a> for more information.</p>]]></content>
        <category label="Improved" term="Improved"/>
    </entry>
</feed>