The v8.38.0 Go module lacks LibreOffice generateTaggedPdf. The v8.38.0 tag moved after the Go module proxy had cached it, so go get github.com/gotenberg/gotenberg/v8@v8.38.0 resolves to the previous commit, and a direct fetch from GitHub fails checksum verification. v8.38.1 ships the same code as the 8.38.0 Docker image. Use it if you build Gotenberg from source or import it as a Go module. Docker users have nothing to do.
Isolate each Chromium conversion in its own browser context. All conversions shared one cookie jar, so a cookie sent with one request authenticated later or concurrent conversions to the same origin. Each conversion now gets a private browser context, with its own cookies, cache, and storage, disposed when it ends. --chromium-clear-cookies only cleared the jar between sequential conversions and is no longer needed.
Enforce --api-body-limit before parsing. The limit applied only after the whole multipart body was read and its files spooled to disk, so a request far above it consumed memory, disk, and I/O before the 413. Gotenberg now rejects an oversized Content-Length up front and stops reading at the limit otherwise.
Filter loopback WebSockets against the allow-list and deny-list. With a list configured but --chromium-deny-private-ips and --chromium-deny-public-ips off, Chromium opened WebSockets to 127.0.0.1, ::1, or 169.254.169.254 directly, past the pinning proxy. They now go through the proxy whenever an outbound policy is set.
Ignore IPv6 zone identifiers when classifying addresses. A zoned address such as http://[::%251]/ passed as public under the *_DENY_PRIVATE_IPS checks.
New Features
--chromium-shared-browser-context. Restores the previous behavior, one browser context shared by every conversion, for deployments where all callers trust each other and want cookies, cache, and storage to carry over. --chromium-clear-cache, --chromium-clear-cookies, and --chromium-clear-storage now only apply with this flag.
generateTaggedPdf for LibreOffice (#1676). Produces a tagged, accessible PDF without declaring PDF/UA conformance, like the Chromium field of the same name. pdfua still implies tagging (#1677). Thanks @joh-klein.
Behavior Changes
Chromium cookies and storage no longer carry over between conversions. Set --chromium-shared-browser-context to keep them. Isolation adds a few dozen milliseconds per conversion.
--api-body-limit counts the raw request body. Multipart boundaries and part headers now count toward the limit, so a request just under it may now get a 413.
Bug Fixes
failOnResourceLoadingFailed missed unreachable resources behind the pinning proxy. The proxy answered 502, which Chromium treated as an ordinary response. It now resets the connection, and a failed HTTPS tunnel (net::ERR_TUNNEL_CONNECTION_FAILED) counts as a loading failure too.
Intermittent 500 with a match timeout on the default deny-list (#1659). Since 8.37.0, a pattern match aborted by a process pause, such as container CPU throttling, failed the request. It is now retried, and a match that still cannot complete fails closed with a generic 403. Thanks @Patgoral.
Chore
Updated Chromium to 155.0.8059.39, which fixes CVE-2026-87654 (#1666). Thanks @janpaepke.
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [gotenberg/gotenberg](https://github.com/gotenberg/gotenberg) | app-version | minor | `8.37.0` → `8.38.1` |
---
> ⚠️ **Warning**
>
> Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/4) for more information.
---
### Release Notes
<details>
<summary>gotenberg/gotenberg</summary>
### [`v8.38.1`](https://github.com/gotenberg/gotenberg/releases/tag/v8.38.1): 8.38.1
[Compare Source](https://github.com/gotenberg/gotenberg/compare/v8.38.0...v8.38.1)
#### Bug Fixes
- **The `v8.38.0` Go module lacks LibreOffice `generateTaggedPdf`.** The `v8.38.0` tag moved after the Go module proxy had cached it, so `go get github.com/gotenberg/gotenberg/v8@v8.38.0` resolves to the previous commit, and a direct fetch from GitHub fails checksum verification. `v8.38.1` ships the same code as the `8.38.0` Docker image. Use it if you build Gotenberg from source or import it as a Go module. Docker users have nothing to do.
See [8.38.0](https://github.com/gotenberg/gotenberg/releases/tag/v8.38.0) for the full release notes.
### [`v8.38.0`](https://github.com/gotenberg/gotenberg/releases/tag/v8.38.0): 8.38.0
[Compare Source](https://github.com/gotenberg/gotenberg/compare/v8.37.0...v8.38.0)
#### Security Fixes ⚠️
- **Isolate each Chromium conversion in its own browser context.** All conversions shared one cookie jar, so a cookie sent with one request authenticated later or concurrent conversions to the same origin. Each conversion now gets a private browser context, with its own cookies, cache, and storage, disposed when it ends. `--chromium-clear-cookies` only cleared the jar between sequential conversions and is no longer needed.
- **Enforce `--api-body-limit` before parsing.** The limit applied only after the whole multipart body was read and its files spooled to disk, so a request far above it consumed memory, disk, and I/O before the `413`. Gotenberg now rejects an oversized `Content-Length` up front and stops reading at the limit otherwise.
- **Filter loopback WebSockets against the allow-list and deny-list.** With a list configured but `--chromium-deny-private-ips` and `--chromium-deny-public-ips` off, Chromium opened WebSockets to `127.0.0.1`, `::1`, or `169.254.169.254` directly, past the pinning proxy. They now go through the proxy whenever an outbound policy is set.
- **Ignore IPv6 zone identifiers when classifying addresses.** A zoned address such as `http://[::%251]/` passed as public under the `*_DENY_PRIVATE_IPS` checks.
#### New Features
- **`--chromium-shared-browser-context`.** Restores the previous behavior, one browser context shared by every conversion, for deployments where all callers trust each other and want cookies, cache, and storage to carry over. `--chromium-clear-cache`, `--chromium-clear-cookies`, and `--chromium-clear-storage` now only apply with this flag.
- **`generateTaggedPdf` for LibreOffice** ([#​1676](https://github.com/gotenberg/gotenberg/issues/1676)). Produces a tagged, accessible PDF without declaring PDF/UA conformance, like the Chromium field of the same name. `pdfua` still implies tagging ([#​1677](https://github.com/gotenberg/gotenberg/pull/1677)). Thanks [@​joh-klein](https://github.com/joh-klein).
#### Behavior Changes
- **Chromium cookies and storage no longer carry over between conversions.** Set `--chromium-shared-browser-context` to keep them. Isolation adds a few dozen milliseconds per conversion.
- **`--api-body-limit` counts the raw request body.** Multipart boundaries and part headers now count toward the limit, so a request just under it may now get a `413`.
#### Bug Fixes
- **`failOnResourceLoadingFailed` missed unreachable resources behind the pinning proxy.** The proxy answered `502`, which Chromium treated as an ordinary response. It now resets the connection, and a failed HTTPS tunnel (`net::ERR_TUNNEL_CONNECTION_FAILED`) counts as a loading failure too.
- **Intermittent `500` with a match timeout on the default deny-list** ([#​1659](https://github.com/gotenberg/gotenberg/issues/1659)). Since 8.37.0, a pattern match aborted by a process pause, such as container CPU throttling, failed the request. It is now retried, and a match that still cannot complete fails closed with a generic `403`. Thanks [@​Patgoral](https://github.com/Patgoral).
#### Chore
- Updated Chromium to `155.0.8059.39`, which fixes CVE-2026-87654 ([#​1666](https://github.com/gotenberg/gotenberg/issues/1666)). Thanks [@​janpaepke](https://github.com/janpaepke).
- Updated LibreOffice to `26.8.1`.
- Rebuilt on the latest Debian security updates ([#​1678](https://github.com/gotenberg/gotenberg/issues/1678)). Thanks [@​pietrocosseddu-comand](https://github.com/pietrocosseddu-comand).
- Covered header and footer image deduplication with integration tests ([#​1675](https://github.com/gotenberg/gotenberg/pull/1675)). Thanks [@​X-Coder264](https://github.com/X-Coder264).
- Updated the AWS Lambda Web Adapter to `1.0.1`.
- Migrated to Echo `v5` and regexp2 `v2`.
- Updated OpenTelemetry to `v1.47.0`, where the Logs API is now stable.
- Updated Go and npm dependencies.
</details>
---
### Configuration
📅 **Schedule**: (in timezone Europe/Berlin)
- Branch creation
- At any time (no schedule defined)
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC4xNjYuMCIsInVwZGF0ZWRJblZlciI6IjQ0LjE2Ni4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJhcHAtdmVyc2lvbiIsInJlbm92YXRlIl19-->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
This PR contains the following updates:
8.37.0→8.38.1Release Notes
gotenberg/gotenberg
v8.38.1: 8.38.1Compare Source
Bug Fixes
v8.38.0Go module lacks LibreOfficegenerateTaggedPdf. Thev8.38.0tag moved after the Go module proxy had cached it, sogo get github.com/gotenberg/gotenberg/v8@v8.38.0resolves to the previous commit, and a direct fetch from GitHub fails checksum verification.v8.38.1ships the same code as the8.38.0Docker image. Use it if you build Gotenberg from source or import it as a Go module. Docker users have nothing to do.See 8.38.0 for the full release notes.
v8.38.0: 8.38.0Compare Source
Security Fixes ⚠️
--chromium-clear-cookiesonly cleared the jar between sequential conversions and is no longer needed.--api-body-limitbefore parsing. The limit applied only after the whole multipart body was read and its files spooled to disk, so a request far above it consumed memory, disk, and I/O before the413. Gotenberg now rejects an oversizedContent-Lengthup front and stops reading at the limit otherwise.--chromium-deny-private-ipsand--chromium-deny-public-ipsoff, Chromium opened WebSockets to127.0.0.1,::1, or169.254.169.254directly, past the pinning proxy. They now go through the proxy whenever an outbound policy is set.http://[::%251]/passed as public under the*_DENY_PRIVATE_IPSchecks.New Features
--chromium-shared-browser-context. Restores the previous behavior, one browser context shared by every conversion, for deployments where all callers trust each other and want cookies, cache, and storage to carry over.--chromium-clear-cache,--chromium-clear-cookies, and--chromium-clear-storagenow only apply with this flag.generateTaggedPdffor LibreOffice (#1676). Produces a tagged, accessible PDF without declaring PDF/UA conformance, like the Chromium field of the same name.pdfuastill implies tagging (#1677). Thanks @joh-klein.Behavior Changes
--chromium-shared-browser-contextto keep them. Isolation adds a few dozen milliseconds per conversion.--api-body-limitcounts the raw request body. Multipart boundaries and part headers now count toward the limit, so a request just under it may now get a413.Bug Fixes
failOnResourceLoadingFailedmissed unreachable resources behind the pinning proxy. The proxy answered502, which Chromium treated as an ordinary response. It now resets the connection, and a failed HTTPS tunnel (net::ERR_TUNNEL_CONNECTION_FAILED) counts as a loading failure too.500with a match timeout on the default deny-list (#1659). Since 8.37.0, a pattern match aborted by a process pause, such as container CPU throttling, failed the request. It is now retried, and a match that still cannot complete fails closed with a generic403. Thanks @Patgoral.Chore
155.0.8059.39, which fixes CVE-2026-87654 (#1666). Thanks @janpaepke.26.8.1.1.0.1.v5and regexp2v2.v1.47.0, where the Logs API is now stable.Configuration
📅 Schedule: (in timezone Europe/Berlin)
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate CLI.