Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.0.3 to 4.0.9. <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.0.9</h2> <h3>Fixed</h3> <ul> <li>Make JS APIs available to plugins and configs in the Standalone CLI (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/15934">#15934</a>)</li> <li>Vite: Don't crash when importing a virtual module from JavaScript that ends in <code>.css</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16780">#16780</a>)</li> <li>Fix an issue where <code>@reference "…"</code> would sometimes omit keyframe animations (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16774">#16774</a>)</li> <li>Ensure <code>z-*!</code> utilities are properly marked as <code>!important</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16795">#16795</a>)</li> <li>Read UTF-8 CSS files that start with a byte-order mark (BOM) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16800">#16800</a>)</li> <li>Ensure nested functions in selectors used with JavaScript plugins are not truncated (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16802">#16802</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Emit variable fallbacks when using <code>@reference "…"</code> instead of duplicate CSS variable declarations (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16774">#16774</a>)</li> </ul> <h2>v4.0.8</h2> <h3>Added</h3> <ul> <li>Allow <code>@import</code> with <code>theme(…)</code> options for stylesheets that contain more than just <code>@theme</code> rules (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16514">#16514</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Don't add <code>!important</code> to CSS variable declarations when using the important modifier (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16668">#16668</a>)</li> <li>Vite: Ignore files and directories specified in your <code>.gitignore</code> file when using automatic source detection(<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Vite: Don't rely on the module graph for detecting candidates to ensure setups with multiple Vite builds work as expected (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Vite: Ensure Astro production builds always contain classes used in client-only components (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Vite: Always scan raw file contents for utility classes before any other transforms have been applied to ensure utility classes are scanned without any additional escaping (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Ensure utilities with more declarations are always sorted before utilities with fewer declarations when utilities only define CSS variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16715">#16715</a>)</li> <li>Only include <code>translate-z-px</code> utilities once in compiled CSS (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16718">#16718</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Don't include theme variables that aren't used in compiled CSS (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16211">#16211</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16676">#16676</a>)</li> </ul> <h2>v4.0.7</h2> <h3>Fixed</h3> <ul> <li>Export <code>tailwindcss/lib/util/flattenColorPalette.js</code> for backward compatibility (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16411">#16411</a>)</li> <li>Fix sorting of numeric utility suggestions when they have different magnitudes (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16414">#16414</a>)</li> <li>Show suggestions for fractions in IntelliSense (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16353">#16353</a>)</li> <li>Don’t replace <code>_</code> in suggested theme keys (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16433">#16433</a>)</li> <li>Ensure <code>--default-outline-width</code> can be used to change the <code>outline-width</code> value of the <code>outline</code> utility (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16469">#16469</a>)</li> <li>Ensure drop shadow utilities don't inherit unexpectedly (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16471">#16471</a>)</li> <li>Export config and plugin types from <code>tailwindcss/plugin</code> for backward compatibility (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16505">#16505</a>)</li> <li>Ensure JavaScript plugins that emit nested rules referencing the utility name work as expected (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16539">#16539</a>)</li> <li>Statically link Visual Studio redistributables in <code>@tailwindcss/oxide</code> Windows builds (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16602">#16602</a>)</li> <li>Ensure that Next.js splat routes are scanned for classes (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16457">#16457</a>)</li> <li>Pin exact version of <code>tailwindcss</code> in <code>@tailwindcss/*</code> packages (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16623">#16623</a>)</li> <li>Upgrade: Report errors when updating dependencies (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16504">#16504</a>)</li> <li>Upgrade: Ensure a <code>darkMode</code> JS config setting with block syntax converts to use <code>@slot</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16507">#16507</a>)</li> <li>Upgrade: Ensure the latest version of <code>tailwindcss</code> and <code>@tailwindcss/postcss</code> are installed when upgrading (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16620">#16620</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </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.0.9] - 2025-02-25</h2> <h3>Fixed</h3> <ul> <li>Make JS APIs available to plugins and configs in the Standalone CLI (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/15934">#15934</a>)</li> <li>Vite: Don't crash when importing a virtual module from JavaScript that ends in <code>.css</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16780">#16780</a>)</li> <li>Fix an issue where <code>@reference "…"</code> would sometimes omit keyframe animations (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16774">#16774</a>)</li> <li>Ensure <code>z-*!</code> utilities are properly marked as <code>!important</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16795">#16795</a>)</li> <li>Read UTF-8 CSS files that start with a byte-order mark (BOM) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16800">#16800</a>)</li> <li>Ensure nested functions in selectors used with JavaScript plugins are not truncated (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16802">#16802</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Emit variable fallbacks when using <code>@reference "…"</code> instead of duplicate CSS variable declarations (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16774">#16774</a>)</li> </ul> <h2>[4.0.8] - 2025-02-21</h2> <h3>Added</h3> <ul> <li>Allow <code>@import</code> with <code>theme(…)</code> options for stylesheets that contain more than just <code>@theme</code> rules (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16514">#16514</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Don't add <code>!important</code> to CSS variable declarations when using the important modifier (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16668">#16668</a>)</li> <li>Vite: Ignore files and directories specified in your <code>.gitignore</code> file when using automatic source detection(<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Vite: Don't rely on the module graph for detecting candidates to ensure setups with multiple Vite builds work as expected (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Vite: Ensure Astro production builds always contain classes used in client-only components (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Vite: Always scan raw file contents for utility classes before any other transforms have been applied to ensure utility classes are scanned without any additional escaping (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16631">#16631</a>)</li> <li>Ensure utilities with more declarations are always sorted before utilities with fewer declarations when utilities only define CSS variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16715">#16715</a>)</li> <li>Only include <code>translate-z-px</code> utilities once in compiled CSS (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16718">#16718</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Don't include theme variables that aren't used in compiled CSS (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16211">#16211</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16676">#16676</a>)</li> </ul> <h2>[4.0.7] - 2025-02-18</h2> <h3>Fixed</h3> <ul> <li>Export <code>tailwindcss/lib/util/flattenColorPalette.js</code> for backward compatibility (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16411">#16411</a>)</li> <li>Fix sorting of numeric utility suggestions when they have different magnitudes (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16414">#16414</a>)</li> <li>Show suggestions for fractions in IntelliSense (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16353">#16353</a>)</li> <li>Don’t replace <code>_</code> in suggested theme keys (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16433">#16433</a>)</li> <li>Ensure <code>--default-outline-width</code> can be used to change the <code>outline-width</code> value of the <code>outline</code> utility (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16469">#16469</a>)</li> <li>Ensure drop shadow utilities don't inherit unexpectedly (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16471">#16471</a>)</li> <li>Export config and plugin types from <code>tailwindcss/plugin</code> for backward compatibility (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16505">#16505</a>)</li> <li>Ensure JavaScript plugins that emit nested rules referencing the utility name work as expected (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16539">#16539</a>)</li> <li>Statically link Visual Studio redistributables in <code>@tailwindcss/oxide</code> Windows builds (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16602">#16602</a>)</li> <li>Ensure that Next.js splat routes are scanned for classes (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16457">#16457</a>)</li> <li>Pin exact version of <code>tailwindcss</code> in <code>@tailwindcss/*</code> packages (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16623">#16623</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="85d7375b59"><code>85d7375</code></a> Prepare v4.0.9 release (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16804">#16804</a>)</li> <li><a href="419b3dc473"><code>419b3dc</code></a> Prepare v4.0.8 release (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16713">#16713</a>)</li> <li><a href="541c3d2331"><code>541c3d2</code></a> Prepare v4.0.7 release (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16629">#16629</a>)</li> <li><a href="f0141084c2"><code>f014108</code></a> Pin exact versions of <code>tailwindcss</code> and <code>@tailwindcss/*</code> (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16623">#16623</a>)</li> <li><a href="f995dae5ca"><code>f995dae</code></a> Update enhanced-resolve 5.18.0 → 5.18.1 (patch) (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16439">#16439</a>)</li> <li><a href="d045aaa75e"><code>d045aaa</code></a> Prepare v4.0.6 (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16407">#16407</a>)</li> <li><a href="ad001199f6"><code>ad00119</code></a> Prepare v4.0.5 (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16373">#16373</a>)</li> <li><a href="83fdf373aa"><code>83fdf37</code></a> Prepare v4.0.4 (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16302">#16302</a>)</li> <li><a href="5601fb50a9"><code>5601fb5</code></a> Upgrade <code>@parcel/watcher</code> to <code>2.5.1</code> (<a href="https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli/issues/16248">#16248</a>)</li> <li>See full diff in <a href="https://github.com/tailwindlabs/tailwindcss/commits/v4.0.9/packages/@tailwindcss-cli">compare view</a></li> </ul> </details> <br /> [](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>
Rust development guide
Firezone uses Rust for all data plane components. This directory contains the Linux and Windows clients, and low-level networking implementations related to STUN/TURN.
We target the last stable release of Rust using rust-toolchain.toml.
If you are using rustup, that is automatically handled for you.
Otherwise, ensure you have the latest stable version of Rust installed.
Reading Client logs
The Client logs are written as JSONL for machine-readability.
To make them more human-friendly, pipe them through jq like this:
cd path/to/logs # e.g. `$HOME/.cache/dev.firezone.client/data/logs` on Linux
cat *.log | jq -r '"\(.time) \(.severity) \(.message)"'
Resulting in, e.g.
2024-04-01T18:25:47.237661392Z INFO started log
2024-04-01T18:25:47.238193266Z INFO GIT_VERSION = 1.0.0-pre.11-35-gcc0d43531
2024-04-01T18:25:48.295243016Z INFO No token / actor_name on disk, starting in signed-out state
2024-04-01T18:25:48.295360641Z INFO null
Benchmarking on Linux
The recommended way for benchmarking any of the Rust components is Linux' perf utility.
For example, to attach to a running application, do:
- Ensure the binary you are profiling is compiled with the
releaseprofile. sudo perf record -g --freq 10000 --pid $(pgrep <your-binary>).- Run the speed test or whatever load-inducing task you want to measure.
sudo perf script > profile.perf- Open profiler.firefox.com and load
profile.perf
Instead of attaching to a process with --pid, you can also specify the path to executable directly.
That is useful if you want to capture perf data for a test or a micro-benchmark.