Commit Graph

843 Commits

Author SHA1 Message Date
Jamil
5cb6d278d1 chore(deps): Bump next-hubspot to 2.0.0 (#9220)
This dependency had some breaking changes for 2.0.0 which required
updated some variable names from imports.

Supersedes #8991
2025-05-24 22:01:34 +00:00
Jamil
a7054b8f40 ci: Bump apple to 1.4.15 (#9217) 2025-05-24 12:51:27 +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
Jamil
a73c03d7ee docs: Default of false for all macOS plist keys (#9212)
I was mistaken on the defaults of booleans returned by `UserDefaults` -
they're false by default.


https://developer.apple.com/documentation/foundation/userdefaults/bool(forkey:)
2025-05-23 07:26:57 +00:00
Jamil
c61f3ed238 docs: Update Apple changelog with recent additions (#9207) 2025-05-22 21:31:22 +00:00
Jamil
8156b8fb11 docs: Address feedback on macos profile manifest (#9210)
Incorporating feedback from
https://github.com/ProfileManifests/ProfileManifests/pull/791#pullrequestreview-2862167897
2025-05-22 21:17:18 +00:00
Jamil
06551c80c8 fix(website): Use dummy when mixpanel token is blank (#9209)
This fixes an issue on dev if the `NEXT_PUBLIC_MIXPANEL_TOKEN` env var
is not available.
2025-05-22 21:08:11 +00:00
Jamil
100d5f2204 docs: Add iMazing Profile Editor manifest (#9204)
On macOS, we need to use `mobileconfig` files to configure the client.
These are cumbersome to generate by hand and so a number of popular
tools exist to aid in generating these.

One of the more popular options is [iMazing Profile
Editor](https://imazing.com/profile-editor), which maintains a
[repository](https://github.com/ProfileManifests/ProfileManifests) of
popular "Profile Manifests" for various enterprise-managed applications
on Apple.

In addition to opening the PR for the Firezone client in this repo,
we'll want to open one there too so we can be added to the in-app list
of support applications to generate `mobileconfig` files for.
2025-05-22 13:59:47 +00:00
Jamil
af7eaa8cc9 chore: release GUI client 1.4.14 (#9197) 2025-05-21 23:23:45 +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
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
7f4b20ab7f feat(gui-client): show "Welcome" screen on 2nd app launch (#9136)
Resolves: #8352.
2025-05-15 08:20:24 +00:00
Thomas Eizinger
ce06996a14 fix(connlib): allow more than one host candidate per IP version (#9147)
Currently, one machines that have multiple routable egress interfaces,
`connlib` may bounce between the two instead of settling on one. This
happens because we have a dedicated `CandidateSet` that we use to filter
out "duplicate" candidates of the same type. Doing that is important
because if the other party is behind a symmetric NAT, they will send us
many server-reflexive candidates that all only differ by their port,
none of them will actually be routable though.

To prevent sending many of these candidates to the remote, we first
gather them locally in our `CandidateSet` and de-duplicate them.
2025-05-15 02:08:53 +00:00
Thomas Eizinger
85298000b4 ci: ignore HN link in link checker (#9145)
This link repeatedly returns a 403 in our CI link checker, despite being
available.

Fixes: #9140
Fixes: #9120

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
2025-05-14 23:46:16 +00:00
Jamil
13a26326af fix(website): Remove dupe changelog entry (#9138) 2025-05-14 16:37:26 +00:00
Thomas Eizinger
b7451fcdae chore: release Gateway 1.4.9 (#9132) 2025-05-14 06:39:03 +00:00
Thomas Eizinger
a7ef588d86 chore: release headless client 1.4.8 (#9131) 2025-05-14 06:17:29 +00:00
Thomas Eizinger
5a4e72954f chore: release GUI client 1.4.13 (#9130) 2025-05-14 06:09:01 +00:00
Jamil
f19702f53e feat(apple): Allow user-configurable account slug (#9119)
Now that configuration is persisted in a more reasonable fashion, we can
expose a new `General` section to the Settings, allowing the user to
configure an account slug.

This field will automatically be populated upon the first sign in, so
that subsequent sign-ins will take the user directly to the account sign
in page.


Fixes #5119 
Related #8919

---------

Signed-off-by: Jamil <jamilbk@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-14 04:17:29 +00:00
Jamil
53b505e748 chore(website): Remove outdated battlecard (#9117)
This is outdated and probably doesn't send a strong message in its
current form.
2025-05-13 15:41:06 +00:00
Thomas Eizinger
407a67cb40 docs: add changelog entries for several issues (#9113)
As part of going through the changes since the last Client and Gateway
relies, I noticed that for several of the things we fixed, it might be
worth adding changelog entries.
2025-05-13 13:35:02 +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
Thomas Eizinger
ac339ff63b fix(gateway): evaluate fastest nameserver every 60s (#9060)
Currently, the Gateway reads all nameservers from `/etc/resolv.conf` on
startup and evaluates the fastest one to use for SRV and TXT DNS queries
that are forwarded by the Client. If the machine just booted and we do
not have Internet connectivity just yet, this fails which leaves the
Gateway in state where it cannot fulfill those queries.

In order to ensure we always use the fastest one and to self-heal from
such situations, we add a 60s timer that refreshes this state.
Currently, this will **not** re-read the nameservers from
`/etc/resolv.conf` but still use the same IPs read on startup.
2025-05-09 03:38:35 +00:00
Thomas Eizinger
33d5c32f35 fix(gateway): truncate payload of ICMP errors (#9059)
When the Gateway is handed an IP packet for a DNS resource that it
cannot route, it sends back an ICMP unreachable error. According to RFC
792 [0] (for ICMPv4) and RFC 4443 [1] (for ICMPv6), parts of the
original packet should be included in the ICMP error payload to allow
the sending party to correlate, what could not be sent.

For ICMPv4, the RFC says:

```
Internet Header + 64 bits of Data Datagram

The internet header plus the first 64 bits of the original
datagram's data.  This data is used by the host to match the
message to the appropriate process.  If a higher level protocol
uses port numbers, they are assumed to be in the first 64 data
bits of the original datagram's data.
```

For ICMPv6, the RFC says:

```
As much of invoking packet as possible without the ICMPv6 packet exceeding the minimum IPv6 MTU
```

[0]: https://datatracker.ietf.org/doc/html/rfc792
[1]: https://datatracker.ietf.org/doc/html/rfc4443#section-3.1
2025-05-09 01:38:31 +00:00
Thomas Eizinger
005b6fe863 feat(windows): optimise network change detection (#9021)
Presently, the network change detection on Windows is very naive and
simply emits a change event everytime _anything_ changes. We can
optimise this and therefore improve the start-up time of Firezone by:

- Filtering out duplicate events
- Filtering out network change events for our own network adapter

This reduces the number of network change events to 1 during startup. As
far as I can tell from the code comments in this area, we explicitly
send this one to ensure we don't run into a race condition whilst we are
starting up.

Resolves: #8905
2025-05-06 00:23:27 +00:00
Thomas Eizinger
ea475c721a docs(website): update changelog for latest releases (#9015)
In #9013, we forgot to update the changelogs for Apple Clients and the
Gateway.
2025-05-02 13:16:28 +00:00
Jamil
6e0e7343ba chore: release Apple & Gateway with ECN fix (#9013) 2025-05-02 00:16:40 -07:00
Thomas Eizinger
513e0a400c docs(website): update Apple changelog (#9011) 2025-05-02 05:55:25 +00:00
Thomas Eizinger
0aab954fa9 fix(connlib): never clear ECT from IP packets (#9009)
ECN information is helpful to allow the congestion controllers to more
easily fine-tune their send and receive windows. When a Firezone Client
receives an IP packet where the ECN bits signal an ECN capable
transport, we mirror this bit on the UDP datagram that carries the
encrypted IP packet.

When receiving a datagram with ECN bits set, the Gateway will then apply
these bits to the decrypted IP packet and pass it along towards its
destination.

This implementation is unfortunately a bit too naive. Not all devices on
the Internet support ECN and therefore, we may receive a datagram that
has its ECN bits cleared when the ECN bits on the inner IP packet still
signal an ECN capable transport. In this case, we should _not_ override
the ECN bits and instead pass the IP packet along as is. Network devices
along the path between Gateway and Resource may still use these ECN bits
to signal congestion.

We fix this by making the `with_ecn` function on `IpPacket` private. It
is not meant to be used outside of the module. We supersede it with a
`with_ecn_from_transport` function that implements the above logic.

---------

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2025-05-02 05:28:19 +00:00
dependabot[bot]
446421c6f0 build(deps): bump framer-motion from 12.7.4 to 12.9.4 in /website (#8992)
Bumps [framer-motion](https://github.com/motiondivision/motion) from
12.7.4 to 12.9.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/motiondivision/motion/blob/main/CHANGELOG.md">framer-motion's
changelog</a>.</em></p>
<blockquote>
<h2>[12.9.4] 2025-05-01</h2>
<h3>Fixed</h3>
<ul>
<li>Remove version check for <code>MotionValue</code>.</li>
</ul>
<h2>[12.9.3] 2025-05-01</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed memory leak when unmounting <code>motion</code>
components.</li>
</ul>
<h2>[12.9.2] 2025-04-25</h2>
<h3>Fixed</h3>
<ul>
<li>Fixed scroll timeline cache when defining <code>offset</code>.</li>
<li>Detect when page scroll is attached to <code>document.body</code>
and use this instead of <code>document.documentElement</code>.</li>
</ul>
<h2>[12.9.1] 2025-04-24</h2>
<h3>Fixed</h3>
<ul>
<li>Restarting a finished main thread animation with a negative
<code>.speed</code> now works as expected.</li>
</ul>
<h2>[12.9.0] 2025-04-24</h2>
<h3>Added</h3>
<ul>
<li><code>styleEffect</code></li>
</ul>
<h2>[12.8.3] 2025-04-24</h2>
<h3>Changed</h3>
<ul>
<li>Animating a <code>MotionValue</code> to its current value will skip
creating the animation.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Ensure <code>.then()</code> fires when <code>.stop()</code> or
<code>.cancel()</code> are called. This is undesired but reverts the
behaviour to before <code>12.7.5</code>.</li>
</ul>
<h2>[12.8.2] 2025-04-24</h2>
<h3>Changed</h3>
<ul>
<li>Unifying <code>transform</code> behaviour for SVG and CSS switched
from element measurements for <code>transform-box: fill-box</code>.</li>
</ul>
<h2>[12.8.1] 2025-04-23</h2>
<h3>Fixed</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="3edb39e9d4"><code>3edb39e</code></a>
v12.9.4</li>
<li><a
href="4efee1e8b8"><code>4efee1e</code></a>
Removing version check for motion values</li>
<li><a
href="0b38e02fad"><code>0b38e02</code></a>
v12.9.3</li>
<li><a
href="3d2c631d90"><code>3d2c631</code></a>
Updating changelog</li>
<li><a
href="5e7d5b5db3"><code>5e7d5b5</code></a>
Merge pull request <a
href="https://redirect.github.com/motiondivision/motion/issues/3178">#3178</a>
from motiondivision/fix/release-visual-element</li>
<li><a
href="3eb2de69e4"><code>3eb2de6</code></a>
Fixing memory leak</li>
<li><a
href="0de2c3e9ba"><code>0de2c3e</code></a>
Updating</li>
<li><a
href="02fcf86f80"><code>02fcf86</code></a>
Updating changelog</li>
<li><a
href="af6e9feffd"><code>af6e9fe</code></a>
Updating default scroll element</li>
<li><a
href="15befa76f6"><code>15befa7</code></a>
Updating funding address</li>
<li>Additional commits viewable in <a
href="https://github.com/motiondivision/motion/compare/v12.7.4...v12.9.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=framer-motion&package-manager=npm_and_yarn&previous-version=12.7.4&new-version=12.9.4)](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-05-01 16:46:49 +00:00
dependabot[bot]
9022ead6ca build(deps): bump fast-xml-parser from 5.2.0 to 5.2.1 in /website (#8963)
Bumps
[fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser)
from 5.2.0 to 5.2.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md">fast-xml-parser's
changelog</a>.</em></p>
<blockquote>
<p><!-- raw HTML omitted -->Note: If you find missing information about
particular minor version, that version must have been changed without
any functional change in this library.<!-- raw HTML omitted --></p>
<p><strong>5.2.1 / 2025-04-22</strong></p>
<ul>
<li>fix: read DOCTYPE entity value correctly</li>
<li>read DOCTYPE NOTATION, ELEMENT exp but not using read values</li>
</ul>
<p><strong>5.2.0 / 2025-04-03</strong></p>
<ul>
<li>feat: support metadata on nodes (<a
href="https://redirect.github.com/NaturalIntelligence/fast-xml-parser/issues/593">#593</a>)
(By <a href="https://github.com/srl295">Steven R. Loomis</a>)</li>
</ul>
<p><strong>5.1.0 / 2025-04-02</strong></p>
<ul>
<li>feat: declare package as side-effect free (<a
href="https://redirect.github.com/NaturalIntelligence/fast-xml-parser/issues/738">#738</a>)
(By <a href="https://github.com/tbouffard">Thomas Bouffard</a>)</li>
<li>fix cjs build mode</li>
<li>fix builder return type to string</li>
<li></li>
</ul>
<p><strong>5.0.9 / 2025-03-14</strong></p>
<ul>
<li>fix: support numeric entities with values over 0xFFFF (<a
href="https://redirect.github.com/NaturalIntelligence/fast-xml-parser/issues/726">#726</a>)
(By <a href="https://github.com/mcdurdin">Marc Durdin</a>)</li>
<li>fix: update strnum to fix parsing 0 if skiplike option is used</li>
</ul>
<p><strong>5.0.8 / 2025-02-27</strong></p>
<ul>
<li>fix parsing 0 if skiplike option is used.
<ul>
<li>updating strnum dependency</li>
</ul>
</li>
</ul>
<p><strong>5.0.7 / 2025-02-25</strong></p>
<ul>
<li>fix (<a
href="https://redirect.github.com/NaturalIntelligence/fast-xml-parser/issues/724">#724</a>)
typings for cjs.</li>
</ul>
<p><strong>5.0.6 / 2025-02-20</strong></p>
<ul>
<li>fix cli output (By <a href="https://github.com/angeld7">Angel
Delgado</a>)
<ul>
<li>remove multiple JSON parsing</li>
</ul>
</li>
</ul>
<p><strong>5.0.5 / 2025-02-20</strong></p>
<ul>
<li>fix parsing of string starting with 'e' or 'E' by updating
strnum</li>
</ul>
<p><strong>5.0.4 / 2025-02-20</strong></p>
<ul>
<li>fix CLI to support all the versions of node js when displaying
library version.</li>
<li>fix CJS import in v5
<ul>
<li>by fixing webpack config</li>
</ul>
</li>
</ul>
<p><strong>5.0.3 / 2025-02-20</strong></p>
<ul>
<li>Using strnum ESM module
<ul>
<li>new fixes in strum may break your experience</li>
</ul>
</li>
</ul>
<p><strong>5.0.2 / 2025-02-20</strong></p>
<ul>
<li>fix: include CommonJS resources in the npm package <a
href="https://redirect.github.com/NaturalIntelligence/fast-xml-parser/issues/714">#714</a>
(By <a href="https://github.com/tbouffard">Thomas Bouffard</a>)</li>
<li>fix: move babel deps to dev deps</li>
</ul>
<p><strong>5.0.1 / 2025-02-19</strong></p>
<ul>
<li>fix syntax error for CLI command</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="62365df401"><code>62365df</code></a>
update docs and package info</li>
<li><a
href="0c0b3673bf"><code>0c0b367</code></a>
feat: read DOCTYPE ELEMENT exp</li>
<li><a
href="38d023473f"><code>38d0234</code></a>
refactored code of DOCTYPE</li>
<li><a
href="7c6cba497c"><code>7c6cba4</code></a>
feat read DOCTYPE NOTATION exp</li>
<li><a
href="7589705052"><code>7589705</code></a>
fix: DOCTYPE entity value should be read correctly</li>
<li><a
href="02eb4a7539"><code>02eb4a7</code></a>
Update SECURITY.md</li>
<li><a
href="bfeb50432e"><code>bfeb504</code></a>
fix typo in CHANGELOG.md (<a
href="https://redirect.github.com/NaturalIntelligence/fast-xml-parser/issues/743">#743</a>)</li>
<li>See full diff in <a
href="https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.2.0...v5.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=fast-xml-parser&package-manager=npm_and_yarn&previous-version=5.2.0&new-version=5.2.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-05-01 13:58:05 +00:00
dependabot[bot]
99cd9d1dec build(deps): bump @types/node from 22.14.0 to 22.15.3 in /website (#8961)
Bumps
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
from 22.14.0 to 22.15.3.
<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.14.0&new-version=22.15.3)](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-05-01 13:57:51 +00:00
dependabot[bot]
74339f394b build(deps): bump rehype-highlight from 7.0.1 to 7.0.2 in /website (#8960)
Bumps [rehype-highlight](https://github.com/rehypejs/rehype-highlight)
from 7.0.1 to 7.0.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rehypejs/rehype-highlight/releases">rehype-highlight's
releases</a>.</em></p>
<blockquote>
<h2>7.0.2</h2>
<h4>Fix</h4>
<ul>
<li>5c3b277 Fix multiple <code>code</code>s in a <code>pre</code></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/rehypejs/rehype-highlight/compare/7.0.1...7.0.2">https://github.com/rehypejs/rehype-highlight/compare/7.0.1...7.0.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="86a5e9b1a5"><code>86a5e9b</code></a>
7.0.2</li>
<li><a
href="ff5d9df3ca"><code>ff5d9df</code></a>
Refactor tests</li>
<li><a
href="5c3b27763d"><code>5c3b277</code></a>
Fix multiple <code>code</code>s in a <code>pre</code></li>
<li><a
href="093fed2853"><code>093fed2</code></a>
Refactor example</li>
<li><a
href="62755288fa"><code>6275528</code></a>
Refactor <code>package.json</code></li>
<li><a
href="6a63f71624"><code>6a63f71</code></a>
Update tests for changes in <code>lowlight</code></li>
<li><a
href="36727b6df4"><code>36727b6</code></a>
Update dev-dependencies</li>
<li><a
href="241ced97b2"><code>241ced9</code></a>
Update Actions</li>
<li>See full diff in <a
href="https://github.com/rehypejs/rehype-highlight/compare/7.0.1...7.0.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rehype-highlight&package-manager=npm_and_yarn&previous-version=7.0.1&new-version=7.0.2)](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-05-01 13:57:24 +00:00
Thomas Eizinger
ec4cd898ba chore: release Gateway v1.4.7 (#8943) 2025-04-30 13:37:32 +00:00
Thomas Eizinger
96998a43ae docs(website): add missing changelog entry for Apple Clients (#8938) 2025-04-30 07:14:33 +00:00
Thomas Eizinger
f7df445924 fix(gateway): don't invalidate active NAT sessions (#8937)
Whenever the Gateway is instructed to (re)create the NAT for a DNS
resource, it performs a DNS query and then overwrite the existing
entries in the NAT table. Depending on how the DNS records are defined,
this may lead to a very bad user experience where connections are cut
regularly.

In particular, if a service utilises round-robin DNS where a DNS query
only ever returns a single entry yet that entry may change as soon as
the TTL expires, all connections for this particular DNS resource for a
Client get cut.

To fix this, we now first check for active NAT sessions for a given
proxy IP and only replace it if we don't have an open NAT session. The
NAT sessions have a TTL of 1 minute, meaning there needs to be at least
1 outgoing packet from the Client every minute to keep it open.
2025-04-30 06:58:58 +00:00
Jamil
2650d81444 chore: release clients with GSO fix (#8936) 2025-04-29 23:52:43 -07:00
Thomas Eizinger
6dc5f85cc5 fix(connlib): don't buffer when recreating DNS resource NAT (#8935)
In order to detect changes to DNS records of DNS resources, `connlib`
will recreate the DNS resource NAT whenever it receives a query for a
DNS resource. The way we implemented this was by clearing the local
state of the DNS resource NAT, which triggered us to perform the
handshake with the Gateway again upon the next packet for this resource.
The Gateway would then perform the DNS query and respond back when this
was finished.

In order to not drop any packets, `connlib` has a buffer where it keeps
the packets that are arriving in the meantime. This works reasonably
well when the connection is first set up because we are only buffering a
TCP SYN or equivalent handshake packet. Yet, when the connection is full
use, and the application just so happens to make another DNS query, we
halt the entire flow of packets until this is confirmed again. To
prevent high memory use, the buffer for this packets is constrained to
32 packets which is nowhere near enough when a connection is actively
transferring data (like a file upload).

In most cases, the DNS query on the Gateway will yield the exact same
results as because the records haven't changed. Thus, there is no reason
for us to actually halt the flow of these packets when we are
_recreating_ the DNS resource NAT. That way, this handshake happens in
parallel to the actual packet flow and does not interrupt anything in
the happy path case.
2025-04-30 04:26:49 +00:00
Thomas Eizinger
122d84cfa2 fix(connlib): recreate log file if it got deleted (#8926)
Currently, when `connlib`'s log file gets deleted, we write logs into
nirvana until the corresponding process gets restarted. This is painful
for users to do because they need to restart the IPC service or Network
Extension. Instead, we can simply check if the log file exists prior to
writing to it and re-create it if it doesn't.

Resolves: #6850
Related: #7569
2025-04-29 13:05:02 +00:00
Thomas Eizinger
bbc9c29d5d docs(website): add changelog for #8920 (#8923) 2025-04-29 10:23:48 +00:00
Thomas Eizinger
ad9a453aa1 feat(linux-client): reduce number of TUN threads to 1 (#8914)
Having multiple threads for reading and writing the TUN device can cause
packet re-orderings on the client. All other clients only use a single
TUN thread, so aligning this value means a more consistent behaviour of
Firezone across all platforms.
2025-04-28 12:25:27 +00:00
Jamil
f181a3245b chore(website): Remove old docs (#8895)
These confuse users and are horribly outdated.

Fixes #8528
2025-04-23 15:24:09 +00:00
Thomas Eizinger
ac5e44d5d0 feat(connlib): request larger buffers for UDP sockets (#8731)
Sufficiently large receive buffers are important to sustain
high-throughput as latency increases. If the receive buffer in the
kernel is too small, packets need to be dropped on arrival.

Firefox uses 1MB in its QUIC stack [0]. `quic-go` recommends to set send
and receive buffers to 7.5 MB [1]. Power users of Firezone are likely
receiving a lot more traffic than the average Firefox user (especially
with Internet Resource activated) so setting it to 10 MB seems
reasonable. Sending packets is likely not as critical because we have
back-pressure through our system such that we will stop reading IP
packets when we cannot write to our UDP socket. The UDP socket is
sitting in a separate thread and those threads are connected with
dedicated queues which act as another buffer. However, as the data below
shows, some systems have really small send buffers which are currently
likely a speed bottleneck because we need to suspend writing so
frequently.

Assuming a 50ms latency, the bandwidth-delay product tells us that we
can (in theory) saturate a 1.6 Gbps link with a 10MB receive buffer
(assuming the OS also has large enough buffer sizes in its TCP or QUIC
stack):

```
80 Mb / 0.05s = 1600Mbps
```

Experiments and research [2] show the following:

|OS|Receive buffer (default)|Receive buffer (this PR)|Send buffer
(default)|Send buffer (this PR)|
|---|---|---|---|---|
|Windows|65KB|10MB|65KB|1MB|
|MacOS|786KB|8MB|9KB|1MB|
|Linux|212KB|212KB|212KB|212KB|

With the exception of Linux, the OSes appear to be quite generous with
how big they allow receive buffers to be. On Linux, these limit can be
changed by setting the `core.net.rmem_max` and `core.net.wmem_max`
parameters using `sysctl`.

Most of our users are on Windows and MacOS, meaning they immediately
benefit from this without having to change any system settings. Larger
client-side UDP receive buffers are critical for any "download" scenario
which is likely the majority of usecases that Firezone is used for.

On Windows, increasing this receive buffer almost doubles the throughput
in an iperf3 download test.

[0]: https://github.com/mozilla/neqo/pull/2470
[1]: https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes
[2]: https://unix.stackexchange.com/a/424381

---------

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2025-04-22 06:52:33 +00:00
Jamil
5db8e20f3b chore: release Apple and GUI clients (#8882)
- Apple clients 1.4.12
- GUI clients 1.4.11
2025-04-21 21:45:16 +00:00
Jamil
368ace2c6e ci: Release Android 1.4.7 (#8878)
App is live on Play store.
2025-04-21 21:12:27 +00:00
Thomas Eizinger
4c5fd9b256 feat(connlib): prefer relay candidates of same IP version (#8798)
When calculating preferences for candidates, `str0m` currently always
prefer IPv6 over IPv4. This is as per the ICE spec. Howver, this can
lead to sub-optimal situations when a connection ends up using a TURN
server.

TURN allows a client to allocate an IPv4 and an IPv6 address in the same
allocation. This makes it possible for e.g. an IPv4-only client to
connect to an IPv6-only peer as long as the TURN server runs in
dual-stack AND the client requests an IPv6 address in addition to an
IPv4 address with the `ADDITIONAL-ADDRESS-FAMILY` attribute.

Assume that a client sits behind symmetric NAT and therefore needs to
rely on a TURN server to communicate with its peers. The TURN server as
well as all the peers operate in dual-stack mode.

The current priority calculation will yield a communication path that
uses IPv4 to talk to the TURN server (as that is the only one available)
but due to the preference ordering of IPv6 over IPv4, will use an IPv6
path to the peer, despite the peer also supporting IPv4.

This isn't a problem per-se but makes our life unnecessarily difficult.
Our TURN servers use eBPF to efficiently deal with TURN's channel-data
messages. This however is at present only implemented for the IPv4 <>
IPv4 and IPv6 <> IPv6 path. Implementing the other paths is possible but
complicates the eBPF code because we need to also translate IP headers
between versions and not just update the source and destination IPs.

We have since patched `str0m` to extend the `Candidate::relayed`
constructor to also take a `base` address which is - similar to the
other candidate types - the address the client is sending from in order
to use this candidate. In the context of relayed candidates, this is the
address the client is using to talk to the TURN server. We can use this
information in the candidate's priority calculation to prefer candidates
that allow traffic to remain within one IP version, i.e. if the client
talks to the TURN server over IPv4, the candidate with an allocated IPv4
address will have a higher priority than the one with the IPv6 address
because we are applying a "punishment" factor as part of the
local-preference component in the priority formula.

Staying within the same IP version whilst relaying traffic allows our
TURN servers to use their eBPF kernel which results in a better UX due
to lower latency and higher throughput.

The final candidate ordering is ultimately decided by the controlling
ICE agent which in our case is the Firezone Client. Thus, we don't
necessarily need to update Gateways in order to test / benefit from
this. Building a Client with this patch included should be enough to
benefit from this change.

Related: https://github.com/algesten/str0m/pull/640
Related: https://github.com/algesten/str0m/pull/644
2025-04-20 22:41:56 +00:00
Thomas Eizinger
f7f6e3885d docs(website): remove duplicate init (#8860)
Resolves: #8858
2025-04-19 22:09:06 +00:00
dependabot[bot]
83a1467ee2 build(deps): bump @next/third-parties from 15.1.6 to 15.3.1 in /website (#8828)
Bumps
[@next/third-parties](https://github.com/vercel/next.js/tree/HEAD/packages/third-parties)
from 15.1.6 to 15.3.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vercel/next.js/releases"><code>@​next/third-parties</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v15.3.1</h2>
<blockquote>
<p>[!NOTE]<br />
This release is backporting bug fixes. It does <strong>not</strong>
include all pending features/changes on canary.</p>
</blockquote>
<h3>Core Changes</h3>
<ul>
<li>chore: Backport SWC-based RC optimization (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78260">#78260</a>)</li>
<li>fix: bump image-size@1.2.1 (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78164">#78164</a>)</li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/kdy1"><code>@​kdy1</code></a> and <a
href="https://github.com/styfle"><code>@​styfle</code></a> for
helping!</p>
<h2>v15.3.1-canary.14</h2>
<h3>Core Changes</h3>
<ul>
<li>Add graceful error boundary for bots requests: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78298">#78298</a></li>
<li>make sure eslint-plugin-next is built when running 'pnpm dev': <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78305">#78305</a></li>
<li>Migrate pages API routes to handler interface: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78166">#78166</a></li>
<li>Update middleware public/static matching: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78325">#78325</a></li>
<li>Fix dynamic route param encoding: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78326">#78326</a></li>
</ul>
<h3>Misc Changes</h3>
<ul>
<li>fix(turbopack): Fix duplicate modules when tree shaking: true: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78203">#78203</a></li>
<li>test: try to fix flakiness in amphtml util: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78304">#78304</a></li>
<li>remove BrowserInterface: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78308">#78308</a></li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/kdy1"><code>@​kdy1</code></a>, <a
href="https://github.com/huozhi"><code>@​huozhi</code></a>, <a
href="https://github.com/lubieowoce"><code>@​lubieowoce</code></a>, and
<a href="https://github.com/ijjk"><code>@​ijjk</code></a> for
helping!</p>
<h2>v15.3.1-canary.13</h2>
<h3>Core Changes</h3>
<ul>
<li><code>@next/mdx</code>: Use stable turbopack config options: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78261">#78261</a></li>
<li>Upgrade React from <code>b04254fd-20250415</code> to
<code>4a36d3ea-20250416</code>: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78297">#78297</a></li>
</ul>
<h3>Misc Changes</h3>
<ul>
<li>Turbopack: fix duplicate unsupported edge import modules: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78236">#78236</a></li>
<li>Turbopack: Include Next.js version in panic handler report: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/third-parties/issues/78263">#78263</a></li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/wbinnssmith"><code>@​wbinnssmith</code></a> and
<a href="https://github.com/mischnic"><code>@​mischnic</code></a> for
helping!</p>
<h2>v15.3.1-canary.12</h2>
<h3>Core Changes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fa536cf2c9"><code>fa536cf</code></a>
v15.3.1</li>
<li><a
href="b2ff04995b"><code>b2ff049</code></a>
v15.3.0</li>
<li><a
href="60bfe64295"><code>60bfe64</code></a>
v15.3.0-canary.46</li>
<li><a
href="f71c4a1582"><code>f71c4a1</code></a>
v15.3.0-canary.45</li>
<li><a
href="4451bae75d"><code>4451bae</code></a>
v15.3.0-canary.44</li>
<li><a
href="87d7d8eb7a"><code>87d7d8e</code></a>
v15.3.0-canary.43</li>
<li><a
href="82ab39f801"><code>82ab39f</code></a>
v15.3.0-canary.42</li>
<li><a
href="8f1409d6ce"><code>8f1409d</code></a>
v15.3.0-canary.41</li>
<li><a
href="2139369821"><code>2139369</code></a>
v15.3.0-canary.40</li>
<li><a
href="66514a6bc8"><code>66514a6</code></a>
v15.3.0-canary.39</li>
<li>Additional commits viewable in <a
href="https://github.com/vercel/next.js/commits/v15.3.1/packages/third-parties">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@next/third-parties&package-manager=npm_and_yarn&previous-version=15.1.6&new-version=15.3.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-04-19 20:59:54 +00:00
dependabot[bot]
f25cb59984 build(deps): bump @next/mdx from 15.2.4 to 15.3.1 in /website (#8837)
Bumps
[@next/mdx](https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx)
from 15.2.4 to 15.3.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vercel/next.js/releases"><code>@​next/mdx</code>'s
releases</a>.</em></p>
<blockquote>
<h2>v15.3.1</h2>
<blockquote>
<p>[!NOTE]<br />
This release is backporting bug fixes. It does <strong>not</strong>
include all pending features/changes on canary.</p>
</blockquote>
<h3>Core Changes</h3>
<ul>
<li>chore: Backport SWC-based RC optimization (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78260">#78260</a>)</li>
<li>fix: bump image-size@1.2.1 (<a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78164">#78164</a>)</li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/kdy1"><code>@​kdy1</code></a> and <a
href="https://github.com/styfle"><code>@​styfle</code></a> for
helping!</p>
<h2>v15.3.1-canary.14</h2>
<h3>Core Changes</h3>
<ul>
<li>Add graceful error boundary for bots requests: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78298">#78298</a></li>
<li>make sure eslint-plugin-next is built when running 'pnpm dev': <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78305">#78305</a></li>
<li>Migrate pages API routes to handler interface: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78166">#78166</a></li>
<li>Update middleware public/static matching: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78325">#78325</a></li>
<li>Fix dynamic route param encoding: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78326">#78326</a></li>
</ul>
<h3>Misc Changes</h3>
<ul>
<li>fix(turbopack): Fix duplicate modules when tree shaking: true: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78203">#78203</a></li>
<li>test: try to fix flakiness in amphtml util: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78304">#78304</a></li>
<li>remove BrowserInterface: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78308">#78308</a></li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/kdy1"><code>@​kdy1</code></a>, <a
href="https://github.com/huozhi"><code>@​huozhi</code></a>, <a
href="https://github.com/lubieowoce"><code>@​lubieowoce</code></a>, and
<a href="https://github.com/ijjk"><code>@​ijjk</code></a> for
helping!</p>
<h2>v15.3.1-canary.13</h2>
<h3>Core Changes</h3>
<ul>
<li><code>@next/mdx</code>: Use stable turbopack config options: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78261">#78261</a></li>
<li>Upgrade React from <code>b04254fd-20250415</code> to
<code>4a36d3ea-20250416</code>: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78297">#78297</a></li>
</ul>
<h3>Misc Changes</h3>
<ul>
<li>Turbopack: fix duplicate unsupported edge import modules: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78236">#78236</a></li>
<li>Turbopack: Include Next.js version in panic handler report: <a
href="https://github.com/vercel/next.js/tree/HEAD/packages/next-mdx/issues/78263">#78263</a></li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/wbinnssmith"><code>@​wbinnssmith</code></a> and
<a href="https://github.com/mischnic"><code>@​mischnic</code></a> for
helping!</p>
<h2>v15.3.1-canary.12</h2>
<h3>Core Changes</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fa536cf2c9"><code>fa536cf</code></a>
v15.3.1</li>
<li><a
href="b2ff04995b"><code>b2ff049</code></a>
v15.3.0</li>
<li><a
href="60bfe64295"><code>60bfe64</code></a>
v15.3.0-canary.46</li>
<li><a
href="f71c4a1582"><code>f71c4a1</code></a>
v15.3.0-canary.45</li>
<li><a
href="4451bae75d"><code>4451bae</code></a>
v15.3.0-canary.44</li>
<li><a
href="87d7d8eb7a"><code>87d7d8e</code></a>
v15.3.0-canary.43</li>
<li><a
href="82ab39f801"><code>82ab39f</code></a>
v15.3.0-canary.42</li>
<li><a
href="8f1409d6ce"><code>8f1409d</code></a>
v15.3.0-canary.41</li>
<li><a
href="2139369821"><code>2139369</code></a>
v15.3.0-canary.40</li>
<li><a
href="66514a6bc8"><code>66514a6</code></a>
v15.3.0-canary.39</li>
<li>Additional commits viewable in <a
href="https://github.com/vercel/next.js/commits/v15.3.1/packages/next-mdx">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@next/mdx&package-manager=npm_and_yarn&previous-version=15.2.4&new-version=15.3.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-04-19 13:18:14 +00:00
dependabot[bot]
15f614abbf build(deps): bump framer-motion from 11.15.0 to 12.7.4 in /website (#8834)
Bumps [framer-motion](https://github.com/motiondivision/motion) from
11.15.0 to 12.7.4.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/motiondivision/motion/blob/main/CHANGELOG.md">framer-motion's
changelog</a>.</em></p>
<blockquote>
<h2>[12.7.4] 2025-04-17</h2>
<h3>Fixed</h3>
<ul>
<li>Removed non-deterministic behaviour from
<code>AnimatePresence</code>.</li>
</ul>
<h2>[12.7.3] 2025-04-15</h2>
<h3>Fixed</h3>
<ul>
<li>Fixing <code>duration</code> for <code>animateView</code>
transitions.</li>
<li>Prevent <code>.commitStyles()</code> on <code>pseudoElement</code>
animations.</li>
</ul>
<h2>[12.7.2] 2025-04-14</h2>
<h3>Fixed</h3>
<ul>
<li>Adding <code>&quot;sideEffects&quot;: false</code> to
<code>motion-dom</code> and <code>motion-utils</code> packages.</li>
</ul>
<h2>[12.7.1] 2025-04-14</h2>
<h3>Fixed</h3>
<ul>
<li>Skip <code>.commitStyles</code> on <code>psuedoElement</code>
animations.</li>
</ul>
<h2>[12.7.0] 2025-04-14</h2>
<h3>Added</h3>
<ul>
<li>Private <code>layoutCrossfade</code> allows disabling crossfade of
shared layout elements.</li>
</ul>
<h2>[12.6.5] 2025-04-11</h2>
<h3>Fixed</h3>
<ul>
<li>Polyfilled <code>sync</code> and <code>cancelSync</code>
exports.</li>
</ul>
<h2>[12.6.4] 2025-04-11</h2>
<h3>Added</h3>
<ul>
<li>Global injection of <code>WillChangeMotionValue</code> for internal
Framer use.</li>
</ul>
<h2>[12.6.3] 2025-04-01</h2>
<h3>Changed</h3>
<ul>
<li>Refactored mini <code>animate</code> and <code>animateView</code> to
share the same <code>NativeAnimation</code>. Mini <code>animate</code>
down to <code>2.3kb</code>.</li>
</ul>
<h3>Fixed</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2e0e241222"><code>2e0e241</code></a>
v12.7.4</li>
<li><a
href="2adb8a327b"><code>2adb8a3</code></a>
Updating changelog</li>
<li><a
href="672bb0a7ff"><code>672bb0a</code></a>
Merge pull request <a
href="https://redirect.github.com/motiondivision/motion/issues/3149">#3149</a>
from gnoff/remove-random</li>
<li><a
href="6ab8045676"><code>6ab8045</code></a>
Merge branch 'main' into remove-random</li>
<li><a
href="7446d2c33c"><code>7446d2c</code></a>
Adding force measure</li>
<li><a
href="b9f31f1429"><code>b9f31f1</code></a>
Latest</li>
<li><a
href="c226d1a775"><code>c226d1a</code></a>
v12.7.3</li>
<li><a
href="7b7a2b8441"><code>7b7a2b8</code></a>
Fixing animateView durations</li>
<li><a
href="522ba09f3b"><code>522ba09</code></a>
v12.7.2</li>
<li><a
href="2697f145d8"><code>2697f14</code></a>
Latest</li>
<li>Additional commits viewable in <a
href="https://github.com/motiondivision/motion/compare/v11.15.0...v12.7.4">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=framer-motion&package-manager=npm_and_yarn&previous-version=11.15.0&new-version=12.7.4)](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-04-19 13:15:55 +00:00