<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Tuist's changelog</title>
  <subtitle>Updates to Tuist's features and improvements.</subtitle>
  <link href="https://tuist.dev/changelog"/>
  <link href="https://tuist.dev/changelog/atom.xml" rel="self"/>
  <id>https://tuist.dev/changelog</id>
  <updated>Fri, 08 Nov 2024 00:00:00 +0000</updated>

  
    <entry>
      <title><![CDATA[ Sort quarantined and flaky tests by when they were marked ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.08.04-sort-quarantined-flaky-tests-by-marked-time"/>
      <id>https://tuist.dev/changelog/2026.08.04-sort-quarantined-flaky-tests-by-marked-time</id>
      <updated>Tue, 04 Aug 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The quarantined tests page now shows a sortable &quot;Quarantined at&quot; column, and the flaky tests page a &quot;Marked flaky at&quot; column. Both timestamps come from the test's event history and reflect when the test entered its current state — re-quarantining a test starts a new period, and the timestamp always describes the same event as the &quot;Quarantined by&quot; attribution next to it.</p>
<p>Sorting by these columns lets you review the lists chronologically: surface the tests that have been parked the longest and are overdue for a fix, or check what was quarantined most recently and why.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Control target cache invalidation with additional inputs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.28-additional-target-hashing-inputs"/>
      <id>https://tuist.dev/changelog/2026.07.28-additional-target-hashing-inputs</id>
      <updated>Tue, 28 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>A target's output can depend on more than its source files and declared dependencies. Code-generation templates, tool versions, configuration files, and environment variables can all change the resulting binary without previously changing Tuist's target hash. This could cause Tuist to reuse a stale cached artifact.</p>
<p>Targets can now declare these values through <code>additionalHashingInputs</code>:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">swift</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">let hashingInputs: [Target.HashingInput] = [
    .glob(&quot;Templates/Model.stencil&quot;),
    .glob(&quot;Codegen&quot;),
    .glob(&quot;Config/**/*.json&quot;),
    .environmentVariable(&quot;FEATURE_CONFIGURATION&quot;),
    .string(&quot;generator-v2&quot;),
    .script(&quot;codegen --version&quot;),
]</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-swift" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #cf222e;">let</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">hashingInputs</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span><span style="color: #953800;">Target</span><span style="color: #1f2328;">.</span><span style="color: #953800;">HashingInput</span><span style="color: #1f2328;">]</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">=</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span>
</div><div class="l-line" data-line="2"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">glob</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">Templates/Model.stencil</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="3"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">glob</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">Codegen</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="4"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">glob</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">Config/**/*.json</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">environmentVariable</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">FEATURE_CONFIGURATION</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">string</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">generator-v2</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="7"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">script</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">codegen --version</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="8"><span style="color: #1f2328;">]</span>
</div></code></pre></div></div>
<p>Pass the array to <code>Target.target(additionalHashingInputs:)</code>. Exact files, directories, and glob patterns contribute their contents. Environment variables contribute their current value, strings contribute their literal value, and scripts contribute their standard output. When any declared input changes, the target hash changes and Tuist rebuilds the artifact instead of restoring stale cached output.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Noora web components ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.27-noora-web-components"/>
      <id>https://tuist.dev/changelog/2026.07.27-noora-web-components</id>
      <updated>Mon, 27 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Noora is now available as standards-based <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_components">web components</a>. They share the design tokens, visual language, and component behavior used by Noora’s Phoenix LiveView components, while remaining usable from plain Hypertext Markup Language or any browser framework.</p>
<p>Install <code>@tuist/noora</code> from the <a href="https://www.npmjs.com/package/@tuist/noora">Node Package Manager package registry</a>, then import the design tokens and component registration bundle once in your browser entry point:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">javascript</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">import &quot;@tuist/noora/tokens.css&quot;;
import &quot;@tuist/noora/web-components&quot;;</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-javascript" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #cf222e;">import</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;@tuist/noora/tokens.css&quot;</span><span style="color: #1f2328;">;</span>
</div><div class="l-line" data-line="2"><span style="color: #cf222e;">import</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;@tuist/noora/web-components&quot;</span><span style="color: #1f2328;">;</span>
</div></code></pre></div></div>
<p>For a quick browser-only prototype, a content delivery network such as <a href="https://www.jsdelivr.com/">jsDelivr</a> can serve the same published files directly from the Node Package Manager package:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">html</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">&lt;link
  rel=&quot;stylesheet&quot;
  href=&quot;https://cdn.jsdelivr.net/npm/@tuist/noora@latest/priv/static/tokens.css&quot;
/&gt;
&lt;script
  type=&quot;module&quot;
  src=&quot;https://cdn.jsdelivr.net/npm/@tuist/noora@latest/priv/static/noora-web-components.js&quot;
&gt;&lt;/script&gt;</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-html" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #1f2328;">&lt;</span><span style="color: #116329;">link</span>
</div><div class="l-line" data-line="2"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">rel</span><span style="color: #0550ae;">=</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">stylesheet</span><span style="color: #0a3069;">&quot;</span>
</div><div class="l-line" data-line="3"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">href</span><span style="color: #0550ae;">=</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">https://cdn.jsdelivr.net/npm/@tuist/noora@latest/priv/static/tokens.css</span><span style="color: #0a3069;">&quot;</span>
</div><div class="l-line" data-line="4"><span style="color: #1f2328;">/&gt;</span>
</div><div class="l-line" data-line="5"><span style="color: #1f2328;">&lt;</span><span style="color: #116329;">script</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">type</span><span style="color: #0550ae;">=</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">module</span><span style="color: #0a3069;">&quot;</span>
</div><div class="l-line" data-line="7"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">src</span><span style="color: #0550ae;">=</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">https://cdn.jsdelivr.net/npm/@tuist/noora@latest/priv/static/noora-web-components.js</span><span style="color: #0a3069;">&quot;</span>
</div><div class="l-line" data-line="8"><span style="color: #1f2328;">&gt;</span><span style="color: #1f2328;">&lt;/</span><span style="color: #116329;">script</span><span style="color: #1f2328;">&gt;</span>
</div></code></pre></div></div>
<p>The <code>@latest</code> addresses are convenient for prototypes. Pin an exact published version when using Noora in production.</p>
<p>You can then use Noora custom elements directly:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">html</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">&lt;noora-button variant=&quot;primary&quot;&gt;Create project&lt;/noora-button&gt;</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-html" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #1f2328;">&lt;</span><span style="color: #116329;">noora-button</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">variant</span><span style="color: #0550ae;">=</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">primary</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">&gt;</span>Create project<span style="color: #1f2328;">&lt;/</span><span style="color: #116329;">noora-button</span><span style="color: #1f2328;">&gt;</span>
</div></code></pre></div></div>
<p>Interactive components use standard browser events where they fit and documented <code>noora-*</code> custom events for structured interactions. For example:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">javascript</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">document.querySelector(&quot;noora-select&quot;).addEventListener(&quot;noora-select&quot;, (event) =&gt; {
  console.log(event.detail.value);
});</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-javascript" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #0550ae;">document</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">querySelector</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;noora-select&quot;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">addEventListener</span><span style="color: #1f2328;">(</span><span style="color: #0a3069;">&quot;noora-select&quot;</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">(</span><span style="color: #1f2328;">event</span><span style="color: #1f2328;">)</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">=&gt;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&lbrace;</span>
</div><div class="l-line" data-line="2"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">console</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">log</span><span style="color: #1f2328;">(</span><span style="color: #1f2328;">event</span><span style="color: #1f2328;">.</span><span style="color: #0550ae;">detail</span><span style="color: #1f2328;">.</span><span style="color: #0550ae;">value</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">;</span>
</div><div class="l-line" data-line="3"><span style="color: #1f2328;">&rbrace;</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">;</span>
</div></code></pre></div></div>
<p>The package also includes TypeScript declarations, a Custom Elements Manifest, and generated reference documentation for attributes, properties, slots, styling parts, and events.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Tune network retries for slow or congested connections ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.21-configurable-network-retries"/>
      <id>https://tuist.dev/changelog/2026.07.21-configurable-network-retries</id>
      <updated>Tue, 21 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>A longer resource timeout can keep a slow but progressing cache download from falling back to a source build. Until now, however, every failed request still used three fixed retries. Raising the timeout could therefore turn one stalled transfer into up to four long waits, with no way to adjust that tradeoff.</p>
<p>Tuist now exposes the shared <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP">Hypertext Transfer Protocol (HTTP)</a> retry policy through two environment variables:</p>
<ul>
<li><code>TUIST_HTTP_MAXIMUM_RETRY_COUNT</code> controls how many retries follow the initial attempt. It defaults to <code>3</code>, setting it to <code>0</code> disables retries, and values above <code>10</code> are capped at <code>10</code>.</li>
<li><code>TUIST_HTTP_RETRY_BASE_DELAY_IN_MILLISECONDS</code> controls the initial exponential backoff delay. It defaults to <code>100</code> milliseconds and values above <code>30000</code> are capped at <code>30000</code> milliseconds.</li>
</ul>
<p>The base delay now correctly starts at 100 milliseconds rather than roughly one millisecond. Each retry doubles the delay and adds up to one base delay of random jitter, helping clients avoid retrying in lockstep after a shared network failure. Individual retry delays never exceed 30 seconds.</p>
<p>Self-hosted operators can now pair a longer resource timeout with fewer attempts, or increase the base delay to spread retries during congestion. Invalid values fall back to the defaults.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Get a run's dashboard URLs as JSON, on any CI provider ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.17-run-report-json"/>
      <id>https://tuist.dev/changelog/2026.07.17-run-report-json</id>
      <updated>Fri, 17 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Until now, the only way to get a run's dashboard URLs out of a CI job was to read them off the log. On GitHub Actions the job summary covered it, but everywhere else you were left matching the log text with a regex, which quietly breaks whenever the wording or the URL shape changes.</p>
<p><code>tuist test</code>, <code>tuist xcodebuild test</code>, and <code>tuist xcodebuild build</code> now take a <code>--run-report-path</code> (or <code>TUIST_RUN_REPORT_PATH</code>), and write a JSON report of the run to it:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">json</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">{
  &quot;runId&quot;: &quot;...&quot;,
  &quot;status&quot;: &quot;success&quot;,
  &quot;runURL&quot;: &quot;https://tuist.dev/acme/app/runs/123&quot;,
  &quot;testRunURL&quot;: &quot;https://tuist.dev/acme/app/tests/456&quot;,
  &quot;buildRunURL&quot;: &quot;https://tuist.dev/acme/app/builds/789&quot;,
  &quot;testRuns&quot;: [
    { &quot;scheme&quot;: &quot;App&quot;, &quot;succeeded&quot;: true, &quot;totalTests&quot;: 10, &quot;skippedTests&quot;: 2, &quot;ranTests&quot;: 8, &quot;failedTestNames&quot;: [] }
  ],
  &quot;buildRuns&quot;: [{ &quot;scheme&quot;: &quot;App&quot;, &quot;succeeded&quot;: true, &quot;durationInSeconds&quot;: 432 }]
}</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-json" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #1f2328;">&lbrace;</span>
</div><div class="l-line" data-line="2"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;runId&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;...&quot;</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="3"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;status&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;success&quot;</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="4"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;runURL&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;https://tuist.dev/acme/app/runs/123&quot;</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;testRunURL&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;https://tuist.dev/acme/app/tests/456&quot;</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;buildRunURL&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;https://tuist.dev/acme/app/builds/789&quot;</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="7"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;testRuns&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span>
</div><div class="l-line" data-line="8"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&lbrace;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;scheme&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;App&quot;</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;succeeded&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">true</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;totalTests&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">10</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;skippedTests&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">2</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;ranTests&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">8</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;failedTestNames&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span><span style="color: #1f2328;">]</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&rbrace;</span>
</div><div class="l-line" data-line="9"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">]</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="10"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;buildRuns&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span><span style="color: #1f2328;">&lbrace;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;scheme&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;App&quot;</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;succeeded&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">true</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">&quot;durationInSeconds&quot;</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">432</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&rbrace;</span><span style="color: #1f2328;">]</span>
</div><div class="l-line" data-line="11"><span style="color: #1f2328;">&rbrace;</span>
</div></code></pre></div></div>
<p>Every URL the run produced is included, so a command that both builds and tests gives you both links — something the log could never do, because it only ever printed one of them.</p>
<p>On GitLab, that makes the links available to the rest of the pipeline:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">yaml</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">test:
  script:
    - tuist test --run-report-path tuist-run.json
    - echo &quot;TUIST_TEST_RUN_URL=$(jq -r &#39;.testRunURL // empty&#39; tuist-run.json)&quot; &gt;&gt; run.env
  artifacts:
    reports:
      dotenv: run.env</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-yaml" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #116329;">test</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="2"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">script</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="3"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">-</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">test</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--run-report-path</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">tuist-run.json</span>
</div><div class="l-line" data-line="4"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">-</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">echo</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;TUIST_TEST_RUN_URL=</span><span style="color: #1f2328;">$(</span><span style="color: #0550ae;">jq</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">-r</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&#39;.testRunURL // empty&#39;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">tuist-run.json</span><span style="color: #1f2328;">)</span><span style="color: #0a3069;">&quot;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #cf222e;">&gt;&gt;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">run.env</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">artifacts</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">reports</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="7"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">dotenv</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">run.env</span>
</div></code></pre></div></div>
<p>The report is a supported format, documented in the Continuous Integration guide, rather than something you reverse-engineer from the logs.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Authenticate coding agents with auth.md ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.17-agent-authentication"/>
      <id>https://tuist.dev/changelog/2026.07.17-agent-authentication</id>
      <updated>Fri, 17 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now supports the complete <a href="https://workos.com/auth-md">auth.md</a> authentication lifecycle for coding agents. An unauthenticated agent can discover instructions from the Tuist deployment it is connecting to, register, ask you to approve a six-digit code in Tuist, and receive a scoped credential after approval.</p>
<p>The flow works with Claude Code, Codex, OpenCode, and Pi when they connect to Tuist's <a href="/en/guides/features/agentic-coding/mcp">Model Context Protocol</a> server. Credentials expire automatically, can be revoked, and remain bound to the Tuist deployment that issued them.</p>
<p>Once connected, an agent can list the accounts available to you, create the correct project, guide a Gradle integration, and verify remote-cache behavior through Tuist before reporting that the setup is complete.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ SwifterPM is now the default for generated projects ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.16-swifterpm-default"/>
      <id>https://tuist.dev/changelog/2026.07.16-swifterpm-default</id>
      <updated>Thu, 16 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p><code>tuist install</code> now uses <a href="https://github.com/tuist/tuist/tree/main/swifterpm">SwifterPM</a> by default to fetch and restore your Swift package dependencies. Resolution stays with the Swift Package Manager, while restoration links checkouts back to a global content-addressable store instead of copying them into every worktree. Warm restores drop to sub-second, and you stop paying for gigabytes of duplicated checkouts across worktrees.</p>
<p>This used to be opt-in through <code>TUIST_USE_SWIFTERPM=1</code>; now it's on by default. If you hit a package graph SwifterPM doesn't handle yet, set <code>TUIST_USE_SWIFTERPM=0</code> to fall back to SwiftPM, and please <a href="https://github.com/tuist/tuist/issues">open an issue</a> so we can fix it.</p>
<p>Read more about how SwifterPM works in the <a href="/blog/2026/07/16/swifterpm">announcement blog post</a>.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Source-backed answers from coding agents ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.16-source-backed-tuist-answers"/>
      <id>https://tuist.dev/changelog/2026.07.16-source-backed-tuist-answers</id>
      <updated>Thu, 16 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Coding agents connected to the hosted Tuist <a href="/en/guides/features/agentic-coding/mcp">Model Context Protocol</a> endpoint can now use the <strong><code>ask_tuist</code></strong> prompt to answer questions about Tuist with evidence from both public material and the current implementation.</p>
<p>The prompt starts with documentation, reference material, releases, community discussions, and issues. When the answer depends on current defaults, configuration, feature gates, or error handling, the agent can search the Tuist source tree, discover nearby files, and read focused line ranges. Source results link to the exact repository revision so answers remain verifiable.</p>
<p>All source access is read-only and bounded. Searches, file listings, line ranges, execution time, scanned bytes, and returned text have hard limits, and partial results are reported explicitly.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Manage account tokens from the dashboard ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.16-account-tokens-dashboard"/>
      <id>https://tuist.dev/changelog/2026.07.16-account-tokens-dashboard</id>
      <updated>Thu, 16 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Account tokens can now be managed directly from the Tuist dashboard. Generate scoped tokens for CI and automation, choose whether they can access every project or only selected projects, and set an optional expiration without reaching for the CLI.</p>
<p>The dashboard shows each token with a masked prefix hint, links to a detail page with its permissions and project access, and keeps revocation close to the token you are rotating. Newly generated token values are still shown once, so they can be stored securely before closing the dialog.</p>
<p><img src="/marketing/images/changelog/2026.07.16-account-tokens-dashboard.jpg" alt="Account token settings in the Tuist dashboard with scoped token creation and existing token details" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Terminal access for live runner jobs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.15-runner-terminal-access"/>
      <id>https://tuist.dev/changelog/2026.07.15-runner-terminal-access</id>
      <updated>Wed, 15 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist Runner jobs now include a <strong>Terminal</strong> tab while they are running. Use it to inspect the live job environment, run diagnostic commands, and recover context without waiting for another workflow attempt.</p>
<p>The same session is available from your local terminal with <code>tuist runner ssh &lt;job&gt;</code>, so you can use the dashboard when you want a quick browser shell or stay in your local terminal for deeper debugging.</p>
<p><img src="/marketing/images/changelog/2026.07.15-runner-terminal-access.png" alt="A running Tuist Runner job with the Terminal tab open, showing an interactive shell prompt and command output inside the dashboard" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Concurrency limits for Tuist Runners ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.14-runner-concurrency-limits"/>
      <id>https://tuist.dev/changelog/2026.07.14-runner-concurrency-limits</id>
      <updated>Tue, 14 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist Runners now enforce account-level CPU and memory concurrency limits independently for macOS and Linux. Jobs that would exceed the available capacity remain queued until resources become available, preventing a single workload from monopolizing the shared runner fleet.</p>
<p>The Runners dashboard shows hourly peak CPU and memory usage, with red bars for hours when a limit was reached. Limits can be tuned per account as runner needs grow.</p>
<p><img src="/marketing/images/changelog/2026.07.14-runner-concurrency-limits.jpg" alt="The Tuist Runners dashboard showing hourly macOS CPU and memory concurrency usage, with red bars marking when the configured limits were reached" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Swift package traits in native integration ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.14-native-package-traits"/>
      <id>https://tuist.dev/changelog/2026.07.14-native-package-traits</id>
      <updated>Tue, 14 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist projects that use Xcode's native package integration can now select Swift package traits directly in <code>Project.packages</code>:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">swift</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">let project = Project(
    name: &quot;App&quot;,
    packages: [
        .package(path: &quot;Package&quot;, traits: [&quot;NativeIntegration&quot;]),
    ]
)</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-swift" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #cf222e;">let</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">project</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">=</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #6639ba;">Project</span><span style="color: #1f2328;">(</span>
</div><div class="l-line" data-line="2"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">name</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">App</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="3"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">packages</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span>
</div><div class="l-line" data-line="4"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">package</span><span style="color: #1f2328;">(</span><span style="color: #0550ae;">path</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">Package</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">,</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">traits</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">NativeIntegration</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">]</span><span style="color: #1f2328;">)</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">]</span>
</div><div class="l-line" data-line="6"><span style="color: #1f2328;">)</span>
</div></code></pre></div></div>
<p>The project description interface follows Swift Package Manager's <code>Package.Dependency</code> model. Traits are typed values, <code>.defaults</code> enables the package's default traits, and an empty set disables them. Package traits require Xcode 26.4 or later, and existing package declarations continue to work through the deprecated compatibility initializer.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Search Tuist docs and community from your coding agent ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.13-search-tuist-mcp-tool"/>
      <id>https://tuist.dev/changelog/2026.07.13-search-tuist-mcp-tool</id>
      <updated>Mon, 13 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Coding agents connected to the hosted Tuist <a href="/en/guides/features/agentic-coding/mcp">MCP</a> endpoint can now use a <strong><code>search_tuist</code></strong> tool to search Tuist's documentation, ProjectDescription API reference, GitHub releases, community forum, and GitHub issues in one call. Release results include product, version, and publication details, with prereleases available when requested. The tool is backed by the same search engine that powers the docs website, returns cited links for every result, and can be scoped to a single source. Agents get grounded answers about Tuist without relying on stale training data.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Configurable self-hosted artifact retention ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.10-self-hosted-artifact-retention"/>
      <id>https://tuist.dev/changelog/2026.07.10-self-hosted-artifact-retention</id>
      <updated>Fri, 10 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Self-hosted Tuist instances can now automatically clean up artifact files from object storage. Operators can set independent retention windows for cache artifacts, app previews, build archives, run artifacts, test attachments, and shard bundles.</p>
<p>Configure the windows through the Helm chart:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">yaml</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">server:
  artifactRetentionDays:
    cacheArtifacts: 30
    appPreviews: 30
    buildArchives: 60
    runArtifacts: 30
    testAttachments: 30
    shardBundles: 14</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-yaml" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #116329;">server</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="2"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">artifactRetentionDays</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="3"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">cacheArtifacts</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">30</span>
</div><div class="l-line" data-line="4"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">appPreviews</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">30</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">buildArchives</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">60</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">runArtifacts</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">30</span>
</div><div class="l-line" data-line="7"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">testAttachments</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">30</span>
</div><div class="l-line" data-line="8"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">shardBundles</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">14</span>
</div></code></pre></div></div>
<p>Each artifact family also has its own environment variable for deployments that do not use Helm. Leaving a family unset or blank keeps its cleanup disabled. Cleanup removes artifact files only and preserves the associated PostgreSQL and ClickHouse metadata used by dashboards and analytics.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ CI details on build and test runs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.09-ci-details-build-test-runs"/>
      <id>https://tuist.dev/changelog/2026.07.09-ci-details-build-test-runs</id>
      <updated>Thu, 09 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Build and test run pages now show a <strong>CI Details</strong> card whenever Tuist can match the insight to a Tuist Runner job. The card includes the workflow, job, runner profile, queue time, CI job duration, and the exact step that produced the build or test insight.</p>
<p><img src="/marketing/images/changelog/2026.07.09-ci-details-build-test-runs.png" alt="A build run detail page with Build Details followed by a CI Details card linking to the Tuist Runner workflow, job, profile, queue time, CI job duration, and matched step" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Build and test insights in runner jobs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.08-runner-job-insights"/>
      <id>https://tuist.dev/changelog/2026.07.08-runner-job-insights</id>
      <updated>Wed, 08 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Runner job details now connect the CI run with the build and test insight data it produced. The new <strong>Insights</strong> card sits between the job summary and machine metrics, so you can see the build, test, cache, and selective-testing context before diving into CPU, memory, network, or step logs.</p>
<p><img src="/marketing/images/changelog/2026.07.08-runner-job-insights.png" alt="A Tuist Runner job page showing the new Insights card with build and test run summaries above CPU, memory, and network metrics" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Interactive access for macOS runner jobs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.08-runner-interactive-access"/>
      <id>https://tuist.dev/changelog/2026.07.08-runner-interactive-access</id>
      <updated>Wed, 08 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist Runner jobs on macOS now include an <strong>Interactive</strong> tab while the job is running. Open it to see the live runner desktop over VNC, click through macOS prompts, inspect simulator state, or debug anything that is easier to understand visually than from logs alone.</p>
<p><img src="/marketing/images/changelog/2026.07.08-runner-interactive-access.jpg" alt="The Interactive access tab on a running macOS runner job, showing the live macOS desktop over VNC with a Full screen button in the toolbar" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Organization invitation management ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.07-organization-invitation-management"/>
      <id>https://tuist.dev/changelog/2026.07.07-organization-invitation-management</id>
      <updated>Tue, 07 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Organization invitations now show whether they are still pending or have expired, so admins can tell at a glance when an invite link is no longer usable. Expired invitations stay visible in the Invitations tab with an <strong>Expired</strong> status instead of looking active.</p>
<p><img src="/marketing/images/changelog/2026.07.07-organization-invitation-management.png" alt="The organization members page showing the Invitations tab with one expired invite, one pending invite, and the resend invitation action open" /></p>
<p>You can also resend any invitation from the same row. Resending refreshes the invite link and validity window, making it easier to recover from missed or stale invitations without revoking and recreating the invite.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Cache upload access controls ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.06-cache-upload-access"/>
      <id>https://tuist.dev/changelog/2026.07.06-cache-upload-access</id>
      <updated>Mon, 06 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Teams can now choose who is allowed to upload cache artifacts from the account Cache page. Keep uploads open to members, CI, and account tokens, or switch to <strong>CI and account tokens only</strong> so developers can keep downloading trusted cache artifacts without publishing local branch builds back into the cache.</p>
<img src="/marketing/images/changelog/2026.07.06-cache-upload-access.png" alt="Cache upload access setting with CI and account tokens only selected" style="max-width: 100%; height: auto;" />
<p>This is useful when CI is your trusted cache producer. CI OIDC logins and scoped account tokens can write to the cache, while members using normal login sessions stay read-only. That helps teams avoid one-off local uploads, reduce cache storage growth, and remove upload wait time from developer machines.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Errors on test runs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.02-test-run-errors"/>
      <id>https://tuist.dev/changelog/2026.07.02-test-run-errors</id>
      <updated>Thu, 02 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>A failed test run doesn't always mean a test failed. Sometimes a target's <code>.xctest</code> bundle won't load, or the app under test never launches, so the tests never get to run at all. Xcode treats these as errors rather than test failures, and now Tuist does too: run and target-level errors show up in a dedicated Errors section on the test run page, each with the target that hit it and the underlying message.</p>
<p><img src="/marketing/images/changelog/2026.07.02-test-run-errors.png" alt="The Errors card on a test run page, listing a run-level error where the app couldn't be launched and two targets, IntegrationTests and UITests, whose test bundles failed to load, each shown with its error message" /></p>
<p>Pulling these out of your test cases keeps your counts honest, an error is no longer miscounted as a failed test, and makes the two kinds of problem easy to tell apart. We also renamed the failures section to Test Failures, so each reads as what it is: Errors stopped your tests from running, Test Failures are the assertions that didn't hold.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Module cache transfer analytics ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.07.02-module-cache-transfer-analytics"/>
      <id>https://tuist.dev/changelog/2026.07.02-module-cache-transfer-analytics</id>
      <updated>Thu, 02 Jul 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Your module cache hit rate tells you how many modules you skipped rebuilding. It never told you how much data that cache actually moved, or how quickly. Now it does.</p>
<p><img src="/marketing/images/changelog/2026.07.02-module-cache-transfer-analytics.png" alt="The Module Cache tab of a tuist generate run: Downloaded and Uploaded totals alongside cache hits, misses, and hit rate, with Download and Upload throughput below the cacheable targets breakdown" /></p>
<p>Every run's Module Cache tab surfaces the network side of your cache. Alongside cache hits, misses, and hit rate, you'll now see:</p>
<ul>
<li><strong>Downloaded and Uploaded</strong>: the total size of prebuilt modules the run pulled from and pushed to the remote cache.</li>
<li><strong>Download throughput and Upload throughput</strong>: how fast those transfers actually moved, as a time-weighted average.</li>
</ul> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Machine metrics for runner jobs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.24-runner-job-machine-metrics"/>
      <id>https://tuist.dev/changelog/2026.06.24-runner-job-machine-metrics</id>
      <updated>Wed, 24 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Every job that runs on Tuist Runners now records how hard its machine worked. CPU, memory, network, CPU I/O wait, and storage are captured for the full duration of the run and plotted on the job page, so you can stop guessing whether a build is CPU-bound, starved for memory, or filling up the disk.</p>
<p><img src="/marketing/images/changelog/2026.06.24-runner-job-machine-metrics.png" alt="A runner job's CI Details card with CPU, Memory, and Network charts below the job metadata, each plotting usage across the full run" /></p>
<p>Use it to right-size your runner profiles: move a job that barely touches the CPU onto a smaller machine, or give a job pinned at 100% more cores so it ships faster. Hover a step and the charts highlight that window, so you can tell which step pinned the CPU or filled the disk.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Configurable default branch ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.16-default-branch"/>
      <id>https://tuist.dev/changelog/2026.06.16-default-branch</id>
      <updated>Tue, 16 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist uses your project's default branch as the baseline for analytics, insights, and comparisons, from bundle size checks to test reliability and flaky test detection. It was already configurable through the CLI, and now you can view and change it directly from your project's settings too. When you connect a GitHub repository, Tuist also adopts the repository's default branch automatically.</p>
<p><img src="/marketing/images/changelog/2026.06.16-default-branch.png" alt="The Default branch card in a project's General settings, showing the current branch as a &quot;main&quot; badge with an edit button" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Module Cache support for test helper frameworks ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.15-module-cache-test-support-frameworks"/>
      <id>https://tuist.dev/changelog/2026.06.15-module-cache-test-support-frameworks</id>
      <updated>Mon, 15 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Module Cache can now cache framework targets that support your tests, even when they link XCTest or Swift Testing. This helps projects with shared assertion helpers, fixtures, or test utilities reuse binary cache artifacts instead of rebuilding those helper modules from source every time.</p>
<p>Test bundles themselves are still left out of the binary cache. The change only applies to regular framework products that tests depend on, so your test targets keep their normal behavior while their reusable support modules can benefit from local and remote cache hits.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Module Cache support for library products ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.15-module-cache-library-products"/>
      <id>https://tuist.dev/changelog/2026.06.15-module-cache-library-products</id>
      <updated>Mon, 15 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Module Cache can now cache static and dynamic library targets, not only framework targets. Library products are warmed, stored, and consumed as XCFramework artifacts, including Swift modules and public headers, so projects with mixed framework and library graphs can reuse binary cache artifacts across local and CI builds.</p>
<p>Test bundles remain excluded from the binary cache, but reusable library targets that support tests can now benefit from the same cache flow as test-support frameworks.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Build and test metrics in Grafana ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.10-grafana-data-source"/>
      <id>https://tuist.dev/changelog/2026.06.10-grafana-data-source</id>
      <updated>Wed, 10 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Build and test times are coming to Grafana. The new Tuist data source plugin pulls the same p50, p90, p99, and average durations you see in your Tuist dashboard and renders them as native Grafana time series, so build and test performance can sit next to the rest of your observability. You configure it with a Tuist account token, then pick a project and an environment (CI or local) and the percentiles you want to chart. Project and environment are dashboard variables, so a single dashboard works across every project the token can reach, and you can watch how your pipelines trend as you optimize them.</p>
<p>The plugin is not published to the Grafana catalog yet. We are getting it ready for release and will update this entry once it is available.</p>
<p><img src="/marketing/images/changelog/2026.06.10-grafana-data-source.png" alt="A Grafana dashboard with Project and Environment dropdowns showing Tuist build and test duration percentiles over the last 30 days" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test reliability automations ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.09-test-reliability-automations"/>
      <id>https://tuist.dev/changelog/2026.06.09-test-reliability-automations</id>
      <updated>Tue, 09 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Some tests are not intermittently flaky; they are broken, or failing so often that they drown out useful signal. Automations can now monitor <strong>Test reliability</strong> across branches and trigger when it drops below your chosen threshold. Pair it with actions like changing the test's quarantine state, marking it as flaky, or notifying Slack, so broken or consistently failing tests can be handled automatically.</p>
<p><img src="/marketing/images/changelog/2026.06.09-test-reliability-automations.png" alt="The Create automation modal configured to mark tests as flaky when their test reliability is less than 90% over the last 30 days" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Tuist Run Report in the GitHub Actions job summary ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.09-github-actions-job-summary"/>
      <id>https://tuist.dev/changelog/2026.06.09-github-actions-job-summary</id>
      <updated>Tue, 09 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When Tuist runs in GitHub Actions, it now writes a Tuist Run Report to the Actions job summary. The test and build results for the run show up right on the workflow run page, with a link to the full report on Tuist, and nothing extra to set up.</p>
<p>This is especially useful with merge queues. A merge queue run is not attached to a pull request, so there is no comment to post, and until now you had to wire up your own JUnit reporting to see results. The summary now shows up for every authenticated run, whether it came from a pull request or a queue.</p>
<p><img src="/marketing/images/changelog/2026.06.09-github-actions-job-summary.png" alt="A GitHub Actions run summary showing the Tuist Run Report with a table of build results per scheme" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ SwiftPM prebuilt libraries for faster project generation ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.08-swiftpm-prebuilt-libraries"/>
      <id>https://tuist.dev/changelog/2026.06.08-swiftpm-prebuilt-libraries</id>
      <updated>Mon, 08 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist can now use prebuilt libraries from Swift Package Manager dependencies when generating projects. This is especially useful for macro-heavy packages such as SwiftSyntax, where support libraries are large and expensive to build from source.</p>
<p>When a package provides prebuilt metadata, Tuist wires the generated project to the prebuilt library search paths, include paths, and linker flags instead of generating the corresponding source targets. Projects that depend on Swift macros can keep the same package workflow while avoiding unnecessary SwiftSyntax support builds in the generated Xcode project.</p>
<p>There is nothing new to configure for packages that expose the prebuilt metadata. Run <code>tuist install</code> and <code>tuist generate</code> as usual, and Tuist will use the available SwiftPM prebuilts during graph loading and project generation.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Module Cache breakdown for local Xcode builds ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.04-module-cache-local-xcode-builds"/>
      <id>https://tuist.dev/changelog/2026.06.04-module-cache-local-xcode-builds</id>
      <updated>Thu, 04 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The Module Cache tab on a build run now appears for builds made straight from Xcode and reported with <code>tuist inspect build</code>, not only for <code>tuist test</code> and <code>tuist xcodebuild build</code>. You get the same breakdown of which modules were resolved from the local cache, the remote cache, or missed, together with the overall cache hit rate and each module's hash.</p>
<p>There is nothing new to configure. The breakdown reuses the graph that your last <code>tuist generate</code> already uploaded, so a build reported from Xcode points back at that generation instead of re-uploading anything on every build. The numbers reflect the project as it was generated, which is what you want for an incremental Xcode build.</p>
<p><img src="/marketing/images/changelog/2026.06.04-module-cache-local-xcode-builds.png" alt="Module Cache tab on a build run made from Xcode, showing a module resolved from the remote cache with a 100% cache hit rate" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Runner job steps and logs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.06.03-runner-job-steps-and-logs"/>
      <id>https://tuist.dev/changelog/2026.06.03-runner-job-steps-and-logs</id>
      <updated>Wed, 03 Jun 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Every Tuist Runner job now ships a <strong>Steps</strong> card and a <strong>Logs</strong> tab on its detail page. Each step expands to show only the lines that belong to it; <code>##[group]Run …</code> blocks fold the same way they do in GitHub's own log UI, and ANSI escapes are rendered as colour instead of <code>[36;1m…[0m</code> artefacts. Line numbers restart at 1 per step so you can reference &quot;line 14 of <code>Run tests</code>&quot; without doing global arithmetic.</p>
<p><img src="/marketing/images/changelog/2026.06.03-runner-job-steps-and-logs-steps.png" alt="A completed runner job's Steps card with two steps expanded — Set up job and Show environment — showing per-step line numbers, a foldable Run group, and the inline echo / hostname / kernel output rendered with ANSI colour" /></p>
<p>The new <strong>Logs</strong> tab is a live tail backed by ClickHouse: lines stream in while the job is running, full-log substring search works against every line (not just the tail you've loaded), and the <strong>Download logs</strong> button hands you a gzipped archive straight from S3 once the job completes. Timestamps are off by default and toggle to the full <code>Tue, 02 Jun 2026 20:26:29 GMT</code> format when you turn them on, so a copied line carries the date with it.</p>
<p><img src="/marketing/images/changelog/2026.06.03-runner-job-steps-and-logs-logs.png" alt="The Logs tab on the same job, showing the live-tail view with cyan-coloured script lines, plain command output, and grey ANSI-rendered annotations all flowing together in a single scrollable terminal-styled panel" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Exclude branches from test run filters ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.27-test-run-branch-exclusion-filter"/>
      <id>https://tuist.dev/changelog/2026.05.27-test-run-branch-exclusion-filter</id>
      <updated>Wed, 27 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Test run filters now support excluding branches that contain a specific substring. Use the new &quot;does not contain&quot; branch operator in the dashboard, or the <code>query=-git_branch~&quot;gh-readonly-queue&quot;</code> expression in the REST API and <code>list_test_runs</code> MCP tool, to hide merge queue runs such as <code>gh-readonly-queue</code> while keeping the rest of the test history visible.</p>
<p><img src="/marketing/images/changelog/2026.05.27-test-run-branch-exclusion-filter.png" alt="Test runs page with a branch filter set to does not contain" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Tuist Runners dashboard ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.27-runners-dashboard"/>
      <id>https://tuist.dev/changelog/2026.05.27-runners-dashboard</id>
      <updated>Wed, 27 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The Runners section on your account dashboard now surfaces the full picture of the workflow_jobs Tuist Runners executes on your behalf — a Runners landing page with total-jobs, p50/p90/p99 job and workflow duration widgets and recent activity; a Workflows page with per-workflow rollups (success rate, average duration, last run) and a detail page for each workflow; and a Jobs page with status / repository / platform / branch / conclusion filters, scatter or line charts for duration and queue time, and live-updating Running and Queued widgets.</p>
<p>Each workflow_job has its own detail page mirroring GitHub's <code>/&lt;owner&gt;/&lt;repo&gt;/actions/runs/&lt;run_id&gt;/job/&lt;job_id&gt;</code> shape (so the Tuist URL and the GitHub URL nest the same way), with a timeline card for queue / claim / runtime / total durations and a deep link back to GitHub.</p>
<p>Compute minutes — the metered signal we bill against — roll up from the Pod's wall-clock lifetime rather than GitHub's workflow_job timestamps, the same way Namespace and Blacksmith account for their runners. Every dashboard widget that aggregates duration is scoped by the same Repository / Workflow / Platform / date-range filters as the table below it, so the chart and the rows always represent the same window.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Sign agents in with auth.md ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.27-auth-md"/>
      <id>https://tuist.dev/changelog/2026.05.27-auth-md</id>
      <updated>Wed, 27 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now supports <a href="https://workos.com/auth-md">auth.md</a>, the open agent registration specification. Agents that implement the standard can connect to the Tuist MCP server directly: depending on the agent, Tuist either confirms the registration with the agent provider, or emails you a secure link with a six-digit code to read back to the agent. No browser-based OAuth round-trip required.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Account-scoped binaries for Tuist-managed Kura caches ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.27-account-scoped-binaries"/>
      <id>https://tuist.dev/changelog/2026.05.27-account-scoped-binaries</id>
      <updated>Wed, 27 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist-managed Kura caches can now authorize binaries scoped directly to an account, without requiring every cache artifact to belong to a project namespace. This gives account tokens first-class cache read and write grants for account-level binaries while keeping project tokens limited to project-scoped cache access.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Cache transfer, latency, and throughput widgets on the Xcode Cache page ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.21-xcode-cache-widgets"/>
      <id>https://tuist.dev/changelog/2026.05.21-xcode-cache-widgets</id>
      <updated>Thu, 21 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The Xcode Cache analytics page now shows Cache transfer, latency, and throughput widgets, each with a dropdown to switch between the combined value and the per-action split.</p>
<p><img src="/marketing/images/changelog/2026.05.21-xcode-cache-widgets.png" alt="Xcode Cache analytics with Avg. cache hit rate, Cache transfer, Read latency, and Cache throughput widgets above a line chart showing combined, read, and write latency series" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Module Cache tab on the build detail page ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.19-build-module-cache-tab"/>
      <id>https://tuist.dev/changelog/2026.05.19-build-module-cache-tab</id>
      <updated>Tue, 19 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The build detail page now surfaces a Module Cache tab when the build's associated command event recorded binary-cache data, bringing the same cache hit/miss breakdown, per-module hash, and JSON export already available on command and test run pages to xcodebuild runs.</p>
<p><img src="/marketing/images/changelog/2026.05.19-build-module-cache-tab.png" alt="Module Cache tab on a build detail page, showing cache hits, misses, hit rate, a stacked bar of local/remote/missed cacheable targets, and a per-module table with hit status and hash" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Outbound webhooks ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.15-webhooks"/>
      <id>https://tuist.dev/changelog/2026.05.15-webhooks</id>
      <updated>Fri, 15 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Register HTTPS endpoints on your account, pick the Tuist events each one should listen to, and have downstream systems react the moment a test case is created or updated, or a preview is created or deleted — post fresh builds into Jira, mirror flaky-test transitions into your incident tracker, no polling required.</p>
<p><img src="/marketing/images/changelog/2026.05.15-webhooks.png" alt="A webhook endpoint detail page showing the summary card with the destination URL and subscribed events, plus an event deliveries chart with total and failed counts over the last 7 days" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Exact timestamps in test history ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.15-test-history-timestamp-tooltips"/>
      <id>https://tuist.dev/changelog/2026.05.15-test-history-timestamp-tooltips</id>
      <updated>Fri, 15 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Test case timelines now show exact timestamps when you hover over relative dates. This makes it easier to compare when a test was marked flaky, muted, skipped, or first seen against the runs around it without leaving the dashboard.</p>
<p>The tooltip is available in both the Test History tab and the compact history section on the test case overview.</p>
<p><img src="/marketing/images/changelog/2026.05.15-test-history-timestamp-tooltips.png" alt="Test history timeline with a tooltip showing the exact timestamp for a flaky event" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ React to test case updates ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.12-test-updated-automations"/>
      <id>https://tuist.dev/changelog/2026.05.12-test-updated-automations</id>
      <updated>Tue, 12 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now build automations that react to individual test case changes the moment they happen, instead of waiting for the scheduled flakiness monitors to converge. Pick <strong>Test updated</strong> under <strong>When</strong> and tick the changes you care about — <code>Marked as flaky</code>, <code>Unmarked as flaky</code>, or state transitions to <code>Enabled</code> / <code>Muted</code> / <code>Skipped</code> — and the configured actions fire right away. The common shape: someone manually marks a flaky test, the automation immediately mutes it and pings Slack. Each automation-driven change also lands on the test case timeline attributed back to the rule that triggered it, so you can always see which automation moved a test and why.</p>
<p><img src="/marketing/images/changelog/2026.05.12-test-updated-automations.png" alt="The Create automation modal with the Test updated trigger, the Marked as flaky event subscription checked, and a Change state to Muted action" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Filter Selective Testing by hit ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.12-selective-testing-hit-filter"/>
      <id>https://tuist.dev/changelog/2026.05.12-selective-testing-hit-filter</id>
      <updated>Tue, 12 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The Selective Testing tab on test run and run detail pages now has a Hit filter next to the search box, matching the existing Module Cache experience. Narrow the table to Local hits, Remote hits, or Misses to quickly see which test modules actually ran and which were skipped thanks to selective testing.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Rolling-window automations ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.08-rolling-window-automations"/>
      <id>https://tuist.dev/changelog/2026.05.08-rolling-window-automations</id>
      <updated>Fri, 08 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Automations now offer a rolling-window option alongside the calendar window. Pick <strong>Last days</strong> to evaluate over a fixed period like <code>30d</code>, or <strong>Rolling window</strong> to evaluate over the last <em>N</em> runs of each test case — useful when test volume varies day-to-day and a fixed time window over- or under-reacts to recent activity. The same dropdown is wired into Recovery so you can wait either for X days or for N new runs without a re-trigger before recovery actions fire.</p>
<p><img src="/marketing/images/changelog/2026.05.08-rolling-window-automations.png" alt="The Create automation modal with the new Over dropdown set to Rolling window and Last N runs configured for both the trigger and recovery" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Quarantine mode breakdown on the Quarantined Tests page ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.07-quarantine-mode-breakdown"/>
      <id>https://tuist.dev/changelog/2026.05.07-quarantine-mode-breakdown</id>
      <updated>Thu, 07 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The analytics card on the Quarantined Tests page now splits the count into three widgets: total quarantined, <strong>Muted</strong>, and <strong>Skipped</strong>. Each widget has its own value, trend, and a chart that switches when you click it, so it is easier to see whether the suite is leaning on muted failures or actively excluding tests from execution. Selecting a widget pins the chart to that mode and persists the selection in the URL for sharing.</p>
<p><img src="/marketing/images/changelog/2026.05.07-quarantine-mode-breakdown.png" alt="Quarantined Tests analytics card with three widgets for total, muted, and skipped counts above the muted-mode chart" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Selective testing subhashes ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.06-selective-testing-subhashes"/>
      <id>https://tuist.dev/changelog/2026.05.06-selective-testing-subhashes</id>
      <updated>Wed, 06 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The Selective Testing tab on a test run now exposes the same per-target subhashes the Module Cache tab already had. Expand a row to see exactly which inputs went into the hash — sources, dependencies, environment variables, project and target settings, Info.plist, and the rest — making it straightforward to pinpoint the input that drifted when a previously cached test target shows up as a miss. The card also gains a <strong>Copy as JSON</strong> action that snapshots every selective testing target with its hashes, ready to paste into a ticket or diff against another run.</p>
<p><img src="/marketing/images/changelog/2026.05.06-selective-testing-subhashes.png" alt="Selective Testing tab with an expanded test target showing its subhashes alongside the Copy as JSON button" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Comparison-based automation conditions ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.05-flaky-cleanup-automations"/>
      <id>https://tuist.dev/changelog/2026.05.05-flaky-cleanup-automations</id>
      <updated>Tue, 05 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Automations now have a <strong>Comparison</strong> dropdown alongside <strong>When</strong>, with <code>Greater or equal</code>, <code>Greater than</code>, <code>Less than</code>, and <code>Less or equal</code>. Pair it with a &quot;Less than&quot; comparison and an <code>Unmark as flaky</code> action to clean up stale flaky labels — including ones set manually or by an automation you've since removed — without touching tests that are still flaking.</p>
<p><img src="/marketing/images/changelog/2026.05.05-flaky-cleanup-automations.png" alt="The Create automation modal configured to unmark tests as flaky when their flaky run count drops below 1 over the last 30 days" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ SCIM provisioning ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.05.04-scim-provisioning"/>
      <id>https://tuist.dev/changelog/2026.05.04-scim-provisioning</id>
      <updated>Mon, 04 May 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Organizations can now use SCIM 2.0 to let identity providers such as Okta provision, update, and deprovision Tuist members automatically. Generate a SCIM bearer token from the Authentication settings page, configure your IdP with the SCIM endpoint URL, and assign users or groups from your IdP to keep Tuist membership in sync.</p>
<p>SCIM provisioning works alongside SSO: SCIM manages membership lifecycle, while SSO controls sign-in. Deprovisioned members are removed from the organization, preserving their user record and historical work without disabling access to other Tuist organizations.</p>
<p><img src="/marketing/images/changelog/2026.05.04-scim-provisioning.png" alt="SCIM provisioning settings with the SCIM endpoint URL, token generation button, and token table" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ GitHub Enterprise Server support ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.28-github-enterprise-server"/>
      <id>https://tuist.dev/changelog/2026.04.28-github-enterprise-server</id>
      <updated>Tue, 28 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now integrates with self-hosted GitHub Enterprise Server (GHES) instances. Switch to the <strong>Enterprise server</strong> tab on your organization's integrations page, enter your GHES base URL, and click install — Tuist routes you through GitHub's <a href="https://docs.github.com/en/apps/sharing-github-apps/registering-a-github-app-from-a-manifest">App manifest flow</a>, which registers a fresh Tuist GitHub App on your GHES instance and hands the App's credentials back to Tuist. From there, comments, check runs, and repository connections all flow through your private GHES.</p>
<p>GitHub Apps are scoped to a single GitHub instance, so the github.com Tuist App can't be installed on a GHES instance — every customer registers their own copy. The credentials Tuist receives from the manifest exchange are stored encrypted per-installation. No env vars or Tuist server configuration changes are needed.</p>
<p><img src="/marketing/images/changelog/2026.04.28-github-enterprise-server.png" alt="GitHub Enterprise Server integration tab" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Skip mode for quarantined tests ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.27-skip-quarantine-mode"/>
      <id>https://tuist.dev/changelog/2026.04.27-skip-quarantine-mode</id>
      <updated>Mon, 27 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Quarantined tests now have two modes: <strong>Muted</strong> (runs, failures masked, the existing behaviour) and <strong>Skipped</strong> (excluded from execution; xcodebuild gets <code>-skip-testing</code> and the Gradle plugin filters with <code>excludeTestsMatching</code>). Pick the mode from the test case dropdown, filter by it on the Quarantined Tests page, or have an automation set it for you.</p>
<p><img src="/marketing/images/changelog/2026.04.27-skip-quarantine-mode.png" alt="Test case detail page with the state dropdown open on Enabled, Muted, and Skipped" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test case and flaky test count charts ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.23-test-count-charts"/>
      <id>https://tuist.dev/changelog/2026.04.23-test-count-charts</id>
      <updated>Thu, 23 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The Test Cases page has a new &quot;Test cases&quot; widget that plots the number of distinct test cases with at least one run in the preceding 14 days. The Flaky Tests page has a matching &quot;Flaky Tests&quot; widget that plots the number of tests currently flagged as flaky over time, alongside the existing &quot;Flaky Runs&quot; metric. Click either widget to swap the chart.</p>
<p><img src="/marketing/images/changelog/2026.04.23-test-count-charts.png" alt="Test Cases analytics with four widgets including a new &quot;Test cases&quot; widget and a chart of test case count over time" /></p>
<p><img src="/marketing/images/changelog/2026.04.23-test-count-charts-flaky.png" alt="Flaky Tests analytics with Flaky Tests and Flaky Runs widgets and a chart of flaky test count over time" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Automations for flaky tests ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.20-automations"/>
      <id>https://tuist.dev/changelog/2026.04.20-automations</id>
      <updated>Mon, 20 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Flaky-test handling used to be a fixed set of project toggles: auto-quarantine on or off, one threshold, one cooldown, one Slack channel. That made every team fit the same mould. Automations let you decide what &quot;flaky enough to act on&quot; means for <em>your</em> project, and what should happen when a test crosses that line — quarantine it, keep it green but flag it, ping a specific channel, or any combination — and how it should recover on its own. The engine is built to grow beyond flaky tests, so the same shape will cover more of your test-suite hygiene over time.</p>
<p><img src="/marketing/images/changelog/2026.04.20-automations.png" alt="The Create automation modal configured to auto-quarantine tests with a flakiness rate of 10% or more over the last 30 days, marking them flaky and recovering after 14 days without a trigger" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Devices on Test Runs ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.16-test-run-devices"/>
      <id>https://tuist.dev/changelog/2026.04.16-test-run-devices</id>
      <updated>Thu, 16 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Test run details now show every device or simulator the run executed on, alongside the existing Mac host info. For multi-destination test plans, each destination is listed with its platform and OS version so you can see at a glance whether tests ran on iPhone, iPad, Apple TV, Apple Watch, or Vision Pro.</p>
<p><img src="/marketing/images/changelog/2026.04.16-test-run-devices.png" alt="Test run details with a Devices row listing iPhone 17 and iPhone 17 Pro on iOS Simulator 26.4" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ HTTP Proxy Support ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.16-http-proxy-support"/>
      <id>https://tuist.dev/changelog/2026.04.16-http-proxy-support</id>
      <updated>Thu, 16 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When <code>HTTPS_PROXY</code> or <code>HTTP_PROXY</code> is set in the environment, Tuist now automatically routes the HTTP connections it manages (cache, previews, analytics, registry access, and the calls the Gradle plugin makes back to Tuist services) through that proxy. Nothing to configure: the CLI and Gradle plugin pick up the variable and use it.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Scatter Plot Charts ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.13-scatter-plot-charts"/>
      <id>https://tuist.dev/changelog/2026.04.13-scatter-plot-charts</id>
      <updated>Mon, 13 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Analytics dashboards now offer a scatter plot view alongside the existing line charts. Toggle between Line and Scatter plot to see individual data points for build durations, test run durations, cache hit rates, and selective testing effectiveness. Use the Group by dropdown to color dots by scheme, environment, or category. Click any dot to jump straight to the detail page.</p>
<p><img src="/marketing/images/changelog/2026.04.13-scatter-plot-charts.png" alt="Builds page showing scatter plot chart with individual build duration data points grouped by scheme" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Parameterized Test Support ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.08-parameterized-tests"/>
      <id>https://tuist.dev/changelog/2026.04.08-parameterized-tests</id>
      <updated>Wed, 08 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now supports parameterized tests from Swift Testing (<code>@Test(arguments:)</code>). Each argument variant is tracked individually with its own status, failures, and attachments, giving you per-argument visibility into what passed and what failed.</p>
<p><img src="/marketing/images/changelog/2026.04.08-parameterized-tests.png" alt="Test case run detail page showing parameterized test arguments with per-argument status and failure details" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Dashboard Browser Language ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.04.02-dashboard-browser-language"/>
      <id>https://tuist.dev/changelog/2026.04.02-dashboard-browser-language</id>
      <updated>Thu, 02 Apr 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The dashboard now adopts the authenticated user's browser language automatically when a matching dashboard locale is available. It currently recognizes English, Spanish, Japanese, Korean, Russian, Cantonese, Simplified Chinese, and Traditional Chinese.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Configurable Flaky Test Cooldown ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.03.27-flaky-cooldown-period"/>
      <id>https://tuist.dev/changelog/2026.03.27-flaky-cooldown-period</id>
      <updated>Fri, 27 Mar 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now configure how long a test must go without a flaky occurrence before its flaky flag is automatically cleared. Previously this was fixed at 14 days. Head to your project's <strong>Automations</strong> settings to set the <strong>Cooldown period</strong> to a value that works for your team.</p>
<p><img src="/marketing/images/changelog/2026.03.27-flaky-cooldown-period.png" alt="Flaky test cooldown period setting" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Failed Tests in PR Comments ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.03.19-failed-tests-pr-comment"/>
      <id>https://tuist.dev/changelog/2026.03.19-failed-tests-pr-comment</id>
      <updated>Thu, 19 Mar 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist's pull request comments now show which specific tests failed, including the failure message and a link to the source file in GitHub. This lets you identify and fix failures directly from the PR without opening the dashboard.</p>
<p><img src="/marketing/images/changelog/2026.03.19-failed-tests-pr-comment.png" alt="Failed Tests in PR Comment" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ SSO enforcement ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.03.13-sso-enforcement"/>
      <id>https://tuist.dev/changelog/2026.03.13-sso-enforcement</id>
      <updated>Fri, 13 Mar 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Organizations can now enforce SSO authentication. When enabled, members must verify their identity with the configured SSO provider before accessing organization resources. Users can still log in normally, but will be redirected to SSO when accessing an enforced organization.</p>
<p><img src="/marketing/images/changelog/2026.03.13-sso-enforcement.png" alt="SSO enforcement toggle in organization settings" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Machine metrics ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.03.10-machine-metrics"/>
      <id>https://tuist.dev/changelog/2026.03.10-machine-metrics</id>
      <updated>Tue, 10 Mar 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Build scans now include machine-level performance charts for CPU, memory, network, and disk usage. See exactly what your build machine was doing during the build to spot resource bottlenecks. Available for both Xcode and Gradle builds. For Xcode, run <code>tuist setup insights</code> to enable metric collection. Gradle builds collect metrics automatically through the plugin.</p>
<p><img src="/marketing/images/changelog/2026.03.10-machine-metrics.png" alt="Machine metrics charts" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Gradle requested tasks ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.03.10-gradle-requested-tasks"/>
      <id>https://tuist.dev/changelog/2026.03.10-gradle-requested-tasks</id>
      <updated>Tue, 10 Mar 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Gradle build details now show the tasks that were explicitly requested by the user (e.g., <code>assembleRelease</code>, <code>connectedAndroidTest</code>), making it easy to distinguish between different build types in CI environments with multiple builds.</p>
<p><img src="/marketing/images/changelog/2026.03.10-gradle-requested-tasks.png" alt="Gradle build details with requested tasks" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Bundle size thresholds ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.03.05-bundle-size-thresholds"/>
      <id>https://tuist.dev/changelog/2026.03.05-bundle-size-thresholds</id>
      <updated>Thu, 05 Mar 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Block pull requests when your app's bundle size grows beyond a configured limit. Tuist automatically creates GitHub Check Runs that compare the install or download size against a baseline branch. If the threshold is exceeded, you can accept the increase directly from the GitHub UI. Learn more in the <a href="https://tuist.dev/en/docs/guides/features/bundle-size#size-thresholds">bundle insights documentation</a>.</p>
<p><img src="/marketing/images/changelog/2026.03.05-bundle-size-thresholds.png" alt="Bundle size thresholds settings" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test Attachments ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.03.02-test-attachments"/>
      <id>https://tuist.dev/changelog/2026.03.02-test-attachments</id>
      <updated>Mon, 02 Mar 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>See attachments associated with a given test case run directly in the dashboard to understand why your tests might have failed as quickly as possible.</p>
<p><img src="/marketing/images/changelog/2026.03.02-test-attachments.png" alt="Test case run detail page showing image attachments from a snapshot test failure" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test Case Run Detail Page ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.02.27-test-case-run-detail"/>
      <id>https://tuist.dev/changelog/2026.02.27-test-case-run-detail</id>
      <updated>Fri, 27 Feb 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now click on any test case run to open a dedicated detail page with everything you need to understand what happened in that run.</p>
<p><img src="/marketing/images/changelog/2026.02.27-test-case-run-detail.png" alt="Test case run detail page showing overview with run details and flaky runs" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ MCP support for coding agents ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.02.17-mcp-support"/>
      <id>https://tuist.dev/changelog/2026.02.17-mcp-support</id>
      <updated>Tue, 17 Feb 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now supports the Model Context Protocol (MCP) over HTTP so coding agents can authenticate and interact with your Tuist data directly.</p>
<p>This first release includes:</p>
<ul>
<li>OAuth discovery and dynamic client registration for MCP clients.</li>
<li>A protected MCP endpoint at <code>/mcp</code> with proper bearer challenges.</li>
<li>Initial tools for test analysis workflows:
<ul>
<li><code>list_projects</code></li>
<li><code>list_test_cases</code> (with optional flaky filter)</li>
<li><code>get_test_case</code></li>
<li><code>get_test_run</code></li>
<li><code>get_test_case_run</code></li>
</ul>
</li>
<li>An initial prompt (<code>fix_flaky_test</code>) that guides agents through diagnosing and fixing flaky tests.</li>
</ul>
<p>This gives agents enough context and tooling to inspect flaky tests and drill down into run-level failure details from Tuist.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Crash Reports for Tests ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.02.16-crash-reports"/>
      <id>https://tuist.dev/changelog/2026.02.16-crash-reports</id>
      <updated>Mon, 16 Feb 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When a test crashes (e.g. force-unwrap of nil), Tuist now extracts the crash log from the xcresult bundle, parses it, and surfaces the stack trace directly in the test run dashboard. Each failure card shows the exception type, signal, and formatted crash thread frames so you can diagnose crashes without leaving your browser. The full <code>.ips</code> crash log is also available for download.</p>
<p>Additionally, the crash report is available in the CLI (<code>tuist test case show &lt;test-case-run-id&gt;</code>), which makes the crash report available to agents when for example fixing flaky tests.</p>
<p><img src="/marketing/images/changelog/2026.02.16-crash-reports.png" alt="Crash report in test run dashboard" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Bundle size alerts ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.02.16-bundle-size-alerts"/>
      <id>https://tuist.dev/changelog/2026.02.16-bundle-size-alerts</id>
      <updated>Mon, 16 Feb 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Get notified via Slack when your app's bundle size increases significantly. Configure alert rules to monitor install or download size changes on a specific branch, and catch unexpected size regressions before they reach your users.</p>
<p><img src="/marketing/images/changelog/2026.02.16-bundle-size-alerts.png" alt="Bundle size alert rule configuration" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Custom build metadata ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.02.04-custom-build-metadata"/>
      <id>https://tuist.dev/changelog/2026.02.04-custom-build-metadata</id>
      <updated>Wed, 04 Feb 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now attach custom metadata to your builds using environment variables. This includes both tags for categorization and key-value pairs for additional context like ticket numbers or CI runner information.</p>
<p>Use <code>TUIST_BUILD_TAGS</code> or <code>TUIST_BUILD_TAG_*</code> for tags, and <code>TUIST_BUILD_VALUE_*</code> for key-value pairs.</p>
<p>Filter your build analytics by tag in the dashboard:</p>
<p><img src="/marketing/images/changelog/2026.02.04-custom-build-metadata.png" alt="Build insights with tag filtering" /></p>
<p>View tags and custom values in the build detail page:</p>
<p><img src="/marketing/images/changelog/2026.02.04-custom-build-metadata-detail.png" alt="Build detail with tags and custom metadata" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Quarantined tests page ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.26-quarantined-tests-page"/>
      <id>https://tuist.dev/changelog/2026.01.26-quarantined-tests-page</id>
      <updated>Mon, 26 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>View all quarantined tests in your project at a glance. The new page shows analytics tracking the number of quarantined tests over time, and a searchable table with filtering options.</p>
<p><img src="/marketing/images/changelog/2026.01.26-quarantined-tests-page.png" alt="Quarantined tests page showing analytics chart and list of quarantined tests" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test History ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.23-test-history"/>
      <id>https://tuist.dev/changelog/2026.01.23-test-history</id>
      <updated>Fri, 23 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Track the complete history of state changes for each test case. The new Test History tab shows a timeline of events including when a test was first seen, when it was marked or unmarked as flaky, and when it was quarantined or unquarantined. Each event shows who made the change - whether it was done manually by a team member or automatically by Tuist.</p>
<p><img src="/marketing/images/changelog/2026.01.23-test-history.png" alt="Test case detail page showing the Test History tab with a timeline of events" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test quarantine ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.22-test-quarantine"/>
      <id>https://tuist.dev/changelog/2026.01.22-test-quarantine</id>
      <updated>Thu, 22 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Quarantine flaky tests to prevent them from blocking your CI pipeline. Tests can be automatically quarantined when marked as flaky, or manually quarantined from the test case detail page. Skip quarantined tests by running <code>xcodebuild test $(tuist test case list --skip-testing)</code>.</p>
<p><img src="/marketing/images/changelog/2026.01.22-test-quarantine.png" alt="Test case detail page showing a quarantined test with Unquarantine button" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ New Test Cases ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.19-new-test-cases"/>
      <id>https://tuist.dev/changelog/2026.01.19-new-test-cases</id>
      <updated>Mon, 19 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now marks test cases as &quot;New&quot; when they haven't been seen in CI on your project's default branch before.</p>
<p><img src="/marketing/images/changelog/2026.01.19-new-test-cases.png" alt="New test cases" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Flaky Tests in PR Comments ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.19-flaky-tests-pr-comment"/>
      <id>https://tuist.dev/changelog/2026.01.19-flaky-tests-pr-comment</id>
      <updated>Mon, 19 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Flaky tests detected during your CI runs are now surfaced directly in Tuist's pull request comments. The new &quot;Flaky Tests&quot; section shows a summary of flaky tests per test scheme with a link to view all flaky runs. This makes it easier to spot and address flaky tests without leaving your pull request.</p>
<p><img src="/marketing/images/changelog/2026.01.19-flaky-tests-pr-comment.png" alt="Flaky Tests in PR Comment" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Flaky test alerts ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.16-flaky-test-alerts"/>
      <id>https://tuist.dev/changelog/2026.01.16-flaky-test-alerts</id>
      <updated>Fri, 16 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Get notified via Slack the moment a test becomes flaky. Configure alert rules to trigger when flaky runs exceed your threshold, and receive instant notifications with direct links to investigate the flaky test case.</p>
<p><img src="/marketing/images/changelog/2026.01.16-flaky-test-alerts.png" alt="Slack notification showing a new flaky test detected" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Flaky Tests ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.15-flaky-tests"/>
      <id>https://tuist.dev/changelog/2026.01.15-flaky-tests</id>
      <updated>Thu, 15 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Identify and track flaky tests in your CI pipelines. Tuist automatically detects flaky tests when the same test produces different results on the same commit across CI runs, or when using Xcode's test retries. Browse all flaky tests in the new Flaky Tests page, see flakiness rates on individual test cases, and track flaky runs over time.</p>
<p><img src="/marketing/images/changelog/2026.01.15-flaky-tests.png" alt="Flaky Tests page" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Slack alert rules ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2026.01.08-slack-alert-rules"/>
      <id>https://tuist.dev/changelog/2026.01.08-slack-alert-rules</id>
      <updated>Thu, 08 Jan 2026 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Catch slower builds, cache degradation, or test slowdowns as soon as possible, minimizing the impact to your team's productivity. Alert rules proactively notify you via Slack when key metrics significantly regress.</p>
<p><img src="/marketing/images/changelog/2026.01.08-slack-alert-rules.png" alt="Slack alert notification showing build time regression" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Slack reports ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.30-slack-reports"/>
      <id>https://tuist.dev/changelog/2025.12.30-slack-reports</id>
      <updated>Tue, 30 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Stay on top of your project's build health with scheduled Slack reports. Get daily summaries delivered directly to your Slack channel with key metrics including build duration, test duration, cache hit rate, selective test effectiveness, and bundle size - all with trend indicators showing how your metrics compare to the previous period.</p>
<p><img src="/marketing/images/changelog/2025.12.30-slack-reports.png" alt="Daily Slack report showing build metrics" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Date picker for analytics ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.21-date-picker"/>
      <id>https://tuist.dev/changelog/2025.12.21-date-picker</id>
      <updated>Sun, 21 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>All analytical date ranges have been replaced with a date picker that lets you select the time range for your data instead of just last 7 days, last 30 days, or last 12 months. Choose from quick presets or define a custom date range using the calendar.</p>
<p><img src="/marketing/images/changelog/2025.12.21-date-picker.png" alt="Date picker showing presets and calendar selection" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Preview tracks and Tuist SDK for in-app updates ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.17-preview-tracks-and-sdk"/>
      <id>https://tuist.dev/changelog/2025.12.17-preview-tracks-and-sdk</id>
      <updated>Wed, 17 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We're introducing two new features to make managing and distributing previews even better.</p>
<h2><a href="#preview-tracks" aria-hidden="true" class="anchor" id="preview-tracks"></a>Preview tracks</h2>
<p>You can now organize your previews into named tracks like <code>beta</code>, <code>nightly</code>, or <code>internal</code>:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">bash</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">tuist share App --track beta</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-bash" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">share</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">App</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--track</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">beta</span>
</div></code></pre></div></div>
<p>Tracks make it easy to group previews by purpose and filter them in the dashboard.</p>
<h2><a href="#tuist-sdk" aria-hidden="true" class="anchor" id="tuist-sdk"></a>Tuist SDK</h2>
<p>The new <a href="https://github.com/tuist/sdk">Tuist SDK</a> enables your app to detect when a newer preview version is available and notify users - keeping testers on the latest build.</p>
<div class="code-window"><div data-part="bar"><div data-part="language">swift</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">import TuistSDK

struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .task {
                    TuistSDK(
                        fullHandle: &quot;myorg/myapp&quot;,
                        apiKey: &quot;your-api-key&quot;
                    )
                    .monitorPreviewUpdates()
                }
        }
    }
}</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-swift" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #cf222e;">import</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">TuistSDK</span>
</div><div class="l-line" data-line="2">
</div><div class="l-line" data-line="3"><span style="color: #cf222e;">struct</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #953800;">MyApp</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #953800;">App</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&lbrace;</span>
</div><div class="l-line" data-line="4"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #cf222e;">var</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">body</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #cf222e;">some</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #953800;">Scene</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&lbrace;</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #6639ba;">WindowGroup</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&lbrace;</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #6639ba;">ContentView</span><span style="color: #1f2328;">(</span><span style="color: #1f2328;">)</span>
</div><div class="l-line" data-line="7"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">task</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&lbrace;</span>
</div><div class="l-line" data-line="8"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #6639ba;">TuistSDK</span><span style="color: #1f2328;">(</span>
</div><div class="l-line" data-line="9"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">fullHandle</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">myorg/myapp</span><span style="color: #0a3069;">&quot;</span><span style="color: #1f2328;">,</span>
</div><div class="l-line" data-line="10"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">apiKey</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">&quot;</span><span style="color: #0a3069;">your-api-key</span><span style="color: #0a3069;">&quot;</span>
</div><div class="l-line" data-line="11"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">)</span>
</div><div class="l-line" data-line="12"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">monitorPreviewUpdates</span><span style="color: #1f2328;">(</span><span style="color: #1f2328;">)</span>
</div><div class="l-line" data-line="13"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&rbrace;</span>
</div><div class="l-line" data-line="14"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&rbrace;</span>
</div><div class="l-line" data-line="15"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&rbrace;</span>
</div><div class="l-line" data-line="16"><span style="color: #1f2328;">&rbrace;</span>
</div></code></pre></div></div>
<p>The SDK checks for updates within the same preview track. When you share with <code>--track beta</code>, the SDK notifies about newer builds on that track. Update checking is automatically disabled on simulators and App Store builds.</p>
<p>See the <a href="https://tuist.dev/en/docs/guides/features/previews">Previews documentation</a> for more details.</p>
<img src="/marketing/images/changelog/2025.12.17-preview-tracks-and-sdk.png" alt="Preview update alert" style="max-height: 700px;" /> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Unified inspect dependencies command ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.13-inspect-dependencies"/>
      <id>https://tuist.dev/changelog/2025.12.13-inspect-dependencies</id>
      <updated>Sat, 13 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We've added a new <code>tuist inspect dependencies</code> command that combines implicit and redundant dependency checks in a single invocation. This makes it ~2x faster by loading your project graph only once.</p>
<div class="code-window"><div data-part="bar"><div data-part="language">bash</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source"># Run both checks (default)
tuist inspect dependencies

# Run specific checks
tuist inspect dependencies --only implicit
tuist inspect dependencies --only redundant</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-bash" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #57606a;"># Run both checks (default)</span>
</div><div class="l-line" data-line="2"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">inspect</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">dependencies</span>
</div><div class="l-line" data-line="3">
</div><div class="l-line" data-line="4"><span style="color: #57606a;"># Run specific checks</span>
</div><div class="l-line" data-line="5"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">inspect</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">dependencies</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--only</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">implicit</span>
</div><div class="l-line" data-line="6"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">inspect</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">dependencies</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--only</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">redundant</span>
</div></code></pre></div></div>
<p>The previous <code>tuist inspect implicit-imports</code> and <code>tuist inspect redundant-imports</code> commands still work but are deprecated in favor of the new unified command.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ OIDC authentication for CI environments ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.11-oidc-authentication"/>
      <id>https://tuist.dev/changelog/2025.12.11-oidc-authentication</id>
      <updated>Thu, 11 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now authenticate with Tuist in CI environments using OpenID Connect (OIDC) tokens. This eliminates the need to manage long-lived secrets - just connect your GitHub repository to your Tuist project and run <code>tuist auth login</code> in your CI workflow.</p>
<div class="code-window"><div data-part="bar"><div data-part="language">yaml</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">name: Build
on: [push]

permissions:
  id-token: write
  contents: read

jobs:
  build:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: jdx/mise-action@v2
      - run: tuist auth login
      - run: tuist generate</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-yaml" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #116329;">name</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">Build</span>
</div><div class="l-line" data-line="2"><span style="color: #116329;">on</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">[</span><span style="color: #0a3069;">push</span><span style="color: #1f2328;">]</span>
</div><div class="l-line" data-line="3">
</div><div class="l-line" data-line="4"><span style="color: #116329;">permissions</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">id-token</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">write</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">contents</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">read</span>
</div><div class="l-line" data-line="7">
</div><div class="l-line" data-line="8"><span style="color: #116329;">jobs</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="9"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">build</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="10"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">runs-on</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">macos-latest</span>
</div><div class="l-line" data-line="11"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">steps</span><span style="color: #1f2328;">:</span>
</div><div class="l-line" data-line="12"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">-</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">uses</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">actions/checkout@v4</span>
</div><div class="l-line" data-line="13"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">-</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">uses</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">jdx/mise-action@v2</span>
</div><div class="l-line" data-line="14"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">-</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">run</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">auth</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">login</span>
</div><div class="l-line" data-line="15"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">-</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #116329;">run</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0a3069;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">generate</span>
</div></code></pre></div></div>
<p>OIDC authentication is currently supported on GitHub Actions, CircleCI, and Bitrise. See the <a href="https://tuist.dev/en/docs/guides/integrations/continuous-integration">CI integration documentation</a> for setup instructions.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Account Tokens ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.08-account-tokens"/>
      <id>https://tuist.dev/changelog/2025.12.08-account-tokens</id>
      <updated>Mon, 08 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now create fine-grained account tokens with specific scopes and project access. Unlike project tokens, account tokens let you control exactly which operations the token can perform and which projects it can access.</p>
<div class="code-window"><div data-part="bar"><div data-part="language">bash</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">tuist account tokens create my-account --scopes project:cache:read project:cache:write --name ci-cache-token --expires 1y</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-bash" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">account</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">tokens</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">create</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">my-account</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--scopes</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">project:cache:read</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">project:cache:write</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--name</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">ci-cache-token</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--expires</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">1y</span>
</div></code></pre></div></div>
<p>Account tokens support various scopes covering cache, previews, builds, tests, bundles, registry, and account management. You can also set expiration dates and restrict tokens to specific projects within an account.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Module Cache Subhashes ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.04-module-cache-subhashes"/>
      <id>https://tuist.dev/changelog/2025.12.04-module-cache-subhashes</id>
      <updated>Thu, 04 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>In details of generate and cache runs, you can now expand each module to see its subhashes and metadata, which is especially useful when debugging inconsisten hashes across environments.</p>
<p><img src="/marketing/images/changelog/2025.12.04-module-cache-subhashes.png" alt="Module cache subhashes" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Choose Username ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.12.01-choose-username"/>
      <id>https://tuist.dev/changelog/2025.12.01-choose-username</id>
      <updated>Mon, 01 Dec 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When signing up, you can now choose your username instead of the username being generated for you:</p>
<p><img src="/marketing/images/changelog/2025.12.01-choose-username.png" alt="Choose username page" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Tests ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.28-tests"/>
      <id>https://tuist.dev/changelog/2025.11.28-tests</id>
      <updated>Fri, 28 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The dashboard now includes a new &quot;Tests&quot; page that shows a summary of your tests – such as your average test duration, recent test runs, or your slowest test cases.</p>
<p><img src="/marketing/images/changelog/2025.11.28-tests.png" alt="Tests page" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test Cases ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.27-test-cases"/>
      <id>https://tuist.dev/changelog/2025.11.27-test-cases</id>
      <updated>Thu, 27 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We're adding a new &quot;Test Cases&quot; page that shows a summary of your test cases, including your individual slowest test cases. Additionally, you can see a history of runs for each individual test case in the test case detail page.</p>
<p><img src="/marketing/images/changelog/2025.11.27-test-cases-page.png" alt="Test Cases page" />
<img src="/marketing/images/changelog/2025.11.27-test-case-page.png" alt="Test Case page" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ CI test run links ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.26-test-ci-run"/>
      <id>https://tuist.dev/changelog/2025.11.26-test-ci-run</id>
      <updated>Wed, 26 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When viewing test details, we link to the corresponding CI run when the test was executed by a supported CI platform.</p>
<p><img src="/marketing/images/changelog/2025.11.26-test-ci-run.png" alt="Test CI run button" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Linking tests with builds ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.26-test-build-link"/>
      <id>https://tuist.dev/changelog/2025.11.26-test-build-link</id>
      <updated>Wed, 26 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When testing, we'll now show a link to the corresponding build and vice versa.</p>
<p><img src="/marketing/images/changelog/2025.11.26-test-build-link.png" alt="Build link" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Test Insights ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.20-test-insights"/>
      <id>https://tuist.dev/changelog/2025.11.20-test-insights</id>
      <updated>Thu, 20 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Track your test performance with the new Test Insights. Monitor test durations, identify slow tests, and quickly debug failed CI runs. See <a href="https://tuist.dev/en/docs/guides/features/build-insights#tests">documentation</a> to get started.</p>
<p><img src="/marketing/images/changelog/2025.11.20-test-insights.png" alt="Test Insights dashboard" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Module Cache analytics overview ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.17-module-cache-analytics-overview"/>
      <id>https://tuist.dev/changelog/2025.11.17-module-cache-analytics-overview</id>
      <updated>Mon, 17 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We added a new Module Cache page in the sidebar that gives you an overview of the module cache hit rate and the absolute number of hits and misses.</p>
<p><img src="/marketing/images/changelog/2025.11.17.module-cache-analytics-overview.png" alt="Xcode Cache overview" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Manage and remove members ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.17-manage-members"/>
      <id>https://tuist.dev/changelog/2025.11.17-manage-members</id>
      <updated>Mon, 17 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now manage and remove your organization members directly from the dashboard:</p>
<p><img src="/marketing/images/changelog/2025.11.17-manage-members.png" alt="Member management dropdown showing manage role and remove member options" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Cache hit rate widget ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.17-cache-hit-rate"/>
      <id>https://tuist.dev/changelog/2025.11.17-cache-hit-rate</id>
      <updated>Mon, 17 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The Compilation Optimizations tab now displays a cache hit rate widget, showing the percentage of modules successfully retrieved from the cache:</p>
<p><img src="/marketing/images/changelog/2025.11.17-cache-hit-rate.png" alt="Cache hit rate widget showing 72.2% cache efficiency" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Binary cache filtering ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.17-binary-cache-filtering"/>
      <id>https://tuist.dev/changelog/2025.11.17-binary-cache-filtering</id>
      <updated>Mon, 17 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The binary cache analytics now includes filtering by hit type, allowing you to quickly identify which modules were cached locally, remotely, or missed the cache entirely:</p>
<p><img src="/marketing/images/changelog/2025.11.17-binary-cache-filtering.png" alt="Binary cache filtering by hit type" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Xcode Cache analytics overview ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.14-xcode-cache-analytics-overview"/>
      <id>https://tuist.dev/changelog/2025.11.14-xcode-cache-analytics-overview</id>
      <updated>Fri, 14 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We added a new Xcode Cache page in the sidebar that gives you an overview of the Xcode cache hit rate and your overall download/upload.</p>
<p><img src="/marketing/images/changelog/2025.11.14.xcode-cache-analytics-overview.png" alt="Xcode Cache overview" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Xcode Cache build analytics ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.11-xcode-cache-analytics"/>
      <id>https://tuist.dev/changelog/2025.11.11-xcode-cache-analytics</id>
      <updated>Tue, 11 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The build insights now include detailed Xcode Cache analytics for a specific build, including:</p>
<ul>
<li>Cache summary: View task hits, misses, hit rate percentage, total downloads and uploads</li>
<li>Cacheable tasks breakdown: Visual representation of local, remote, and missed cache hits</li>
<li>Latency metrics: Average read and write latency for cache operations</li>
<li>Throughput metrics: See the build's download and upload throughput</li>
<li>...and more</li>
</ul>
<p><img src="/marketing/images/changelog/2025.11.11-xcode-cache-analytics.png" alt="Xcode Cache analytics tab showing cache summary and task breakdown" /></p>
<p><img src="/marketing/images/changelog/2025.11.11-cas-outputs.png" alt="CAS Outputs tab showing throughput and storage details" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Build duration percentile selector ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.07-build-duration-percentile-dropdown"/>
      <id>https://tuist.dev/changelog/2025.11.07-build-duration-percentile-dropdown</id>
      <updated>Fri, 07 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The build insights now include a dropdown for selecting the average or percentile value (p99, p90, p50) of build duration. You can also see the trend compared to the previous period to track performance changes over time based on the type of data you selected:</p>
<p><img src="/marketing/images/changelog/2025.11.07-build-duration-percentile-dropdown.png" alt="Build duration percentile selector dropdown" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Bundles filtering ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.11.03-bundles-filtering"/>
      <id>https://tuist.dev/changelog/2025.11.03-bundles-filtering</id>
      <updated>Mon, 03 Nov 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>The bundles page now includes filters which you can for example use to find new bundles with higher than expected install size:</p>
<p><img src="/marketing/images/changelog/2025.11.03-bundles-filtering.png" alt="Bundles interface with filtering options" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Storage region selection ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.31-storage-region"/>
      <id>https://tuist.dev/changelog/2025.10.31-storage-region</id>
      <updated>Fri, 31 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now choose where your artifacts, like module cache binaries, are stored for legal compliance. You can now select between storing artifacts in all regions, Europe only, or United States only from your account or organization settings:</p>
<p><img src="/marketing/images/changelog/2025.10.31-storage-region.png" alt="Image showing the new storage region selection feature in account settings" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Cache profiles for fine-grained control ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.31-cache-profiles"/>
      <id>https://tuist.dev/changelog/2025.10.31-cache-profiles</id>
      <updated>Fri, 31 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now control how aggressively targets are replaced with cached binaries when generating projects using cache profiles. Choose from built-in profiles like <code>only-external</code> (default), <code>all-possible</code>, or <code>none</code>, or define your own custom profiles in Tuist Config.</p>
<p>Read more about cache profiles in our <a href="https://tuist.dev/en/docs/guides/features/cache/module-cache#cache-profiles">documentation</a>.</p>
<p><img src="/marketing/images/changelog/2025.10.31-cache-profiles.png" alt="Illustration showing cache profile options" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ SSO login page ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.30-sso-login"/>
      <id>https://tuist.dev/changelog/2025.10.30-sso-login</id>
      <updated>Thu, 30 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We've added a dedicated SSO login page that makes it easier for enterprise customers to authenticate with the Okta SSO:</p>
<p><img src="/marketing/images/changelog/2025.10.30-sso-login.png" alt="Image showing the new SSO login page" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Include Xcode cache analytics as part of build insights ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.29-build-xcode-cache-insights"/>
      <id>https://tuist.dev/changelog/2025.10.29-build-xcode-cache-insights</id>
      <updated>Wed, 29 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>As part of <a href="https://tuist.dev/en/docs/guides/features/build-insights#insights">build insights</a>, you will now also get access to the <a href="https://tuist.dev/en/docs/guides/features/cache/xcode-cache#xcode-cache">Xcode cache</a> analytics for individual builds:</p>
<p><img src="/marketing/images/changelog/2025.10.29-xcode-cache-analytics.png" alt="Image showing the new Xcode cache analytics" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Skip unit tests with tuist test ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.23-skip-unit-tests"/>
      <id>https://tuist.dev/changelog/2025.10.23-skip-unit-tests</id>
      <updated>Thu, 23 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We've had already had a way to easily skip UI tests with a single flag in <code>tuist test</code>:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">bash</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">tuist test --skip-ui-tests</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-bash" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">test</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--skip-ui-tests</span>
</div></code></pre></div></div>
<p>Now, we're <a href="https://github.com/tuist/tuist/pull/8291">bringing</a> the some convenience flag for unit tests:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">bash</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">tuist test --skip-unit-tests</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-bash" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">test</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--skip-unit-tests</span>
</div></code></pre></div></div>
<p>This way, you can easily have separate CI pipelines for UI and unit tests, such as when you don't want to run your UI tests for every PR but instead nightly.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Support for Xcode compilation cache ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.22-xcode-cache"/>
      <id>https://tuist.dev/changelog/2025.10.22-xcode-cache</id>
      <updated>Wed, 22 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now improve your incremental and clean build times in just a couple of minutes, regardless of your Xcode setup, with the new Xcode compilation cache <a href="https://developer.apple.com/documentation/xcode-release-notes/xcode-26-release-notes#New-Features">introduced in Xcode 26</a> that we've added support for.</p>
<p>Read more about it in our <a href="/marketing/blog/2025/10/22/xcode-cache.md">blog post</a>.</p>
<p><img src="/marketing/images/blog/2025/10/22/xcode-cache/og.jpg" alt="Illustration of Xcode compilation cache" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ New landing page ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.22-new-landing-page"/>
      <id>https://tuist.dev/changelog/2025.10.22-new-landing-page</id>
      <updated>Wed, 22 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>For a long time, our landing page design was outdated and not aligned with our dashboard. We've completely redesigned it to make our design more consistent and we hope you'll love the result as much as we do:</p>
<p><img src="/marketing/images/changelog/2025.10.22-landing-page.png" alt="Image showing the new landing page" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Filter bundles by type ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.06-bundles-type"/>
      <id>https://tuist.dev/changelog/2025.10.06-bundles-type</id>
      <updated>Mon, 06 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist allows you to multiple types of bundles:</p>
<ul>
<li>.app</li>
<li>.ipa</li>
<li>.xcarchive</li>
</ul>
<p>However, each bundle type can have a slightly different bundle size. While we recommend to primarily use the <code>.ipa</code> bundle type as the install and download size is the most accurate representation of what users will experience, the other types might be useful to recognize a spike in the bundle size early.</p>
<p>To streamline seeing a graph for a specific bundle type, we've added the option to filter by .ipa, .app, or .xcarchive:</p>
<p><img src="/marketing/images/changelog/2025.10.06-bundles-type.png" alt="Image showing the dashboard with the bundle type filter" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Direct links to CI runs from the build detail ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.10.02-ci-run-links"/>
      <id>https://tuist.dev/changelog/2025.10.02-ci-run-links</id>
      <updated>Thu, 02 Oct 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When viewing build details, you can now navigate directly to the corresponding CI run with a single click. We've added a &quot;CI Run&quot; button when the build was executed by a supported CI platform.</p>
<p>This feature supports:</p>
<ul>
<li>GitHub Actions</li>
<li>GitLab CI</li>
<li>Bitrise</li>
<li>CircleCI</li>
<li>Buildkite</li>
<li>Codemagic</li>
</ul>
<p><img src="/marketing/images/changelog/2025.10.02-ci-run-links.gif" alt="GIF showing navigating to the associated CI run" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Track build configuration in build insights ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.09.30-build-insights-configuration"/>
      <id>https://tuist.dev/changelog/2025.09.30-build-insights-configuration</id>
      <updated>Tue, 30 Sep 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>If your schemes inherit build settings from a target, you can now track the build configuration in build insights:</p>
<p><img src="/marketing/images/changelog/2025.09.30-build-with-configuration.png" alt="Image showing a build detail with build configuration" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Streamlined GitHub integration for projects ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.09.29-github-integration"/>
      <id>https://tuist.dev/changelog/2025.09.29-github-integration</id>
      <updated>Mon, 29 Sep 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We've streamlined the installation of the Tuist GitHub app. You can now install it in your organization's integrations tab in the Tuist dashboard and link your repositories directly there to get Tuist insights in your pull requests.</p>
<p><img src="/marketing/images/changelog/2025.09.29-github-integration.png" alt="GitHub integration project connection interface" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Scroll through latest previews in the menu bar app ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.09.26-menu-bar-scroll"/>
      <id>https://tuist.dev/changelog/2025.09.26-menu-bar-scroll</id>
      <updated>Fri, 26 Sep 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>When you have too many previews in the menu bar app, you can now scroll through them to find the preview you need.</p>
<p><img src="/marketing/images/changelog/2025.09.26-menu-bar-scroll.gif" alt="GIF showing scroll in the menu bar app" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Create organizations from the dashboard ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.09.24-create-organization"/>
      <id>https://tuist.dev/changelog/2025.09.24-create-organization</id>
      <updated>Wed, 24 Sep 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now supports creating organizations from the dashboard in addition to the previous flow through the CLI.
Select the &quot;Create organization&quot; option from the organization dropdown in the header to try it out.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Manage project bundles from the CLI (v4.63.0+) ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.08.15-bundles-cli"/>
      <id>https://tuist.dev/changelog/2025.08.15-bundles-cli</id>
      <updated>Fri, 15 Aug 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Tuist now provides CLI commands to view and inspect bundles uploaded to your projects:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">bash</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source"># List bundles in the current project
tuist bundle list

# List bundles in a specific project
tuist bundle list --project account/project

# Output bundle list as JSON for scripting
tuist bundle list --json

# View detailed information about a specific bundle
tuist bundle show {id}</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-bash" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #57606a;"># List bundles in the current project</span>
</div><div class="l-line" data-line="2"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">bundle</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">list</span>
</div><div class="l-line" data-line="3">
</div><div class="l-line" data-line="4"><span style="color: #57606a;"># List bundles in a specific project</span>
</div><div class="l-line" data-line="5"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">bundle</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">list</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--project</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">account/project</span>
</div><div class="l-line" data-line="6">
</div><div class="l-line" data-line="7"><span style="color: #57606a;"># Output bundle list as JSON for scripting</span>
</div><div class="l-line" data-line="8"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">bundle</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">list</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">--json</span>
</div><div class="l-line" data-line="9">
</div><div class="l-line" data-line="10"><span style="color: #57606a;"># View detailed information about a specific bundle</span>
</div><div class="l-line" data-line="11"><span style="color: #0550ae;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">bundle</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">show</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">&lbrace;</span><span style="color: #1f2328;">id</span><span style="color: #1f2328;">&rbrace;</span>
</div></code></pre></div></div>
<p>These commands handle authentication and session management automatically, making it easy to integrate bundle operations into your CI/CD pipelines and custom automation workflows.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Keeping source targets for binaries ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.08.14-keeping-binaries-as-sources"/>
      <id>https://tuist.dev/changelog/2025.08.14-keeping-binaries-as-sources</id>
      <updated>Thu, 14 Aug 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>You can now preserve source targets when using binary caching, giving you the flexibility to debug and inspect cached dependencies when needed.</p>
<h3><a href="#enable-the-feature" aria-hidden="true" class="anchor" id="enable-the-feature"></a>Enable the Feature</h3>
<p>Add this setting to your <code>Tuist.swift</code> configuration:</p>
<div class="code-window"><div data-part="bar"><div data-part="language">swift</div><div data-part="copy"><span data-part="copy-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.998L3.76172 15.1631C3.78374 15.3261 3.83754 15.4839 3.9209 15.627C4.03212 15.8178 4.19189 15.9756 4.38379 16.085C4.74359 16.2901 4.86822 16.7486 4.66309 17.1084C4.45792 17.4681 4.0004 17.5937 3.64062 17.3887C3.21927 17.1485 2.86917 16.8009 2.625 16.3818C2.38086 15.9628 2.25119 15.4869 2.25 15.002V5ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span><span data-part="copy-check-icon"><svg class="icon icon-tabler icons-tabler-outline icon-tabler-copy-check" stroke-linejoin="round" stroke-linecap="round" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.25 9.66699C20.25 9.41536 20.2007 9.16608 20.1045 8.93359C20.0082 8.70101 19.8665 8.48953 19.6885 8.31152C19.5105 8.13351 19.299 7.99185 19.0664 7.89551C18.8339 7.79926 18.5846 7.75 18.333 7.75H9.66699C9.15858 7.75 8.67103 7.95202 8.31152 8.31152C7.95202 8.67103 7.75 9.15858 7.75 9.66699V18.333C7.75 18.5846 7.79926 18.8339 7.89551 19.0664C7.99185 19.299 8.13351 19.5105 8.31152 19.6885C8.48953 19.8665 8.70101 20.0082 8.93359 20.1045C9.16608 20.2007 9.41536 20.25 9.66699 20.25H18.333C18.5846 20.25 18.8339 20.2007 19.0664 20.1045C19.299 20.0082 19.5105 19.8665 19.6885 19.6885C19.8665 19.5105 20.0082 19.299 20.1045 19.0664C20.2007 18.8339 20.25 18.5846 20.25 18.333V9.66699ZM2.25 5C2.25 3.48579 3.48579 2.25 5 2.25H15C15.5155 2.25 15.9635 2.38613 16.3438 2.66211C16.7077 2.92632 16.9591 3.28304 17.1553 3.63574C17.3565 3.99773 17.2262 4.45398 16.8643 4.65527C16.5023 4.8565 16.046 4.72623 15.8447 4.36426C15.6989 4.10214 15.5759 3.95803 15.4629 3.87598C15.3661 3.80573 15.2344 3.75 15 3.75H5C4.31421 3.75 3.75 4.31421 3.75 5V14.999L3.76074 15.1641C3.78254 15.3268 3.83675 15.4841 3.91992 15.627C4.03101 15.8176 4.19094 15.9759 4.38281 16.085C4.74274 16.2896 4.8686 16.7474 4.66406 17.1074C4.45944 17.4676 4.00174 17.5933 3.6416 17.3887C3.21964 17.1489 2.8684 16.8021 2.62402 16.3828C2.37966 15.9634 2.25051 15.4864 2.25 15.001V5ZM16.4697 11.4697C16.7626 11.1768 17.2374 11.1768 17.5303 11.4697C17.8232 11.7626 17.8232 12.2374 17.5303 12.5303L13.5303 16.5303C13.2374 16.8232 12.7626 16.8232 12.4697 16.5303L10.4697 14.5303C10.1768 14.2374 10.1768 13.7626 10.4697 13.4697C10.7626 13.1768 11.2374 13.1768 11.5303 13.4697L13 14.9395L16.4697 11.4697ZM21.75 18.333C21.75 18.7817 21.6619 19.2261 21.4902 19.6406C21.3185 20.0552 21.0663 20.4317 20.749 20.749C20.4317 21.0663 20.0552 21.3185 19.6406 21.4902C19.2261 21.6619 18.7817 21.75 18.333 21.75H9.66699C9.21831 21.75 8.77391 21.6619 8.35938 21.4902C7.9448 21.3185 7.56827 21.0663 7.25098 20.749C6.93368 20.4317 6.68149 20.0552 6.50977 19.6406C6.33808 19.2261 6.25 18.7817 6.25 18.333V9.66699C6.25 8.76075 6.61017 7.89179 7.25098 7.25098C7.89179 6.61017 8.76075 6.25 9.66699 6.25H18.333C18.7817 6.25 19.2261 6.33808 19.6406 6.50977C20.0552 6.68149 20.4317 6.93368 20.749 7.25098C21.0663 7.56827 21.3185 7.9448 21.4902 8.35938C21.6619 8.77391 21.75 9.21831 21.75 9.66699V18.333Z" fill="currentColor"/>
</svg>
</span></div></div><template data-part="copy-source">// Tuist.swift
import ProjectDescription

let tuist = Tuist(
  project: .tuist(
    cacheOptions: .options(
      keepSourceTargets: true
    )
  )
)</template><div data-part="code"><pre class="lumis" style="color: #1f2328; background-color: #ffffff;"><code class="language-swift" translate="no" tabindex="0"><div class="l-line" data-line="1"><span style="color: #57606a;">// Tuist.swift</span>
</div><div class="l-line" data-line="2"><span style="color: #cf222e;">import</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">ProjectDescription</span>
</div><div class="l-line" data-line="3">
</div><div class="l-line" data-line="4"><span style="color: #cf222e;">let</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">tuist</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">=</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #6639ba;">Tuist</span><span style="color: #1f2328;">(</span>
</div><div class="l-line" data-line="5"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">project</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">tuist</span><span style="color: #1f2328;">(</span>
</div><div class="l-line" data-line="6"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">cacheOptions</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">.</span><span style="color: #6639ba;">options</span><span style="color: #1f2328;">(</span>
</div><div class="l-line" data-line="7"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">keepSourceTargets</span><span style="color: #1f2328;">:</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #0550ae;">true</span>
</div><div class="l-line" data-line="8"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">)</span>
</div><div class="l-line" data-line="9"><span data-code-whitespace="true">&nbsp;</span><span data-code-whitespace="true">&nbsp;</span><span style="color: #1f2328;">)</span>
</div><div class="l-line" data-line="10"><span style="color: #1f2328;">)</span>
</div></code></pre></div></div>
<h3><a href="#what-you-get" aria-hidden="true" class="anchor" id="what-you-get"></a>What You Get</h3>
<p>When enabled, Tuist generates:</p>
<ul>
<li>Your regular workspace with cached binaries for fast builds</li>
<li>An additional <code>-Cached</code> scheme containing all source targets isolated from the main dependency graph</li>
</ul>
<p>This allows you to switch between optimized binary builds and full source access without regenerating your project.</p>
<p><strong>Note:</strong> These source targets are for inspection and debugging only. If you modify their sources, you'll need to regenerate your project to reconcile the changes with the dependency graph.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Support for buildable folders in generated projects ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.08.11-buildable-folders"/>
      <id>https://tuist.dev/changelog/2025.08.11-buildable-folders</id>
      <updated>Mon, 11 Aug 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Apple introduced buildable folders in <a href="https://dimillian.medium.com/why-you-should-use-xcode-16-buildable-folders-instead-of-groups-6f438611914d">Xcode 16</a> to reduce git conflicts in <code>.pbxproj</code> files. While we initially postponed support since these conflicts weren't frequent in our workflow, user feedback revealed another compelling benefit: buildable folders eliminate the need to regenerate projects when files are added outside of Xcode's UI—particularly valuable for automated agents and CI/CD pipelines.</p>
<p>Based on this feedback, we've now added support for buildable folders. If you're currently using <code>Target.sources</code> and <code>Target.resources</code>, you can migrate to the new <code>Target.buildableFolders</code> property to define buildable folders for your targets.</p>
<p>Note: Xcode's synchronized groups (the underlying implementation of buildable folders) support &quot;exceptions&quot;—files or folders that can be excluded from synchronization. While we don't support exceptions yet, we'll add this feature based on user demand.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Continuous Releases with git cliff ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2025.01.22-continuous-releases"/>
      <id>https://tuist.dev/changelog/2025.01.22-continuous-releases</id>
      <updated>Wed, 22 Jan 2025 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We're excited to announce a major improvement to our release process: <strong>continuous releases</strong> for the Tuist CLI, Server, and macOS app. This change represents a key step in reducing the dependency of our contributors and users on the project maintainers.</p>
<h2><a href="#whats-changed" aria-hidden="true" class="anchor" id="whats-changed"></a>What's Changed</h2>
<p>Previously, releasing new versions of Tuist required manual intervention from maintainers. This created bottlenecks and delays in getting new features and fixes to users. Now, we've implemented an automated release pipeline that:</p>
<ul>
<li><strong>Automatically detects releasable changes</strong> using <a href="https://git-cliff.org/">git cliff</a>{:target="_blank"}, a changelog generator that understands conventional commits</li>
<li><strong>Triggers releases on every push to main</strong> when there are meaningful changes to release</li>
<li><strong>Generates changelogs automatically</strong> based on commit messages, properly categorized and formatted</li>
<li><strong>Handles the entire release process</strong> including building, packaging, creating GitHub releases, and updating Homebrew formulas</li>
</ul>
<h2><a href="#how-it-works" aria-hidden="true" class="anchor" id="how-it-works"></a>How It Works</h2>
<p>Each component (CLI, Server, and macOS app) now has its own release pipeline that:</p>
<ol>
<li>Uses git cliff to analyze commits since the last release</li>
<li>Filters commits by scope (e.g., <code>feat(cli):</code> for CLI changes, <code>feat(app):</code> for app changes)</li>
<li>Determines if there are releasable changes by comparing with the current changelog</li>
<li>Automatically calculates the next version number</li>
<li>Builds and releases the component if changes are detected</li>
</ol>
<h2><a href="#benefits-for-contributors" aria-hidden="true" class="anchor" id="benefits-for-contributors"></a>Benefits for Contributors</h2>
<ul>
<li><strong>Faster feedback loop</strong>: Your contributions reach users as soon as they're merged</li>
<li><strong>No waiting for maintainers</strong>: Releases happen automatically when criteria are met</li>
<li><strong>Transparent process</strong>: The changelog clearly shows what changed in each release</li>
<li><strong>Better commit discipline</strong>: Encourages meaningful commit messages that translate to clear release notes</li>
</ul>
<h2><a href="#benefits-for-users" aria-hidden="true" class="anchor" id="benefits-for-users"></a>Benefits for Users</h2>
<ul>
<li><strong>More frequent updates</strong>: Get access to new features and fixes faster</li>
<li><strong>Predictable releases</strong>: Every meaningful change triggers a release</li>
<li><strong>Clear communication</strong>: Automatically generated changelogs show exactly what changed</li>
<li><strong>Stable releases</strong>: Only changes that pass all tests and checks are released</li>
</ul>
<h2><a href="#technical-details" aria-hidden="true" class="anchor" id="technical-details"></a>Technical Details</h2>
<p>We're using git cliff with custom configurations for each component:</p>
<ul>
<li><strong>CLI</strong>: Filters commits with <code>(cli)</code> scope or no scope</li>
<li><strong>Server</strong>: Filters commits with <code>(server)</code> scope</li>
<li><strong>App</strong>: Filters commits with <code>(app)</code> scope</li>
</ul>
<p>The pipelines run on GitHub Actions and handle everything from version bumping to updating package managers like Homebrew.</p>
<p>This automation represents our commitment to making Tuist more accessible and reducing barriers for both contributors and users. We believe that great developer tools should be easy to contribute to and quick to deliver value.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Noora ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2024.12.10-noora"/>
      <id>https://tuist.dev/changelog/2024.12.10-noora</id>
      <updated>Tue, 10 Dec 2024 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>Over the years of developing the <a href="https://github.com/tuist/tuist">Tuist CLI</a>{:target="_blank"}, we’ve come to appreciate the value of consistent UI patterns across all aspects of the tool (like commands) in delivering an outstanding developer experience. Unfortunately, this is an area we overlooked for a while. Recently, we’ve taken steps to address this, not only to enhance the Tuist CLI experience but also to establish a foundation for other CLIs we’re building. Our goal is to ensure they all share a unified Tuist look and feel, while also adhering to excellent accessibility and UI practices.</p>
<p>To achieve this, we’ve introduced <a href="https://github.com/tuist/noora">Noora</a>{:target="_blank"}—a design system for building CLIs in Swift. This Swift package provides themable components designed specifically for CLI interfaces. While the current selection of components is limited, we plan to gradually expand it by extracting more components from our work at Tuist.</p>
<p>If you’re building a CLI in Swift, we encourage you to explore <a href="https://noora.tuist.dev">the documentation</a>{:target="_blank"}. We’d love to hear your feedback and welcome contributions to make Noora even better. If there’s a specific component you need, feel free to open an issue or submit a PR!</p>
<p><img src="/marketing/images/changelog/2024.12.10-noora/single-choice.gif" alt="A GIF that shows an example of a single-choice prompt component where the person can select among a list of options moving using the cursors" /></p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Billing improvements ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2024.11.20-billing-improvements"/>
      <id>https://tuist.dev/changelog/2024.11.20-billing-improvements</id>
      <updated>Wed, 20 Nov 2024 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>We've improved the account billing page to make managing your subscription clearer and more straightforward:</p>
<ul>
<li>You can now see your current usage and the corresponding charges.</li>
<li>The end of your billing period is clearly displayed.</li>
<li>Usage calculations are more transparent than ever.</li>
<li>Your payment method now accurately reflects the state of your subscription.</li>
<li>A direct link to manage your Stripe subscription is now available.</li>
</ul> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ Simpler pricing ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2024.11.19-price-changes"/>
      <id>https://tuist.dev/changelog/2024.11.19-price-changes</id>
      <updated>Tue, 19 Nov 2024 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>In response to recent <a href="https://community.tuist.io/t/presenting-our-new-website-and-domain-tuist-dev/183/3">feedback on our pricing</a> (thanks <a href="https://community.tuist.io/u/vijaytholpadi">Vijay</a>) and to better align with <a href="/blog/2024/11/05/our-pricing-philosophy">our philosophy</a>, we've made some updates to our pricing model.</p>
<p>Transitioning from Tuist Air to Tuist Pro is now simpler—just add a payment method, and you'll only be charged for usage exceeding the defined thresholds. To make everything clearer, we've included <a href="/pricing">a table</a> outlining how the usage of various features is measured.</p>
<p>Looking ahead, we plan to provide examples, an estimation calculator, and tools to help you set usage limits, so you can stay within your budget and enjoy peace of mind.</p> ]]></content>
    </entry>
  
    <entry>
      <title><![CDATA[ New website ]]></title>
      <author>
        <name>Tuist</name>
      </author>
      <link href="https://tuist.dev/changelog/2024.11.08-new-website"/>
      <id>https://tuist.dev/changelog/2024.11.08-new-website</id>
      <updated>Fri, 08 Nov 2024 00:00:00 +0000</updated>
      <content type="html"><![CDATA[ <p>This is the first changelog entry for the new website.
We've redesigned the website to reflect the new direction of Tuist,
and embody the new visual identity.</p>
<p>As part of this work we've also:</p>
<ul>
<li>Improved the accessibility of the website.</li>
<li>Embraced <a href="https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data">structured data markup</a> to enhance the search results.</li>
<li>Improved the <a href="/pricing">pricing</a> page to make it easier for users to understand the different plans and features.</li>
<li>Added a <a href="/changelog">changelog</a> page to keep users updated with the latest features and improvements.</li>
<li>Consolidated the dashboard and marketing pages under <a href="https://tuist.dev">tuist.dev</a> since <a href="https://every.to/p/the-disappearance-of-an-internet-domain">.io domains might disappear</a></li>
</ul>
<p>The design of the website has been done by <a href="https://guinda.studio">Guinda Studio</a> and it's publicly available.</p> ]]></content>
    </entry>
  
</feed>
