mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 18:18:55 +00:00
34f28e2ae6bebfd42e20b2ae372a5c27b8189f0c
2231 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
34f28e2ae6 |
feat(rust): use jemalloc for Gateway and Relay (#8846)
`jemalloc` is a modern allocator that is designed for multi-threaded systems and can better handle smaller allocations that may otherwise fragment the heap. Firezone's components, especially Relays and Gateways are intended to operate with a long uptime and therefore need to handle memory efficiently. |
||
|
|
54f04108b2 |
build(deps-dev): bump vite from 6.2.6 to 6.3.2 in /rust/gui-client (#8829)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.6 to 6.3.2. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v6.3.2</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.3.2/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>create-vite@6.3.1</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/create-vite@6.3.1/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v6.3.1</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.3.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>create-vite@6.3.0</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/create-vite@6.3.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v6.3.0</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.3.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v6.3.0-beta.2</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.3.0-beta.2/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v6.3.0-beta.1</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.3.0-beta.1/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> <h2>v6.3.0-beta.0</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.3.0-beta.0/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted -->6.3.2 (2025-04-18)<!-- raw HTML omitted --></h2> <ul> <li>fix: match default asserts case insensitive (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19852">#19852</a>) (<a href=" |
||
|
|
5698e5167e |
build(deps): bump @tailwindcss/cli from 4.1.3 to 4.1.4 in /rust/gui-client (#8832)
Bumps
[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli)
from 4.1.3 to 4.1.4.
<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.4</h2>
<h3>Added</h3>
<ul>
<li>Add experimental <code>@tailwindcss/oxide-wasm32-wasi</code> target
for running Tailwind in browser environments like StackBlitz (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17558">#17558</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure <code>color-mix(…)</code> polyfills do not cause used CSS
variables to be removed (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17555">#17555</a>)</li>
<li>Ensure <code>color-mix(…)</code> polyfills create fallbacks for
theme variables that reference other theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17562">#17562</a>)</li>
<li>Fix brace expansion in declining ranges like <code>{10..0..5}</code>
and <code>{0..10..-5}</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17591">#17591</a>)</li>
<li>Work around a Chrome rendering bug when using the
<code>skew-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17627">#17627</a>)</li>
<li>Ensure container query variant names can contain hyphens (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17628">#17628</a>)</li>
<li>Ensure <code>shadow-inherit</code>,
<code>inset-shadow-inherit</code>, <code>drop-shadow-inherit</code>, and
<code>text-shadow-inherit</code> inherit the shadow color (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17647">#17647</a>)</li>
<li>Ensure compatibility with array tuples used in <code>fontSize</code>
JS theme keys (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</a>)</li>
<li>Ensure folders with binary file extensions in their names are
scanned for utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17595">#17595</a>)</li>
<li>Upgrade: Convert <code>fontSize</code> array tuple syntax to CSS
theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</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.4] - 2025-04-14</h2>
<h3>Added</h3>
<ul>
<li>Add experimental <code>@tailwindcss/oxide-wasm32-wasi</code> target
for running Tailwind in browser environments like StackBlitz (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17558">#17558</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure <code>color-mix(…)</code> polyfills do not cause used CSS
variables to be removed (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17555">#17555</a>)</li>
<li>Ensure <code>color-mix(…)</code> polyfills create fallbacks for
theme variables that reference other theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17562">#17562</a>)</li>
<li>Fix brace expansion in declining ranges like <code>{10..0..5}</code>
and <code>{0..10..-5}</code> (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17591">#17591</a>)</li>
<li>Work around a Chrome rendering bug when using the
<code>skew-*</code> utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17627">#17627</a>)</li>
<li>Ensure container query variant names can contain hyphens (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17628">#17628</a>)</li>
<li>Ensure <code>shadow-inherit</code>,
<code>inset-shadow-inherit</code>, <code>drop-shadow-inherit</code>, and
<code>text-shadow-inherit</code> inherit the shadow color (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17647">#17647</a>)</li>
<li>Ensure compatibility with array tuples used in <code>fontSize</code>
JS theme keys (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</a>)</li>
<li>Ensure folders with binary file extensions in their names are
scanned for utilities (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17595">#17595</a>)</li>
<li>Upgrade: Convert <code>fontSize</code> array tuple syntax to CSS
theme variables (<a
href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="
|
||
|
|
ddf460b55f |
build(deps-dev): bump tailwindcss from 4.1.3 to 4.1.4 in /rust/gui-client (#8835)
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.1.3 to 4.1.4. <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.4</h2> <h3>Added</h3> <ul> <li>Add experimental <code>@tailwindcss/oxide-wasm32-wasi</code> target for running Tailwind in browser environments like StackBlitz (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17558">#17558</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Ensure <code>color-mix(…)</code> polyfills do not cause used CSS variables to be removed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17555">#17555</a>)</li> <li>Ensure <code>color-mix(…)</code> polyfills create fallbacks for theme variables that reference other theme variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17562">#17562</a>)</li> <li>Fix brace expansion in declining ranges like <code>{10..0..5}</code> and <code>{0..10..-5}</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17591">#17591</a>)</li> <li>Work around a Chrome rendering bug when using the <code>skew-*</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17627">#17627</a>)</li> <li>Ensure container query variant names can contain hyphens (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17628">#17628</a>)</li> <li>Ensure <code>shadow-inherit</code>, <code>inset-shadow-inherit</code>, <code>drop-shadow-inherit</code>, and <code>text-shadow-inherit</code> inherit the shadow color (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17647">#17647</a>)</li> <li>Ensure compatibility with array tuples used in <code>fontSize</code> JS theme keys (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</a>)</li> <li>Ensure folders with binary file extensions in their names are scanned for utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17595">#17595</a>)</li> <li>Upgrade: Convert <code>fontSize</code> array tuple syntax to CSS theme variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</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.4] - 2025-04-14</h2> <h3>Added</h3> <ul> <li>Add experimental <code>@tailwindcss/oxide-wasm32-wasi</code> target for running Tailwind in browser environments like StackBlitz (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17558">#17558</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Ensure <code>color-mix(…)</code> polyfills do not cause used CSS variables to be removed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17555">#17555</a>)</li> <li>Ensure <code>color-mix(…)</code> polyfills create fallbacks for theme variables that reference other theme variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17562">#17562</a>)</li> <li>Fix brace expansion in declining ranges like <code>{10..0..5}</code> and <code>{0..10..-5}</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17591">#17591</a>)</li> <li>Work around a Chrome rendering bug when using the <code>skew-*</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17627">#17627</a>)</li> <li>Ensure container query variant names can contain hyphens (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17628">#17628</a>)</li> <li>Ensure <code>shadow-inherit</code>, <code>inset-shadow-inherit</code>, <code>drop-shadow-inherit</code>, and <code>text-shadow-inherit</code> inherit the shadow color (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17647">#17647</a>)</li> <li>Ensure compatibility with array tuples used in <code>fontSize</code> JS theme keys (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</a>)</li> <li>Ensure folders with binary file extensions in their names are scanned for utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17595">#17595</a>)</li> <li>Upgrade: Convert <code>fontSize</code> array tuple syntax to CSS theme variables (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17630">#17630</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
81d2246593 |
build(deps): bump the aya group in /rust with 5 updates (#8844)
Bumps the aya group in /rust with 5 updates: | Package | From | To | | --- | --- | --- | | [aya](https://github.com/aya-rs/aya) | ``6d36fe1`` | ``0237e36`` | | [aya-build](https://github.com/aya-rs/aya) | ``6d36fe1`` | ``0237e36`` | | [aya-ebpf](https://github.com/aya-rs/aya) | ``6d36fe1`` | ``0237e36`` | | [aya-log](https://github.com/aya-rs/aya) | ``6d36fe1`` | ``0237e36`` | | [aya-log-ebpf](https://github.com/aya-rs/aya) | ``6d36fe1`` | ``0237e36`` | Updates `aya` from `6d36fe1` to `0237e36` <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
b4afd0bffb |
refactor(eBPF): reduce size of maps (#8849)
Whilst developing the eBPF module for the relay, I needed to manually add padding within the key and value structs used in the maps in order for the kernel to be able to correctly retrieve the data. For some reason, this seems no longer necessary as the integration test now passes without this as well. Being able to remove the padding drastically reduces the size of these maps for the current number of entries that we allow. This brings the overall memory usage of the relay down. Resolves: #8682 |
||
|
|
5669c83835 |
ci: Bump Apple clients to 1.4.11 (#8848)
Includes a fix for auto-starting on launch when other VPN clients have been connected previously. |
||
|
|
50d3edccd7 |
feat(apple): re-enable quinn-udps fast data path feature (#8818)
Now that https://github.com/quinn-rs/quinn/pull/2208 is merged, we can re-enable the `apple-fast-datapath` feature again on Apple platforms. Even if we cannot yet measure a speed-increase yet, this should at least make UDP operations more efficient and thus reduce CPU and battery usage. |
||
|
|
f51fd53708 |
chore(eBPF): use RangeInclusive::contains again (#8812)
Now that we have figured out what the problem was with the eBPF kernel not routing certain packets, we can undo the manual implementation of the allocation range checking again and use the more concise `RangeInclusive::contains`. Related: #8809 Related: #8807 |
||
|
|
492e54efaa |
build(rust): bump network-types to v0.0.8 (#8811)
This new release includes several patches we have made upstream that allow us to remove some of the vendored types from the crate. All fields that we access from `network-types` are now stored as byte-arrays and thus retain the big-endian byte ordering from the network. Resolves: #8686 Related: https://github.com/vadorovsky/network-types/pull/34 Related: https://github.com/vadorovsky/network-types/pull/36 Related: https://github.com/vadorovsky/network-types/pull/38 |
||
|
|
c52d88f421 |
fix(relay): stateless encoding/decoding (#8810)
The STUN message encoder & decoder from `stun_codec` are stateful operations. However, they only operate on one datagram at the time. If encoding or decoding fails, their internal state is corrupted and must be discarded. At present, this doesn't happen which leads to further failures down the line because new datagrams coming in cannot be correctly decoded. To fix this, we scope the stateful nature of these encoders and decoders to their respective functions. Resolves: #8808 |
||
|
|
96e739439b |
fix(relay): remove Config caching (#8809)
In #8650, we originally added a feature-flag for toggling the eBPF TURN router on and off at runtime. This later got removed again in #8681. What remained was a "caching system" of the config that the eBPF kernel and user space share with each other. This config was initialised to the default configuration. If the to-be-set config was the same as the current config, the config would not actually apply to the array that was shared with the eBPF kernel. At the time, we assumed that, if the config was not set in the kernel, the lookup in the array would yield `None` and we would fall back to the `Default` implementation of `Config`. This assumption was wrong. It appears that look-ups in the array always yield an element: all zeros. Initialising our config with all zeros yields the following:  Of course, if this range is not initialised correctly, we can never actually route packets arriving on allocation ports and with UDP checksumming turned off, all packets routed the other way will have an invalid checksum and therefore be dropped by the receiving host. Our integration test did not catch this because in there, we purposely disable UDP checksumming. That meant that the "caching" check in the `ebpf::Program` did not trigger and we actually did set a `Config` in the array, therefore initialising the allocation port range correctly and allowing the packet to be routed. To fix this, we remove this caching check again which means every `Config` we set on the eBPF program actually gets copied to the shared array. Originally, this caching check was introduced to avoid a syscall on every event-loop iteration as part of checking the feature-flag. Now that the feature-flag has been removed, we don't need to have this cache anymore. |
||
|
|
4ade88b1b1 |
fix(eBPF): implement "is port in allocation range" ourselves (#8807)
I am suspecting that something is wrong with the check that a port is indeed within that range. Thus, we now implemented this ourselves with two simple conditions. |
||
|
|
c5c195f282 |
chore(eBPF): change error log-levels (#8805)
Neither of the moved error cases should happen very often so it is fine to log them on debug. - `Error::NotTurn` only happens if we receive a UDP packet that isn't STUN traffic (port 3478) or not in the allocation-port range. I am suspecting there to be a bug that I am aiming to fix in #8804. - `Error::NotAChannelDataMessage` will happen for all STUN control traffic, like channel bindings, allocation requests, etc. Those only happen occasionally so won't spam too much. - `Ipv4PacketWithOptions` should basically not happen at all because - as far as I know - IPv4 options aren't used a lot. In any case, when debugging, it is useful to see when we do hit these cases to know, why a packet was offloaded to user space. |
||
|
|
0079f76ebd |
fix(eBPF): store allocation port-range in big-endian (#8804)
Any communication between user-space and the eBPF kernel happens via
maps. The keys and values in these maps are serialised to bytes, meaning
the endianness of how these values are encoded matters!
When debugging why the eBPF kernels were not performing as much as we
thought they would, I noticed that only very small packets were getting
relayed. In particular, only packets encoded as channel-data packets
were getting unwrapped correctly. The reverse didn't happen at all.
Turning the log-level up to TRACE did reveal that we do in fact see
these packets but they don't get handled.
Here is the relevant section that handles these packets:
|
||
|
|
a2e32a4918 |
ci: Bump apple to 1.4.10 to ship PKG (#8797)
This publishes the 1.4.10 permalinks for the PKG download. |
||
|
|
38dedb8275 |
feat(relay): allow controlling log-level at runtime (#8800)
When debugging issues with the relays on GCP, it is useful to be able to change the log-level at runtime without having to redeploy them. We can achieve this by running an additional HTTP server as part of the relay that response to HTTP POST requests that contain new logging directives. --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> |
||
|
|
4a39d5eafb |
chore(connlib): log malformed IP packets (#8799)
When determining, how to NAT a certain packet, we need to identify whether it is a UDP, TCP or ICMP packet and extract the relevant port or identifier from it. When parsing these packets, we may run into a situation where the IP number says that the packet is TCP but it is actually malformed and we cannot parse the port from it. In such situations, we end up constructing a `UnsupportedProtocol` error that then confusingly states the we don't support the TCP protocol (or UDP / ICMP if those are malformed). The parsing error here is currently silently discarded as part of the `.ok()` combinator when constructing the relevant slice. To make these logs easier to understand, we now add an `inspect_err` call prior to this the prints, why the packet could not be parsed. Long-term, I am planning to refactor our IP packet model to eagerly parse the layer 3 + 4 headers. This will also be necessary to implement segmentation offloading on the TUN device. Doing so will improve situations like because we will either pass through the malformed packet (if at least the header is intact) or drop it much earlier already. In either case, accessing things like port numbers will be infallible as part of the processing code. |
||
|
|
aab691a67f |
ci: Release Apple clients 1.4.9 (#8793)
These contain the recent UDP thread enhancements. |
||
|
|
743f5fdfeb |
ci: bump clients/gateway to ship write improvements (#8792)
Signed-off-by: Jamil <jamilbk@users.noreply.github.com> Co-authored-by: Thomas Eizinger <thomas@eizinger.io> |
||
|
|
901207b274 |
chore(rust): remove stale error context (#8787)
Minor oversight from #8783. We accidentally retained this `.context` even though there are now multiple error paths from the `Eventloop`, not just portal connection errors. |
||
|
|
5ca61a3e3d |
fix(connlib): disable apple-fast-datapath on quinn-udp (#8784)
There appears to be a regression on the most recent MacOS release (15.4) where we can no longer set `src_ip` on outgoing datagrams for IPv6 sockets. In order to unblock the upcoming release, disable the `fast-apple-datapath` feature until we know how to fix it. Related: https://github.com/quinn-rs/quinn/issues/2206 Resolves: #8779 |
||
|
|
7f5a81cc5a |
chore(rust-ffi): log non-authentication errors on error (#8785)
In the FFI layer, it is tricky to decide what we should do with errors. On the one hand, logging and returning errors is an anti-pattern because it may lead to duplicate logs. In this particular case however, it is useful to log the error on the Rust side because it allows our Sentry integration to capture and include the DEBUG logs prior to this one which may add crucial context. |
||
|
|
7c2163ddf4 |
fix(connlib): fail event-loops if UDP threads stop (#8783)
The UDP socket threads added in #7590 are designed to never exit. UDP sockets are stateless and therefore any error condition on them should be isolated to sending / receiving a particular datagram. It is however possible that code panics which will shut down the threads irrecoverably. In this unlikely event, `connlib`'s event-loop would keep spinning and spam the log with "UDP socket stopped". There is no good way on how we can recover from such a situation automatically, so we just quit `connlib` in that case and shut everything down. To model this new error path, we refactor the `DisconnectError` to be internally backed by `anyhow`. |
||
|
|
d693904063 |
chore(connlib): include total length of GSO batch in error msg (#8776)
At present, we assume that we can send datagrams with the full 65535 bytes as the payload. If that were ever to fail, we are going to receive a Sentry alert about it. For that one to be meaningful, include the total length of the batch in the error message. |
||
|
|
b3746b330f |
refactor(connlib): spawn dedicated threads for UDP sockets (#7590)
Correctly implementing asynchronous IO is notoriously hard. In order to not drop packets in the process, one has to ensure a given socket is ready to accept packets, buffer them if it is not case, suspend everything else until the socket is ready and then continue. Until now, we did this because it was the only option to run the UDP sockets on the same thread as the actual packet processing. That in turn was motivated by wanting to pass around references of the received packets for processing. Rust's borrow-checker does not allow to pass references between threads which forced us to have the sockets on the same thread as the packet processing. Like we already did in other places in `connlib`, this can be solved through the use of buffer pools. Using a buffer pool, we can use heap allocations to store the received packets without having to make a new allocation every time we read new packets. Instead, we can have a dedicated thread that is connected to `connlib`'s packet processing thread via two channels (one for inbound and one for outbound packets). These channels are bounded, which ensures backpressure is maintained in case one of the two threads lags behind. These bounds also mean that we have at most N buffers from the buffer pool in-flight (where N is the capacity of the channel). Within those dedicated threads, we can then use `async/await` notation to suspend the entire task when a socket isn't ready for sending. Resolves: #8000 |
||
|
|
be897ed6c5 |
chore(gateway): require 4 cores to spawn more TUN threads (#8775)
By default, we spawn 1 TUN send and 1 TUN receive thread on the Gateway. In addition to that, we also have the main processing thread that encrypts and decrypts packets. With #7590, we will be separating out the UDP send and receive operations into yet another thread. As a result, we will have at a minimum 4 threads running that perform IO or important work. Thus, in order to benefit from TUN multi-queue, we need more than 4 cores to be able to efficiently parallelise work. Related: #8769 |
||
|
|
859aa3cee0 |
feat(connlib): add context to event-loop errors (#8773)
This should make it easier to diagnose any error returned from the event-loop. |
||
|
|
19d954c76c |
fix(connlib): prioritise GSO batches with smaller segments (#8772)
In order to implement GSO in `connlib`, we opted for an approach where packets of the same length are being appended to a buffer. Each of these buffers is the sent to the kernel in a single syscall, which drastically decreases the per-packet overhead of syscalls and therefore improves performance. Within `connlib` itself, we prioritise control-protocol associated packets over tunnel traffic. The idea here is that even under high-load, we want to ensure that STUN probes between the peers and to the relays are sent in a timely manner. Failing to send these probes results in a false-positive detection of a lost connection because the `connlib`'s internal state uses timeouts to detect such situations. Despite processing the packets itself in a timely manner, it is still possible that they get delayed depending on which order the get flushed to the socket. This order is currently non-deterministic because `GsoQueue` uses a `HashMap` internally and when accessing the batched-together datagrams, we just access it via `iter_mut`. To fix this, we use a `BTreeMap` instead and explicitly define the `Key` to start with the `segment_size` field. As a result, entries within the `BTreeMap` will be sorted ascending by `segment_size` (i.e. the size of individual packets within the batch). Packets of smaller size are more likely to be control messages like STUN binding requests or TURN messages to the relays for managing allocations. By sorting the map explicitly, we ensure that if the UDP socket is ready to send, we flush out these messages first before moving on to bigger packets such as the ones containing (more likely) WireGuard data messages. |
||
|
|
d560eb00fd |
chore(rust): remove resolved duplicated dependency exclusion (#8766)
We no longer have multiple versions of `tauri-winrt-notification` in our dependency tree and can therefore remove this exclusion rule. To ensure that we don't forget to update these in the future, we now deny the `unnecessary-skip` lint that warns us when we have one of those entries. |
||
|
|
574bd75ae5 |
build(rust): depend on quinn-udp's main branch (#8763)
The latest `main` of `quinn-udp` includes important patches that will surface errors around dropped packets. |
||
|
|
e0f94824df |
fix(gateway): default to 1 TUN thread on single-core systems (#8765)
On single-core systems, spawning more than one TUN thread results in contention that hurts performance more than it helps. Resolves: #8760 |
||
|
|
439da65180 |
chore(connlib): log all tunnel errors on WARN (#8764)
Currently, errors encountered as part of operating the tunnel are non-fatal and only logged on `TRACE` in order to not flood the logs. Recent improvements around how the event loop operates made it such that we actually emit a lot less errors and ideally there should be 0. Therefore we can now employ a much more strict policy and log all errors here on `WARN` in order to get Sentry alerts. |
||
|
|
132487c29e |
fix(connlib): correctly compute the GSO batch size (#8754)
We are currently naively chunking our buffer into `segment_size * max_gso_segments()`. `max_gso_segments` is by default 64. Assuming we processed several IP packets, this would quickly balloon to a size that the kernel cannot handle. For example, during an `iperf3` run, we receive _a lot_ of packets at maximum MTU size (1280). With the overhead that we are adding to the packet, this results in a UDP payload size of 1320. ``` 1320 x 64 = 84480 ``` That is way too large for the kernel to handle and it will fail the `sendmsg` call with `EMSGSIZE`. Unfortunately, this error wasn't surfaced because `quinn_udp` handles it internally because it can also happen as a result of MTU probes. We've already patched `quinn_udp` in the past to move the handling of more quinn-specific errors to the infallible `send` function. The same is being done for this error in https://github.com/quinn-rs/quinn/pull/2199. Resolves: #8699 |
||
|
|
289bd35e4c |
feat(connlib): add packet counter metrics (#8752)
This PR adds opentelemetry-based packet counter metrics to `connlib`. By default, the collection of these metrics of disabled. Without a registered metrics-provider, gathering these metrics are effectively no-ops. They will still incur 1 or 2 function calls per packet but that should be negligible compared to other operations such as encryption / decryption. With this system in place, we can in the future add more metrics to make debugging easier. |
||
|
|
245a4d52e9 |
build(deps): bump async-trait from 0.1.83 to 0.1.88 in /rust (#8758)
Bumps [async-trait](https://github.com/dtolnay/async-trait) from 0.1.83 to 0.1.88. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/dtolnay/async-trait/releases">async-trait's releases</a>.</em></p> <blockquote> <h2>0.1.88</h2> <ul> <li>Fix lifetime bounding on generic parameters that have cfg (<a href="https://redirect.github.com/dtolnay/async-trait/issues/289">#289</a>)</li> </ul> <h2>0.1.87</h2> <ul> <li>Documentation improvements</li> </ul> <h2>0.1.86</h2> <ul> <li>Documentation improvements</li> </ul> <h2>0.1.85</h2> <ul> <li>Omit <code>Self: 'async_trait</code> bound in impl when not needed by signature (<a href="https://redirect.github.com/dtolnay/async-trait/issues/284">#284</a>)</li> </ul> <h2>0.1.84</h2> <ul> <li>Support <code>impl Trait</code> in return type (<a href="https://redirect.github.com/dtolnay/async-trait/issues/282">#282</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
77de9dcbf1 |
build(deps-dev): bump vite from 6.2.5 to 6.2.6 in /rust/gui-client in the npm_and_yarn group (#8755)
Bumps the npm_and_yarn group in /rust/gui-client with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `vite` from 6.2.5 to 6.2.6 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v6.2.6</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted -->6.2.6 (2025-04-10)<!-- raw HTML omitted --></h2> <ul> <li>fix: reject requests with <code>#</code> in request-target (<a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19830">#19830</a>) (<a href=" |
||
|
|
e4f9fd5f29 |
build(deps-dev): bump vite from 6.2.4 to 6.2.5 in /rust/gui-client in the npm_and_yarn group (#8662)
Bumps the npm_and_yarn group in /rust/gui-client with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite). Updates `vite` from 6.2.4 to 6.2.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/releases">vite's releases</a>.</em></p> <blockquote> <h2>v6.2.5</h2> <p>Please refer to <a href="https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md">CHANGELOG.md</a> for details.</p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md">vite's changelog</a>.</em></p> <blockquote> <h2><!-- raw HTML omitted -->6.2.5 (2025-04-03)<!-- raw HTML omitted --></h2> <ul> <li>fix: backport <a href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/19782">#19782</a>, fs check with svg and relative paths (<a href=" |
||
|
|
681c3efeca |
build(deps): bump crossbeam-channel from 0.5.13 to 0.5.15 in /rust in the cargo group (#8742)
Bumps the cargo group in /rust with 1 update: [crossbeam-channel](https://github.com/crossbeam-rs/crossbeam). Updates `crossbeam-channel` from 0.5.13 to 0.5.15 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/crossbeam-rs/crossbeam/releases">crossbeam-channel's releases</a>.</em></p> <blockquote> <h2>crossbeam-channel 0.5.15</h2> <ul> <li>Fix regression introduced in 0.5.12 that can lead to a double free when dropping unbounded channel. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1187">#1187</a>)</li> </ul> <h2>crossbeam-channel 0.5.14</h2> <ul> <li>Fix stack overflow when sending large value to unbounded channel. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1146">#1146</a>, <a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1147">#1147</a>)</li> <li>Add <code>Select::new_biased</code> function. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1150">#1150</a>)</li> <li>Remove inefficient spinning. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1154">#1154</a>)</li> <li>Suppress buggy <code>clippy::zero_repeat_side_effects</code> lint in macro generated code. (<a href="https://redirect.github.com/crossbeam-rs/crossbeam/issues/1123">#1123</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
25267b18c8 |
feat(connlib): flush UDP and TUN concurrently (#8737)
Upon each tick of the event loop `connlib` first attempts to flush pending UDP packets to the socket, followed by packets queued for sending out on the TUN device. In case the UDP socket is busy, we suspend the event loop until we can send more packets there. This isn't quite as efficient as we can be. Whilst waiting for the UDP socket, we can still write packets to the TUN device. With this patch, we attempt to do both. In case either of them couldn't quite finish their work, we still return `Poll::Pending` to signal the event loop to suspend, preventing us from accepting more work than we can handle. |
||
|
|
0a46fdf7b5 |
chore(rust): remove dev stage in Dockerfile (#8688)
We don't ever use the `dev` stage within our Rust Dockerfile that actually builds the binaries within the container. In CI, we build the binaries on the host and then copy them in. During local development, I always do the same because it is much faster to iterate that way. Long story short: We don't need this stage within our Dockerfile and it causes confusion when people try to use `docker compose build`. If somebody really wanted to do that, they need to follow the instructions in the Dockerfile and build the binary first. Related: #8687 --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> Co-authored-by: Jamil <jamilbk@users.noreply.github.com> |
||
|
|
6d6db3346d |
test(connlib): increase grace period for unit test (#8738)
This test appears to be sometimes flaky in CI, likely due to noisy neighbours. |
||
|
|
6eab29a770 |
feat(connlib): supply multiple buffers to UDP socket (#8733)
At present, `connlib` uses `quinn-udp`'s GRO functionality to read multiple UDP packets within a single syscall. We are however only passing a single buffer and a single `RecvMeta` to the `recv` function. As a result, the function is limited to giving us only packets that originate from one particular IP. By supplying multiple buffers (and their according `RecvMeta`s), we can now read packets from up to 10 different IPs at once within a single syscall. To obtain multiple buffers, we need to split the provided buffer into equal chunks. To ensure that each buffer can still hold several packets, we increase the buffer size to 1MB. It is expected that is increases throughput especially on Gateways which receive UDP packets from many different IPs. --------- Signed-off-by: Thomas Eizinger <thomas@eizinger.io> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
|
|
dc92ee7251 |
build(rust): bump hostname dependency (#8729)
This removes yet another duplicate entry of `windows` from our dependency graph. |
||
|
|
c5751d9bb2 |
build(deps): bump @tailwindcss/cli from 4.1.1 to 4.1.3 in /rust/gui-client (#8721)
Bumps [@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-cli) from 4.1.1 to 4.1.3. <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.3</h2> <h3>Fixed</h3> <ul> <li>Show warning when using unsupported bare value data type in <code>--value(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17464">#17464</a>)</li> <li>PostCSS: Ensure changes to the input CSS file don't generate stale output when using Turbopack (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17554">#17554</a>)</li> <li>Ensure classes are detected in Ruby's <code>%w</code> syntax in Slim templates (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17557">#17557</a>)</li> </ul> <h2>v4.1.2</h2> <h3>Fixed</h3> <ul> <li>Don't rely on the presence of <code>@layer base</code> to polyfill <code>@property</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17506">#17506</a>)</li> <li>Support setting multiple inset shadows as arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17523">#17523</a>)</li> <li>Fix <code>drop-shadow-*</code> utilities that are defined with multiple shadows (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17515">#17515</a>)</li> <li>PostCSS: Fix race condition when two changes are queued concurrently (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>PostCSS: Ensure files containing <code>@tailwind utilities</code> are processed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>Ensure the <code>color-mix(…)</code> polyfill creates fallbacks even when using colors that cannot be statically analyzed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17513">#17513</a>)</li> <li>Fix slow incremental builds with <code>@tailwindcss/vite</code> and <code>@tailwindcss/postscss</code> (especially on Windows) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17511">#17511</a>)</li> <li>Vite: Fix missing CSS file in Qwik setups (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17533">#17533</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.3] - 2025-04-04</h2> <h3>Fixed</h3> <ul> <li>Show warning when using unsupported bare value data type in <code>--value(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17464">#17464</a>)</li> <li>PostCSS: Ensure changes to the input CSS file don't generate stale output when using Turbopack (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17554">#17554</a>)</li> <li>Ensure classes are detected in Ruby's <code>%w</code> syntax in Slim templates (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17557">#17557</a>)</li> </ul> <h2>[4.1.2] - 2025-04-03</h2> <h3>Fixed</h3> <ul> <li>Don't rely on the presence of <code>@layer base</code> to polyfill <code>@property</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17506">#17506</a>)</li> <li>Support setting multiple inset shadows as arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17523">#17523</a>)</li> <li>Fix <code>drop-shadow-*</code> utilities that are defined with multiple shadows (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17515">#17515</a>)</li> <li>PostCSS: Fix race condition when two changes are queued concurrently (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>PostCSS: Ensure files containing <code>@tailwind utilities</code> are processed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>Ensure the <code>color-mix(…)</code> polyfill creates fallbacks even when using colors that cannot be statically analyzed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17513">#17513</a>)</li> <li>Fix slow incremental builds with <code>@tailwindcss/vite</code> and <code>@tailwindcss/postscss</code> (especially on Windows) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17511">#17511</a>)</li> <li>Vite: Fix missing CSS file in Qwik setups (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17533">#17533</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
7cfabe8b50 |
build(deps-dev): bump tailwindcss from 4.0.17 to 4.1.3 in /rust/gui-client (#8713)
Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) from 4.0.17 to 4.1.3. <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.3</h2> <h3>Fixed</h3> <ul> <li>Show warning when using unsupported bare value data type in <code>--value(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17464">#17464</a>)</li> <li>PostCSS: Ensure changes to the input CSS file don't generate stale output when using Turbopack (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17554">#17554</a>)</li> <li>Ensure classes are detected in Ruby's <code>%w</code> syntax in Slim templates (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17557">#17557</a>)</li> </ul> <h2>v4.1.2</h2> <h3>Fixed</h3> <ul> <li>Don't rely on the presence of <code>@layer base</code> to polyfill <code>@property</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17506">#17506</a>)</li> <li>Support setting multiple inset shadows as arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17523">#17523</a>)</li> <li>Fix <code>drop-shadow-*</code> utilities that are defined with multiple shadows (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17515">#17515</a>)</li> <li>PostCSS: Fix race condition when two changes are queued concurrently (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>PostCSS: Ensure files containing <code>@tailwind utilities</code> are processed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>Ensure the <code>color-mix(…)</code> polyfill creates fallbacks even when using colors that cannot be statically analyzed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17513">#17513</a>)</li> <li>Fix slow incremental builds with <code>@tailwindcss/vite</code> and <code>@tailwindcss/postscss</code> (especially on Windows) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17511">#17511</a>)</li> <li>Vite: Fix missing CSS file in Qwik setups (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17533">#17533</a>)</li> </ul> <h2>v4.1.1</h2> <h3>Fixed</h3> <ul> <li>Disable padding in <code>@source inline(…)</code> brace expansion (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17491">#17491</a>)</li> <li>Inject polyfills after <code>@import</code> and body-less <code>@layer</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17493">#17493</a>)</li> <li>Ensure <code>@tailwindcss/cli</code> does not contain an import for <code>jiti</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17502">#17502</a>)</li> </ul> <h2>v4.1.0</h2> <h3>Added</h3> <ul> <li>Add <code>details-content</code> variant (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/15319">#15319</a>)</li> <li>Add <code>inverted-colors</code> variant (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/11693">#11693</a>)</li> <li>Add <code>noscript</code> variant (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/11929">#11929</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17431">#17431</a>)</li> <li>Add <code>items-baseline-last</code> and <code>self-baseline-last</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/13888">#13888</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17476">#17476</a>)</li> <li>Add <code>pointer-none</code>, <code>pointer-coarse</code>, and <code>pointer-fine</code> variants (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16946">#16946</a>)</li> <li>Add <code>any-pointer-none</code>, <code>any-pointer-coarse</code>, and <code>any-pointer-fine</code> variants (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16941">#16941</a>)</li> <li>Add safe alignment utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/14607">#14607</a>)</li> <li>Add <code>user-valid</code> and <code>user-invalid</code> variants (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/12370">#12370</a>)</li> <li>Add <code>wrap-anywhere</code>, <code>wrap-break-word</code>, and <code>wrap-normal</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/12128">#12128</a>)</li> <li>Add <code>@source inline(…)</code> and <code>@source not inline(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17147">#17147</a>)</li> <li>Add <code>@source not "…"</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17255">#17255</a>)</li> <li>Add <code>text-shadow-*</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17389">#17389</a>)</li> <li>Add <code>mask-*</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17134">#17134</a>)</li> <li>Add <code>bg-{position,size}-*</code> utilities for arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17432">#17432</a>)</li> <li>Add <code>shadow-*/<alpha></code>, <code>inset-shadow-*/<alpha></code>, <code>drop-shadow-*/<alpha></code>, and <code>text-shadow-*/<alpha></code> utilities to control shadow opacity (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17398">#17398</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17434">#17434</a>)</li> <li>Add <code>drop-shadow-<color></code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17434">#17434</a>)</li> <li>Improve compatibility with older versions of Safari and Firefox (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17435">#17435</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Follow symlinks when resolving <code>@source</code> directives (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17391">#17391</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">tailwindcss's changelog</a>.</em></p> <blockquote> <h2>[4.1.3] - 2025-04-04</h2> <h3>Fixed</h3> <ul> <li>Show warning when using unsupported bare value data type in <code>--value(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17464">#17464</a>)</li> <li>PostCSS: Ensure changes to the input CSS file don't generate stale output when using Turbopack (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17554">#17554</a>)</li> <li>Ensure classes are detected in Ruby's <code>%w</code> syntax in Slim templates (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17557">#17557</a>)</li> </ul> <h2>[4.1.2] - 2025-04-03</h2> <h3>Fixed</h3> <ul> <li>Don't rely on the presence of <code>@layer base</code> to polyfill <code>@property</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17506">#17506</a>)</li> <li>Support setting multiple inset shadows as arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17523">#17523</a>)</li> <li>Fix <code>drop-shadow-*</code> utilities that are defined with multiple shadows (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17515">#17515</a>)</li> <li>PostCSS: Fix race condition when two changes are queued concurrently (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>PostCSS: Ensure files containing <code>@tailwind utilities</code> are processed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17514">#17514</a>)</li> <li>Ensure the <code>color-mix(…)</code> polyfill creates fallbacks even when using colors that cannot be statically analyzed (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17513">#17513</a>)</li> <li>Fix slow incremental builds with <code>@tailwindcss/vite</code> and <code>@tailwindcss/postscss</code> (especially on Windows) (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17511">#17511</a>)</li> <li>Vite: Fix missing CSS file in Qwik setups (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17533">#17533</a>)</li> </ul> <h2>[4.1.1] - 2025-04-02</h2> <h3>Fixed</h3> <ul> <li>Disable padding in <code>@source inline(…)</code> brace expansion (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17491">#17491</a>)</li> <li>Inject polyfills after <code>@import</code> and body-less <code>@layer</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17493">#17493</a>)</li> <li>Ensure <code>@tailwindcss/cli</code> does not contain an import for <code>jiti</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17502">#17502</a>)</li> </ul> <h2>[4.1.0] - 2025-04-01</h2> <h3>Added</h3> <ul> <li>Add <code>details-content</code> variant (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/15319">#15319</a>)</li> <li>Add <code>inverted-colors</code> variant (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/11693">#11693</a>)</li> <li>Add <code>noscript</code> variant (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/11929">#11929</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17431">#17431</a>)</li> <li>Add <code>items-baseline-last</code> and <code>self-baseline-last</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/13888">#13888</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17476">#17476</a>)</li> <li>Add <code>pointer-none</code>, <code>pointer-coarse</code>, and <code>pointer-fine</code> variants (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16946">#16946</a>)</li> <li>Add <code>any-pointer-none</code>, <code>any-pointer-coarse</code>, and <code>any-pointer-fine</code> variants (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/16941">#16941</a>)</li> <li>Add safe alignment utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/14607">#14607</a>)</li> <li>Add <code>user-valid</code> and <code>user-invalid</code> variants (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/12370">#12370</a>)</li> <li>Add <code>wrap-anywhere</code>, <code>wrap-break-word</code>, and <code>wrap-normal</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/12128">#12128</a>)</li> <li>Add <code>@source inline(…)</code> and <code>@source not inline(…)</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17147">#17147</a>)</li> <li>Add <code>@source not "…"</code> (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17255">#17255</a>)</li> <li>Add <code>text-shadow-*</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17389">#17389</a>)</li> <li>Add <code>mask-*</code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17134">#17134</a>)</li> <li>Add <code>bg-{position,size}-*</code> utilities for arbitrary values (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17432">#17432</a>)</li> <li>Add <code>shadow-*/<alpha></code>, <code>inset-shadow-*/<alpha></code>, <code>drop-shadow-*/<alpha></code>, and <code>text-shadow-*/<alpha></code> utilities to control shadow opacity (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17398">#17398</a>, <a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17434">#17434</a>)</li> <li>Add <code>drop-shadow-<color></code> utilities (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17434">#17434</a>)</li> <li>Improve compatibility with older versions of Safari and Firefox (<a href="https://redirect.github.com/tailwindlabs/tailwindcss/pull/17435">#17435</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
ceca664d59 |
build(deps): bump the tauri group in /rust/gui-client with 2 updates (#8708)
Bumps the tauri group in /rust/gui-client with 2 updates: [@tauri-apps/api](https://github.com/tauri-apps/tauri) and [@tauri-apps/cli](https://github.com/tauri-apps/tauri). Updates `@tauri-apps/api` from 2.4.0 to 2.4.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/tauri-apps/tauri/releases"><code>@tauri-apps/api</code>'s releases</a>.</em></p> <blockquote> <h2><code>@tauri-apps/api</code> v2.4.1</h2> <!-- raw HTML omitted --> <pre><code>No known vulnerabilities found </code></pre> <!-- raw HTML omitted --> <h2>[2.4.1]</h2> <h3>Enhancements</h3> <ul> <li><a href=" |
||
|
|
5b8c8eba01 |
build(deps): bump tauri-winrt-notification from 0.7.0 to 0.7.1 in /rust in the tauri group (#8719)
Bumps the tauri group in /rust with 1 update: [tauri-winrt-notification](https://github.com/tauri-apps/winrt-notification). Updates `tauri-winrt-notification` from 0.7.0 to 0.7.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/tauri-apps/winrt-notification/releases">tauri-winrt-notification's releases</a>.</em></p> <blockquote> <h2>tauri-winrt-notification v0.7.1</h2> <p>Updating crates.io index Locking 19 packages to latest compatible versions</p> <!-- raw HTML omitted --> <pre><code>Fetching advisory database from `https://github.com/RustSec/advisory-db.git` Loaded 734 security advisories (from /home/runner/.cargo/advisory-db) Updating crates.io index Scanning Cargo.lock for vulnerabilities (20 crate dependencies) </code></pre> <!-- raw HTML omitted --> <h2>[0.7.1]</h2> <ul> <li><a href=" |
||
|
|
bca500045b |
build(deps): bump humantime from 2.1.0 to 2.2.0 in /rust (#8722)
Bumps [humantime](https://github.com/chronotope/humantime) from 2.1.0 to 2.2.0. <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/chronotope/humantime/commits">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> |
||
|
|
69e9d23560 |
build(rust): bump notify-rust (#8728)
This removes several duplicated versions of `windows` from our dependency tree. |