639 Commits

Author SHA1 Message Date
Thomas Eizinger
b79b5702f0 chore(gui-client): specify correct path to frontend (#9444)
When debugging logging is enabled, we see that Tauri currently iterates
through several possible paths of the frontend page before it finds the
one that it actually renders. We can fix this by specifying the URL
without the directory path.

```
2025-06-06T08:23:06.538Z DEBUG tauri::manager: Asset `src-frontend/index.html` not found; fallback to src-frontend/index.html.html
2025-06-06T08:23:06.538Z DEBUG tauri::manager: Asset `src-frontend/index.html` not found; fallback to src-frontend/index.html/index.html
2025-06-06T08:23:06.539Z DEBUG tauri::manager: Asset `src-frontend/index.html` not found; fallback to index.html
2025-06-06T08:23:06.566Z DEBUG firezone_gui_client::controller: Starting new instance of `Controller`
```
2025-06-06 11:02:34 +00:00
Thomas Eizinger
b0d594100d fix(gui-client): don't busy-loop when update checker is disabled (#9445)
The GUI client's update checker is a task that runs concurrently to the
main event-loop of the client. When a new update is found, it sends a
notification through a channel. When the update checker is disabled via
MDM, this channel is instantly closed, resulting in `None` being read as
part of the event-loop in the client.

Previously, we would then return
`Poll::Ready(EventloopTick::UpdateNotification(None))` and then simply
ignore this event. This however is wrong. Returning `Poll::Ready` means
that the future needs to be polled again, resulting in an effective
busy-loop where we constantly emit the above event and then ignore it.
Due to the priority order that was previously defined, this led to us
never checking another channel: The one where we receive deep-links from
2nd GUI instances.

As a result, signing into the client when the update checker was
disabled does not work and instead, the newly launched instance hangs
because it can never send over the deep-link.

Resolves: #9420
2025-06-06 11:01:47 +00:00
dependabot[bot]
192e7e040e build(deps): bump @vitejs/plugin-react from 4.5.0 to 4.5.1 in /rust/gui-client (#9433)
Bumps
[@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react)
from 4.5.0 to 4.5.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/releases"><code>@​vitejs/plugin-react</code>'s
releases</a>.</em></p>
<blockquote>
<h2>plugin-react@4.5.1</h2>
<h3>Add explicit semicolon in preambleCode <a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/485">#485</a></h3>
<p>This fixes an edge case when using HTML minifiers that strips line
breaks aggressively.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md"><code>@​vitejs/plugin-react</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>4.5.1 (2025-06-03)</h2>
<h3>Add explicit semicolon in preambleCode <a
href="https://redirect.github.com/vitejs/vite-plugin-react/pull/485">#485</a></h3>
<p>This fixes an edge case when using HTML minifiers that strips line
breaks aggressively.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2f32052659"><code>2f32052</code></a>
release: plugin-react@4.5.1</li>
<li><a
href="88585dbd60"><code>88585db</code></a>
fix: add explicit semicolon in preambleCode (<a
href="https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react/issues/485">#485</a>)</li>
<li>See full diff in <a
href="https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.5.1/packages/plugin-react">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@vitejs/plugin-react&package-manager=npm_and_yarn&previous-version=4.5.0&new-version=4.5.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-06 07:59:48 +00:00
dependabot[bot]
ca2b8fa10c build(deps): bump @sentry/react from 9.24.0 to 9.27.0 in /rust/gui-client (#9432)
Bumps [@sentry/react](https://github.com/getsentry/sentry-javascript)
from 9.24.0 to 9.27.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/releases"><code>@​sentry/react</code>'s
releases</a>.</em></p>
<blockquote>
<h2>9.27.0</h2>
<ul>
<li>feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li>
<li>feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li>
<li>feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li>
<li>feat(react-router): Export wrappers for server loaders and actions
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li>
<li>fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li>
<li>fix(react-router): Conditionally add <code>ReactRouterServer</code>
integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@​sentry/browser</code></td>
<td>23.43 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> - with treeshaking flags</td>
<td>23.2 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing)</td>
<td>37.46 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay)</td>
<td>74.68 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay) - with
treeshaking flags</td>
<td>67.94 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay with
Canvas)</td>
<td>79.33 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay, Feedback)</td>
<td>91.13 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Feedback)</td>
<td>39.77 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. sendFeedback)</td>
<td>28.03 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. FeedbackAsync)</td>
<td>32.8 KB</td>
</tr>
<tr>
<td><code>@​sentry/react</code></td>
<td>25.15 KB</td>
</tr>
<tr>
<td><code>@​sentry/react</code> (incl. Tracing)</td>
<td>39.41 KB</td>
</tr>
<tr>
<td><code>@​sentry/vue</code></td>
<td>27.69 KB</td>
</tr>
<tr>
<td><code>@​sentry/vue</code> (incl. Tracing)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td><code>@​sentry/svelte</code></td>
<td>23.45 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.88 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>37.63 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>72.66 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>77.99 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>72.67 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>111.42 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>222.72 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>235.25 KB</td>
</tr>
<tr>
<td><code>@​sentry/nextjs</code> (client)</td>
<td>41.03 KB</td>
</tr>
<tr>
<td><code>@​sentry/sveltekit</code> (client)</td>
<td>37.93 KB</td>
</tr>
<tr>
<td><code>@​sentry/node</code></td>
<td>146.75 KB</td>
</tr>
<tr>
<td><code>@​sentry/node</code> - without tracing</td>
<td>96.03 KB</td>
</tr>
<tr>
<td><code>@​sentry/aws-serverless</code></td>
<td>121.19 KB</td>
</tr>
</tbody>
</table>
<h2>9.26.0</h2>
<ul>
<li>feat(react-router): Re-export functions from
<code>@sentry/react</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li>
<li>fix(nextjs): Skip re instrumentating on generate phase of
experimental build mode (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li>
<li>fix(node): Ensure adding sentry-trace and baggage headers via
SentryHttpInstrumentation doesn't crash (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md"><code>@​sentry/react</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.27.0</h2>
<ul>
<li>feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li>
<li>feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li>
<li>feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li>
<li>feat(react-router): Export wrappers for server loaders and actions
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li>
<li>fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li>
<li>fix(react-router): Conditionally add <code>ReactRouterServer</code>
integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li>
</ul>
<h2>9.26.0</h2>
<ul>
<li>feat(react-router): Re-export functions from
<code>@sentry/react</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li>
<li>fix(nextjs): Skip re instrumentating on generate phase of
experimental build mode (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li>
<li>fix(node): Ensure adding sentry-trace and baggage headers via
SentryHttpInstrumentation doesn't crash (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li>
</ul>
<h2>9.25.1</h2>
<ul>
<li>fix(otel): Don't ignore child spans after the root is sent (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16416">#16416</a>)</li>
</ul>
<h2>9.25.0</h2>
<h3>Important Changes</h3>
<ul>
<li><strong>feat(browser): Add option to ignore <code>mark</code> and
<code>measure</code> spans (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16443">#16443</a>)</strong></li>
</ul>
<p>This release adds an option to <code>browserTracingIntegration</code>
that lets you ignore
<code>mark</code> and <code>measure</code> spans created from the
<code>performance.mark(...)</code> and
<code>performance.measure(...)</code> browser APIs:</p>
<pre lang="js"><code>Sentry.init({
  integrations: [
    Sentry.browserTracingIntegration({
ignorePerformanceApiSpans: ['measure-to-ignore', /mark-to-ignore/],
    }),
  ],
});
</code></pre>
<h3>Other Changes</h3>
<ul>
<li>feat(browser): Export getTraceData from the browser sdks (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16433">#16433</a>)</li>
<li>feat(node): Add <code>includeServerName</code> option (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16442">#16442</a>)</li>
<li>fix(nuxt): Remove setting <code>@sentry/nuxt</code> external (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16444">#16444</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="650abf323b"><code>650abf3</code></a>
release: 9.27.0</li>
<li><a
href="5a672c90ea"><code>5a672c9</code></a>
Merge pull request <a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16489">#16489</a>
from getsentry/prepare-release/9.27.0</li>
<li><a
href="9d1c05ecf3"><code>9d1c05e</code></a>
meta(changelog): Update changelog for 9.27.0</li>
<li><a
href="6d61be0337"><code>6d61be0</code></a>
fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16484">#16484</a>)</li>
<li><a
href="0a7b915fd7"><code>0a7b915</code></a>
ref(vue): Clarify Vue tracing (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16487">#16487</a>)</li>
<li><a
href="b1fd4a1d47"><code>b1fd4a1</code></a>
test(vue): Add tests for Vue tracing mixins (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16486">#16486</a>)</li>
<li><a
href="497b76e23a"><code>497b76e</code></a>
feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16472">#16472</a>)</li>
<li><a
href="cfa8d41aa2"><code>cfa8d41</code></a>
feat(react-router): Export wrappers for server loaders and actions (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16481">#16481</a>)</li>
<li><a
href="bfe5e888b1"><code>bfe5e88</code></a>
feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16455">#16455</a>)</li>
<li><a
href="45088a2ab7"><code>45088a2</code></a>
feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16476">#16476</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-javascript/compare/9.24.0...9.27.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@sentry/react&package-manager=npm_and_yarn&previous-version=9.24.0&new-version=9.27.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-06 07:59:32 +00:00
dependabot[bot]
30991327bc build(deps): bump @types/react-dom from 19.1.5 to 19.1.6 in /rust/gui-client (#9427)
Bumps
[@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)
from 19.1.5 to 19.1.6.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/react-dom&package-manager=npm_and_yarn&previous-version=19.1.5&new-version=19.1.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-06 07:32:02 +00:00
dependabot[bot]
d1551de09a build(deps): bump @types/node from 22.15.29 to 22.15.30 in /rust/gui-client (#9434)
Bumps
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
from 22.15.29 to 22.15.30.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/node&package-manager=npm_and_yarn&previous-version=22.15.29&new-version=22.15.30)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-06 07:31:48 +00:00
dependabot[bot]
c3ad2cab42 build(deps): bump @sentry/core from 9.24.0 to 9.27.0 in /rust/gui-client (#9436)
Bumps [@sentry/core](https://github.com/getsentry/sentry-javascript)
from 9.24.0 to 9.27.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/releases"><code>@​sentry/core</code>'s
releases</a>.</em></p>
<blockquote>
<h2>9.27.0</h2>
<ul>
<li>feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li>
<li>feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li>
<li>feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li>
<li>feat(react-router): Export wrappers for server loaders and actions
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li>
<li>fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li>
<li>fix(react-router): Conditionally add <code>ReactRouterServer</code>
integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>@​sentry/browser</code></td>
<td>23.43 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> - with treeshaking flags</td>
<td>23.2 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing)</td>
<td>37.46 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay)</td>
<td>74.68 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay) - with
treeshaking flags</td>
<td>67.94 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay with
Canvas)</td>
<td>79.33 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Tracing, Replay, Feedback)</td>
<td>91.13 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. Feedback)</td>
<td>39.77 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. sendFeedback)</td>
<td>28.03 KB</td>
</tr>
<tr>
<td><code>@​sentry/browser</code> (incl. FeedbackAsync)</td>
<td>32.8 KB</td>
</tr>
<tr>
<td><code>@​sentry/react</code></td>
<td>25.15 KB</td>
</tr>
<tr>
<td><code>@​sentry/react</code> (incl. Tracing)</td>
<td>39.41 KB</td>
</tr>
<tr>
<td><code>@​sentry/vue</code></td>
<td>27.69 KB</td>
</tr>
<tr>
<td><code>@​sentry/vue</code> (incl. Tracing)</td>
<td>39.27 KB</td>
</tr>
<tr>
<td><code>@​sentry/svelte</code></td>
<td>23.45 KB</td>
</tr>
<tr>
<td>CDN Bundle</td>
<td>24.88 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing)</td>
<td>37.63 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay)</td>
<td>72.66 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback)</td>
<td>77.99 KB</td>
</tr>
<tr>
<td>CDN Bundle - uncompressed</td>
<td>72.67 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing) - uncompressed</td>
<td>111.42 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay) - uncompressed</td>
<td>222.72 KB</td>
</tr>
<tr>
<td>CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed</td>
<td>235.25 KB</td>
</tr>
<tr>
<td><code>@​sentry/nextjs</code> (client)</td>
<td>41.03 KB</td>
</tr>
<tr>
<td><code>@​sentry/sveltekit</code> (client)</td>
<td>37.93 KB</td>
</tr>
<tr>
<td><code>@​sentry/node</code></td>
<td>146.75 KB</td>
</tr>
<tr>
<td><code>@​sentry/node</code> - without tracing</td>
<td>96.03 KB</td>
</tr>
<tr>
<td><code>@​sentry/aws-serverless</code></td>
<td>121.19 KB</td>
</tr>
</tbody>
</table>
<h2>9.26.0</h2>
<ul>
<li>feat(react-router): Re-export functions from
<code>@sentry/react</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li>
<li>fix(nextjs): Skip re instrumentating on generate phase of
experimental build mode (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li>
<li>fix(node): Ensure adding sentry-trace and baggage headers via
SentryHttpInstrumentation doesn't crash (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li>
</ul>
<h2>Bundle size 📦</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Size</th>
</tr>
</thead>
</table>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md"><code>@​sentry/core</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>9.27.0</h2>
<ul>
<li>feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16455">#16455</a>)</li>
<li>feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16476">#16476</a>)</li>
<li>feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16472">#16472</a>)</li>
<li>feat(react-router): Export wrappers for server loaders and actions
(<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16481">#16481</a>)</li>
<li>fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16484">#16484</a>)</li>
<li>fix(react-router): Conditionally add <code>ReactRouterServer</code>
integration (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16470">#16470</a>)</li>
</ul>
<h2>9.26.0</h2>
<ul>
<li>feat(react-router): Re-export functions from
<code>@sentry/react</code> (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16465">#16465</a>)</li>
<li>fix(nextjs): Skip re instrumentating on generate phase of
experimental build mode (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16410">#16410</a>)</li>
<li>fix(node): Ensure adding sentry-trace and baggage headers via
SentryHttpInstrumentation doesn't crash (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16473">#16473</a>)</li>
</ul>
<h2>9.25.1</h2>
<ul>
<li>fix(otel): Don't ignore child spans after the root is sent (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16416">#16416</a>)</li>
</ul>
<h2>9.25.0</h2>
<h3>Important Changes</h3>
<ul>
<li><strong>feat(browser): Add option to ignore <code>mark</code> and
<code>measure</code> spans (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16443">#16443</a>)</strong></li>
</ul>
<p>This release adds an option to <code>browserTracingIntegration</code>
that lets you ignore
<code>mark</code> and <code>measure</code> spans created from the
<code>performance.mark(...)</code> and
<code>performance.measure(...)</code> browser APIs:</p>
<pre lang="js"><code>Sentry.init({
  integrations: [
    Sentry.browserTracingIntegration({
ignorePerformanceApiSpans: ['measure-to-ignore', /mark-to-ignore/],
    }),
  ],
});
</code></pre>
<h3>Other Changes</h3>
<ul>
<li>feat(browser): Export getTraceData from the browser sdks (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16433">#16433</a>)</li>
<li>feat(node): Add <code>includeServerName</code> option (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16442">#16442</a>)</li>
<li>fix(nuxt): Remove setting <code>@sentry/nuxt</code> external (<a
href="https://redirect.github.com/getsentry/sentry-javascript/pull/16444">#16444</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="650abf323b"><code>650abf3</code></a>
release: 9.27.0</li>
<li><a
href="5a672c90ea"><code>5a672c9</code></a>
Merge pull request <a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16489">#16489</a>
from getsentry/prepare-release/9.27.0</li>
<li><a
href="9d1c05ecf3"><code>9d1c05e</code></a>
meta(changelog): Update changelog for 9.27.0</li>
<li><a
href="6d61be0337"><code>6d61be0</code></a>
fix(browser): Ignore unrealistically long INP values (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16484">#16484</a>)</li>
<li><a
href="0a7b915fd7"><code>0a7b915</code></a>
ref(vue): Clarify Vue tracing (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16487">#16487</a>)</li>
<li><a
href="b1fd4a1d47"><code>b1fd4a1</code></a>
test(vue): Add tests for Vue tracing mixins (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16486">#16486</a>)</li>
<li><a
href="497b76e23a"><code>497b76e</code></a>
feat(react-router): Add component annotation plugin (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16472">#16472</a>)</li>
<li><a
href="cfa8d41aa2"><code>cfa8d41</code></a>
feat(react-router): Export wrappers for server loaders and actions (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16481">#16481</a>)</li>
<li><a
href="bfe5e888b1"><code>bfe5e88</code></a>
feat(node): Expand how vercel ai input/outputs can be set (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16455">#16455</a>)</li>
<li><a
href="45088a2ab7"><code>45088a2</code></a>
feat(node): Switch to new semantic conventions for Vercel AI (<a
href="https://redirect.github.com/getsentry/sentry-javascript/issues/16476">#16476</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-javascript/compare/9.24.0...9.27.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@sentry/core&package-manager=npm_and_yarn&previous-version=9.24.0&new-version=9.27.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-06 07:30:55 +00:00
Jamil
ab01a1ef91 chore: bump gui to 1.5.1 (#9440) 2025-06-05 21:30:08 +00:00
Thomas Eizinger
7b0e33f0a2 fix(gui-client): allow legacy settings to parse new format (#9418)
As part of the introduction of General settings, we split up "Advanced
settings" and also renamed one of the fields. Upon first start, the
settings are migrated to the new format. What we failed to notice is
that one the next subsequent start, the legacy settings struct will fail
to parse the now migrated configuration and fall back to the default.
This then appears as if the settings are not getting saved.

Resolves: #9417

---------

Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com>
2025-06-05 16:05:31 +00:00
Jamil
51e13d453f chore: publish GUI client 1.5.0 (#9413)
Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2025-06-05 09:06:28 +00:00
Thomas Eizinger
f6799fa16c chore(gui-client): rename log file of tunnel service (#9411)
This is a left-over from the rename of the background service for the
GUI client from IPC to Tunnel service.
2025-06-05 06:20:02 +00:00
Jamil
c3eb880ee5 fix(ci): Keep indentation of TSLINK_BUILD output (#9407)
When building the gui client with `TSLINK_BUILD=true`, the library
outputs using 4 spaces for indent. These are however currently checked
into git with 2 spaces per indent, which causes the Tauri workflow to
fail because it checks for a pristine git directory after the build.

Unfortunately #9383 doesn't fix this issue because it has nothing to do
with prettier in CI.

Fixes
https://github.com/firezone/firezone/actions/runs/15457631114/job/43512703266
2025-06-04 21:07:11 -07:00
Jamil
339af8d7ab refactor(gui-client): embed fonts directly (#9398)
This will prevent the fonts from failing to load if the user has no
internet connection.

Tested.
2025-06-04 21:43:23 +00:00
Thomas Eizinger
d6ecda59a1 feat(gui-client): introduce "General" settings page (#9381)
This PR introduces "General" settings for the GUI client. The "Settings"
menu item in the GUI is split into two sub-sections. The menu item is
collapsible but open by default.

|General|Advanced|
|---|---|

|![](https://github.com/user-attachments/assets/190cd23a-7ff6-4097-9eb5-a4ccf4a9c4a0)|![](https://github.com/user-attachments/assets/d538b749-9fe0-4995-84fc-b5c88132ede6)|

"Connect on start" and "Account slug" can both be MDM managed. The
autostart functionality is implemented via the Windows Registry.

---------

Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com>
2025-06-04 15:50:18 +00:00
Thomas Eizinger
6ef079357c feat(connlib): add basic analytics about new sessions (#9379)
This PR adds basic analytics to `connlib` by sending two events to
PostHog:

1. `new_session` which is sent every time we establish a new session
with a Firezone backend. This could be our production or staging
instance but also a session to an on-premise installation of Firezone.
We include the API URL in the event payload to further distinguish
these.
2. `$identify` to link the client + version as well as the operating
system to the user. The user is identified by the Firezone ID.

---------

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-06-04 06:03:29 +00:00
Thomas Eizinger
7bf98e2fdc refactor(gui-client): improve error handling of Tauri commands (#9380)
Introducing a dedicated `Error` type allows us to directly serialise
`anyhow::Error`s to the GUI. Those will then be reported to Sentry on
the TS side.
2025-06-03 21:39:04 +00:00
Thomas Eizinger
1914ea7076 refactor(rust): remove forced callback indirection (#9362)
As relict from very early designs of `connlib`, the `Callbacks` trait is
still present and defines how the host app receives events from a
running `Session`. Callbacks are not a great design pattern however
because they force the running code, i.e. `connlib`s event-loop to
execute unknown code. For example, if that code panics, all of `connlib`
is taken down. Additionally, not all consumers may want to receive
events via callbacks. The GUI and headless client for example already
have their own event-loop in which they process all kinds of things.
Having to deal with the `Callbacks` interface introduces an odd
indirection here.

To fix this, we instead return an `EventStream` when constructing a
`Session`. This essentially aligns the API of `Session` with that of a
channel. You receive two handles, one for sending in commands and one
for receiving events. A `Session` will automatically spawn itself onto
the given runtime so progress is made even if one does not poll on these
channel handles.

This greatly simplifies the code:

- We get to delete the `Callbacks` interface.
- We can delete the threaded callback adapter. This was only necessary
because we didn't want to block `connlib` with the handling of the
event. By using a channel for events, this is automatically guaranteed.
- The GUI and headless client can directly integrate the event handling
in their event-loop, without having to create an indirection with a
channel.
- It is now clear that only the Apple and Android FFI layers actually
use callbacks to communicate these events.
- We net-delete 100 LoC
2025-06-02 11:28:04 +00:00
Thomas Eizinger
b7b296a102 ci: apply prettier to all files (#9356)
Resolves: #8940
2025-06-02 11:12:54 +00:00
Thomas Eizinger
3ad7848e8f feat(gui-client): add Sentry to the frontend (#9316)
With an increased amount of complexity in the frontend of the GUI
client, it pays off to initialise the Sentry React SDK to catch any
errors that might occur. In particular, any failing commands that we
issue to the backend will be caught that way as those rejected
`Promise`s will surface as uncaught exceptions.

Similar to the backend, Sentry in the frontend is only initialised for
known environments, i.e. our production and staging deployments of
Firezone. For on-premise installations, Sentry is disabled.

Related: #6138
2025-06-02 05:59:26 +00:00
dependabot[bot]
3312639ed2 build(deps): bump @types/node from 22.15.3 to 22.15.29 in /rust/gui-client (#9324)
Bumps
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
from 22.15.3 to 22.15.29.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@types/node&package-manager=npm_and_yarn&previous-version=22.15.3&new-version=22.15.29)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-02 05:41:18 +00:00
Thomas Eizinger
e05c98bfca ci: update to new cargo sort release (#9354)
The latest release now also sorts workspace dependencies, as well as
different dependency sections. Keeping these things sorted reduces the
chances of merge conflicts when multiple PRs edit these files.
2025-06-02 02:01:09 +00:00
Thomas Eizinger
499a67f44b chore(gui-client): generate TypeScript interfaces from Rust (#9353)
The frontend of the GUI client is written in TypeScript and communicates
with the backend via event listeners. Currently, we only have
type-safety within either of those parts of the codebase but not across
it. The payloads of these events are JSON-encoded. Any change to this
interface therefore needs to be applied on either end.

To avoid this, we add `tslink` to the GUI client which generates
TypeScript interfaces from Rust structs. We still check those into Git
into order to make local builds easy (otherwise every dev would have to
set `TSLINK_BUILD=true` on their machine). Our Tauri CI build already
has a check to ensure the Git workspace isn't modified after building so
any changes to these generated files will fail CI.

This adds a bit more type-safety to the codebase and makes refactorings
on the GUI client easier.
2025-06-02 01:56:06 +00:00
Thomas Eizinger
56ff469f03 refactor(gui-client): merge all windows into a single view (#9295)
This PR refactors the GUI clients frontend into a single window with a
sidebar. The functionality remains the same but we do make minor UI
improvements on the way. To pull the entire refactor off, we now use
`react` and `flowbite-react` for the GUI. All the communication with the
backend is moved towards one-way commands and events. That means, the
flow is always:

- Backend emits events to update frontend
- Frontend triggers actions in the backend that may or may not result in
further events

This allows us to decouple the GUI from knowing about which side-effects
change what parts of the state. Instead, it simply updates whenever it
receives an event.

- The previous "Advanced Settings" screen is now split into two parts:
Settings and Diagnostics. Later, we will add a "General settings" page
here.
- The tray menu remains identical to the current one. When the user
clicks "Settings" or "About", we open the window and navigate to the
corresponding page.
- The app and git version are now directly embedded in the frontend,
simplifying the interaction between the frontend and the backend
further.

|Before|After|
|---|---|

|![](https://github.com/user-attachments/assets/7e8039c8-d589-495e-92b4-1742f9eb01b2)|![](https://github.com/user-attachments/assets/363184b3-4fcf-45c2-82d2-c466902759ef)|

|![](https://github.com/user-attachments/assets/88163522-cafc-4ad4-90cd-be2e77073b7f)|![](https://github.com/user-attachments/assets/106ef921-38a7-4603-add9-8b0875064737)|

|![](https://github.com/user-attachments/assets/a4bef4b0-5b29-43dd-aea6-0babd3b4ec9e)|![](https://github.com/user-attachments/assets/b84f1b51-c35c-48cc-9335-c653eee597ff)

|![](https://github.com/user-attachments/assets/f0473a0a-cdba-4a15-af98-d97ef422dbc5)|![](https://github.com/user-attachments/assets/ddced01b-6f44-4241-80ea-038a4740915b)|
2025-05-31 01:57:40 +00:00
dependabot[bot]
1f5d28592b build(deps): bump the tailwind group in /rust/gui-client with 3 updates (#9258)
Bumps the tailwind group in /rust/gui-client with 3 updates:
[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli),
[@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite)
and
[tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss).

Updates `@tailwindcss/cli` from 4.1.5 to 4.1.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases"><code>@​tailwindcss/cli</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v4.1.7</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Migrate bare values to named values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li>
<li>Upgrade: Added cache to improve template migration performance (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Allow <code>_</code> before numbers during candidate extraction (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li>
<li>Prevent duplicate suggestions when using <code>@theme</code> and
<code>@utility</code> together (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li>
<li>Ensure that media queries within <code>::before</code> and
<code>::after</code> pseudo selectors create valid CSS rules in
production builds (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li>
<li>Ensure that the standalone CLI does not leave temporary files behind
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li>
<li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary
values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li>
<li>Ignore custom variants using <code>:merge(…)</code> selectors in
legacy JS plugins (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li>
<li>Ensure classes containing <code>.</code> are properly extracted from
Clojure files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li>
<li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li>
<li>Upgrade: Change casing of utilities with named values to kebab-case
to match updated theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li>
<li>Upgrade: Don't migrate strings that match utility names in Vue
attribute bindings other than <code>class</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h2>v4.1.6</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Automatically convert arbitrary values to named values when
possible (e.g. <code>h-[1lh]</code> to <code>h-lh</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17854">#17854</a>)</li>
<li>Upgrade: Update dependencies in parallel for improved performance
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17898">#17898</a>)</li>
<li>Add detailed logging about <code>@source</code> directives,
discovered files and scanned files when using <code>DEBUG=*</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17952">#17952</a>)</li>
<li>Add support for generating source maps in development (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17775">#17775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure negative arbitrary <code>scale</code> values generate
negative values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>)</li>
<li>Fix HAML extraction with embedded Ruby (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17846">#17846</a>)</li>
<li>Don't scan files for utilities when using <code>@reference</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17836">#17836</a>)</li>
<li>Fix incorrectly replacing <code>_</code> with <code> </code> in
arbitrary modifier shorthand <code>bg-red-500/(--my_opacity)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17889">#17889</a>)</li>
<li>Don't scan <code>.log</code> files for classes by default (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>)</li>
<li>Ensure that custom utilities applying other custom utilities don't
swallow nested <code>@apply</code> rules (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17925">#17925</a>)</li>
<li>Download platform specific package if
<code>optionalDependencies</code> are skipped (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17929">#17929</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md"><code>@​tailwindcss/cli</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>[4.1.7] - 2025-05-15</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Migrate bare values to named values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li>
<li>Upgrade: Added cache to improve template migration performance (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Allow <code>_</code> before numbers during candidate extraction (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li>
<li>Prevent duplicate suggestions when using <code>@theme</code> and
<code>@utility</code> together (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li>
<li>Ensure that media queries within <code>::before</code> and
<code>::after</code> pseudo selectors create valid CSS rules in
production builds (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li>
<li>Ensure that the standalone CLI does not leave temporary files behind
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li>
<li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary
values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li>
<li>Ignore custom variants using <code>:merge(…)</code> selectors in
legacy JS plugins (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li>
<li>Ensure classes containing <code>.</code> are properly extracted from
Clojure files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li>
<li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li>
<li>Upgrade: Change casing of utilities with named values to kebab-case
to match updated theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li>
<li>Upgrade: Don't migrate strings that match utility names in Vue
attribute bindings other than <code>class</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h2>[4.1.6] - 2025-05-09</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Automatically convert arbitrary values to named values when
possible (e.g. <code>h-[1lh]</code> to <code>h-lh</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17854">#17854</a>)</li>
<li>Upgrade: Update dependencies in parallel for improved performance
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17898">#17898</a>)</li>
<li>Add detailed logging about <code>@source</code> directives,
discovered files and scanned files when using <code>DEBUG=*</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17952">#17952</a>)</li>
<li>Add support for generating source maps in development (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17775">#17775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure negative arbitrary <code>scale</code> values generate
negative values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>)</li>
<li>Fix HAML extraction with embedded Ruby (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17846">#17846</a>)</li>
<li>Don't scan files for utilities when using <code>@reference</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17836">#17836</a>)</li>
<li>Fix incorrectly replacing <code>_</code> with <code> </code> in
arbitrary modifier shorthand <code>bg-red-500/(--my_opacity)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17889">#17889</a>)</li>
<li>Don't scan <code>.log</code> files for classes by default (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>)</li>
<li>Ensure that custom utilities applying other custom utilities don't
swallow nested <code>@apply</code> rules (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17925">#17925</a>)</li>
<li>Download platform specific package if
<code>optionalDependencies</code> are skipped (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17929">#17929</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="74e084ad27"><code>74e084a</code></a>
Prepare v4.1.7 release (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/18040">#18040</a>)</li>
<li><a
href="2d139984da"><code>2d13998</code></a>
Prepare v4.1.6 release (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/17951">#17951</a>)</li>
<li><a
href="56b22bb1d3"><code>56b22bb</code></a>
Add support for source maps (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/17775">#17775</a>)</li>
<li><a
href="d8c4df8001"><code>d8c4df8</code></a>
Write to log file when using <code>DEBUG=*</code> (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/17906">#17906</a>)</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.1.7/packages/@tailwindcss-cli">compare
view</a></li>
</ul>
</details>
<br />

Updates `@tailwindcss/vite` from 4.1.6 to 4.1.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases"><code>@​tailwindcss/vite</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v4.1.7</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Migrate bare values to named values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li>
<li>Upgrade: Added cache to improve template migration performance (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Allow <code>_</code> before numbers during candidate extraction (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li>
<li>Prevent duplicate suggestions when using <code>@theme</code> and
<code>@utility</code> together (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li>
<li>Ensure that media queries within <code>::before</code> and
<code>::after</code> pseudo selectors create valid CSS rules in
production builds (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li>
<li>Ensure that the standalone CLI does not leave temporary files behind
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li>
<li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary
values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li>
<li>Ignore custom variants using <code>:merge(…)</code> selectors in
legacy JS plugins (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li>
<li>Ensure classes containing <code>.</code> are properly extracted from
Clojure files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li>
<li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li>
<li>Upgrade: Change casing of utilities with named values to kebab-case
to match updated theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li>
<li>Upgrade: Don't migrate strings that match utility names in Vue
attribute bindings other than <code>class</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md"><code>@​tailwindcss/vite</code>'s
changelog</a>.</em></p>
<blockquote>
<h2>[4.1.7] - 2025-05-15</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Migrate bare values to named values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li>
<li>Upgrade: Added cache to improve template migration performance (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Allow <code>_</code> before numbers during candidate extraction (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li>
<li>Prevent duplicate suggestions when using <code>@theme</code> and
<code>@utility</code> together (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li>
<li>Ensure that media queries within <code>::before</code> and
<code>::after</code> pseudo selectors create valid CSS rules in
production builds (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li>
<li>Ensure that the standalone CLI does not leave temporary files behind
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li>
<li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary
values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li>
<li>Ignore custom variants using <code>:merge(…)</code> selectors in
legacy JS plugins (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li>
<li>Ensure classes containing <code>.</code> are properly extracted from
Clojure files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li>
<li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li>
<li>Upgrade: Change casing of utilities with named values to kebab-case
to match updated theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li>
<li>Upgrade: Don't migrate strings that match utility names in Vue
attribute bindings other than <code>class</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="74e084ad27"><code>74e084a</code></a>
Prepare v4.1.7 release (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite/issues/18040">#18040</a>)</li>
<li>See full diff in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.1.7/packages/@tailwindcss-vite">compare
view</a></li>
</ul>
</details>
<br />

Updates `tailwindcss` from 4.1.5 to 4.1.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/releases">tailwindcss's
releases</a>.</em></p>
<blockquote>
<h2>v4.1.7</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Migrate bare values to named values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li>
<li>Upgrade: Added cache to improve template migration performance (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Allow <code>_</code> before numbers during candidate extraction (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li>
<li>Prevent duplicate suggestions when using <code>@theme</code> and
<code>@utility</code> together (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li>
<li>Ensure that media queries within <code>::before</code> and
<code>::after</code> pseudo selectors create valid CSS rules in
production builds (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li>
<li>Ensure that the standalone CLI does not leave temporary files behind
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li>
<li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary
values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li>
<li>Ignore custom variants using <code>:merge(…)</code> selectors in
legacy JS plugins (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li>
<li>Ensure classes containing <code>.</code> are properly extracted from
Clojure files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li>
<li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li>
<li>Upgrade: Change casing of utilities with named values to kebab-case
to match updated theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li>
<li>Upgrade: Don't migrate strings that match utility names in Vue
attribute bindings other than <code>class</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h2>v4.1.6</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Automatically convert arbitrary values to named values when
possible (e.g. <code>h-[1lh]</code> to <code>h-lh</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17854">#17854</a>)</li>
<li>Upgrade: Update dependencies in parallel for improved performance
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17898">#17898</a>)</li>
<li>Add detailed logging about <code>@source</code> directives,
discovered files and scanned files when using <code>DEBUG=*</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17952">#17952</a>)</li>
<li>Add support for generating source maps in development (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17775">#17775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure negative arbitrary <code>scale</code> values generate
negative values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>)</li>
<li>Fix HAML extraction with embedded Ruby (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17846">#17846</a>)</li>
<li>Don't scan files for utilities when using <code>@reference</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17836">#17836</a>)</li>
<li>Fix incorrectly replacing <code>_</code> with <code> </code> in
arbitrary modifier shorthand <code>bg-red-500/(--my_opacity)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17889">#17889</a>)</li>
<li>Don't scan <code>.log</code> files for classes by default (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>)</li>
<li>Ensure that custom utilities applying other custom utilities don't
swallow nested <code>@apply</code> rules (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17925">#17925</a>)</li>
<li>Download platform specific package if
<code>optionalDependencies</code> are skipped (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17929">#17929</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md">tailwindcss's
changelog</a>.</em></p>
<blockquote>
<h2>[4.1.7] - 2025-05-15</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Migrate bare values to named values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18000">#18000</a>)</li>
<li>Upgrade: Added cache to improve template migration performance (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Allow <code>_</code> before numbers during candidate extraction (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17961">#17961</a>)</li>
<li>Prevent duplicate suggestions when using <code>@theme</code> and
<code>@utility</code> together (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17675">#17675</a>)</li>
<li>Ensure that media queries within <code>::before</code> and
<code>::after</code> pseudo selectors create valid CSS rules in
production builds (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17979">#17979</a>)</li>
<li>Ensure that the standalone CLI does not leave temporary files behind
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17981">#17981</a>)</li>
<li>Ensure <code>-rotate-*</code> utilities properly negate arbitrary
values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18014">#18014</a>)</li>
<li>Ignore custom variants using <code>:merge(…)</code> selectors in
legacy JS plugins (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18020">#18020</a>)</li>
<li>Ensure classes containing <code>.</code> are properly extracted from
Clojure files (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18038">#18038</a>)</li>
<li>Upgrade: Fix error when using <code>@import … source(…)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17963">#17963</a>)</li>
<li>Upgrade: Change casing of utilities with named values to kebab-case
to match updated theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18017">#18017</a>)</li>
<li>Upgrade: Don't migrate strings that match utility names in Vue
attribute bindings other than <code>class</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/18025">#18025</a>)</li>
</ul>
<h2>[4.1.6] - 2025-05-09</h2>
<h3>Added</h3>
<ul>
<li>Upgrade: Automatically convert arbitrary values to named values when
possible (e.g. <code>h-[1lh]</code> to <code>h-lh</code>) (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17854">#17854</a>)</li>
<li>Upgrade: Update dependencies in parallel for improved performance
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17898">#17898</a>)</li>
<li>Add detailed logging about <code>@source</code> directives,
discovered files and scanned files when using <code>DEBUG=*</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>,
<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17952">#17952</a>)</li>
<li>Add support for generating source maps in development (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17775">#17775</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure negative arbitrary <code>scale</code> values generate
negative values (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17831">#17831</a>)</li>
<li>Fix HAML extraction with embedded Ruby (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17846">#17846</a>)</li>
<li>Don't scan files for utilities when using <code>@reference</code>
(<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17836">#17836</a>)</li>
<li>Fix incorrectly replacing <code>_</code> with <code> </code> in
arbitrary modifier shorthand <code>bg-red-500/(--my_opacity)</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17889">#17889</a>)</li>
<li>Don't scan <code>.log</code> files for classes by default (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17906">#17906</a>)</li>
<li>Ensure that custom utilities applying other custom utilities don't
swallow nested <code>@apply</code> rules (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17925">#17925</a>)</li>
<li>Download platform specific package if
<code>optionalDependencies</code> are skipped (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17929">#17929</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="74e084ad27"><code>74e084a</code></a>
Prepare v4.1.7 release (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/18040">#18040</a>)</li>
<li><a
href="f3157cd9a6"><code>f3157cd</code></a>
Ignore custom variants with <code>:merge(…)</code> selectors (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/18020">#18020</a>)</li>
<li><a
href="4db711d1e4"><code>4db711d</code></a>
Fix <code>-rotate-*</code> with arbitary values (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/18014">#18014</a>)</li>
<li><a
href="4fba87bc90"><code>4fba87b</code></a>
Upgrade lightningcss to <code>1.30.0</code> (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/17979">#17979</a>)</li>
<li><a
href="0d975f5f06"><code>0d975f5</code></a>
Update dedent 1.5.3 → 1.6.0 (minor) (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/17965">#17965</a>)</li>
<li><a
href="f0986ce127"><code>f0986ce</code></a>
Prevent duplicate suggestions when using <code>@theme</code> and
<code>@utility</code> together (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/1">#1</a>...</li>
<li><a
href="2d139984da"><code>2d13998</code></a>
Prepare v4.1.6 release (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/17951">#17951</a>)</li>
<li><a
href="56b22bb1d3"><code>56b22bb</code></a>
Add support for source maps (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/17775">#17775</a>)</li>
<li><a
href="17ca56d386"><code>17ca56d</code></a>
Fix bug with nested <a
href="https://github.com/apply"><code>@​apply</code></a> rules in
utility classes (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/17924">#17924</a>)
(<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/17925">#17925</a>)</li>
<li><a
href="4f8539c063"><code>4f8539c</code></a>
Fix bug replacing modifier variable shorthand syntax underscores (<a
href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss/issues/17889">#17889</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tailwindlabs/tailwindcss/commits/v4.1.7/packages/tailwindcss">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-28 10:37:20 +00:00
Thomas Eizinger
bed94a1d21 feat(gui-client): add MDM config for Windows (#9203)
This PR adds the equivalent MDM configuration that we already have for
MacOS & iOS for the GUI client on Windows. These options are retrieved
from the Windows registry when the Client is started. Specifically, the
key for these is: `HKEY_CURRENT_USER\Software\Policies\Firezone`.

At moment, these cannot be configured or seen by the user. They are also
not "watched" for whilst the Client is running. If an admin pushes a new
MDM configuration, the Client will have to be restarted in order for
that new config to take effect.

Windows Policy templates are structured into two files:

- An `.admx` file that defines the structure of the policy, like the
kinds of values it has, where it is stored, which versions it is
supported on and which category it belongs to.
- An `.adml` file that defines defines all strings and presentation
logic, like the actual text of the policies and how the values are
presented in the GUI in e.g. Intune.

Internally, we differentiate between `MdmSettings` and
`AdvancedSettings`. The `MdmSettings` are cross-platform, however on
Linux, we always fallback to the defaults and therefore, they are always
"unset". Eventually, it might make sense to wrap both of these into a
more general `Settings` struct that acts as as a proxy for the two.

Related: #4505
2025-05-27 01:33:51 +00:00
Jamil
b5c18db5e8 chore(ci): Bump next clients version to 1.5.0 (#9229)
We've decided we'll be bumping the minor with shipping managed
configurations support.
2025-05-26 04:24:35 +00:00
Jamil
068f7dfc8e chore(deps): Bump codespell to 2.4.1 and fix found issues (#9221)
The dictionary was updated in and codespell found a few minor issues to
fix.

Supersedes #8990
2025-05-24 22:02:06 +00:00
Thomas Eizinger
67d11b1e01 fix(gui-client): don't reset favourites when settings change (#9211)
The GUI client currently has a bug that resets the favourites and the
status of the Internet Resource every time the advanced settings are
saved. This happens because those fields are annotated with
`#[serde(default)]` and are thus initialised to their default value when
the struct is deserialised from the frontend.

To mitigate this, we introduce a new `GeneralSettings` struct that holds
the status of the Internet Resource and the list of favourites. When a
client starts up, it will try to migrate the existing advanced settings
into the new split of general and advanced settings.
2025-05-23 17:39:58 +00:00
Thomas Eizinger
600f00f82e refactor(gui-client): update settings window via event (#9193)
Ensuring that the "Settings" window always displays the latest state is
important. At the moment, we achieve this by fetching the settings from
Rust every time we know that they changed and when the window is opened.
Currently, the settings can only change as a result of the reset button.

Once we integrate MDM-controlled configuration into the GUI client, the
settings can change at any point when administrators push a new
configuration change. The window doesn't know that though.

To simplify the code and handle dynamic changes to the settings, we now
use an event to send the settings to the frontend.
2025-05-22 00:26:21 +00:00
Jamil
af7eaa8cc9 chore: release GUI client 1.4.14 (#9197) 2025-05-21 23:23:45 +00:00
Thomas Eizinger
ae872980ae refactor(gui-client): scope telemetry sessions to GUI client (#9179)
For our telemetry sessions with Sentry, we need to know which
environment we are running in, i.e. staging, production or on-prem. The
GUI client's tunnel service doesn't have a concept of an environment
until a GUI connects and sends the `StartTelemetry` message. Therefore,
we should scope a telemetry session to a GUI being connected over IPC.

Any errors around setting up / tearing down the background service are a
catch-22. Until a GUI connects, we can't initialise the telemetry
connection but if we fail to set up the background service, no GUI can
ever connect. Hence, the current setup and tear down of the `Telemetry`
module around the `ipc_listen` calls can safely be removed as they are
effectively no-ops anyway.
2025-05-20 23:18:18 +00:00
Thomas Eizinger
042d03af2a feat(gui-client): polish Linux bundling (#9181)
Tauri's `deb` and `rpm` bundler have support for configuring maintainer
scripts. We can therefore just use those instead of tearing apart the
`deb` file that it creates and rebuilding it ourselves.

Our `rpm` packaging is currently completely broken as well. I couldn't
get it to work on CentOS 9 at all due to missing dependencies, likely
introduced by our move to Tauri v2. It installs fine on CentOS 10
though, assuming that the user has the EPEL repository installed which
provides the WebView dependency. I extended the docs to reflect this.

Hence, with this PR, we drop support for CentOS 9 and now require CentOS
10. This allows us to remove a lot of cruft from our bundling process
and instead entirely rely on the Tauri provided bundler.

Lastly, for consistency with other platforms, the name of the
application in places like app drawers has been changed from "Firezone
Client" to just "Firezone".

---------

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
2025-05-20 15:34:16 +00:00
Thomas Eizinger
d53deaf0d8 chore(gui-client): allow override log filter from command-line (#9182)
Can be useful when debugging the GUI client process.
2025-05-20 15:24:37 +00:00
Thomas Eizinger
9a4c87dd2e chore(gui-client): include version in run-debug log (#9187)
This TODO can now be resolved because we have moved the Tunnel service
into the `gui-client` crate.
2025-05-20 15:23:59 +00:00
Thomas Eizinger
00b40ae267 refactor(gui-client): improve error handling in Windows service (#9178)
The current error handling logic in the Windows service is a bit dodgy.
We first initialise the logger but then pass the logging handle into the
`try_run_service` function. This means that any failures in starting the
Windows service aren't actually logged because the handle has been
dropped by then already.
2025-05-20 14:46:46 +00:00
Thomas Eizinger
1bdba3601a feat(gui-client): rename IPC service to Tunnel service (#9154)
The name IPC service is not very descriptive. By nature of being
separate processes, we need to use IPC to communicate between them. The
important thing is that the service process has control over the tunnel.
Therefore, we rename everything to "Tunnel service".

The only part that is not changed are historic changelog entries.

Resolves: #9048
2025-05-19 09:52:06 +00:00
Thomas Eizinger
b0908a1e0c fix(rust): bump version of GUI client in rpm spec (#9163)
Our bump-versions script did not consider that we also have the version
stored in the `.spec` file for rpm builds and hence this did not get
bumped in a while (or ever?).
2025-05-16 05:09:01 +00:00
Thomas Eizinger
9eaad81165 chore(gui-client): apply feedback from #9160 (#9161) 2025-05-16 05:08:40 +00:00
Thomas Eizinger
f3b1ec7cb4 fix(gui-client): reference CARGO_PKG_VERSION in service (#9164)
Now that we have moved all files of the Tunnel service into the
`gui-client` crate, we can directly reference the `CARGO_PKG_VERSION`
env variable instead of having to hard-code the number in the
source-code.
2025-05-16 04:55:55 +00:00
Thomas Eizinger
5e1a79d100 feat(gui-client): re-design welcome screen (#9160)
Inspired by the MacOS client welcome screen, we re-design the GUI
client's welcome screen.

## Signed out state

|Before|After|
|---|---|

|![before](https://github.com/user-attachments/assets/f3b8c933-09b8-4971-8598-b407d23f794b)|![after](https://github.com/user-attachments/assets/ae37cb3c-897d-4019-8977-d4d467c4f31b)|

## Signed in state

|Before|After|
|---|---|

|![before](https://github.com/user-attachments/assets/9cebb95c-9974-4f51-baa4-952e937d9a2f)|![after](https://github.com/user-attachments/assets/180ad75e-260d-4a32-b207-90e1223dc148)|

In addition to the re-design, we set the window to be not resizable.
2025-05-16 01:55:28 +00:00
Thomas Eizinger
9e9599952f refactor(gui-client): streamline command handling (#9153)
The way the GUI client currently handles the commands and flags provided
via the CLI is somewhat confusing. There are various helper functions
that get called from the same place. We duplicate setup like the `tokio`
runtime in multiple places and the also loggers get initialised all over
the place.

To streamline this, we move global setup like `tokio` and telemetry to
the top-layer. From there, we delegate to a `try_main` function which
handles the various CLI commands. The default path from here is to run
the gui by delegating to the `gui` module. If not, we bail out early.

This structure is significantly easier to understand and provides error
and telemetry handling in a single place.
2025-05-16 01:20:46 +00:00
Thomas Eizinger
bb5cb1b5ad chore(gui-client): greet GUI instance upon connect (#9151)
The tunnel service of the GUI client can only handle one process at a
time. The OS however will happily connect multiple clients to the socket
/ pipe. They will simply idle until the previous process disconnects.

To avoid this situation, we introduce a `Hello` message from the tunnel
service to the GUI client. If the GUI client doesn't receive this
message within 5s, it considers the tunnel service be not responsive.

If our duplicate instance detection works as intended, users are not
expected to hit this.
2025-05-15 11:55:46 +00:00
Thomas Eizinger
b6d8657cb2 chore(gui-client): delete unused file (#9152)
This must be a left-over from when we moved some of the GUI client
modules around.
2025-05-15 11:51:04 +00:00
Thomas Eizinger
7f4b20ab7f feat(gui-client): show "Welcome" screen on 2nd app launch (#9136)
Resolves: #8352.
2025-05-15 08:20:24 +00:00
Thomas Eizinger
a2bd667c69 refactor(gui-client): use existing IPC framework for deeplinks (#9047)
We already have a pretty powerful IPC framework in place to communicate
between the GUI and the service process. The deeplink implemenation uses
the same IPC mechanisms (UDS / pipes), yet it is effectively a
re-implementation of what we already have, just with less functionality.

In order to provide a more sophisticated handling of the case where
Firezone is launched again while it is already running, we refactor the
deeplink module to reuse the existing IPC framework. This makes it quite
easy to then reuse this in order to ping the already running Firezone
process that a new instance was launched.

For now, this doesn't do anything other than writing a log entry. This
however lays enough ground-work for us to then implement a more
sophisticated handling of that case in the future, e.g. open new windows
etc.

One caveat here is that we are now trying to connect to an existing IPC
socket on every startup, even the first one. Our IPC code has a retry
loop of 10 iterations to be more resilient on Windows when connecting to
pipes. Without any further changes, this would now delay the start of
Firezone always by 1s because we would try to connect to the socket 10x
before concluding that we are the first instance. To fix this, we make
the number of attempts configurable and set it to 1 when attempting to
the GUI IPC socket to avoid unnecessary delays in starting up the
Client.

Related: #5143.
2025-05-15 05:47:29 +00:00
Thomas Eizinger
d16ffe5f0f chore(gui-client): make better use of vite as a bundler (#9148)
We already use `vite` as a bundling tool but only to rollup some of the
pre-built files. This setup (and therefore our buildscripts) can be
massively simplified by instructing `vite` to also build our TypeScript
code and compile tailwind.

This makes it much easier to develop locally because one only needs to
run `pnpm vite build --watch` to keep everything up to date.
2025-05-15 04:06:03 +00:00
Thomas Eizinger
7703063830 feat(gui-client): re-design the "about" window (#9149)
This re-designs the "About" window of the GUI client.

|Before|After|
|---|---|
|![Screenshot From 2025-05-15
11-40-46](https://github.com/user-attachments/assets/ce7f1cf5-e234-4d64-825a-8e1c0badddb5)|![image](https://github.com/user-attachments/assets/a0c2f54f-f8f9-4d57-a8ee-0e826ce004da)|

I also reduced the window in its size and made it non-resizable to avoid
it looking bad when users try to fiddle around with it.

The embedded Git hash is also trimmed to 8 characters, currently it is
embedded as the fully hash.
2025-05-15 03:07:26 +00:00
Thomas Eizinger
5a4e72954f chore: release GUI client 1.4.13 (#9130) 2025-05-14 06:09:01 +00:00
Thomas Eizinger
037421f111 chore(rust): remove double logger setup (#9127)
I thought I had fixed this in #9111 but while rebasing, I must have
deleted the wrong line so the logger now gets initialised twice.
2025-05-14 04:39:39 +00:00
Thomas Eizinger
c93a3d710a fix(gui-client): don't panic during setup hook (#9112)
As part of launching the Tauri GUI client, we need to observe a specific
initialisation order. In particular, we need to wait until Tauri sends
us a `RunEvent::Ready` before we can initialise things like the tray
menu.

To make this more convenient, Tauri offers a so-called "setup hook" that
can be set on the app builder. Unfortunately, Tauri internally panics if
this provided setup-hook returns an `Err`. Removing this is tracked
upstream: https://github.com/tauri-apps/tauri/issues/12815.

Until this is fixed, we stop using this "setup hook" and instead spawn
our own task that performs this work. This task needs to wait until
Tauri is ready. To achieve that, we introduce an additional mpsc channel
that sends a notification every time we receive a `RunEvent::Ready`.
That should only happen once. We only read from the receiver once, which
is why we ignore the error on the sending side in case the receiver has
already been dropped.

Resolves: #9101
2025-05-13 04:02:42 +00:00