Update all stable non-major dependencies #158

Open
renovate wants to merge 1 commit from renovate/all-stable-minor into main
Member

This PR contains the following updates:

Package Type Update Change
docker.io/binwiederhier/ntfy (source) minor v2.26.0 → v2.38.0
docker.io/gotenberg/gotenberg minor 8.38.1 → 8.40.0
docker.io/grafana/grafana minor 13.1.0 → 13.3.1
docker.io/library/postgres (source) minor 15.18 → 15.20
docker.io/library/postgres (source) minor 18.4 → 18.7
docker.io/library/python (source) container minor 3.14-trixie → 3.15-trixie
docker.io/library/redis (source) minor 8.8.0 → 8.10.3
docker.io/prom/alertmanager minor v0.33.1 → v0.35.0
docker.io/prom/prometheus minor v3.13.1 → v3.16.0
docker.io/prompve/prometheus-pve-exporter minor 3.9.0 → 3.11.0
ghcr.io/twin/gatus minor v5.36.0 → v5.38.0
https://github.com/ansible/ansible-lint action minor v26.6.0 → v26.11.0
netbox minor v4.6.4 → v4.7.5
quay.io/hedgedoc/hedgedoc (source) minor 1.11.1 → 1.12.0

Release Notes

binwiederhier/ntfy (docker.io/binwiederhier/ntfy)

v2.38.0

Compare Source

This release shares every visitor's rate limits across the nodes of a cluster: a client spread over several nodes is now limited once instead of once per node, and a node that restarts or crashes takes the limits over from its peers instead of forgetting them. It also fixes a denial-of-service bug in message templating, where a crafted template could build an oversized string and crash the server, and builds ntfy with Go 1.27.4 (security fixes).

Features:

  • Cluster: the nodes share every visitor's rate limits (requests, failed logins, signups and password resets, topic creation, e-mails, attachment bandwidth, Firebase pauses) over the mesh every second, so a client spread over several nodes gets its limits once, not once per node; a node that restarts or crashes takes the limits over from its peers before it serves (#​2182)

Bug fixes + maintenance:

  • Message templating: the replace, regexReplaceAll and join functions now cap the size of the string they build, so a template can no longer amplify small inputs into a multi-gigabyte string and crash the server with an out-of-memory error (thanks to Robert Flosbach of Neodyme for the responsible disclosure)
  • WebSocket subscribers that a node closes while draining are no longer counted and logged as internal server errors (HTTP 500, ntfy error 50001); on ntfy.sh, each node's drain counted ~18k of them and tripped the 5xx alert, although clients never saw an error (#​2171)

Security:

  • Build with Go 1.27.4, which includes security fixes to cgo, the go command, the compiler, the linker and net/http

v2.37.2

Compare Source

Changelog

v2.37.1

Compare Source

This release fixes a database slowdown in v2.37.0 when using visitor-subscriber-rate-limiting with a user database: the subscriber activity of UnifiedPush topics was written far too often.

Bug fixes + maintenance:

  • With visitor-subscriber-rate-limiting and a user database, write a UnifiedPush topic's subscriber activity every one to two hours instead of every 5 minutes, spread over time, and not at all when a poll or reconnect only repeats the same subscriber; on ntfy.sh, v2.37.0's writes of ~45k topics every 5 minutes, all due in the same minute, slowed down the database (#​2151)

v2.37.0

Compare Source

This release makes UnifiedPush work across several servers: the subscriber who pays for a topic's pushes is shared through the database, and app servers are told with 410 Gone when a subscription has been abandoned for 4 days. It also adds Retry-After and the draft RateLimit headers to rate limit responses, and frees the memory of one-off visitors sooner.

Features:

  • With visitor-subscriber-rate-limiting, the subscriber of a UnifiedPush topic (who pays for its pushes) is kept in the user database and shared by all servers, so a push to any server is billed to the subscriber instead of answered with 507 (#​2136; see subscriber-based rate limiting)
  • Send a Retry-After header with HTTP 429 responses that are caused by a rate limit with a known wait, e.g. the request, e-mail or daily message limits (#​2142; see rate limiting)
  • Send the IETF draft RateLimit-Policy and RateLimit headers with publish responses (and with every 429 caused by a limit with a quota), for the request and daily message limits (#​2143; see rate limiting)
  • New metric ntfy_topics_unifiedpush_total: the UnifiedPush topics whose subscriber state a server keeps in memory (#​2136)

Behavior changes:

  • With visitor-subscriber-rate-limiting, a UnifiedPush push to a topic that has had no subscriber (subscribe, poll or open stream) for 4 days is answered with 410 (error code 41002) instead of 507, so app servers like Mastodon remove the expired subscription (#​664, #​2136); a Matrix push to such a topic gets its pushkey rejected (before: after 12 hours without a subscriber on the server that got the push)
  • With visitor-subscriber-rate-limiting, UnifiedPush messages are counted against the subscriber's account only while it has a tier, and against the subscriber's IP address otherwise (also after the account lost its tier or was deleted); a tier change applies to the next message (#​2136)
  • Ban feed: weights may be fractional (down to 0.001), auth failures (42909) now weigh 2 instead of 10, and a UnifiedPush push without a subscriber (50701) or to an abandoned topic (41002) weighs 0.05, so app servers pushing to many offline phones are not banned for it (#​2147)
  • The rate limit state of a visitor is forgotten about a minute after it has fully recovered (all buckets refilled) instead of after a day without use, which frees the memory of one-off visitors such as floods of new IPs. The visitors stat and the ntfy_visitors_total metric therefore count the visitors of roughly the last minute, not of the last day (#​2126)
  • Topics without subscribers are dropped from memory after 6 hours without use instead of 16; a publish to such a topic recreates it (and counts against visitor-topic-creation-limit-burst) (#​2136)

Bug fixes + maintenance:

  • With PostgreSQL and several servers, daily usage a server counted in the last seconds of a visitor's 24-hour period is no longer added to the next period (a double count); it is dropped instead (#​2136)
  • Cluster: a forwarded message for a topic without subscribers on the receiving node now counts as wasted (ntfy_cluster_messages_wasted_total) and no longer keeps that idle topic in memory (#​2140)

v2.36.0

Compare Source

This release keeps the daily limits across restarts and, with PostgreSQL, shares them between servers, so a visitor gets one daily allowance in total. Each visitor's day now starts at its own time instead of midnight UTC. It also adds an experimental local admin socket.

Features:

  • Daily limits (messages, e-mails, phone calls) are stored in the user database, so they survive restarts; with PostgreSQL, all servers share them. Each visitor's day starts at its own time instead of midnight UTC, and the account page and /v1/account (stats.reset_at) show when it resets (#​2131, see message limits)
  • Experimental local admin socket (experimental-listen-admin-unix, off by default) that serves the admin API without credentials to whoever can open it; the shipped systemd unit sets RuntimeDirectory=ntfy for it (see admin socket)
  • Export ntfy_db_up per PostgreSQL pool, and health-check the primary like the replicas (#​2133)

Upgrade notes:

  • Everyone's daily counts start over at the upgrade: the stats_* columns of the user table are zeroed and no longer used
  • Servers that share a PostgreSQL database must keep their clocks in sync (NTP)
  • Visitors without a tier have a daily e-mail limit again (24h / visitor-email-limit-replenish)
  • The whole server config is checked again when base-url or a message-size-limit above 4K is set, so an invalid config that used to start now fails at startup (#​1969, thanks to @​mikejgray for the contribution)

Bug fixes + maintenance:

  • Web app: Messages replayed by a poll or a reconnect no longer bring back deleted notifications, lose their read state or notify again (#​2098, #​2090, thanks to @​mattford63, @​arminus and @​tobykaspar79 for reporting)
  • CLI: ntfy pub --wait-pid now waits for processes owned by other users instead of failing with "not running" (#​1710, thanks to @​bekoeppel for the contribution)
  • Admin API (internal): manage other users' tokens, tiers and password reset links, return 4xx instead of 500 for invalid input, and remove a deleted user's web push subscriptions

v2.35.0

Compare Source

This release keeps what a user already spent when their tier changes, and makes a tier's daily email limit a hard cap. It also fixes intermittent 403s under concurrent requests from the same IP, and the Matrix push gateway storing messages under a protected topic on SQLite.

Security:

  • Reject Matrix push gateway requests whose push key does not name a valid topic. Publishing strips NUL bytes and invalid UTF-8 from the topic after authorization, so an anonymous push key like /sec%00ret was authorized against an unmatched topic and then stored under the protected topic secret (SQLite only; on PostgreSQL the request was denied; thanks to Efe Çam for reporting)

Features:

  • A tier change (an upgrade, a downgrade, or a tier edited in place) applies on the user's next request and keeps what was already spent; before, it refilled the request, email and attachment bandwidth limits (#​2104, #​2105)
  • A tier's daily email limit is a hard cap; before, the tier's email burst came on top of it, so a user could send more emails a day than the tier allows

Bug fixes + maintenance:

  • Fix intermittent 403s and panics in the account handlers under concurrent requests from the same IP: a login or logout could change the user under another request, so a request with valid credentials was treated as anonymous, or the other way around. Every request now gets its own visitor (#​1051, #​2113, #​2118, thanks to @​ivanetinajero for reporting)
  • A tier with a daily email limit of zero sends no emails; before, it could still send the server's email burst (visitor-email-limit-burst)
  • An attachment upload rejected at a size limit is no longer charged to the attachment bandwidth limit for the part that went over
  • Rate limits live in one shared limit service, keyed by ip:<prefix> or user:<id>, instead of in each visitor, which uses less memory per visitor and takes a global lock off the request path
  • Accept terabyte units (e.g. 1T) in size settings such as attachment and tier limits, matching how sizes are displayed (#​2078, thanks to @​cangen185-sudo for the contribution)

v2.34.0

Compare Source

This release prepares the experimental cluster to run behind load balancers: nodes drain on shutdown instead of dropping all of their clients at once, ntfy can listen on several addresses, and access changes reach every node. It also fixes a revoked or deleted user keeping some of their subscriptions, on every server.

Features:

  • Allow several comma-separated addresses in listen-http, so a load balancer can hold more than ~63k connections to one ntfy node
  • Cluster nodes drain on shutdown: an active node withdraws (stops being ready), then turns read-only and closes its subscriber connections gradually (experimental-cluster-drain-delay, experimental-cluster-drain-duration), so its clients move to the other nodes without a reconnect storm (experimental, see draining on shutdown)

Security:

  • End all of a user's subscriptions when their access to a topic is reset or the user is deleted: only the first one was ended, so the others kept receiving the topic's messages (#​1845, thanks to @​gigioneggiando for reporting)
  • In an experimental cluster, tell the other nodes when access changes (e.g. a reservation or a revoked permission), so they reload their access cache and disconnect subscribers who lost access; the access cache reload also catches changes made elsewhere, e.g. by the ntfy access CLI, and now runs every 67 seconds instead of 87

Bug fixes + maintenance:

  • Fix a deadlock when ending subscriptions (reserving a topic with live subscribers, revoking access, deleting a user) while debug logging or log-level-overrides is on: the subscriptions' topic stayed locked for good
  • Fix a data race when log-level-overrides changes (e.g. on a config reload with SIGHUP) while the server logs

v2.33.1

Compare Source

This release builds ntfy with Go 1.27.3 (security fixes, including rejecting the compromised eMudhra intermediate CAs), and adds monitoring for the experimental cluster: each node's view of its peers, per-peer and database connection pool metrics.

The v2.33.0 release had an issue that made it crash on older CPU architectures. The v2.33.1 release fixes that (see #​2092).

Features:

  • Show each cluster node's view of its peers with ntfy cluster status, /v1/cluster/status on the cluster listener, and per-peer metrics, so a link that only works in one direction is visible (experimental clustering, see cluster status)
  • Export PostgreSQL connection pool metrics (ntfy_db_pool_*: connections in use, and queries that waited for a free connection, per pool), to size pool_max_conns (see PostgreSQL)

Security:

  • Build with Go 1.27.3, which includes the security fixes of Go 1.27.2 (crypto/tls, net/http, html/template and others) and 1.27.3 (crypto/x509: certificate chains through the compromised eMudhra intermediate CAs are rejected)
  • Reject phone number verification unless Twilio confirms the code as approved, instead of accepting any successful response
  • Ignore duplicate topics in a subscription and limit a subscription to 150 topics, so a single request cannot replay the same topic's cache over and over

Bug fixes + maintenance:

  • Count published messages from every cluster node: each node adds its own publishes to the stored total instead of the leader overwriting it with its own count (experimental clustering)
  • Fix "Illegal instruction" crash of the amd64 binaries on CPUs without x86-64-v3 (AVX2/BMI2), by building releases on Ubuntu 24.04 again (#​2092, thanks to @​frank-bg for reporting)

v2.33.0

Compare Source

v2.32.0

Compare Source

This release prepares ntfy.sh for a passive cluster node: jobs that write to the shared database run only on the cluster leader, and each database store now records the oldest schema version it works with. Streaming subscriptions also tell proxies not to buffer them.

Features:

  • Set the Incremental: ?1 header (RFC 10036) on streaming subscriptions, so proxies that support it forward messages without buffering (#​2056, thanks to @​bt90 for the suggestion)

Bug fixes + maintenance:

  • Fix template files (?tpl=<name>) ignoring the priority sent with the request when the file has no priority key (#​2045, thanks to @​6801318d8d for reporting)
  • Return HTTP 409 instead of 500 when deleting or changing the password of a user provisioned via auth-users through the admin API (#​2062, thanks to @​daniloamiranda for reporting)
  • Run the shared-database housekeeping (pruning expired messages, attachments and tokens, web push expiry warnings, writing the published-messages total) on the cluster leader only, so a passive node no longer overwrites the total with its own count (experimental clustering)
  • Record the oldest schema version each database store still works with, so an older ntfy refuses to start on a database that a newer version migrated in a breaking way, instead of misreading it; none of today's migrations are breaking (#​2060)

v2.31.1

Compare Source

This release fixes the database load that made us roll back ntfy.sh from v2.31.0: reconnecting with since=<message ID> read every message of the topic from the database. A new index makes these reconnects cheap, cheaper than in v2.30.0. It also lets ntfy start with a warning on a newer database schema, so later rollbacks need no manual step.

Bug fixes + maintenance:

  • Fix reconnects with since=<message ID> reading every message of the topic from the database, which overloaded ntfy.sh's database right after the v2.31.0 upgrade; the message cache gets a new index: (topic, published, id) on PostgreSQL, (topic, published, time) on SQLite (#​2058)
  • Start with a warning instead of failing when the database schema is newer than this version of ntfy supports, so a rollback or a rolling cluster upgrade needs no manual schema change (#​2059)
  • Web app: Fix the wrong topic opening when subscribed to the same topic on two different servers (#​858)
  • Web app: Fix the "Upgrade to ntfy Pro" banner covering the bottom of a long topic list (#​1007)
  • Web app: The "Notifications are disabled" and "Notifications are blocked" warnings can now be closed (#​1220)
  • Web app: Fix a crash when opening the subscribe dialog before the topic list has loaded, e.g. while another tab holds the browser database (#​2014, #​1881)

Upgrade notes:

  • This release changes the message database schema (version 16 to 17: an index for since=<message ID> reconnects). Downgrading to v2.31.0 or earlier afterwards requires setting the version back by hand first: UPDATE schema_version SET version = 16 WHERE store = 'message' on PostgreSQL, or UPDATE schemaVersion SET version = 16 WHERE id = 1 in the SQLite cache-file. From this release on, a newer schema only logs a warning (#​2059)

v2.31.0

Compare Source

This release fixes messages that could be lost when a client reconnects, e.g. a phone switching networks, right when messages are published: every server now reads newly written messages from its message cache once a second and sends them to the subscribers that missed them. In load tests with server restarts and crashes, this brought lost messages down from 465 to 2 out of about 615,000. It also adds a /v1/ready endpoint for load balancers, and continues the experimental clustering work with node roles.

Features:

  • Add /v1/ready for load balancers, and the node's role to /v1/health; with clustering, a node with no other active node leads right away instead of after a one-minute hold-off (#​2050)
  • Experimental clustering: add experimental-cluster-role to run a passive node that never leads and never takes over another node's subscribers, e.g. one that is not behind the load balancer (#​2049)

Bug fixes + maintenance:

  • Fix messages lost when a client reconnects before they are written to the message cache, or when a cluster node's fan-out is lost: every node now reads newly written messages once a second and sends them to the subscribers that missed them (#​2040)
  • Write user stats (messages, emails, calls) as increments, so servers sharing one database add up instead of overwriting each other's counts (#​1989)
  • Don't add a visitor's anonymous usage to an account's stats when the account takes over that visitor, e.g. right after upgrading (#​2041)

Upgrade notes:

  • A reconnect with since=<message ID> now also returns the messages published in the same second as that message, so none are skipped when several servers write out of order. The ntfy apps and web app drop these by ID; your own scripts may see a few duplicates (#​2040)
  • Experimental clustering only: this release changes the cluster's node registry schema (version 1 to 2). Downgrading a clustered server to v2.30.0 afterwards requires setting the version back by hand first: UPDATE schema_version SET version = 1 WHERE store = 'node_registry' (#​2049)

v2.30.0

Compare Source

This release links attachments in email notifications, adds SMTP LOGIN auth (e.g. for OVH and Outlook), and fixes the PostgreSQL memory growth that came with v2.29.0. It also ships the first experimental version of clustering: several ntfy servers sharing one PostgreSQL database. Clustering is not ready for production yet.

Features:

  • Link attachments in email notifications, including the file name and when the link expires (#​672, thanks to @​merspieler for suggesting)
  • Support SMTP servers that only offer LOGIN auth (e.g. OVH, Outlook) for sending emails (#​930/#​1530, thanks to @​wunter8 for reporting and @​santanoce for the initial implementation)
  • Experimental: run several ntfy servers as one cluster that shares a PostgreSQL database, enabled with experimental-cluster-listen; this is not ready for production yet (#​2005, #​2008, #​2012, #​2013)

Bug fixes + maintenance:

  • Fix Dockerfile-build failing to build: use Go 1.26 and add the cluster package (#​1962, thanks to @​ElectricTea for reporting)
  • Set the org.opencontainers.image.version label on release Docker images (#​1921/#​1936, thanks to @​Plazzmex for reporting and @​w1977-0 for the fix)
  • Warn at startup if attachment-expiry-duration is longer than cache-duration, since attachments never outlive their message (#​1053, thanks to @​ctschach for reporting)
  • Fix PostgreSQL memory growth after v2.29.0: write message batches with one fixed INSERT for any batch size (#​2011)
  • CLI: fix ntfy publish failing with "invalid header field value" when sending a multi-line message or title along with a file (#​1808, thanks to @​quantenzitrone for reporting)
  • Web app: fix an updated message showing next to its old version when the update arrived via the background poll instead of live (#​2010)

Documentation:

  • Document recommended PostgreSQL pool settings for busy servers (#​2011)

v2.29.0

Compare Source

This release fixes cache writes under load. On ntfy.sh, hourly cron bursts overwhelmed the batch writer: messages took up to 40s to reach the database (so poll=1 and since= missed them) and publishes stalled. Batches are now written in one statement, publishes no longer wait on the writer, and PostgreSQL connections stay idle instead of reconnecting.

Features:

  • Timezone support for delayed notifications via X-Timezone header, timezone query param or JSON field; the web app sends the browser's timezone (#​1967/#​1924, thanks @​beemines)
  • RFC 3339 timestamps for delayed notifications, e.g. At: 2026-12-10T11:00:00-05:00 (#​1931, thanks @​ALPHACOM-Brehmer)

Bug fixes + maintenance:

  • Fix delayed message visibility and stalled publishes under bursts: multi-row INSERT per batch, non-blocking publishes (100-batch buffer), and no scheduled-message lookup unless a sequence ID is set (#​2006)
  • Fix a panic in the account token-update endpoint caused by a concurrent anonymous request racing on the shared visitor; now returns HTTP 401
  • Fix messages lost on shutdown: the write queue is flushed and ntfy serve handles SIGTERM/SIGINT gracefully
  • pool_max_idle_conns now defaults to pool_max_conns, so PostgreSQL connections are reused instead of re-opened
  • Fix since=<message-id> replaying a topic's full history when the ID wasn't on the read replica yet; it's now resolved on the primary
  • Use the PostgreSQL row estimate for messages_cached instead of a COUNT(*) every minute
  • Detect Markdown when Content-Type has parameters or is uppercase (#​1995, thanks @​cipherprofessor)
  • Fix the Alertmanager template's bogus 0001-01-01 end time and merged start/end lines (#​1946/#​1940, thanks @​justadityaraj and @​deferred)
  • Embed the time zone database (time/tzdata) so named time zones work on ARM Docker images and minimal runtimes
  • Build with Go 1.27; minimum Go version to build is now 1.26
  • Groundwork for clustering (node registry, util primitives, reserved config options); not usable yet (#​1991, #​1997, #​2001, #​2003)

v2.28.0

Compare Source

This is a hardening release. A single topic on ntfy.sh was polled continuously with poll=1 and no since cursor, which replays a topic's entire cache on every request. The changes below bound what one replay can cost, close two fields that had no size limit at all, and fix an ordering bug found while digging into it.

Bug fixes + maintenance:

  • Fix messages being returned out of publish order when polling or replaying several topics at once (/topic1,topic2/json?poll=1, #​1297)
  • Limit the message title to 1 KB and all tags combined to 512 bytes, rejecting larger requests with HTTP 400 (error codes 40057 and 40058). Neither field had a size limit before, unlike the message body; on ntfy.sh the 99.9th percentile is 212 bytes for titles and 244 for tags
  • Cap a single cache replay at 10 MB of messages per topic. A poll without a since cursor returns a topic's entire cache, which was previously unbounded and could reach tens of megabytes on a busy topic, so one request could allocate that much on the server. The newest messages that fit are kept and a truncated response carries an X-Messages-Truncated: 1 header
  • visitor-attachment-daily-bandwidth-limit now also covers messages replayed from the message cache by poll requests, not just attachment traffic. A poll without a since cursor returns a topic's entire cache, so a topic that is cheap to fill can be re-read for many times its own size; polls beyond the budget are rejected with HTTP 429 (error code 42905) before anything is written. Note that heavy pollers now consume the same budget as attachment downloads, so operators serving both may want to raise the limit

v2.27.0

Compare Source

This release lets you sign in with your verified email address instead of your username, which should help if you ever signed up with an email and then forgot which username you picked. It also hardens the message templating engine against a few ways a small template could eat a lot of memory, and it drops the "experimental" label from PostgreSQL support, which has been running ntfy.sh for a while now.

I also did a bunch of refactoring in, mostly in preparation for being able to cluster ntfy nodes and scale the service horizontally. It'll be a while until then, ... baby steps.

Security:

  • Limit message templates (Template: yes) to 32 KB, limit printf widths and precisions to below 1000, and limit indent/nindent to 100 spaces, preventing excessive memory use from a single small template
  • Exclude secrets from the config hash served to the web app, preventing a rather theoretical information leak

Features:

  • Allow logging in with your verified primary email address (in addition to your username), so a password reset no longer leaves you unable to sign in when you only remember the email you signed up with

Bug fixes + maintenance:

  • Fix Twilio phone calls and phone number verifications failing silently when Twilio rejected the request, and move the Twilio integration into its own twilio package
  • Move the Prometheus metrics into a dedicated metrics package
  • Message cache databases from ntfy older than v1.10.0 (November 2021) can no longer be migrated; upgrade via an older ntfy version first, or delete the cache database
  • Fix user_phone table in the SQLite user database referencing a dropped table after the v2.14 schema migration; repaired automatically by a new migration

v2.26.3

Compare Source

This is a hotfix release, useful pretty much only for ntfy.sh. It was adds the ability to track abusive IPs mor efficiently, reducing the load on the IP banning services and preventing them from falling behind and leaving abusers unbanned for too long. It works by tracking HTTP errors, and writing out a ban file that fail2ban can read and ban offenders instantly. See ban-feed for details.

Features:

  • Add an abuse ban-feed: when enabled via ban-file, ntfy tracks a weighted strike budget per visitor and appends abusive IPs to a file that fail2ban can tail and ban on sight (ban-file, ban-window, ban-threshold, ban-weights; see ban-feed)
gotenberg/gotenberg (docker.io/gotenberg/gotenberg)

v8.40.0: 8.40.0

Compare Source

[!IMPORTANT]
8.40.0 is the final release of Gotenberg 8. The next release is Gotenberg 9.

Security Fixes ⚠️

  • Pass the encryption passwords to QPDF as option values. QPDF received userPassword and ownerPassword as positional arguments, and it reads an argument that starts with @ as a file of further arguments. A password of @/proc/self/cmdline, with newlines in the other one, injected options such as --add-attachment, and the returned PDF embedded any file the gotenberg user can read. QPDF now receives --user-password= and --owner-password=, and every password encrypts the PDF as typed.
  • Treat every special-purpose address range as non-public. The *_DENY_PRIVATE_IPS checks let through ranges that IANA marks as not globally reachable, such as the IPv6 benchmarking range 2001:2::/48, while they refused its IPv4 twin 198.18.0.0/15. They now refuse every such block: 0.0.0.0/8, where Docker Desktop answers its host gateway, 192.0.0.0/24, the documentation ranges, 192.88.99.0/24 and 240.0.0.0/4 in IPv4, and the whole 2001::/23 block, 3fff::/20, 5f00::/16 and 100:0:0:1::/64 in IPv6.
  • Distrust the compromised eMudhra roots in Chromium from the first request. 8.39.0 removed them from the OS bundle and the Java trust store, but Chromium's root store still trusted emSign ECC Root CA - G3 until its component updater fetched a CRLSet, about two minutes after each start, and never without access to Google's update servers. Every Chromium restart opened the window again. A managed policy now distrusts emSign ECC Root CA - G3, emSign Root TLS CA - G3 and AAA Certificate Services at startup.
  • Keep the pinning proxy on with --chromium-host-resolver-rules. Any host-resolver rule turned the pinning proxy off, and with it the only layer that refuses a WebSocket handshake: with --chromium-deny-private-ips set, a page, or a Web Worker, could open a WebSocket to a private address, and Gotenberg only logged it. Gotenberg now applies the rules itself, with Chromium's MAP and EXCLUDE semantics, in its outbound checks and in the proxy, so the IP-class checks judge the address a rule maps a host to.

Behavior Changes

  • An invalid --chromium-host-resolver-rules stops Gotenberg at startup. Chromium skipped a rule it could not parse, so a typo silently sent requests elsewhere.
  • Gotenberg, not Chromium, applies the host-resolver rules. Loopback requests now go through the pinning proxy when a rule is set, and a host that only a MAP rule knows works as the URL to print, where it returned 403 before. Hops carried by the environment proxy keep their original host.
  • --chromium-proxy-server with an outbound policy logs a warning at startup. WebSocket handshakes reach that proxy without Gotenberg's checks, so enforce the policy there.
  • The *_DENY_PRIVATE_IPS checks refuse more ranges. See the security fix above. The rule covers whole blocks, so a few anycast services inside 192.0.0.0/24 and 2001::/23 are refused too.
  • The linux/386 image needs seccomp=unconfined on Docker 29.4 and later. Docker's default seccomp profile now denies socketcall on i386, to block the AF_ALG sockets of CVE-2026-31431, and Gotenberg opens its sockets through it on that architecture. The container fails to start with listen tcp :3000: socket: function not implemented. Run it with --security-opt seccomp=unconfined, or with a copy of Docker's default profile that allows socketcall, and keep the host kernel patched. This comes from Docker and affects earlier releases too.

Bug Fixes

  • LibreOffice stopped answering after a restart (#​1713). Since 8.32.0, the socket port was picked before LibreOffice's outbound proxy started, so the kernel could hand that same port to the proxy. LibreOffice then ran without its socket, the health check reached the proxy and reported it healthy, and every LibreOffice request timed out until the container restarted. The port is now picked once the proxy listens, and the startup and health checks wait for LibreOffice's own UNO greeting. Thanks @​chladic.
  • Merging with pdfa on /forms/libreoffice/convert returned a PDF that was not PDF/A (#​1705). Each document got the formats before the merge, which undid them. The formats now apply once, to the merged file, as on /forms/pdfengines/merge. Thanks @​APX403.
  • Chromium called Google services at every start (#​1706). Optimization hints, network time queries and account checks reached Google, or logged blocked CONNECTs in locked-down deployments. Those features are now off, and the sign-in URL points to a closed loopback port. Thanks @​Moufle.
  • Aberrant print settings returned 500 (#​1707). Only an empty content area returned 400. A scale outside 0.1 to 2, a negative margin, a zero paper size and every other print parameter Chromium rejects now return 400 too. Thanks @​SergeevDmitry.
  • optimizeImages swapped images between the pages of a merged PDF (#​1708). Two merged documents may give their images the same name, such as X5. Extracted images are now matched by page and name. Thanks @​APX403.
  • optimizeImages made charts larger (#​1714). Charts and other flat-color images often take more space as JPEG than in their lossless stream. A replacement is now kept only when it makes the file smaller, so the pass never grows a PDF. Thanks @​APX403.

Chore

  • Updated Chromium to 156.0.8078.79.
  • Updated LibreOffice to 26.8.2.
  • Dropped python3-distutils-extra, and the 45 unused packages it pulled in, from the images that ship LibreOffice (#​1711, #​1710). Thanks @​yusufgngor.
  • Pinned golangci-lint v2.15.0 in the Makefile, so local and CI linting match.
  • Updated Go dependencies.

v8.39.0: 8.39.0

Compare Source

Security Fixes ⚠️

  • Reject ExifTool's j option alias and stop loading ExifTool config files. The metadata check blocked json but not its alias j. A metadata key could import a JSON file carrying a HardLink pseudo-tag, plant ~/.ExifTool_config, and have the next ExifTool run execute it as Perl. The keys j, addtagsfromfile, and alltagsfromfile now return 400, and Gotenberg always runs ExifTool with -config "".
  • Accept only http:// and https:// URLs on the URL routes. The default deny-list only covered file://, so devtools://devtools/bundled/devtools_app.html loaded Chromium's privileged DevTools page, and waitForExpression ran there with access to local files. /forms/chromium/convert/url and /forms/chromium/screenshot/url now return 400 for any other scheme.
  • Apply path and wss:// deny rules to WebSocket handshakes. The pinning proxy matched CONNECT tunnels against https://host:port, so a deny rule anchored on a path, such as ^https?://host/, or on wss:// refused the plain request but let the handshake through. The proxy now matches tunnels against each scheme's root URL, and a handshake whose full URL is denied fails the conversion with a generic 403.
  • Drop the compromised eMudhra roots (#​1699). The images trusted emSign ECC Root CA - G3 and AAA Certificate Services, whose intermediates have recoverable private keys. The OS bundle now comes from ca-certificates 20250419+deb13u1, and the Java trust store used by PDFtk drops both roots. Correction: Chromium 156 still accepted these chains for about two minutes after each start, until its component updater fetched a CRLSet, and never without access to Google's update servers. The next release, 8.40.0, distrusts both roots in Chromium from the first request. Thanks @​hrueger.

New Features

  • failOnConsoleMessageTypes for Chromium (#​1667). Fails the conversion with 409 when the page logs a console message of one of the given types (log, debug, info, warning, error, assert). The response lists the messages. Thanks @​jschneider.
  • PDF/A-4 (#​1703). The pdfa form field now accepts PDF/A-4 on every route that supports it, through the LibreOffice PDF engine. Thanks @​henningda.
  • Gotenberg-Version response header (#​1693). Set on every authenticated route, error responses included, and on webhook deliveries. It is not set on 401 responses or /health (#​1694). Thanks @​fragkakis.

Behavior Changes

  • The URL routes reject non-HTTP schemes. chrome://, devtools://, data:, and any other scheme besides http and https now return 400.
  • ExifTool ignores ~/.ExifTool_config. The metadata keys j, addtagsfromfile, and alltagsfromfile now return 400. Prefix them with a group, for example XMP:j, to write a tag of that name.
  • The XRECHNUNG Factur-X profile embeds xrechnung.xml. See the bug fix below.

Bug Fixes

  • Sporadic 502 on uploads behind HTTP/2 proxies (#​1112). Behind Cloud Run with an h2c port, the proxy sent large DATA frames, Go answered with a flood of WINDOW_UPDATE frames, and the proxy dropped the connection mid-upload. Gotenberg now advertises the 16 KiB HTTP/2 default frame size (#​1700). Thanks @​TessilimiTheo and @​geoherna.
  • No listener with absolute TLS paths (#​1690). Since 8.38.0, --api-tls-cert-file and --api-tls-key-file with absolute paths left Gotenberg running without accepting connections. Both paths work again, and a missing or unreadable file now fails the startup (#​1691). Thanks @​n-rodriguez.
  • Empty stampSource or watermarkSource returned 400 (#​1692). Since 8.36.0, a blank source failed the merge, split, Chromium, and LibreOffice routes. An empty source is skipped again. Thanks @​APX403.
  • OIDC rejected bearer in lower case (#​1696). The Authorization scheme is now matched case-insensitively, as RFC 9110 requires. Thanks @​MaxFreedomPollard.
  • The XRECHNUNG Factur-X profile embedded factur-x.xml (#​1701). The spec requires xrechnung.xml for this profile, both as the embedded file and in fx:DocumentFileName. Other levels keep factur-x.xml. Thanks @​nhh.

Chore

  • Updated Chromium to 156.0.8078.47.
  • Updated pdfcpu to v0.16.3 and bumped Go to 1.27.3, which fix several HIGH CVEs in the Go standard library and golang.org/x modules (#​1695). Thanks @​sergeykad.
  • Updated the AWS Lambda Web Adapter to 1.1.0, which supports Lambda SnapStart (#​1704). Thanks @​michael-follmann.
  • Bumped golangci-lint to v2.15.0.
  • Updated Go dependencies.
grafana/grafana (docker.io/grafana/grafana)

v13.3.1

Security
  • Security: Fix CVE-2026-102589
  • Security: Fix CVE-2026-107509
  • Security: Fix CVE-2026-110992
  • Security: Fix CVE-2026-111024
  • Security: Fix CVE-2026-13721
  • Security: Fix CVE-2026-14242
Features and enhancements

v13.3.0

Security
  • Security: Fix CVE-2026-100105
  • Security: Fix CVE-2026-13719
  • Security: Fix CVE-2026-13720
  • Security: Fix CVE-2026-15577
  • Security: Fix CVE-2026-33374
  • Security: Fix CVE-2026-81841
  • Security: Fix CVE-2026-88858
  • Security: Fix CVE-2026-88967
  • Security: Fix CVE-2026-93294
  • Security: Fix CVE-2026-95502
Features and enhancements
Bug fixes
Breaking changes
  • Plugins marketplace: rename config.ini section from marketplace to plugins_marketplace #​132172, @​xnyo
Plugin development fixes & changes

v13.2.6

Security
  • Security: Fix CVE-2026-102589
  • Security: Fix CVE-2026-107509
  • Security: Fix CVE-2026-110992
  • Security: Fix CVE-2026-111024
  • Security: Fix CVE-2026-13721
  • Security: Fix CVE-2026-14242
Features and enhancements
Bug fixes

v13.2.5

Security
  • Security: Fix CVE-2026-100105
  • Security: Fix CVE-2026-103506
  • Security: Fix CVE-2026-88858
  • Security: Fix CVE-2026-88967
Features and enhancements
Bug fixes

v13.2.4

Security
  • Security: Fix CVE-2026-15577
  • Security: Fix CVE-2026-33374
  • Security: Fix CVE-2026-93294
  • Security: Fix CVE-2026-95502
Features and enhancements
Bug fixes
  • CVE-2026-92539: IAM: Fix: SCIM (Enterprise)

v13.2.3

Security
  • Security: Fix CVE-2026-13719
  • Security: Fix CVE-2026-13720
  • Security: Fix CVE-2026-81841

v13.2.2

Security
  • Security: Fix CVE-2026-15815
  • Security: Fix CVE-2026-76154
  • Security: Fix CVE-2026-79656
Bug fixes

v13.2.1

Security
  • Security: Fix CVE-2026-12704
  • Security: Fix CVE-2026-14199
Bug fixes

v13.2.0

Security
  • CVE-2026-17183
Features and enhancements
Bug fixes
Breaking changes
Plugin development fixes & changes

v13.1.10

Security
  • Security: Fix CVE-2026-102589
  • Security: Fix CVE-2026-106472
  • Security: Fix CVE-2026-107365
  • Security: Fix CVE-2026-107509
  • Security: Fix CVE-2026-110992
  • Security: Fix CVE-2026-111024
  • Security: Fix CVE-2026-13721
  • Security: Fix CVE-2026-14242
Features and enhancements

v13.1.9

Security
  • Security: Fix CVE-2026-100105
  • Security: Fix CVE-2026-88858
  • Security: Fix CVE-2026-88967
Features and enhancements

v13.1.8

Security
  • Security: Fix CVE-2026-15577
  • Security: Fix CVE-2026-33374
  • Security: Fix CVE-2026-93294
  • Security: Fix CVE-2026-95502
Features and enhancements
Bug fixes
  • CVE-2026-92539: IAM: Fix: SCIM (Enterprise)

v13.1.7

Security
  • Security: Fix CVE-2026-13719
  • Security: Fix CVE-2026-13720
  • Security: Fix CVE-2026-81841

v13.1.6

Security
  • Security: Fix CVE-2026-15815
  • Security: Fix CVE-2026-76154
  • Security: Fix CVE-2026-79656
Bug fixes

v13.1.5

Security
  • Security: Fix CVE-2026-12704
  • Security: Fix CVE-2026-14199
  • Security: Fix CVE-2026-19475

v13.1.4

Security
  • CVE-2026-17183
Bug fixes
  • Reporting: batch dashboard lookups when listing reports (Enterprise)

v13.1.3

v13.1.2

Bug fixes

v13.1.1

Security
  • Security: Fix CVE-2026-102589
  • Security: Fix CVE-2026-106472
  • Security: Fix CVE-2026-107365
  • Security: Fix CVE-2026-107509
  • Security: Fix CVE-2026-110992
  • Security: Fix CVE-2026-111024
  • Security: Fix CVE-2026-13721
  • Security: Fix CVE-2026-14242
Features and enhancements
redis/docker-library-redis (docker.io/library/redis)

v8.10.3

Compare Source

v8.10.2

Compare Source

v8.10.1

Compare Source

v8.10.0

Compare Source

v8.8.4

Compare Source

v8.8.3

Compare Source

v8.8.2

Compare Source

v8.8.1

Compare Source

prometheus/alertmanager (docker.io/prom/alertmanager)

v0.35.0: 0.35.0 / 2026-11-09

Compare Source

  • [CHANGE] Promote the auto-gomemlimit feature flag to the --auto-gomemlimit command-line flag. This is a breaking change: the --enable-feature=auto-gomemlimit option has been removed. #​5464
  • [CHANGE] Remove the deprecated types package in favor of the alert package. #​5585
  • [CHANGE] eventrecorder: Every output now requires a name. This is a breaking change: configurations with unnamed outputs fail to load. The name identifies the output in metrics and logs instead of its URL, broker or topic. #​5393
  • [CHANGE] eventrecorder: The output data format now uses the new events/v2 schema. This is a breaking change: alert labels, alert annotations, group labels, silence annotations, and muted-alert labels are JSON maps, and protobuf consumers must use the new schema. #​5409, #​5500
  • [FEATURE] Add a distroless container image. #​5258
  • [FEATURE] amtool: Look up the default config file in %APPDATA% and %ProgramData% on Windows. #​5073
  • [FEATURE] api: Add an experimental ConnectRPC API served alongside /api/v2/ under the version-neutral /api/ prefix, exposing the Connect, gRPC, and gRPC-Web protocols plus the gRPC Health Checking Protocol and server reflection. The first service is status.v3.StatusService. #​5377, #​5506, #​5507, #​5508, #​5509
  • [FEATURE] incidentio: Add templated metadata field. #​5022
  • [FEATURE] pagerduty: Report more specific failure reasons in alertmanager_notifications_failed_total. #​5659
  • [FEATURE] rocketchat: Add message_text option to set the message text shown in desktop and push notifications. #​5595
  • [FEATURE] slack: Add post_updates_to_thread option to post subsequent notifications of an alert group as replies in the thread of the initial message. #​5540
  • [FEATURE] telegram: Add timeout option to limit how long a notification request may take. #​5127
  • [FEATURE] telegram: Count only visible HTML text toward the message length limit, excluding link URLs. #​5499
  • [FEATURE] template: Add addDuration function to shift a timestamp by a duration such as -30m and return it in Unix milliseconds. #​5550
  • [FEATURE] template: Allow the join function to accept slices and arrays of any type. #​5233
  • [FEATURE] timeinterval: Allow weekday ranges to wrap around the end of the week, e.g. friday:monday. #​5579
  • [FEATURE] ui: Make the creator and comment of a silence optional, matching the API. #​5471
  • [FEATURE] ui: Serve the new Mantine UI at /ui/ alongside the existing UI. #​5502, #​5538, #​5539, #​5537
  • [ENHANCEMENT] Compute alert fingerprints once at ingestion instead of on every mute check, reducing CPU usage and allocations. #​5583
  • [ENHANCEMENT] api: Speed up /api/v2/alerts/groups by evaluating mutes only once per alert and group. #​5674
  • [ENHANCEMENT] cluster: Fix the memeberlist typo in error messages. #​5472
  • [ENHANCEMENT] docs: Add a Gotify example using a custom webhook payload. #​5408, #​5498
  • [ENHANCEMENT] docs: Add a reusable HTML email template example. #​5391
  • [ENHANCEMENT] docs: Clarify the usage of the KV Remove template function. #​5297
  • [ENHANCEMENT] docs: Clarify which route options are inherited by child routes. #​5565
  • [ENHANCEMENT] docs: Correct the PagerDuty default config. #​5397
  • [ENHANCEMENT] docs: Document OAuth2 support in the http_config of jira_config. #​5571
  • [ENHANCEMENT] docs: Document VictorOps custom fields. #​5399
  • [ENHANCEMENT] docs: Document project and issue_type in jira_config as templated strings. #​5549
  • [ENHANCEMENT] docs: Document victorops_api_key and victorops_api_key_file in the global config. #​5168
  • [ENHANCEMENT] docs: Fix rocketchat_config defaults and field types. #​5591
  • [ENHANCEMENT] docs: Fix the tracing config key, which was misspelled as traciing. #​5437
  • [ENHANCEMENT] notify: Add the receiver name to the log message for failed notifications. #​5401
  • [ENHANCEMENT] silences: Reduce allocations when computing the alertmanager_silences metric. #​5460
  • [ENHANCEMENT] victorops: Use Splunk On-Call branding in documentation and error messages without renaming configuration fields. #​5402
  • [BUGFIX] api: Report alerts muted by time intervals as of the time of the request instead of the last group flush, matching silences and inhibitions. #​5661
  • [BUGFIX] cluster: Downgrade memberlist to v0.5.4 to fix Failed to read remote state: user state length (...) exceeds limit errors. #​5640
  • [BUGFIX] config: Fix merging of global configs for the smtp, opsgenie, victorops and rocketchat notifiers. #​5448, #​5457
  • [BUGFIX] discord: Retry notifications on HTTP 429 (rate limited) instead of dropping them. #​5496
  • [BUGFIX] httpserver: Fix the /-/reload endpoint getting stuck when the client cancels the request. #​5234
  • [BUGFIX] notify: Wait the full backoff interval before retrying a notification that failed slowly. #​5497, #​5389, #​5553
  • [BUGFIX] opsgenie: Respect the notification timeout and tracing span for the update-message request sent when update_alerts is enabled. #​5465
  • [BUGFIX] pagerduty: Report the failure reason of Events API v1 requests in alertmanager_notifications_failed_total instead of reason="other". #​5505
  • [BUGFIX] pushover: Trim whitespace from token_file and user_key_file contents so keys stored in files with a trailing newline are accepted. #​5590
  • [BUGFIX] silences: Treat a silence as expired at exactly its end time, consistent with the API. #​5665
  • [BUGFIX] silences: Use a single evaluation time for each read or write of silences. #​5666
  • [BUGFIX] slack: Avoid a panic when update_message relies on global.slack_api_url. #​5589
  • [BUGFIX] slack: Retry notifications on HTTP 429 (rate limited) and honor the Retry-After header instead of dropping them. #​5048
  • [BUGFIX] telegram: Redact the bot token from logged notification errors. #​5254
  • [BUGFIX] telegram: Report the failure reason in alertmanager_notifications_failed_total. #​5375
  • [BUGFIX] template: Preserve quoted numeric strings as strings in templated JSON fields. #​5098
  • [BUGFIX] timeinterval: Fix negative days_of_month resolving one day early in months with a DST transition. #​5447
  • [BUGFIX] timeinterval: Reject month numbers outside 1-12. #​5626
  • [BUGFIX] webex: Fix a panic when truncating long notifications containing non-ASCII characters. #​5544
  • [BUGFIX] webex: Retry notifications on HTTP 429 (rate limited) and honor the Retry-After header instead of dropping them. #​5548
  • [BUGFIX] wechat: Report template errors in corp_id and api_secret instead of sending a token request with empty values. #​5688

v0.34.2: 0.34.2 / 2026-10-29

Compare Source

  • [SECURITY] api: Alertmanager no longer sends CORS headers by default. This means api/v2 now disallows cross-origin requests. This is a breaking change. The new --web.cors.origin flag can be used to restore the previous behaviour. #​5664
  • [SECURITY] Build with Go 1.26.10, which distrusts the eight compromised eMudhra intermediate CA certificates in crypto/x509. CVE-2026-111943

v0.34.1: 0.34.1 / 2026-09-17

Compare Source

  • [BUGFIX] inhibit: Fix several issues related to inhibitions that caused alerts to be improperly un-muted in some cases. #​5542, #​5449, #​5559

v0.34.0: 0.34.0 / 2026-08-16

Compare Source

  • [CHANGE] notify: The reason label on alertmanager_notifications_failed_total now distinguishes authError (HTTP 401/403) and rateLimited (HTTP 429) from the generic clientError. Dashboards/alerts matching reason="clientError" for these codes must be updated. #​5332
  • [FEATURE] Add optional templatable labels to alert routes. #​5328
  • [FEATURE] eventrecorder: Add inhibit rule names to inhibition_muted_alert events. #​5315
  • [FEATURE] eventrecorder: Add stdout output type. #​5311
  • [FEATURE] silences: Add active, expired, and pending boolean filter parameters to GET /api/v2/silences to allow filtering silences by state server-side. #​5406
  • [FEATURE] sns: Add aws external_id support in sigv4 configuration. #​5157
  • [FEATURE] template: Add toDate and mustToDate functions. #​5327
  • [ENHANCEMENT] doc: Add AlertmanagerClusterFailedPeers alertmanager-mixin. #​5301
  • [ENHANCEMENT] doc: Add description for Rocketchat parameters in global config. #​5181
  • [ENHANCEMENT] doc: Add top level tracing configuration key. #​5314
  • [ENHANCEMENT] doc: Fix Alertmanager port in amtool config routes example. #​5312
  • [ENHANCEMENT] eventrecorder: Add optional webhook batching. #​5392
  • [ENHANCEMENT] notify: The discord and webex integrations now report a failure reason on alertmanager_notifications_failed_total. #​5332
  • [ENHANCEMENT] ui: Improve responsiveness of UI when loading thousands of alerts. #​5357
  • [BUGFIX] eventrecorder: Fixed a minor performance regression when the event recorder is enabled. #​5307
  • [BUGFIX] msteamsv2: Inherit global proxy_url into partial http_config. #​5379
  • [BUGFIX] webhook: Keep custom payload string values verbatim instead of reinterpreting JSON leaves that look like YAML (e.g. values ending with a colon). #​5304
prometheus/prometheus (docker.io/prom/prometheus)

v3.16.0: 3.16.0 / 2026-11-04

Compare Source

  • [CHANGE] API: The experimental search endpoints now clamp batch_size to 1000. #​19731
  • [CHANGE] Configuration: Default --web.external-url to https when --web.config.file enables TLS. #​19241
  • [CHANGE] PromQL: Subquery samples are now included in the query TotalSamples and TotalSamplesPerStep statistics, and SamplesRead now counts reads from subqueries with an @​ modifier in range queries. #​19165
  • [CHANGE] Remote write: Stop exposing the deprecated prometheus_remote_storage_metadata_total, prometheus_remote_storage_metadata_failed_total, prometheus_remote_storage_metadata_retried_total, and prometheus_remote_storage_metadata_bytes_total metrics for Remote Write 2.0 queues. #​20080
  • [CHANGE] Remote write receiver: Count Remote Write 2.x samples and histograms ingested without metadata in prometheus_api_remote_write_without_metadata_appended_samples_total even when metadata-wal-records is disabled. #​19812
  • [CHANGE] TSDB: Reject exemplars whose label names are not unique, instead of storing them and serving a duplicate JSON key from /api/v1/query_exemplars. #​19896
  • [FEATURE] API: Allow overriding PromQL Start Timestamp processing on a per-query basis using the X-Prometheus-Use-Start-Timestamps HTTP header. #​19066
  • [FEATURE] Agent: Support metadata-wal-records in Prometheus Agent mode. #​19684
  • [FEATURE] PromQL: Add experimental integral() function for computing integral-over-time of range vectors behind the --enable-feature=promql-experimental-functions flag. #​14440
  • [FEATURE] PromQL: Add experimental query cost estimation, actual cost reporting, and configurable execution limits, enabled with --enable-feature=query-cost. #​20028
  • [FEATURE] PromQL: Smoothed and Anchored vector selectors are now stable and always-on. #​19697
  • [FEATURE] PromQL: Use start timestamps to detect counter resets when float timeseries are queried using extended range selector modifiers (anchored, smoothed). This feature is hidden behind use-start-timestamps feature flag. #​18966
  • [FEATURE] Promtool: print test filename during promtool tests #​18271
  • [FEATURE] PromQL: Allow unquoted Unicode letters and dots behind a feature flag #​20162
  • [ENHANCEMENT] Search API: Warn when participating remote-read storage does not support search. #​19992
  • [ENHANCEMENT] Remote Read: Add native histogram prometheus_remote_read_handler_gate_wait_duration_seconds to measure concurrency-gate wait duration, including requests canceled while waiting. #​18355
  • [ENHANCEMENT] Remote Write: Add experimental flag convert_nhcb_to_classic to convert NHCB to classic histograms for external systems that dont support NHCBs. #​17205
  • [ENHANCEMENT] promtool: Add --allow-incompatible-block-duration so users can specify any max-block-duration instead of being restricted to the default Prometheus block durations. #​19363
  • [PERF] Remote write: Cache repeated OTLP histogram metric names. #​19717
  • [PERF] OpenMetrics 2.0 parser: Reuse classic histogram and summary expansion buffers across scrapes. #​19907
  • [PERF] PromQL: Decode only histogram sum/count (not buckets) for timestamp(), start_timestamp() and absent(). #​19738
  • [PERF] PromQL: Only select the fixed window for subqueries with an @ modifier. #​19863
  • [PERF] Remote write / TSDB: Deduplicate per-series metadata structs in memory with unique.Handle. #​20040
  • [PERF] Scrape: Avoid some copies of scrape response bodies. #​19394
  • [PERF] TSDB: Improve XOR2 compression and append performance by selecting value windows based on encoding cost. #​19962
  • [PERF] TSDB: Reduce memory used writing and reading checkpoint metadata records. #​19712
  • [PERF] Scrape: Convert classic histograms to NHCB directly in the OpenMetrics 2.0 parser without wrapping in NHCBParser. #​19880
  • [PERF] Scrape: Reduce OpenMetrics 2.0 parser allocations and CPU overhead by lazily constructing composite series and exemplar labels. #​19895
  • [BUGFIX] Remote read: Abort failed streaming responses without writing duplicate headers or appending plain-text errors to the protobuf stream #​19749
  • [BUGFIX] TSDB: Fix loss of out-of-order samples when a WAL checkpoint drops a series record that the out-of-order write-behind log still needs #​19737
  • [BUGFIX] TSDB: Fix queries that seek within a head chunk returning samples committed after the query started #​19854
  • [BUGFIX] TSDB: Preserve mapped chunks when WAL replay merges multiple references for the same series, preventing missing out-of-order samples and duplicate in-order chunks after restart #​19805
  • [BUGFIX] Fix auto-reload logic to reload after reverting a failed configuration change #​19838
  • [BUGFIX] API: Do not match metric family metadata for doubled _total and _info suffixes in experimental search API. #​19910
  • [BUGFIX] API: Reject timeout and lookback_delta values that overflow int64 instead of turning them into a negative duration #​19658
  • [BUGFIX] API: Resolve metric family metadata for suffixed metric names in search results, in experimental search API. #​19824
  • [BUGFIX] AWS SD: Describe each ElastiCache cluster once instead of twice for clusters that are not replication group members. #​19434
  • [BUGFIX] Build: Allow installing promtool with version-suffixed go install commands #​19754
  • [BUGFIX] Discovery: Fix a panic in Azure service discovery when a VM tag has a null value. #​19755
  • [BUGFIX] Federation: fix corruption of float native histograms. #​19679
  • [BUGFIX] Fix ts_of_last_over_time for samples before the Unix epoch. #​19828
  • [BUGFIX] Histograms: Fix ConvertNHCBToClassic inflating classic bucket counts for integer native histograms whose spans have gaps. #​19659
  • [BUGFIX] Logging: Preserve rule and TSDB block values in JSON logs. #​19572
  • [BUGFIX] OTLP receiver: Drop exemplars with timestamps more than 10 minutes in the future instead of storing them and blocking subsequent exemplars for that series. #​19812
  • [BUGFIX] OTLP: Count only out-of-order exemplars in prometheus_api_otlp_out_of_order_exemplars_total, not every rejected exemplar. #​20030
  • [BUGFIX] OTLP: Do not drop exemplars that have a trace_id or span_id filtered attribute in addition to a trace or span ID. The trace context now takes precedence over the colliding attribute, as required by the OpenTelemetry specification. #​20004
  • [BUGFIX] OTLP: Do not emit le="+Inf" twice when a histogram's explicit bounds end at +Inf, and warn about the bound. #​19425
  • [BUGFIX] OTLP: Stop dropping exemplars that arrive out of timestamp order within a data point. #​20029
  • [BUGFIX] OpenMetrics 2.0: Attach histogram exemplars to matching classic _bucket series and preserve them when scraping both native and classic histograms. #​20020
  • [BUGFIX] PromQL: Avoid intermediate overflow in rad() and deg() conversions. #​19901
  • [BUGFIX] PromQL: Consistently ignore and drop __type__ and __unit__ labels in without aggregations, absent(), info(), and binary operator fill matching. #​19986
  • [BUGFIX] PromQL: Do not panic when printing the partial AST returned alongside a parse error. #​19797
  • [BUGFIX] PromQL: Drop type and unit in binary operations so they are transparent to users, similar to how name is handled. #​18680
  • [BUGFIX] PromQL: Fix ==, !=, changes() and count_values on native histograms giving wrong results inside histogram_count(), histogram_sum() and histogram_avg(). #​20024
  • [BUGFIX] PromQL: Fix histogram_fraction returning wrong results for native histograms with custom buckets when a bucket boundary is exactly 0. #​19657
  • [BUGFIX] PromQL: Fix histogram_quantile and histogram_quantiles interpolating within the wrong bucket for native histograms whose sum is NaN. #​19973
  • [BUGFIX] PromQL: Fix lexing of subqueries whose range is a duration keyword expression, e.g. foo[range():1s]. #​19729
  • [BUGFIX] PromQL: Fix warning and error locations for duration expressions min_of and max_of. #​19742
  • [BUGFIX] PromQL: Ignore NaN classic histogram bucket boundaries in histogram_quantile, histogram_quantiles and histogram_fraction and return correct value instead of NaN if there are normal buckets. #​20057
  • [BUGFIX] PromQL: Preserve infinite values at exact quantile ranks. #​19899
  • [BUGFIX] PromQL: Preserve original operand sides for experimental fill modifiers with group_right matching. #​19939
  • [BUGFIX] PromQL: Preserve subquery step expressions when printing queries after preprocessing. #​19743
  • [BUGFIX] PromQL: Range vector functions no longer raise a spurious "vector cannot contain metrics with the same labelset" error when series have different metric names but the same remaining labels, as long as their timestamps do not overlap within the evaluated range window #​18631
  • [BUGFIX] PromQL: do not count subquery materialized samples in total samples statistics #​19873
  • [BUGFIX] Remote write: Prevent future-dated exemplars from scaling shards down to the minimum. #​19866
  • [BUGFIX] Agent: Prevent future sent timestamps from advancing WAL truncation beyond the minimum retention window. #​19866
  • [BUGFIX] Rules: Restore firing alerts with for durations shorter than --rules.alert.for-grace-period after a restart. #​19882
  • [BUGFIX] Scrape: fix failing scrape when float histogram is emitted over protobuf with count, zero count and buckets all zero, for example a result of recording rate(x[1m]) over constant histogram. #​19682
  • [BUGFIX] Search API: Return the lexically smallest label values when limit is set on /api/v1/search/label_values, instead of an arbitrary subset #​19694
  • [BUGFIX] TSDB: Fix WAL watcher permanently skipping checkpoint series garbage collection when lagging behind head truncation. #​20041
  • [BUGFIX] Search API: Avoid panics when the requested time range has no participating storage. #​19992
  • [BUGFIX] TSDB: Fix a race in selected-series and stale-series compaction where a sample committed after the block was written but before the series was evicted from the head could be silently lost. The fix no longer depends on isolation being enabled. #​19666
  • [BUGFIX] TSDB: Fix a rare case where a sample could be lost during selected-series or stale-series compaction if an unrelated write to the same series ran cleanup that erased the evidence needed to protect it. #​19672
  • [BUGFIX] TSDB: Fix spurious "unknown series references" warnings during WAL replay after a restart, when the only blocks on disk were produced by selected-series or stale-series compaction. #​19734
  • [BUGFIX] TSDB: Increment prometheus_tsdb_wal_corruptions_total when WAL corruption is detected during checkpoint creation, so the metric reflects corruption found at compaction time rather than only after a restart-triggered repair. #​19858
  • [BUGFIX] TSDB: Preserve series identities needed to recover exemplars after compaction and restart. #​19940
  • [BUGFIX] TSDB: Reject native histograms whose span offsets overflow the int32 bucket index instead of storing them with corrupted buckets. #​20034
  • [BUGFIX] TSDB: fix no passing metadata-wal-records to TSDB from main feature flag. #​19678
  • [BUGFIX] Templates: Preserve IPv6 addresses with dotted zone identifiers in stripDomain. #​19908
  • [BUGFIX] UI: Don't automatically open an autocomplete dropdown after closing a function call body or aggregation operator with a closing parenthesis. #​19825
  • [BUGFIX] Web: Fix HTTP/2 negotiation silently falling back to HTTP/1.1 under Go 1.27+ when TLS is enabled with http2: true. The server now correctly advertises h2 via ALPN and multiplexes concurrent requests over a single connection. #​19848
  • [BUGFIX] mixin: Fix double-counting of failed samples in the PrometheusRemoteStorageFailures alert denominator. #​19877
  • [BUGFIX] promtool: Honor --enable-feature when evaluating rules in test rules. #​20046
  • [BUGFIX] Scrape: Ensure UTF-8 works with the experimental OpenMetrics 2.0 #​19902
  • [BUGFIX] Scrape: Reject sum-only classic histograms during NHCB conversion #​19315

v3.15.1: 3.15.1 / 2026-10-21

Compare Source

  • [SECURITY] Container images: Update CA certificates to distrust "emSign ECC Root CA - G3" and "Comodo AAA Services root" following the compromise of eMudhra intermediate CA private keys.
  • [SECURITY] Build with Go 1.27.3 to fix vulnerabilities in net/http, net/textproto, crypto/tls and html/template.
  • [SECURITY] Bump golang.org/x/net to v0.60.0 to fix HTTP/2 vulnerabilities (GO-2026-6603, GO-2026-6610, GO-2026-6611, GO-2026-6612, GO-2026-6617).

v3.15.0: 3.15.0 / 2026-09-24

Compare Source

  • [CHANGE] PromQL: A range query whose end was not aligned to step caused subqueries inside it to evaluate past the parent's last actual step, inflating peakSamples in the query stats and against the query.max-samples limit, and wasting storage I/O reading samples that were never used in the result. Add tests to prevent regression of the fix made in #​18081. #​18598
  • [CHANGE] PromQL: Do not register a start timestamp reset if the start timestamp hasn't changed between subsequent samples. #​19454
  • [CHANGE] Logging: Deprecate --log.level; use runtime.log_level configuration to supply the default level. #​19511
  • [FEATURE] Configuration: Allow changing the process log level through runtime.log_level on configuration reload. #​19511
  • [FEATURE] Prometheus: Add --auto-gomemlimit.refresh-interval flag to periodically re-detect the container or system memory limit and update GOMEMLIMIT at runtime. #​18843
  • [FEATURE] Scraping: Add support for scraping targets via Unix Domain Sockets. #​12024. #​18091
  • [FEATURE] scrape: Implement OM2.0 scrape format. #​18606
  • [ENHANCEMENT] Reduce TSDB head CPU utilization when initializing. #​18001
  • [ENHANCEMENT] Docker SD: Add labels __meta_docker_container_image and __meta_docker_container_image_id. #​19386
  • [ENHANCEMENT] Mixin: Add a p95/p99 remote-write send-batch latency panel to the remote-write dashboard. #​19500
  • [ENHANCEMENT] Mixin: Support native histograms in the remote-write send-batch latency panel. #​19522
  • [ENHANCEMENT] PromQL/TSDB: The --enable-feature=st-storage flag now automatically enables XOR2 float chunk encoding and ST-capable histogram chunk encoding, so you no longer need to pass xor2-encoding and histograms-st-encoding alongside it. #​19518
  • [ENHANCEMENT] Remote write / Alertmanager: upgrade sigv4 to v0.5.0, adding session_name and tags fields for STS AssumeRole sessions. The previously undocumented service_name field is now also documented. #​19569
  • [ENHANCEMENT] Scraping: Support zstd-compressed scrape responses, enabled via feature flag zstd-scrape. #​19502
  • [ENHANCEMENT] TSDB: Stabilize the XOR2 float chunk encoding. --enable-feature=xor2-encoding is deprecated; use storage.tsdb.chunk_encoding.floats: xor2 instead. Check that other software reading the TSDB directly (e.g. Thanos sidecar) supports XOR2 before enabling. #​19461
  • [ENHANCEMENT] TSDB: add prometheus_tsdb_head_appenders_created_total metric. #​19411
  • [ENHANCEMENT] Tracing: add more spans to scrapes, API queries and rule evaluations. #​19410
  • [ENHANCEMENT] UI: Show the effective configuration for each scrape pool on the Targets and Service Discovery pages. #​19384
  • [ENHANCEMENT] scrape: Enable start time synthesis for summary _count and _sum series in scrape appender v2. #​19323
  • [ENHANCEMENT] scrape: stop all pools in parallel for faster shutdowns. #​19295
  • [ENHANCEMENT] storage/remote: Add undocumented failed_request_logging config field to debug log remote write V2 requests on send errors. #​19249
  • [ENHANCEMENT] TSDB: Add fast path for XOR chunk decompression to speed up queries. #​18049
  • [ENHANCEMENT] UI: Improve native histogram table formatting and add a background bar indicating the bucket count. #​19332
  • [ENHANCEMENT] TSDB: Add prometheus_tsdb_head_series_pending_commit_underflow_total to report pending-sample reservation underflows. #​19470
  • [PERF] AWS SD: Build RDS cluster labels once per cluster instead of once per instance. #​19504
  • [PERF] AWS SD: Describe RDS instances of different clusters concurrently, bounded by request_concurrency. #​19506
  • [PERF] AWS SD: Describe each ElastiCache resource once per refresh instead of twice. #​19585
  • [PERF] Remote read: Avoid cloning labels for sampled reads when no external labels are configured. #​19503
  • [PERF] Remote write: Reuse OTLP converter scratch state between requests. #​19388
  • [PERF] scrape: conversion from classic to native histograms should only parse start times when enabled. #​19446
  • [BUGFIX] PromQL: Fix info() enrichment for composite expressions with mixed @/offset references or selector-free vector branches, preventing metadata from being evaluated at an unrelated timestamp. #​19387
  • [BUGFIX] PromQL: Fix info() enrichment when input series use different subsets of identifying labels. #​19557
  • [BUGFIX] PromQL: Preserve metric-name dropping through the info function when delayed name removal is enabled. #​19413
  • [BUGFIX] TSDB: Don't silently drop samples when head garbage collection removes a series while it is being appended to. #​19272
  • [BUGFIX] TSDB: Keep series with uncommitted samples during selected- and stale-series compaction, including when appenders overlap. #​19470
  • [BUGFIX] TSDB: Do not retain head series after a synthetic start-timestamp zero sample is rejected. #​19470
  • [BUGFIX] TSDB: Prevent query panics during series eviction after WAL replay. #​19664
  • [BUGFIX] TSDB: fix potential deadlock between mmapSeriesChunks and gcSeries. #​19460
  • [BUGFIX] TSDB: fix default block reload interval for custom options. #​19368
  • [BUGFIX] AWS SD: Do not crash on serverless MSK clusters or MSK clusters without Open Monitoring. #​19194
  • [BUGFIX] AWS SD: Do not panic when the ElastiCache API omits optional fields of a serverless cache or cache cluster. #​19435
  • [BUGFIX] AWS SD: Reject non-positive request_concurrency instead of hanging service discovery indefinitely. #​19524
  • [BUGFIX] Discovery/AWS: Avoid a panic when discovering standalone ECS tasks with custom task groups. #​19302
  • [BUGFIX] Discovery: Do not panic in AWS Lightsail service discovery when an instance is missing optional fields such as availability zone, blueprint, bundle, name, state or support code. #​19324
  • [BUGFIX] Discovery: delete the stale prometheus_sd_last_update_timestamp_seconds series for a config that is removed on reload. #​19131
  • [BUGFIX] HTTP: Avoid truncating compressed responses when handlers set Content-Length. #​19661
  • [BUGFIX] IONOS SD: Do not panic when the API response omits the server, NIC or volume collections, or a server's properties. #​19438
  • [BUGFIX] Metadata will not affect the number of Remote Write v2 shards. #​19218
  • [BUGFIX] Mixins: Fix label mismatches that prevented PrometheusHAGroupNotIngestingSamples and PrometheusHAGroupCrashlooping from firing. #​19444
  • [BUGFIX] Native histograms: DetectReset no longer misses a counter reset when a populated bucket behind an empty one disappears, which could make histogram rate()/increase() undercount. #​19367
  • [BUGFIX] Never skip histogram buckets for histogram_stddev and histogram_stdvar functions. #​19521
  • [BUGFIX] OTLP: Do not abort an entire OTLP payload ingestion if one metric has no datapoints. #​19343
  • [BUGFIX] PromQL: Fix FastRegexMatcher false-positive match when a capturing group is directly adjacent to a literal (e.g. .*\|(foo)\|.*). #​19516
  • [BUGFIX] PromQL: Fix a panic in range selectors using the experimental anchored or smoothed modifier when the selected series has no samples inside the query window, for example a query evaluated inside a scrape gap. #​19431
  • [BUGFIX] PromQL: Fix empty results when a subquery with @ is used as the matrix argument of a call that is not step-invariant (for example quantile_over_time(scalar(x), metric[...:...] @ T)). #​19187
  • [BUGFIX] PromQL: Make the "found duplicate series for the match group" many-to-many matching error message deterministic by sorting the two duplicate labels. #​18810
  • [BUGFIX] PromQL: Preserve parentheses around duration literals on Expr.String() round-trip. #​19403
  • [BUGFIX] PromQL: Reject duration-expression offsets and @ start() / @ end() before range selectors, matching the existing rejection of literal offsets and @ <timestamp>. #​19406
  • [BUGFIX] PromQL: Report the position of the histogram argument rather than of a scalar argument in the native histogram NaN observation annotations of histogram_quantile and histogram_fraction. #​19330
  • [BUGFIX] PromQL: info() now applies the @​ modifier/offset when evaluating the info series, so info(v @​ T) enriches as of T consistently instead of depending on the query start/eval time. #​19266
  • [BUGFIX] Rules: Fix a panic when a rule manager created without a logger loads a rule file containing multiple YAML documents. #​19433
  • [BUGFIX] Scrape: Do not append a stale marker for a series that is still exposed when the storage returns a new series reference for it. #​19328
  • [BUGFIX] Scrape: JSON log formatter correctly format scrape target info. #​19472
  • [BUGFIX] TSDB: Fix in-order chunk ID overflow by wrapping head chunk IDs modulo 2^23 so they never collide with the out-of-order flag bit. #​19450
  • [BUGFIX] TSDB: Fix out-of-order chunk ID overflow by wrapping firstOOOChunkID modulo 2^23 instead of growing unbounded. #​19216
  • [BUGFIX] UI: Remove an extraneous X-axis tick mark in the native histogram chart when using the "linear" display mode. #​19326
  • [BUGFIX] discovery/aws: Avoid a panic when an ElastiCache ARN is missing its resource ID. #​19333
  • [BUGFIX] discovery/aws: Do not panic on MSK clusters whose optional API fields are absent. #​19584
  • [BUGFIX] discovery/aws: Do not panic when the EC2 API omits optional instance fields. #​19512
  • [BUGFIX] discovery/aws: Don't panic on ECS tasks with absent optional fields. #​19396
  • [BUGFIX] discovery/aws: MSK Optional Custom Configuration Fields #​19422. #​19422
  • [BUGFIX] discovery/ionos: Fix panic when the IONOS API omits optional server fields. #​19418
  • [BUGFIX] discovery/kubernetes: Populate __meta_kubernetes_service_loadbalancer_ip from status.loadBalancer.ingress, falling back to deprecated spec.loadBalancerIP. #​19404
  • [BUGFIX] histogram: Fix Compact moving buckets to wrong indices, and producing negative bucket counts for integer histograms, when more than one span is merged in the same pass. #​19312
  • [BUGFIX] promtool: Fixed tsdb dump silently dropping native histogram samples. #​18051
  • [BUGFIX] scrape: fix data race in Manager.TargetsDroppedCounts to avoid miscounting dropped targets. #​19304
  • [BUGFIX] scrape: fix nil histogram when native and classic histograms are mixed in one metric family. #​19452
  • [BUGFIX] TSDB: Fix WAL and GC log messages to emit human-readable duration strings instead of nanosecond integers. #​19307
  • [BUGFIX] TSDB: Avoid WAL corruption after a failed WAL write in Agent mode. #​19700
  • [BUGFIX] Agent: Ignore unknown WAL record types, to help users rolling back. #​19814

v3.14.0: 3.14.0 / 2026-08-17

Compare Source

  • [CHANGE] API: Deprecate the stats query parameter of /api/v1/query and /api/v1/query_range for values other than true and all. Other values still enable basic statistics but now return a deprecation warning; they will be rejected in the next major release. #​19124
  • [CHANGE] API: /api/v1/status/config now correctly shows separator: "" and replacement: "" in relabel configs when explicitly set to empty, instead of omitting them. #​18653
  • [CHANGE] Discovery/Hetzner: Drop the __meta_hetzner_datacenter label for hcloud targets, following its removal from the Hetzner Cloud API. #​19269
  • [CHANGE] PromQL: Enable duration expressions by default. The promql-duration-expr feature flag is now a no-op. #​19033
  • [CHANGE] PromQL: Promote first_over_time to stable. It no longer requires the promql-experimental-functions feature flag. #​19093
  • [FEATURE] Discovery: Add Oracle Cloud Infrastructure compute service discovery (oci_sd_configs). #​18919
  • [FEATURE] PromQL: Add experimental start_timestamp(instant-vector) function returning the start timestamp of each sample in the given vector. Requires the use-start-timestamps feature flag. #​19089
  • [FEATURE] PromQL: Allow rate() and increase() to use start timestamps as an alternative for rate extrapolation. Hidden behind the use-start-timestamps feature flag. #​18619
  • [FEATURE] TSDB: Add experimental support for encoding start timestamps in histograms and float histograms. Hidden behind the histograms-st-encoding feature flag. #​18609
  • [ENHANCEMENT] OTLP: Emit a warning when OTLP attribute names collide into the same Prometheus label after sanitization (e.g. k8s.pod.name and k8s_pod_name both become k8s_pod_name), and expose the prometheus_api_otlp_translation_warnings_total counter labelled by category to track such warnings. #​18957
  • [ENHANCEMENT] Promtool: Add --remote-write.path flag to push metrics for backends that use a non-default remote-write endpoint. #​19086
  • [ENHANCEMENT] Remote write: Forward histogram start timestamps in the remote write V2 protocol. #​18903
  • [ENHANCEMENT] TSDB: Add prometheus_tsdb_head_native_histogram_series and prometheus_tsdb_head_native_histogram_buckets gauges tracking the number of native histogram series and buckets in the head. #​19170
  • [ENHANCEMENT] UI: Add syntax highlighting, autocompletion, and linting for PromQL duration expressions (step(), range(), min_of(), max_of()) in range selectors and subqueries. #​18625
  • [ENHANCEMENT] UI: Add copy button next to rule names on the Rules and Alerts pages. #​18706
  • [ENHANCEMENT] UI: Improve rule group title contrast on the Rules page. #​19181
  • [PERF] Speed up regex label matchers matching a set of literal values (e.g. {job=~"foo|bar|baz"}). #​18833
  • [PERF] Remote read: Improve remote read throughput by removing unnecessary per-write flushing. #​18470
  • [PERF] Scrape: Parse text and OpenMetrics formats without recursion, preventing stack overflow from deeply nested or malicious exposition input. #​19143
  • [PERF] Scrape: Reduce native histogram scrape parsing allocations by ~49%. #​19282
  • [PERF] TSDB: Speed up queries on series with many in-memory chunks. #​18300
  • [BUGFIX] Alerting: Fix 100% CPU usage on shutdown that could delay graceful shutdown and trigger timeout-based kills. #​17859
  • [BUGFIX] Discovery/AWS: Stop promtool check config from making AWS metadata service (IMDS) network calls when the region field is omitted in EC2, ECS, RDS, MSK, ElastiCache, and Lightsail service discovery configs. #​19037
  • [BUGFIX] Discovery/Docker: Set a request timeout for docker_sd and dockerswarm_sd on unix, npipe, and tcp hosts. Previously an unresponsive daemon could freeze discovery indefinitely, silently pinning targets to a stale snapshot. #​19237
  • [BUGFIX] Discovery/Docker: Fix panic in Docker Swarm service discovery when a service runs as a plugin or network-attachment. #​19102
  • [BUGFIX] Discovery/Docker: Fix discovery of IPv6-only containers. #​18778
  • [BUGFIX] PromQL: Fix case-insensitive regex label matchers silently dropping matching values. #​19167
  • [BUGFIX] PromQL: Fix mad_over_time returning 0 instead of NaN when the range contains a NaN sample. #​19040
  • [BUGFIX] Promtool: Accept --enable-feature=promql-binop-fill-modifiers in check rules, which previously rejected valid fill()/fill_left()/fill_right() expressions. #​19153
  • [BUGFIX] Remote write: Respect the AZURE_FEDERATED_TOKEN_FILE environment variable for workload identity authentication instead of hardcoding the token file path. #​18973
  • [BUGFIX] Rules: Clean up stale rule_group_last_rule_duration_sum_seconds and rule_group_last_restore_duration_seconds series when a rule group is removed or renamed on reload. Previously each reload leaked two series per dropped group, growing /metrics cardinality over time. #​19107
  • [BUGFIX] Scrape: Fix scrape manager spinning at 100% CPU on shutdown. #​19149
  • [BUGFIX] TSDB: Fix silent data loss and potential crash loop when stale_series_compaction_threshold is used in the config file. #​19016
  • [BUGFIX] TSDB: Fix potential data loss on restart when out-of-order ingestion is enabled and blocks are compacted. #​19016
  • [BUGFIX] TSDB: Fix prometheus_tsdb_head_stale_series over-counting and early eviction of series that change between float, integer histogram, and float histogram sample types. #​19183
  • [BUGFIX] TSDB: Fix goroutine and file handle leaks when Prometheus fails to open a corrupt TSDB. On Windows, the leaked directory handle also prevented TSDB directory removal. #​18291
  • [BUGFIX] TSDB: Fix out-of-order queries blocking compaction for hours, causing memory usage to grow. #​19013
  • [BUGFIX] TSDB: Fix deleted series causing missing samples and errors after restart. #​19140
  • [BUGFIX] TSDB: Fix native histogram data becoming incorrect after restart. #​19202
  • [BUGFIX] TSDB: Surface query errors that were previously silently discarded. #​19120
  • [BUGFIX] TSDB: Honour the configured float chunk encoding when compaction rewrites chunks; previously chunks encoded with --enable-feature=xor2-encoding could silently revert to XOR after compaction. #​19145
  • [BUGFIX] UI: Show the delete-series form on the TSDB Status page when --web.enable-admin-api is enabled. #​19025

v3.13.5: 3.13.5 / 2026-10-21

Compare Source

  • [SECURITY] Container images: Update CA certificates to distrust "emSign ECC Root CA - G3" and "Comodo AAA Services root" following the compromise of eMudhra intermediate CA private keys.
  • [SECURITY] Build with Go 1.26.10 to fix vulnerabilities in net/http, net/textproto, crypto/tls and html/template.
  • [SECURITY] Bump golang.org/x/net to v0.60.0 to fix HTTP/2 vulnerabilities (GO-2026-6603, GO-2026-6610, GO-2026-6611, GO-2026-6612, GO-2026-6617).
  • [SECURITY] Bump OpenTelemetry to v1.45.0 to fix exporter endpoint URLs leaking into info logs (GO-2026-6505).
  • [CHANGE] Building Prometheus now requires Go 1.26 or later.

v3.13.4: 3.13.4 / 2026-09-29

Compare Source

  • [SECURITY] Bump google.golang.org/grpc to v1.83.1 to fix HTTP/2 DATA frame fragmentation memory exhaustion (GO-2026-6348). #​19834
  • [SECURITY] UI: Update vulnerable npm dependencies. #​19834
  • [BUGFIX] Agent: Ignore unknown WAL record types to allow rolling back from newer versions. #​19814
  • [BUGFIX] Federation: Fix corruption of float native histograms. #​19679
  • [BUGFIX] Scrape: Fix failing scrapes of protobuf float histograms with zero sample, zero and bucket counts, such as the result of recording rate(x[1m]) over a constant histogram. #​19682

v3.13.3: 3.13.3 / 2026-09-07

Compare Source

  • [SECURITY] Bump github.com/klauspost/compress to v1.18.7 (GO-2026-5841) and golang.org/x/crypto to v0.55.0 (GO-2026-6303).
  • [BUGFIX] Docker SD: Fix panic in Docker Swarm service discovery when a service runs as a plugin or network-attachment. #​19102
  • [BUGFIX] PromQL: Fix case-insensitive regex label matchers silently dropping matching values. #​19167
  • [BUGFIX] Scrape: Fix scrape manager spinning at 100% CPU on shutdown. #​19149
  • [BUGFIX] Alerting: Fix 100% CPU usage on shutdown that could delay graceful shutdown and trigger timeout-based kills. #​17859
  • [BUGFIX] TSDB: Fix out-of-order queries blocking compaction for hours, causing memory usage to grow. #​19013
  • [BUGFIX] TSDB: Fix deleted series causing missing samples and errors after restart. #​19140
  • [BUGFIX] TSDB: Fix goroutine and file handle leaks when Prometheus fails to open a corrupt TSDB. On Windows, the leaked directory handle also prevented TSDB directory removal. #​18291

v3.13.2: 3.13.2 / 2026-07-29

Compare Source

What's Changed

  • [SECURITY] Bump golang.org/x/text to v0.39.0 (CVE-2026-56852) and google.golang.org/grpc to v1.82.1 (GHSA-hrxh-6v49-42gf). #​19290 by @​krajorama
  • [BUGFIX] PromQL: Preallocate the active query tracker file to avoid SIGBUS crashes when the data disk is full. #​19289 by @​akshajrawat

Full Changelog: https://github.com/prometheus/prometheus/compare/v3.13.1...v3.13.2

prometheus-pve/prometheus-pve-exporter (docker.io/prompve/prometheus-pve-exporter)

v3.11.0

Compare Source

Added


- Support _FILE suffix for credential environment variables (#&#8203;542)

Changed
  • Bump paramiko from 5.0.0 to 5.1.0 (#​541)
  • Bump pypa/gh-action-pypi-publish from 1.14.2 to 1.14.3 (#​540)
  • Bump pycparser from 3.0 to 3.12 (#​539)
  • Bump docker/login-action from 4.6.0 to 4.7.0 (#​538)
  • Bump actions/setup-python from 7.0.0 to 7.1.0 (#​537)
  • Bump alpine from 3.24.2 to 3.24.3 (#​536)

v3.10.2

Compare Source

Changed


- Bump markupsafe from 3.0.3 to 3.0.4 (#&#8203;525)
- Bump wrapt from 2.4.1 to 2.5.1 (#&#8203;524)
- Bump charset-normalizer from 3.5.1 to 3.5.2 (#&#8203;526)
- Bump cryptography from 50.0.1 to 50.0.2 (#&#8203;523)
- Bump werkzeug from 3.1.8 to 3.1.9 (#&#8203;527)
- Bump actions/download-artifact from 8.0.1 to 8.0.2 (#&#8203;528)
- Bump actions/upload-artifact from 7.0.1 to 7.0.2 (#&#8203;529)
- Bump certifi from 2026.7.22 to 2026.10.23 (#&#8203;533)

`3.10.1`_ - 2026-10-03
----------------------

Changed
  • Bump idna from 3.19 to 3.20 (#​520)
  • Bump urllib3 from 2.7.0 to 2.8.0 (#​519)
  • Bump cryptography from 50.0.0 to 50.0.1 (#​511)
  • Bump gunicorn from 26.1.0 to 26.2.0 (#​509)
  • Bump alpine from 3.24.1 to 3.24.2 (#​517)
  • Bump docker/build-push-action from 7.3.0 to 7.4.0 (#​518)
  • Bump docker/setup-qemu-action from 4.2.0 to 4.4.0 (#​516)
  • Bump docker/setup-buildx-action from 4.3.0 to 4.4.1 (#​515)
  • Bump wrapt from 2.3.0 to 2.4.1 (#​514)
  • Bump actions/attest from 4.1.1 to 4.2.2 (#​506)
  • Bump docker/setup-buildx-action from 4.1.0 to 4.3.0 (#​507)
  • Bump idna from 3.18 to 3.19 (#​504)
  • Bump gunicorn from 26.0.0 to 26.1.0 (#​505)
  • Bump charset-normalizer from 3.4.9 to 3.5.1 (#​502)
  • Bump cffi from 2.1.0 to 2.1.1 (#​501)
  • Bump docker/login-action from 4.4.0 to 4.6.0 (#​500)
  • Bump packaging from 26.2 to 26.3 (#​499)
  • Bump actions/setup-python from 6.3.0 to 7.0.0 (#​498)
  • Bump actions/checkout from 7.0.0 to 7.0.1 (#​497)
  • Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.2 (#​495)

v3.10.1

Compare Source

What's Changed

Full Changelog: https://github.com/prometheus-pve/prometheus-pve-exporter/compare/v3.10.0...v3.10.1

v3.10.0

Compare Source

Added


- Bump minimum python version to 3.11 (#&#8203;458)

Changed
  • Bump cryptography from 49.0.0 to 50.0.0 (#​491)
  • Bump wrapt from 2.2.2 to 2.3.0 (#​490)
  • Bump prometheus-client from 0.25.0 to 0.26.0 (#​489)
  • Bump certifi from 2026.6.17 to 2026.7.22 (#​486)
  • Bump charset-normalizer from 3.4.7 to 3.4.9 (#​484)
  • Bump cffi from 2.0.0 to 2.1.0 (#​483)
  • Bump docker/login-action from 4.2.0 to 4.4.0 (#​482)
  • Bump docker/build-push-action from 7.2.0 to 7.3.0 (#​481)
  • Bump docker/metadata-action from 6.1.0 to 6.2.0 (#​480)
  • Bump actions/attest from 4.1.0 to 4.1.1 (#​478)
  • Bump docker/setup-qemu-action from 4.1.0 to 4.2.0 (#​477)
  • Switch from actions/attest-build-provenance to actions/attest (#​473)
  • Bump actions/checkout from 6.0.3 to 7.0.0 (#​475)
  • Bump wrapt from 2.2.1 to 2.2.2 (#​476)
  • Bump actions/setup-python from 6.2.0 to 6.3.0 (#​474)
  • Disable gunicorn control socket (#​472)
  • Bump cryptography from 48.0.1 to 49.0.0 (#​470)
  • Bump certifi from 2026.5.20 to 2026.6.17 (#​469)
  • Bump alpine from 3.24.0 to 3.24.1 (#​468)
  • Bump alpine from 3.23.4 to 3.24.0 (#​465)
  • Bump cryptography from 46.0.7 to 48.0.1 (#​466)
  • Bump gunicorn from 23.0.0 to 26.0.0 (#​462)
  • Bump requests from 2.33.1 to 2.34.2 (#​463)
  • Bump charset-normalizer from 3.3.2 to 3.4.7 (#​464)
  • Bump idna from 3.17 to 3.18 (#​461)
  • Bump certifi from 2024.7.4 to 2026.5.20 (#​460)
  • Bump actions/checkout from 6.0.2 to 6.0.3 (#​459)
  • Bump bcrypt from 4.1.2 to 5.0.0 (#​457)
  • Bump pycparser from 2.21 to 3.0 (#​456)
  • Bump invoke from 2.2.0 to 3.0.3 (#​455)
  • Bump markupsafe from 2.1.3 to 3.0.3 (#​454)
  • Bump packaging from 23.2 to 26.2 (#​453)
  • Bump docker/setup-qemu-action from 4.0.0 to 4.1.0 (#​452)
  • Allow dependabot to update all pip dependencies (#​451)
  • Bump idna from 3.7 to 3.17 (#​450)
  • fixup! Bump wrapt from 2.1.2 to 2.2.1 (#​449)
  • Revert "Bump wrapt from 2.1.2 to 2.2.1 (#​449)"
  • Bump wrapt from 2.1.2 to 2.2.1 (#​449)
  • Bump docker/metadata-action from 6.0.0 to 6.1.0 (#​448)
  • Bump docker/setup-buildx-action from 4.0.0 to 4.1.0 (#​447)
  • Bump docker/login-action from 4.1.0 to 4.2.0 (#​446)
  • Bump docker/build-push-action from 7.1.0 to 7.2.0 (#​445)
TwiN/gatus (ghcr.io/twin/gatus)

v5.38.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/TwiN/gatus/compare/v5.37.0...v5.38.0

v5.37.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/TwiN/gatus/compare/v5.36.0...v5.37.0

ansible/ansible-lint (https://github.com/ansible/ansible-lint)

v26.11.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/ansible/ansible-lint/compare/v26.10.1...v26.11.0

v26.10.1

Compare Source

What's Changed

Full Changelog: https://github.com/ansible/ansible-lint/compare/v26.10.0...v26.10.1

v26.10.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/ansible/ansible-lint/compare/v26.9.0...v26.10.0

v26.9.0

Compare Source

Features

Fixes

Performance

Maintenance

What's Changed

New Contributors

Full Changelog: https://github.com/ansible/ansible-lint/compare/v26.8.0...v26.9.0

v26.8.0

Compare Source

What's Changed

New Contributors

Full Changelog: https://github.com/ansible/ansible-lint/compare/v26.6.0...v26.8.0

netbox-community/netbox (netbox)

v4.7.5: - 2026-11-10

Compare Source

Enhancements

  • #​23470 - Add 3C8P, 3C12P, and 4C12P trunk cable profiles

Performance Improvements

  • #​23505 - Avoid redundant query conditions when filtering by a non-unique name or slug, such as MAC addresses by interface or device components by device
  • #​23562 - Batch the loading of related objects read by export templates, rather than querying them for each object
  • #​23563 - Batch the loading of related objects when rendering global search results
  • #​23564 - Batch the loading of cable terminations and their parent objects when listing cables, cable terminations, ports, and power feeds via the REST API
  • #​23565 - Batch the loading of deferred fields and related objects which the GraphQL query optimizer can't anticipate, such as those read when resolving link_peers and connected_endpoints

Bug Fixes

  • #​23185 - Prevent the deletion of a region or site group from also deleting the circuit terminations attached to its sites and locations
  • #​23260 - Fix exception when applying migration dcim.0245_consolidate_unique_constraints on installations whose location, region, or site group unique constraints have auto-generated names
  • #​23407 - Restrict the image attachments listed under an object's Images tab to those the user is permitted to view
  • #​23446 - Prevent duplicate submissions of object add and edit forms (such as duplicate image attachments) by disabling the submit button after the first click
  • #​23447 - Fix exception when ordering REST API results by an object count field (e.g. count_ipaddresses) which is omitted from the response by brief or fields
  • #​23477 - Include the asn_count field in the REST API representation of ASN ranges
  • #​23478 - Validate {module} placeholders in component labels and module bay templates when installing a module, rather than raising an exception or resolving them to an empty string
  • #​23486 - Record pre-change data in the change log for virtual chassis members when creating, editing, or deleting a virtual chassis
  • #​23510 - Prevent a queued background job from running after it has been deleted or marked as failed
  • #​23511 - Display the correct file path on a script's Source tab, and identify the script file (rather than <string>) in error tracebacks
  • #​23534 - Fix IntegrityError exception when completing a job whose owner already has a notification for it
  • #​23535 - Prevent a duplicate recurring sync job from being created when a data source is saved as its scheduled sync finishes
  • #​23542 - Fix FileNotFoundError exception when synchronizing a local data source whose subdirectory paths repeat the root path (e.g. /scripts/scripts_old/)
  • #​23558 - Fix errors when editing an API token without permission to view users, or from the user's own API tokens view
  • #​23559 - Fix the prefetching of related objects shown as display attributes in global search results
  • #​23574 - Fix exception when passing null to several filters (e.g. present_in_vrf_id, available_at_site, and interface_id), and support filtering data sources by sync_interval=null
  • #​23584 - Enforce SSO allowlist settings (e.g. WHITELISTED_DOMAINS and WHITELISTED_EMAILS) by adding auth_allowed to the default SOCIAL_AUTH_PIPELINE
  • #​23585 - Enforce view permissions on parent and related objects when adding individual components or component templates, and when bulk adding prefixes, IP addresses, and VLANs
  • #​23595 - Implement update_dependent_objects() for wireless links, circuit terminations, and channel subinterfaces, to rebuild cable paths after writes which bypass save()
  • #​23596 - Record pre-change data in the change log for components adopted when installing a module
  • #​23597 - Record change log entries and trigger event rules for port mappings created from device type and module type templates, or moved with a module to another device

v4.7.4: - 2026-10-27

Compare Source

[!WARNING]
This release upgrades the sorl-thumbnail dependency to v13.4.0, which fixes how cached image thumbnails resolve their storage backend. If your STORAGES configuration defines OPTIONS for a BACKEND path which re-exports a class defined elsewhere (for example, storages.backends.s3boto3.S3Boto3Storage, which is an alias of storages.backends.s3.S3Storage), run manage.py thumbnail clear once after upgrading. This purges sorl-thumbnail's record of previously generated thumbnails, which may reference the storage backend without its configured options. No image files are deleted.

[!WARNING]
The GraphQL enum for circuit and virtual circuit status is now exposed correctly as CircuitStatusEnum, and its values carry the STATUS_ prefix used by other status enums. Queries which filter on unprefixed values (e.g. {exact: ACTIVE}) must be updated to use the prefixed form (e.g. {exact: STATUS_ACTIVE}). See #​23469 for details.

Enhancements
  • #​23031 - Add 8C1P, 12C1P, and 24C1P trunk cable profiles
  • #​23238 - Support the __empty lookup for boolean custom field filters
  • #​23365 - Add a copy-to-clipboard button for site addresses
  • #​23463 - Include the IDs of the associated change log records (object_change_ids) in event data and webhook payloads
Performance Improvements
  • #​23076 - Avoid reloading deferred columns for each object when resolving the display field via GraphQL
  • #​23259 - Coalesce search cache updates rather than enqueuing a background job for each change
  • #​23286 - Count the IP addresses and FHRP group assignments of device and VM interfaces in REST API responses without loading the related objects
  • #​23355 - Prefetch the objects referenced by object custom fields when rendering REST API lists
  • #​23371 - Avoid deep-copying cached config context data when serializing REST and GraphQL API responses
Bug Fixes
  • #​22359 - Apply the query_params of a custom script ObjectVar to its object selector
  • #​22714 - Recover the schedules of system jobs (e.g. housekeeping) lost from the task queue, such as after restoring a database backup
  • #​22883 - Retain existing terminations when editing a cable with multiple devices on one end, and identify the device of each termination
  • #​23212 - Prevent the removal of a virtual chassis member whose interfaces form a LAG with another member
  • #​23235 - Restrict the jobs listed under an object's or script's jobs tab to those the user is permitted to view
  • #​23329 - Prevent a search within the object selector from reloading the parent form
  • #​23364 - Restrict the most recent job reported by the scripts REST API endpoint to jobs the user is permitted to view
  • #​23372 - Fix exception when listing bookmarks, journal entries, and other objects assigned to objects which have no REST API serializer
  • #​23375 - Resolve the deprecated finalize environment parameter for export and config templates only from the template's saved record
  • #​23422 - Fix exception when assigning a service or service template to an object custom field via the REST API
  • #​23423 - Represent 64-bit integer fields (such as object IDs) as BigInt in the GraphQL API
  • #​23424 - Declare object IDs as 64-bit integers in the OpenAPI schema
  • #​23425 - Fix "integer out of range" error when tagging an object with an ID greater than 2,147,483,647
  • #​23445 - Prevent concurrent REST API updates to an object from overwriting each other's changes
  • #​23448 - Fix the GraphQL config_context field when selected within an inline or named fragment
  • #​23464 - Apply data source synchronizations atomically, so that a failed sync leaves the previously synchronized files unchanged
  • #​23467 - Enforce view permissions on parent devices and virtual machines when creating components in bulk
  • #​23469 - Expose the GraphQL circuit status enum as CircuitStatusEnum, with values prefixed by STATUS_ (consistent with other status enums)
  • #​23473 - Enable filtering circuits, circuit terminations, virtual circuits, and virtual circuit terminations by provider network name
  • #​23484 - Pre-populate the location when adding a non-racked device from a location's view

v4.7.3: - 2026-10-13

Compare Source

Enhancements

  • #​23230 - Add a location filter to the power feeds list view

Performance Improvements

  • #​23288 - Skip the loading of config context data when the field is excluded from a REST API response
  • #​23290 - Reuse nested serializer instances when rendering REST API list responses
  • #​23291 - Avoid loading unused virtual machines when serializing clusters via the REST API
  • #​23292 - Skip static prefetches for fields which have been excluded from a REST API response
  • #​23311 - Defer building the GraphQL schema until it is needed, rather than during the initialization of every management command
  • #​23350 - Extend automatic table prefetching to reverse many-to-many relations

Bug Fixes

  • #​22802 - Correct the OpenAPI request body schema for the available prefixes REST API endpoint
  • #​23094 - Fix the detection of changes to a cable's terminations
  • #​23099 - Persist the status change of cable paths deactivated during a partial cable save
  • #​23121 - Remove stale cable paths when a cable's terminations are changed
  • #​23134 - Record a change log entry when a circuit's termination pointer is updated
  • #​23172 - Permit the selection of a numeric enum value for a module type profile attribute via the UI
  • #​23198 - Restrict the rack elevation highlight parameter to prevent the disclosure of data the user is not permitted to view
  • #​23227 - Display date & time custom field values in the user's local time zone within object tables
  • #​23233 - Synchronizing a data source should not require the add permission
  • #​23240 - Hide the bulk actions container on list views which have no bulk actions available
  • #​23247 - Preserve request headers and query parameters for REST API bulk writes processed in the background
  • #​23274 - Prevent the assignment of a primary or OOB IP address belonging to another device when creating a device
  • #​23275 - Fix exception when setting a primary IP on a virtual device context with no assigned device
  • #​23278 - Fix exception when creating a virtual machine with a primary IP address
  • #​23280 - Fix exception when retrieving change log entries for port mappings via the REST API
  • #​23281 - Ensure that modifying a new user's preferences does not alter the default preferences for other users
  • #​23283 - Fix exception when logging in as a user with no preferences record
  • #​23307 - Ensure that changing a cable's profile does not remove its connection from cable traces
  • #​23310 - Fix exception when listing jobs or tagged objects assigned to objects which have no REST API serializer
  • #​23321 - Fix TypeError exception when creating a device type with a front or rear image via the REST API
  • #​23322 - Fix the q search filter for tunnel terminations
  • #​23323 - Fix exception when specifying installed_module while creating a module bay via the REST API
  • #​23324 - Include a circuit's group assignments in its REST API representation, and fix exception when specifying them on creation
  • #​23325 - Fix FieldError exception when filtering circuits and virtual circuits by provider account
  • #​23326 - Fix FieldError exception when filtering front & rear ports (and their templates) by rear_port_id or front_port_id
  • #​23327 - Fix FieldError exception when searching circuit group assignments
  • #​23328 - Return empty results or a 400 response, rather than raising an exception, when passing malformed values to certain filters
  • #​23332 - Fix AttributeError exception when executing a bulk edit as a background job
  • #​23340 - Fix exception when applying the __empty lookup to numeric and date/time filters
  • #​23342 - Fix the display of circuit group assignments in the circuits list
  • #​23345 - Validate the IDs passed to the installed module and data file filters against the correct models
  • #​23367 - Fix the rollback of failed REST API bulk operations when writes are routed to a non-default database
  • #​23369 - Add custom fields support to the circuit group assignment REST API serializer

v4.7.2: - 2026-09-29

Compare Source

[!WARNING]
NetBox v4.7.0 and v4.7.1 recorded the plaintext of API tokens created via background bulk requests in the job results, where they were readable by any user permitted to view jobs. This release rejects such requests; any tokens created this way should be considered exposed and replaced. See #​23196 for details.

Enhancements
  • #​21879 - Introduce the Cable.update_dependent_objects() hook to rebuild cable paths and related attributes after writes which bypass save()
  • #​22886 - Include VLANs assigned via VLAN groups scoped to a site (or its site group) among the site's related objects
  • #​22949 - Focus and scroll to the first field with a validation error when a form fails validation
  • #​23095 - Display the compatible module types for a module bay type in a dedicated, sortable, and paginated table
Bug Fixes
  • #​23122 - Prevent the failure to automatically sync one object from skipping the sync of subsequent objects
  • #​23150 - Preserve the parent device type assignment when using "Create & Add Another" to add component templates
  • #​23160 - Record a change log entry for each terminating object when a cable is deleted
  • #​23181 - Restore the display of the cluster group in the virtual machine detail view
  • #​23187 - Permit the assignment of a data file when creating an export template via the REST API
  • #​23195 - Validate the return_url parameter used for the cancel button on the IP address assignment view
  • #​23196 - Ensure plaintext API tokens are never recorded in background job results (see the warning above)
  • #​23197 - Enforce object permission constraints on the REST API sync action for synced data models
  • #​23203 - Fix the population of the related objects panel for owners

v4.7.1: - 2026-09-15

Compare Source

[!WARNING]
The triggers which cascade a hierarchical object's path to its descendants could not be recreated when restoring a pg_dump of a v4.7.0 database, so such a restore reported success while leaving the database without those triggers. Renaming or moving a region, site group, location, device role, platform, tenant group, contact group, wireless LAN group, module bay, inventory item, or inventory item template then did not update its descendants. Upgrading reinstalls the triggers so that all subsequent changes cascade correctly, but does not repair values which have already gone stale. See Repairing Hierarchical Paths for how to detect and correct them, and for the steps plugins maintaining their own ltree models must take.

Enhancements
  • #​22999 - Add a default module type profile for transceivers
  • #​23041 - Add InfiniBand 2X interface types for HDR and later generations (HDR100, NDR200, and XDR400)
Bug Fixes
  • #​22750 - Resolve object IDs to model instances and validate the submitted data when executing a custom script via the REST API
  • #​23012 - Apply a field's collation to both sides of a case-insensitive comparison, so that names containing characters such as ß can be matched
  • #​23096 - Persist a cable's normalized length when saving only its length or length_unit field
  • #​23112 - Initiate SSO logins via script-driven navigation, so that they are not blocked by a restrictive form-action content security policy
  • #​23117 - Fix the negation (__n) filter lookup for multiple selection custom fields
  • #​23120 - Include tags in the REST API representation of a data source, and honor them on write
  • #​23125 - Add the missing standard fields to the VLAN translation policy & rule REST API serializers
  • #​23130 - Ensure that the cascade triggers for hierarchical models can be restored from a pg_dump (see the warning above)
  • #​23154 - Correct the optional/required mismatch on the L2VPN type and rack type form_factor fields
  • #​23166 - Apply a zero-valued minimum or maximum bound from a module type profile attribute to its form field
  • #​23167 - Sanitize the JSON schema property descriptions used as form help text for module type profile attributes

v4.7.0: - 2026-09-02

Compare Source

[!WARNING]
This release of NetBox drops support for PostgreSQL 14.

[!WARNING]
The PostgreSQL database must support the ltree extension. This is a trusted module which ships with PostgreSQL and does not require superuser permission to activate. It will be installed automatically upon upgrade.

[!WARNING]
This release of NetBox drops support for Redis 5.x.

Breaking Changes
  • PostgreSQL 14 is no longer supported. NetBox now requires PostgreSQL 15 or later: The upgrade script will abort when connected to an earlier release. (NetBox v4.6 reported this as a warning.)
  • Redis 5.x is no longer supported. NetBox now requires Redis 6.0 or later.
  • Selection and multiple selection custom field values are now returned as objects specifying both the raw value and its human-friendly label (e.g. {"value": "datacenter", "label": "Data Center"}) in both the REST and GraphQL APIs. These fields continue to accept the raw value on write.
  • The protocol and ports fields on the ipam.Service and ipam.ServiceTemplate models have been replaced by a unified port_mappings field, which supports multiple protocols per service. The legacy fields are retained (as deprecated) in the REST and GraphQL APIs, but at the ORM level they are now read-only properties derived from port_mappings: Passing protocol or ports to the model raises a TypeError, and assigning to service.ports raises an AttributeError. This restriction applies only at the ORM level: The REST API continues to accept the legacy pair on write, translating it into port_mappings.
  • Because protocol is now filtered against the port_mappings array rather than a dedicated model field, the character-based REST filter lookups previously generated for it (protocol__ic, protocol__isw, protocol__empty, etc.) are no longer available. The port__empty lookup has been removed as well.
  • The GraphQL filters for ipam.Service and ipam.ServiceTemplate have changed shape: The nested ports integer lookup has been replaced by the flat port, port__gt, port__gte, port__lt, and port__lte parameters (each accepting a list of values), alongside the new port_mappings parameter. Additionally, the members of ServiceProtocolEnum have been renamed to drop a spurious ROLE_ prefix (e.g. ROLE_TCP is now TCP).
  • Config context data is now pre-rendered and cached for each device and virtual machine, and is always included in their REST API representations. The DeviceWithConfigContextSerializer and VirtualMachineWithConfigContextSerializer classes have been removed (merged into the base serializers), and the ?exclude=config_context query parameter is now silently ignored.
  • Failed bulk create and update operations via the REST API now return a structured response of the form {"detail": ..., "errors": [{"index": N, "errors": {...}}]}, correlating each error with the index of the offending object in the submitted list. (Bulk operations remain all-or-none.)
  • API token plaintexts can no longer be specified by the client when creating a token via the REST API. The token field is now read-only, and any value supplied is ignored. (This restriction was already in effect in the web UI.)
  • Executing a custom script via the REST API now requires that the calling token have its write ability enabled.
  • The username argument has been removed from extras.webhooks.send_webhook() (the value remains available to webhook templates as request.user). Any webhook jobs still enqueued when the workers are restarted will fail with a TypeError, so the background queues should be allowed to drain before upgrading.
  • Updates to the global search cache are now deferred to a background task. As a result, a newly created or modified object may not appear in search results for a brief period. (When no background worker is running, the index is updated synchronously as before.)
  • Hierarchical models are now backed by a PostgreSQL ltree column rather than django-mptt. This covers the nested group models (Region, SiteGroup, Location, DeviceRole, Platform, TenantGroup, ContactGroup, WirelessLANGroup, etc.) as well as ModuleBay, InventoryItem, and InventoryItemTemplate. The lft, rght, tree_id, and level columns have been dropped from every migrated model: level remains available as a Python property, but can no longer be used in a queryset filter or order_by() clause. NetBox's ltree implementation deliberately covers only the subset of MPTT's API which NetBox itself uses (get_ancestors(), get_descendants(), get_children(), and add_related_count()); methods such as get_root(), get_family(), is_leaf_node(), move_to(), and insert_at() are no longer available. The MPTT-backed NestedGroupModel base class is retained for backward compatibility with plugins, but is deprecated: New code should use NestedLtreeGroupModel instead.
  • django-tables2 has been upgraded to v3.0, which renames its querystring template tag to querystring_replace and removes the RelatedLinkColumn class.
  • social-auth-app-django and social-auth-core have been upgraded to v6.0 and v5.1 respectively, each a major release. Deployments which employ single sign-on should test authentication against a non-production instance before upgrading.
  • The request object passed to custom link templates is now a sanitized subset of the current request. Only the id, path, path_info, method, GET, and user attributes are available; cookies, headers, and session state are no longer accessible.
  • URL custom field values are now validated against the ALLOWED_URL_SCHEMES configuration parameter. A value entered without a scheme is assumed to use https and stored as an absolute URL.
  • Webhooks now support a configurable timeout. If you have lowered RQ_DEFAULT_TIMEOUT to 60 seconds or less, you must also set WEBHOOK_DEFAULT_TIMEOUT to a lower value; NetBox will refuse to start otherwise.
  • Specifying an email server under the EMAIL configuration parameter is now mandatory in order to send mail: A deployment which does not define EMAIL['SERVER'] will raise an InvalidMailer exception when attempting to send, rather than failing at the SMTP connection.
  • NetBox now populates Django's MAILERS setting rather than the individual EMAIL_* settings which it supersedes. EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_USE_SSL, EMAIL_USE_TLS, EMAIL_TIMEOUT, EMAIL_SSL_CERTFILE, and EMAIL_SSL_KEYFILE are no longer defined, and EMAIL_BACKEND is no longer consulted. Plugin code which reads any of these, or which calls django.core.mail.get_connection() with an explicit backend (now raising a RuntimeError), must be updated. The EMAIL configuration parameter itself is unchanged.
  • The upgrade script now runs the rebuild_config_context_cache management command to populate the new config context cache. This issues one UPDATE per device and virtual machine, and may extend the duration of the upgrade considerably for deployments with a large number of either. The command skips objects whose cache is already populated, so it is safe to interrupt and re-run; it may also be deferred until after NetBox is back online, as any object whose cache is empty falls back to rendering its config context on demand.
  • Creating a custom field which has a default value, and deleting a custom field, are now deferred to a background job where the field's assigned object types hold more than BULK_UPDATE_CHUNK_SIZE objects in total.
  • The obsolete populate_custom_field_defaults() method has been removed from CustomFieldsMixin.
  • CustomField.objects.get_for_model() and the custom_fields property of CustomFieldsMixin now return a list rather than a queryset, and get_for_model() returns only those fields which are active: Any whose stored data is being updated by a background job is omitted (see field status) unless selected via its statuses argument.
  • Removal of deprecated behavior
    • The housekeeping management command has been removed. (Its constituent tasks are performed by the individual management commands introduced in NetBox v4.6.)
    • NetBox's custom querystring template tag has been removed in favor of Django's built-in tag of the same name. The two are not interchangeable: Django's tag reads the current request from the template context, so the request argument must be dropped ({% querystring request page=1 %} becomes {% querystring page=1 %}; passing request raises a TemplateSyntaxError). It also returns a bare ? where NetBox's tag returned an empty string.
    • The legacy Sentry configuration parameters SENTRY_DSN, SENTRY_SAMPLE_RATE, SENTRY_SEND_DEFAULT_PII, and SENTRY_TRACES_SAMPLE_RATE have been removed. Use SENTRY_CONFIG instead.
    • The obsolete DEFAULT_ACTION_PERMISSIONS constant has been removed.
    • Support for legacy view action mappings has been dropped, and the LEGACY_ACTIONS constant has been removed.
    • Registered models are no longer populated under registry['models']. (Use ObjectType.objects.public() instead.) The registry['denormalized_fields'] store has been removed as well.
    • The backward compatibility shims for OptionalLimitOffsetPagination (now NetBoxPagination), ExpandableIPAddressField (now ExpandableIPNetworkField), and expand_ipaddress_pattern() (now expand_ipnetwork_pattern()) have been removed.
    • The request_id and username keys have been removed from the context available to outgoing webhooks. Use request.id and request.user instead.
    • The automatic reverse relationship created by OwnerMixin (e.g. site_set) has been removed.
New Features
Cooling Infrastructure Modeling (#​22447)

NetBox has long modeled power distribution end to end, but had no equivalent for cooling. This release introduces a cooling data model which deliberately mirrors the power model, so that the concepts and workflows feel familiar.

Two new top-level models parallel PowerPanel and PowerFeed: CoolingSource represents facility-level cooling plant (a chiller, cooling tower, dry cooler, or facility water system) scoped to a site or location, and CoolingFeed represents a coolant loop delivered from a source to a rack. Two new device components parallel PowerPort and PowerOutlet: CoolingIntake represents a coolant intake on a device (e.g. a server cold-plate connection or a CDU's facility water inlet), and CoolingOutflow represents a coolant outlet on a CDU or manifold which supplies downstream equipment. Each intake may reference the upstream outflow which serves it, and both components have corresponding device type templates. CDUs and manifolds are modeled as ordinary devices carrying these components.

Lightweight descriptive attributes have also been added for users who want to record cooling characteristics without modeling the full plumbing: a cooling_method field (air, liquid, hybrid, or immersion) on the Device, DeviceType, and ModuleType models, and cooling_capability (air-only, hybrid, or liquid-only) and cooling_capacity fields on the Rack and RackType models.

Channelized Subinterfaces (#​20972)

Channelized (breakout) interfaces can now be modeled natively. A new channels field on the Interface model indicates the number of physical channels into which an interface is divided, and each channel is represented by a subinterface of the new generic channel type, bound to its parent via the new channel_id field. A single cable terminates to the channelized parent interface, and NetBox traces a distinct cable path for each channel subinterface. Both fields are available on interface templates as well.

Multi-Protocol Application Services (#​20285)

Application services and service templates can now expose the same port on multiple protocols — for example, DNS listening on both tcp/53 and udp/53. The single-protocol protocol and ports fields have been replaced by a unified port_mappings field, represented in the APIs as a flat list of protocol/port strings (e.g. ["tcp/80", "udp/53"]). New port_mappings, protocol, and port filters are available in the UI and in both APIs, with the latter two correlated so that they must be satisfied by a single mapping.

Module Bay Types (#​19731)

A new ModuleBayType model has been introduced to convey which kinds of modules a module bay is able to accommodate (e.g. an SFP28 cage or a PCIe x16 slot). Bay types can be assigned to module bays, module bay templates, and module types; where both a bay and a module type declare bay types, NetBox validates that the two sets share at least one type in common before permitting installation. Bay types assigned to a module bay template propagate automatically to each instantiated module bay.

Relocating Installed Modules (#​15289)

An installed module can now be moved to a different module bay, including a bay on a different device, rather than having to be deleted and recreated. A move relocates the module's entire subtree — its components, its own module bays, and any child modules installed within them — and re-resolves any component names, labels, and positions derived from the module type's templates for the destination bay. Cross-device moves are permitted only where the moved components carry no active topology or device-scoped configuration.

Background Processing for REST API Requests (#​21992)

Bulk write operations via the REST API can now be processed as a background job rather than synchronously, avoiding proxy and gateway timeouts on large batches. Appending ?background=true to a bulk write request enqueues a job and immediately returns an HTTP 202 Accepted response containing the job's ID and URL; the job's data field records the response the synchronous request would have returned. Note that validation is deferred to the worker, so a 202 response indicates only that the request was accepted, and the job's final status must be inspected to confirm the outcome.

Per-Object Errors for Bulk Operations (#​20054)

When a bulk create or update via the REST API fails validation, the response now identifies each offending object by its index within the submitted list, along with its specific field errors, rather than reporting only the first failure. This enables clients to correct and resubmit only the objects which actually failed.

Pre-Rendered Config Context Data (#​21025)

Rather than compiling config context data on demand from the full set of applicable ConfigContext instances, NetBox now pre-renders each device's and virtual machine's merged context data and caches it on the object itself. The cache is invalidated automatically whenever an upstream change is detected — a config context being created, modified, or deleted, or a change to an attribute which determines which contexts apply — and repopulated by a non-blocking background job. During the brief window between invalidation and re-render, reads fall back to the original on-demand rendering path, so the data returned is always correct rather than stale.

Snapshot-Aware Event Rule Conditions (#​18159)

Event rule conditions can now inspect the pre-change and post-change snapshots captured at the time of an event, rather than only the object's current data. New changed and unchanged operators compare an attribute's value across the two snapshots, and the snapshots.prechange.<attr> and snapshots.postchange.<attr> dot-path syntax exposes either snapshot to any standard operator. This makes it possible to express the long-requested "fire only when status changes to active" rule, avoiding webhooks and scripts triggered by unrelated updates. A new regex operator has been added as well, and conditions which reference an attribute that cannot be resolved now fail closed and log an error rather than silently disabling the rule.

Enhancements
  • #​15165 - Re-render only the affected fieldset, rather than the entire form, when an HTMX-driven selection changes
  • #​18645 - Support the bulk import of cables having multiple terminations per side
  • #​18821 - Set or update an interface's primary MAC address in a single operation via the mac_address field
  • #​20897 - Include the label alongside the value for selection custom fields in the REST & GraphQL APIs
  • #​21367 - Add a read-only is_primary field to the MAC address REST API representation
  • #​21712 - Support description annotations for static choice fields, and permit choices to be declared as dictionaries in FIELD_CHOICES
  • #​22205 - Add an end_of_life date field to device types and module types to aid in hardware lifecycle planning
  • #​22231 - Introduce a nulls_first parameter to control the placement of empty values when ordering by a custom field
  • #​22409 - Disallow client-specified API token plaintexts via the REST API
  • #​22411 - Enforce token write ability when executing a custom script via the REST API
  • #​22441 - Record and display the execution time of each background job
  • #​22446 - Introduce breadcrumbs support for declarative layouts
  • #​22486 - Support a configurable timeout for webhooks, with a new WEBHOOK_DEFAULT_TIMEOUT configuration parameter
  • #​22563 - Preserve the scroll position of the sidebar navigation when moving between pages
  • #​22595 - Introduce the BULK_UPDATE_CHUNK_SIZE configuration parameter to bound the number of rows affected by a single bulk UPDATE statement
  • #​22604 - Document the experimental Python package installation and upgrade workflow
  • #​22607 - Sanitize the HTTP request passed to the template context when rendering custom links
  • #​22640 - Enforce ALLOWED_URL_SCHEMES when validating URL custom field values
  • #​22757 - Support arbitrary help text on inline form fields
  • #​22786 - Publish NetBox releases to the production Python Package Index (PyPI)
  • #​22851 - Unpin social-auth-core to permit the installation of newer PyJWT versions
  • #​23010 - Defer the provisioning of default and purging of stale custom field data to a background job
Performance Improvements
  • #​21326 - Defer updates to the global search cache to a background job, so that they no longer delay the response
  • #​21355 - Maintain denormalized field data using PostgreSQL triggers rather than Python signal handlers
  • #​21418 - Replace django-mptt with a PostgreSQL ltree implementation for hierarchical models
Plugins
  • #​19821 - Introduce GenericObjectChoiceField and GenericObjectFormMixin to represent a generic foreign key relation as a single form field
  • #​22351 - Enable plugins to register custom Jinja filters and to inject context variables for config template rendering
  • #​22592 - Enable plugins to add fields and filters to NetBox's existing core GraphQL types
  • #​22770 - Enable plugins to register custom Event Rule action types by subclassing EventRuleAction
Deprecations
  • #​22288 - The JINJA2_FILTERS configuration parameter has been renamed to JINJA_FILTERS. The old name remains supported, but will be removed in NetBox v5.0.
  • #​22593 - The form_factor, width, outer_width, outer_height, outer_depth, and outer_unit fields on the Rack model have been deprecated, and will be removed in NetBox v5.0. These values will instead be inferred from the rack's assigned rack type, which will become a mandatory assignment.
  • #​22935 - The custom scripts functionality in core NetBox has been deprecated in favor of a dedicated plugin, and will be removed in NetBox v5.0.
  • The protocol and ports fields on application services and service templates have been deprecated in favor of port_mappings, and will be removed from the REST & GraphQL APIs in NetBox v5.0.
  • The MPTT-backed NestedGroupModel base class has been deprecated in favor of NestedLtreeGroupModel, and will be removed in a future release.
Other Changes
  • #​19091 - Remove NetBox's custom querystring template tag in favor of Django's built-in tag
  • #​20546 - Raise the minimum required PostgreSQL version from 14 to 15
  • #​20547 - Consolidate paired uniqueness constraints on nullable fields into single constraints using PostgreSQL's NULLS NOT DISTINCT
  • #​21565 - Remove the obsolete housekeeping management command
  • #​21883 - Drop support for the deprecated Sentry configuration parameters
  • #​21886 - Remove the obsolete DEFAULT_ACTION_PERMISSIONS constant
  • #​21888 - Remove support for legacy view actions
  • #​21891 - Remove the models key from the application registry
  • #​21902 - Upgrade django-tables2 to v3.0
  • #​22052 - Remove the backward compatibility shim for OptionalLimitOffsetPagination
  • #​22053 - Remove the backward compatibility shim for ExpandableIPAddressField
  • #​22054 - Remove the backward compatibility shim for expand_ipaddress_pattern()
  • #​22161 - Rename the filterset test mixin base classes to use a *TestMixin suffix
  • #​22300 - Drop the automatic reverse relationship defined by OwnerMixin
  • #​22393 - Drop support for Redis 5.x
  • #​22438 - Omit the "2" suffix from the new Jinja plugin resources (jinja_filters, get_jinja_context(), register_jinja_filters()) for consistency with JINJA_FILTERS
  • #​22485 - Move the search subsystem's signal wiring into AppConfig.ready() and break its import cycle
  • #​22571 - Migrate from django-pglocks to django-pgware
  • #​22615 - Remove the legacy request_id and username keys from the webhook context
  • #​22942 - Upgrade to Django 6.1

v4.6.10: - 2026-09-01

Compare Source

Performance Improvements

  • #​22988 - Prefetch the related fields of nested serializers referenced by SerializedPKRelatedField
  • #​23060 - Include reverse many-to-many relationships when determining REST API prefetches

Bug Fixes

  • #​22671 - Support the selection of multiple values when filtering VLAN groups by scope (e.g. by site group)
  • #​22872 - Gracefully handle invalid values assigned to a custom script's Meta attributes
  • #​22989 - Reference brief components in the OpenAPI response schemas for nested SerializedPKRelatedField fields
  • #​23035 - Expand the active navigation menu section when resizing from a mobile to a desktop viewport
  • #​23038 - Omit the cache-busting query parameter from signed static file URLs (e.g. when using S3 storage)
  • #​23040 - Fix the validation error raised when removing the scope assigned to a VLAN group
  • #​23043 - Correct the validation of front port positions when creating front ports in bulk
  • #​23052 - Fix the duplicated owner field on the power outlet and service forms
  • #​23066 - Include the configured Redis username in the default Django cache settings
  • #​23072 - Retain cable paths when applying a cable profile via bulk edit
  • #​23078 - Normalize update_fields to avoid consuming a generator in VLANGroup.save() and CircuitTermination.save()
  • #​23090 - Fix the filtering of background jobs by user in the UI

v4.6.9: - 2026-08-25

Compare Source

Enhancements

  • #​21387 - Add InfiniBand 4X interface types
  • #​22660 - Add an interface type for HPE Synergy interconnect links
  • #​22716 - Restrict images in rendered Markdown to HTTP(S) and relative URLs
  • #​22998 - Add a 100GBase-X-SFP112 interface type

Performance Improvements

  • #​23000 - Prefetch cable terminations to avoid N+1 queries when fetching cables via the GraphQL API

Bug Fixes

  • #​22683 - Prevent a server error when bulk import validation raises an error referencing a field omitted from the import data
  • #​22812 - Avoid loading all associated jobs into memory when deleting a custom script or other job-bearing object
  • #​22889 - Restore the monospace font for text areas on the config revision form
  • #​22922 - Honor the saving database connection in the scope propagation signal handlers
  • #​22923 - Clear current_request and the query cache when an exception is raised within an event_tracking() block
  • #​22929 - Avoid initializing a second SideNav instance for the top header
  • #​22930 - Fix sidebar navigation initialization at a viewport width of exactly 1200 pixels
  • #​22934 - Discard queued events when a write performed by a UI view is rolled back
  • #​22944 - Display the complete role hierarchy in the virtual machine info panel
  • #​22953 - Restore custom script log messages in the output of the runscript management command
  • #​22954 - Display nested group and platform hierarchies in several info panels
  • #​22957 - Include ancestors in the breadcrumbs for device roles, platforms, and power panels
  • #​22963 - Honor the saving database connection in the counter cache signal handlers
  • #​22967 - Update the cached scope fields of circuit terminations when a location is moved to a different site
  • #​22978 - Discard queued events when a write performed via the REST API is rolled back
  • #​22985 - Exempt data file content from browser caching
  • #​22990 - Correct inconsistent field declarations which prevented certain fields from being edited or cleared via bulk edit
  • #​23007 - Align the sidebar navigation JavaScript breakpoint with that of the responsive layout
  • #​23013 - Avoid propagating a location's site assignment to descendant objects when the site has not changed

v4.6.8: - 2026-08-11

Compare Source

Performance Improvements

  • #​22787 - Avoid N+1 queries when resolving generic relations (e.g. assigned objects) via the GraphQL API
  • #​22835 - Improve performance when provisioning new custom fields
  • #​22837 - Omit implicit pagination when prefetching to-one relations via the GraphQL API
  • #​22877 - Improve caching logic when retrieving custom fields via get_for_model()

Bug Fixes

  • #​22694 - Clear a device's stale rack assignment when changing its site
  • #​22745 - Enforce object permissions on custom script write operations via the REST API
  • #​22805 - Avoid re-executing the LDAP configuration file on every permission check
  • #​22821 - Prevent the deletion of a tenant group from creating duplicate tenant names or slugs
  • #​22825 - Fix cable path tracing for paths which originate from a circuit termination and traverse only pass-through ports
  • #​22828 - Validate that a webhook's payload URL is a valid URL or Jinja2 template when saving
  • #​22844 - Allow a null value for base_choices when creating a custom field choice set via the REST API
  • #​22848 - Ensure deterministic ordering of duplicate IP addresses to avoid repeating an object across paginated REST API results
  • #​22852 - Honor a custom script's notifications_default setting when the script is run from an event rule
  • #​22865 - Reference the appropriate component template types on the GraphQL type for inventory item templates
  • #​22879 - Improve the contrast of unselected radio buttons and checkboxes in dark mode
  • #​22882 - Fix support for the DISTINCT filter on nested GraphQL list fields
  • #​22894 - Sanitize the error message rendered when an exception occurs in CustomLinkColumn

v4.6.7: - 2026-07-30

Compare Source

Performance Improvements
  • #​22810 - Skip cached scope rebuild for sites and locations when scope fields are unchanged
  • #​22813 - Avoid extraneous database queries when fetching custom field data via the GraphQL API
  • #​22822 - Avoid an extra database query when including rack reservation units via the GraphQL API
  • #​22823 - Avoid extraneous database queries when fetching the IP address or prefix family via the GraphQL API
Bug Fixes
  • #​22738 - Correctly evaluate IP availability for users whose permissions are constrained by a custom field on a related object
  • #​22800 - Filter circuit group assignments by member type to avoid displaying assignments belonging to a virtual circuit with the same ID

v4.6.6: - 2026-07-28

Compare Source

Enhancements
  • #​19273 - Enable the selection of VLANs scoped to a device's cluster or cluster group when assigning VLANs to interfaces
  • #​22522 - Render colored badges for custom field choices in tables
  • #​22623 - Change the default color of the DHCP IP address status from green to purple to distinguish it from "available"
  • #​22685 - Introduce an "any" lookup for the tag and tag_id filters to match objects assigned any of the specified tags
  • #​22753 - Add a header_safe Jinja2 filter for sanitizing HTTP header values
Performance Improvements
  • #​22497 - Improve the speed of bulk object deletion by avoiding per-object cascade handling and N+1 counter updates
  • #​22687 - Avoid an unnecessary queryset evaluation when rendering export templates
Bug Fixes
  • #​21988 - Ensure view permissions are enforced when referencing a related object by its attributes in the REST API
  • #​22513 - Make JournalEntry.created_by immutable after creation to prevent audit trail spoofing
  • #​22565 - Include circuit distance when calculating the total length of a cable path
  • #​22588 - Restrict the VLANs available for assignment to a prefix scoped to a site group
  • #​22644 - Record changes to front/rear port mappings in the changelog
  • #​22654 - Redact server filesystem paths from tracebacks rendered by ConfigTemplate debug mode
  • #​22656 - Pre-populate interface attributes when using "Create & Add Another"
  • #​22662 - Avoid raising a DataError exception when a cable length exceeds the maximum supported value
  • #​22675 - Validate the URL scheme of RSS feed entries to prevent DOM-based cross-site scripting
  • #​22677 - Display validation errors for form fields which lack HTML5 constraints
  • #​22682 - Prevent the deletion of a site group from cascading to prefixes scoped to its member sites
  • #​22690 - Restore the left border on the quick search field
  • #​22697 - Return to the scripts list when cancelling out of the "add script" form
  • #​22707 - Fix the resolution of port mappings when {vc_position} is used on device type component templates
  • #​22712 - Highlight relevant dropdown fields when form validation fails
  • #​22717 - Fix KeyError raised when validating a device assigned to a cluster scoped to a different location
  • #​22719 - Avoid raising a KeyError for malformed IP address and prefix values submitted via the REST API
  • #​22720 - Raise a protected-deletion error rather than a TypeError when deleting a virtual chassis with a cross-chassis LAG
  • #​22729 - Escape object names when populating the Content-Disposition header of file responses
  • #​22736 - Include the comments field of ASNs in the global search index
  • #​22737 - Clear stale connector metadata from cable endpoints when deleting a profiled cable
  • #​22748 - Ensure ContentTypeField respects its declared queryset to prevent the selection of non-public object types
  • #​22752 - Restore the rear port fields on the front port bulk import form
  • #​22766 - Fix the GraphQL length lookup for array filters
  • #​22767 - Include the comments field of several models in the global search indexes
  • #​22768 - Store a null value rather than an empty string for cable_end when removing a cable
  • #​22773 - Fix TypeError exception when bulk adding module bays to devices
  • #​22790 - Enforce saved filter visibility when applied via the filter or filter_id query parameter

v4.6.5: - 2026-07-14

Compare Source

Enhancements

  • #​18828 - Add MDC connector type for fiber ports and cables
  • #​22544 - Provide a REST API method to update or overwrite an existing custom script module
  • #​22629 - Enforce a lower maximum uploaded image size (50 megapixels) than the Pillow default
  • #​22649 - Add Korean language support

Performance Improvements

  • #​22551 - Add a prefetch hint to the GraphQL tags field to avoid N+1 queries on list endpoints
  • #​22589 - Cache serializers to avoid repeated reinstantiation on the cables list REST API endpoint

Bug Fixes

  • #​22154 - Correct the OpenAPI schema for relation counts on nested (brief) object representations
  • #​22500 - Return the configured maintenance mode message for REST API requests
  • #​22521 - Honor RAM_BASE_UNIT for the default memory of a virtual machine type
  • #​22539 - Restore the available IPs button for users with constrained permissions
  • #​22566 - Avoid name collisions when a custom script's filename matches a core app label
  • #​22568 - Fix uncaught ValueError (HTTP 500) when an invalid filter_id query parameter is provided
  • #​22573 - Remove persistent scrollbar on the navigation menu in Chrome
  • #​22578 - Ensure shared objects are treated consistently across the UI and REST API
  • #​22582 - Use a theme-aware color for interface list row separators in dark mode
  • #​22598 - Fix ValueError exception when viewing background tasks under RQ 2.10
  • #​22617 - Require the "change" permission (rather than "add") when editing objects via the bulk import form
  • #​22626 - Ensure custom link names are escaped when rendering fails
  • #​22632 - Fix ValueError raised by object-level permission checks for cross-app proxy models
  • #​22652 - Explicitly disable autoescaping for config templates rendered via SandboxedEnvironment
  • #​22657 - Escape the exception message in the render_widget template tag before marking it safe

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [docker.io/binwiederhier/ntfy](https://ntfy.sh/) ([source](https://github.com/binwiederhier/ntfy)) | | minor | `v2.26.0` → `v2.38.0` | | [docker.io/gotenberg/gotenberg](https://github.com/gotenberg/gotenberg) | | minor | `8.38.1` → `8.40.0` | | [docker.io/grafana/grafana](https://github.com/grafana/grafana) | | minor | `13.1.0` → `13.3.1` | | [docker.io/library/postgres](https://hub.docker.com/_/postgres) ([source](https://github.com/docker-library/postgres)) | | minor | `15.18` → `15.20` | | [docker.io/library/postgres](https://hub.docker.com/_/postgres) ([source](https://github.com/docker-library/postgres)) | | minor | `18.4` → `18.7` | | [docker.io/library/python](https://hub.docker.com/_/python) ([source](https://github.com/docker-library/python)) | container | minor | `3.14-trixie` → `3.15-trixie` | | [docker.io/library/redis](https://hub.docker.com/_/redis) ([source](https://github.com/redis/docker-library-redis)) | | minor | `8.8.0` → `8.10.3` | | [docker.io/prom/alertmanager](https://github.com/prometheus/alertmanager) | | minor | `v0.33.1` → `v0.35.0` | | [docker.io/prom/prometheus](https://github.com/prometheus/prometheus) | | minor | `v3.13.1` → `v3.16.0` | | [docker.io/prompve/prometheus-pve-exporter](https://github.com/prometheus-pve/prometheus-pve-exporter) | | minor | `3.9.0` → `3.11.0` | | [ghcr.io/twin/gatus](https://github.com/TwiN/gatus) | | minor | `v5.36.0` → `v5.38.0` | | [https://github.com/ansible/ansible-lint](https://github.com/ansible/ansible-lint) | action | minor | `v26.6.0` → `v26.11.0` | | [netbox](https://github.com/netbox-community/netbox) | | minor | `v4.6.4` → `v4.7.5` | | [quay.io/hedgedoc/hedgedoc](https://hedgedoc.org) ([source](https://github.com/hedgedoc/container)) | | minor | `1.11.1` → `1.12.0` | --- ### Release Notes <details> <summary>binwiederhier/ntfy (docker.io/binwiederhier/ntfy)</summary> ### [`v2.38.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.38.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.37.2...v2.38.0) This release shares every visitor's rate limits across the nodes of a cluster: a client spread over several nodes is now limited once instead of once per node, and a node that restarts or crashes takes the limits over from its peers instead of forgetting them. It also fixes a denial-of-service bug in message templating, where a crafted template could build an oversized string and crash the server, and builds ntfy with Go 1.27.4 (security fixes). **Features:** - Cluster: the nodes share every visitor's rate limits (requests, failed logins, signups and password resets, topic creation, e-mails, attachment bandwidth, Firebase pauses) over the mesh every second, so a client spread over several nodes gets its limits once, not once per node; a node that restarts or crashes takes the limits over from its peers before it serves ([#&#8203;2182](https://github.com/binwiederhier/ntfy/pull/2182)) **Bug fixes + maintenance:** - Message templating: the `replace`, `regexReplaceAll` and `join` functions now cap the size of the string they build, so a template can no longer amplify small inputs into a multi-gigabyte string and crash the server with an out-of-memory error (thanks to Robert Flosbach of Neodyme for the responsible disclosure) - WebSocket subscribers that a node closes while draining are no longer counted and logged as internal server errors (HTTP 500, ntfy error 50001); on ntfy.sh, each node's drain counted \~18k of them and tripped the 5xx alert, although clients never saw an error ([#&#8203;2171](https://github.com/binwiederhier/ntfy/pull/2171)) **Security:** - Build with Go 1.27.4, which includes security fixes to cgo, the go command, the compiler, the linker and `net/http` ### [`v2.37.2`](https://github.com/binwiederhier/ntfy/releases/tag/v2.37.2) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.37.1...v2.37.2) #### Changelog - [`0510957`](https://github.com/binwiederhier/ntfy/commit/05109571fd0931affb6f92b17bbfd62c4d2ea68a) Merge pull request [#&#8203;2169](https://github.com/binwiederhier/ntfy/issues/2169) from binwiederhier/release-2380 ### [`v2.37.1`](https://github.com/binwiederhier/ntfy/releases/tag/v2.37.1) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.37.0...v2.37.1) This release fixes a database slowdown in v2.37.0 when using `visitor-subscriber-rate-limiting` with a user database: the subscriber activity of UnifiedPush topics was written far too often. **Bug fixes + maintenance:** - With `visitor-subscriber-rate-limiting` and a user database, write a UnifiedPush topic's subscriber activity every one to two hours instead of every 5 minutes, spread over time, and not at all when a poll or reconnect only repeats the same subscriber; on ntfy.sh, v2.37.0's writes of \~45k topics every 5 minutes, all due in the same minute, slowed down the database ([#&#8203;2151](https://github.com/binwiederhier/ntfy/pull/2151)) ### [`v2.37.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.37.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.36.0...v2.37.0) This release makes UnifiedPush work across several servers: the subscriber who pays for a topic's pushes is shared through the database, and app servers are told with `410 Gone` when a subscription has been abandoned for 4 days. It also adds `Retry-After` and the draft `RateLimit` headers to rate limit responses, and frees the memory of one-off visitors sooner. **Features:** - With `visitor-subscriber-rate-limiting`, the subscriber of a UnifiedPush topic (who pays for its pushes) is kept in the user database and shared by all servers, so a push to any server is billed to the subscriber instead of answered with 507 ([#&#8203;2136](https://github.com/binwiederhier/ntfy/pull/2136); see [subscriber-based rate limiting](https://docs.ntfy.sh/config/#subscriber-based-rate-limiting)) - Send a `Retry-After` header with HTTP 429 responses that are caused by a rate limit with a known wait, e.g. the request, e-mail or daily message limits ([#&#8203;2142](https://github.com/binwiederhier/ntfy/pull/2142); see [rate limiting](https://docs.ntfy.sh/config/#rate-limiting)) - Send the IETF draft `RateLimit-Policy` and `RateLimit` headers with publish responses (and with every 429 caused by a limit with a quota), for the request and daily message limits ([#&#8203;2143](https://github.com/binwiederhier/ntfy/pull/2143); see [rate limiting](https://docs.ntfy.sh/config/#rate-limiting)) - New metric `ntfy_topics_unifiedpush_total`: the UnifiedPush topics whose subscriber state a server keeps in memory ([#&#8203;2136](https://github.com/binwiederhier/ntfy/pull/2136)) **Behavior changes:** - With `visitor-subscriber-rate-limiting`, a UnifiedPush push to a topic that has had no subscriber (subscribe, poll or open stream) for 4 days is answered with `410` (error code 41002) instead of `507`, so app servers like Mastodon remove the expired subscription ([#&#8203;664](https://github.com/binwiederhier/ntfy/issues/664), [#&#8203;2136](https://github.com/binwiederhier/ntfy/pull/2136)); a Matrix push to such a topic gets its pushkey rejected (before: after 12 hours without a subscriber on the server that got the push) - With `visitor-subscriber-rate-limiting`, UnifiedPush messages are counted against the subscriber's account only while it has a tier, and against the subscriber's IP address otherwise (also after the account lost its tier or was deleted); a tier change applies to the next message ([#&#8203;2136](https://github.com/binwiederhier/ntfy/pull/2136)) - Ban feed: weights may be fractional (down to `0.001`), auth failures (`42909`) now weigh 2 instead of 10, and a UnifiedPush push without a subscriber (`50701`) or to an abandoned topic (`41002`) weighs 0.05, so app servers pushing to many offline phones are not banned for it ([#&#8203;2147](https://github.com/binwiederhier/ntfy/pull/2147)) - The rate limit state of a visitor is forgotten about a minute after it has fully recovered (all buckets refilled) instead of after a day without use, which frees the memory of one-off visitors such as floods of new IPs. The `visitors` stat and the `ntfy_visitors_total` metric therefore count the visitors of roughly the last minute, not of the last day ([#&#8203;2126](https://github.com/binwiederhier/ntfy/pull/2126)) - Topics without subscribers are dropped from memory after 6 hours without use instead of 16; a publish to such a topic recreates it (and counts against `visitor-topic-creation-limit-burst`) ([#&#8203;2136](https://github.com/binwiederhier/ntfy/pull/2136)) **Bug fixes + maintenance:** - With PostgreSQL and several servers, daily usage a server counted in the last seconds of a visitor's 24-hour period is no longer added to the next period (a double count); it is dropped instead ([#&#8203;2136](https://github.com/binwiederhier/ntfy/pull/2136)) - Cluster: a forwarded message for a topic without subscribers on the receiving node now counts as wasted (`ntfy_cluster_messages_wasted_total`) and no longer keeps that idle topic in memory ([#&#8203;2140](https://github.com/binwiederhier/ntfy/pull/2140)) ### [`v2.36.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.36.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.35.0...v2.36.0) This release keeps the daily limits across restarts and, with PostgreSQL, shares them between servers, so a visitor gets one daily allowance in total. Each visitor's day now starts at its own time instead of midnight UTC. It also adds an experimental local admin socket. **Features:** - Daily limits (messages, e-mails, phone calls) are stored in the user database, so they survive restarts; with PostgreSQL, all servers share them. Each visitor's day starts at its own time instead of midnight UTC, and the account page and `/v1/account` (`stats.reset_at`) show when it resets ([#&#8203;2131](https://github.com/binwiederhier/ntfy/pull/2131), see [message limits](https://docs.ntfy.sh/config/#message-limits)) - Experimental local admin socket (`experimental-listen-admin-unix`, off by default) that serves the admin API without credentials to whoever can open it; the shipped systemd unit sets `RuntimeDirectory=ntfy` for it (see [admin socket](https://docs.ntfy.sh/config/#admin-socket)) - Export `ntfy_db_up` per PostgreSQL pool, and health-check the primary like the replicas ([#&#8203;2133](https://github.com/binwiederhier/ntfy/pull/2133)) **Upgrade notes:** - Everyone's daily counts start over at the upgrade: the `stats_*` columns of the user table are zeroed and no longer used - Servers that share a PostgreSQL database must keep their clocks in sync (NTP) - Visitors without a tier have a daily e-mail limit again (24h / `visitor-email-limit-replenish`) - The whole server config is checked again when `base-url` or a `message-size-limit` above 4K is set, so an invalid config that used to start now fails at startup ([#&#8203;1969](https://github.com/binwiederhier/ntfy/pull/1969), thanks to [@&#8203;mikejgray](https://github.com/mikejgray) for the contribution) **Bug fixes + maintenance:** - Web app: Messages replayed by a poll or a reconnect no longer bring back deleted notifications, lose their read state or notify again ([#&#8203;2098](https://github.com/binwiederhier/ntfy/issues/2098), [#&#8203;2090](https://github.com/binwiederhier/ntfy/issues/2090), thanks to [@&#8203;mattford63](https://github.com/mattford63), [@&#8203;arminus](https://github.com/arminus) and [@&#8203;tobykaspar79](https://github.com/tobykaspar79) for reporting) - CLI: `ntfy pub --wait-pid` now waits for processes owned by other users instead of failing with "not running" ([#&#8203;1710](https://github.com/binwiederhier/ntfy/pull/1710), thanks to [@&#8203;bekoeppel](https://github.com/bekoeppel) for the contribution) - Admin API (internal): manage other users' tokens, tiers and password reset links, return 4xx instead of 500 for invalid input, and remove a deleted user's web push subscriptions ### [`v2.35.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.35.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.34.0...v2.35.0) This release keeps what a user already spent when their tier changes, and makes a tier's daily email limit a hard cap. It also fixes intermittent 403s under concurrent requests from the same IP, and the Matrix push gateway storing messages under a protected topic on SQLite. **Security:** - Reject Matrix push gateway requests whose push key does not name a valid topic. Publishing strips NUL bytes and invalid UTF-8 from the topic after authorization, so an anonymous push key like `/sec%00ret` was authorized against an unmatched topic and then stored under the protected topic `secret` (SQLite only; on PostgreSQL the request was denied; thanks to [Efe Çam](https://github.com/the-arma-of-owl) for reporting) **Features:** - A tier change (an upgrade, a downgrade, or a tier edited in place) applies on the user's next request and keeps what was already spent; before, it refilled the request, email and attachment bandwidth limits ([#&#8203;2104](https://github.com/binwiederhier/ntfy/pull/2104), [#&#8203;2105](https://github.com/binwiederhier/ntfy/pull/2105)) - A tier's daily email limit is a hard cap; before, the tier's email burst came on top of it, so a user could send more emails a day than the tier allows **Bug fixes + maintenance:** - Fix intermittent 403s and panics in the account handlers under concurrent requests from the same IP: a login or logout could change the user under another request, so a request with valid credentials was treated as anonymous, or the other way around. Every request now gets its own visitor ([#&#8203;1051](https://github.com/binwiederhier/ntfy/issues/1051), [#&#8203;2113](https://github.com/binwiederhier/ntfy/issues/2113), [#&#8203;2118](https://github.com/binwiederhier/ntfy/pull/2118), thanks to [@&#8203;ivanetinajero](https://github.com/ivanetinajero) for reporting) - A tier with a daily email limit of zero sends no emails; before, it could still send the server's email burst (`visitor-email-limit-burst`) - An attachment upload rejected at a size limit is no longer charged to the attachment bandwidth limit for the part that went over - Rate limits live in one shared limit service, keyed by `ip:<prefix>` or `user:<id>`, instead of in each visitor, which uses less memory per visitor and takes a global lock off the request path - Accept terabyte units (e.g. `1T`) in size settings such as attachment and tier limits, matching how sizes are displayed ([#&#8203;2078](https://github.com/binwiederhier/ntfy/pull/2078), thanks to [@&#8203;cangen185-sudo](https://github.com/cangen185-sudo) for the contribution) ### [`v2.34.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.34.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.33.1...v2.34.0) This release prepares the experimental cluster to run behind load balancers: nodes drain on shutdown instead of dropping all of their clients at once, ntfy can listen on several addresses, and access changes reach every node. It also fixes a revoked or deleted user keeping some of their subscriptions, on every server. **Features:** - Allow several comma-separated addresses in `listen-http`, so a load balancer can hold more than \~63k connections to one ntfy node - Cluster nodes drain on shutdown: an active node withdraws (stops being ready), then turns read-only and closes its subscriber connections gradually (`experimental-cluster-drain-delay`, `experimental-cluster-drain-duration`), so its clients move to the other nodes without a reconnect storm (experimental, see [draining on shutdown](https://docs.ntfy.sh/config/#draining-on-shutdown)) **Security:** - End all of a user's subscriptions when their access to a topic is reset or the user is deleted: only the first one was ended, so the others kept receiving the topic's messages ([#&#8203;1845](https://github.com/binwiederhier/ntfy/pull/1845), thanks to [@&#8203;gigioneggiando](https://github.com/gigioneggiando) for reporting) - In an experimental cluster, tell the other nodes when access changes (e.g. a reservation or a revoked permission), so they reload their access cache and disconnect subscribers who lost access; the access cache reload also catches changes made elsewhere, e.g. by the `ntfy access` CLI, and now runs every 67 seconds instead of 87 **Bug fixes + maintenance:** - Fix a deadlock when ending subscriptions (reserving a topic with live subscribers, revoking access, deleting a user) while debug logging or `log-level-overrides` is on: the subscriptions' topic stayed locked for good - Fix a data race when `log-level-overrides` changes (e.g. on a config reload with SIGHUP) while the server logs ### [`v2.33.1`](https://github.com/binwiederhier/ntfy/releases/tag/v2.33.1) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.33.0...v2.33.1) This release builds ntfy with Go 1.27.3 (security fixes, including rejecting the compromised eMudhra intermediate CAs), and adds monitoring for the experimental cluster: each node's view of its peers, per-peer and database connection pool metrics. *The v2.33.0 release had an issue that made it crash on older CPU architectures. The v2.33.1 release fixes that (see [#&#8203;2092](https://github.com/binwiederhier/ntfy/issues/2092)).* **Features:** - Show each cluster node's view of its peers with `ntfy cluster status`, `/v1/cluster/status` on the cluster listener, and per-peer metrics, so a link that only works in one direction is visible (experimental clustering, see [cluster status](https://docs.ntfy.sh/config/#cluster-status)) - Export PostgreSQL connection pool metrics (`ntfy_db_pool_*`: connections in use, and queries that waited for a free connection, per pool), to size `pool_max_conns` (see [PostgreSQL](https://docs.ntfy.sh/config/#postgresql)) **Security:** - Build with Go 1.27.3, which includes the security fixes of Go 1.27.2 (`crypto/tls`, `net/http`, `html/template` and others) and 1.27.3 (`crypto/x509`: certificate chains through the compromised eMudhra intermediate CAs are rejected) - Reject phone number verification unless Twilio confirms the code as approved, instead of accepting any successful response - Ignore duplicate topics in a subscription and limit a subscription to 150 topics, so a single request cannot replay the same topic's cache over and over **Bug fixes + maintenance:** - Count published messages from every cluster node: each node adds its own publishes to the stored total instead of the leader overwriting it with its own count (experimental clustering) - Fix "Illegal instruction" crash of the amd64 binaries on CPUs without x86-64-v3 (AVX2/BMI2), by building releases on Ubuntu 24.04 again ([#&#8203;2092](https://github.com/binwiederhier/ntfy/issues/2092), thanks to [@&#8203;frank-bg](https://github.com/frank-bg) for reporting) ### [`v2.33.0`](https://github.com/binwiederhier/ntfy/compare/v2.32.0...v2.33.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.32.0...v2.33.0) ### [`v2.32.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.32.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.31.1...v2.32.0) This release prepares ntfy.sh for a passive cluster node: jobs that write to the shared database run only on the cluster leader, and each database store now records the oldest schema version it works with. Streaming subscriptions also tell proxies not to buffer them. **Features:** - Set the `Incremental: ?1` header ([RFC 10036](https://www.rfc-editor.org/info/rfc10036/)) on streaming subscriptions, so proxies that support it forward messages without buffering ([#&#8203;2056](https://github.com/binwiederhier/ntfy/issues/2056), thanks to [@&#8203;bt90](https://github.com/bt90) for the suggestion) **Bug fixes + maintenance:** - Fix template files (`?tpl=<name>`) ignoring the priority sent with the request when the file has no `priority` key ([#&#8203;2045](https://github.com/binwiederhier/ntfy/issues/2045), thanks to [@&#8203;6801318d8d](https://github.com/6801318d8d) for reporting) - Return HTTP 409 instead of 500 when deleting or changing the password of a user provisioned via `auth-users` through the admin API ([#&#8203;2062](https://github.com/binwiederhier/ntfy/issues/2062), thanks to [@&#8203;daniloamiranda](https://github.com/daniloamiranda) for reporting) - Run the shared-database housekeeping (pruning expired messages, attachments and tokens, web push expiry warnings, writing the published-messages total) on the cluster leader only, so a passive node no longer overwrites the total with its own count (experimental clustering) - Record the oldest schema version each database store still works with, so an older ntfy refuses to start on a database that a newer version migrated in a breaking way, instead of misreading it; none of today's migrations are breaking ([#&#8203;2060](https://github.com/binwiederhier/ntfy/pull/2060)) ### [`v2.31.1`](https://github.com/binwiederhier/ntfy/releases/tag/v2.31.1) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.31.0...v2.31.1) This release fixes the database load that made us roll back ntfy.sh from v2.31.0: reconnecting with `since=<message ID>` read every message of the topic from the database. A new index makes these reconnects cheap, cheaper than in v2.30.0. It also lets ntfy start with a warning on a newer database schema, so later rollbacks need no manual step. **Bug fixes + maintenance:** - Fix reconnects with `since=<message ID>` reading every message of the topic from the database, which overloaded ntfy.sh's database right after the v2.31.0 upgrade; the message cache gets a new index: (topic, published, id) on PostgreSQL, (topic, published, time) on SQLite ([#&#8203;2058](https://github.com/binwiederhier/ntfy/pull/2058)) - Start with a warning instead of failing when the database schema is newer than this version of ntfy supports, so a rollback or a rolling cluster upgrade needs no manual schema change ([#&#8203;2059](https://github.com/binwiederhier/ntfy/pull/2059)) - Web app: Fix the wrong topic opening when subscribed to the same topic on two different servers ([#&#8203;858](https://github.com/binwiederhier/ntfy/issues/858)) - Web app: Fix the "Upgrade to ntfy Pro" banner covering the bottom of a long topic list ([#&#8203;1007](https://github.com/binwiederhier/ntfy/issues/1007)) - Web app: The "Notifications are disabled" and "Notifications are blocked" warnings can now be closed ([#&#8203;1220](https://github.com/binwiederhier/ntfy/issues/1220)) - Web app: Fix a crash when opening the subscribe dialog before the topic list has loaded, e.g. while another tab holds the browser database ([#&#8203;2014](https://github.com/binwiederhier/ntfy/issues/2014), [#&#8203;1881](https://github.com/binwiederhier/ntfy/issues/1881)) **Upgrade notes:** - This release changes the message database schema (version 16 to 17: an index for `since=<message ID>` reconnects). Downgrading to v2.31.0 or earlier afterwards requires setting the version back by hand first: `UPDATE schema_version SET version = 16 WHERE store = 'message'` on PostgreSQL, or `UPDATE schemaVersion SET version = 16 WHERE id = 1` in the SQLite `cache-file`. From this release on, a newer schema only logs a warning ([#&#8203;2059](https://github.com/binwiederhier/ntfy/pull/2059)) ### [`v2.31.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.31.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.30.0...v2.31.0) This release fixes messages that could be lost when a client reconnects, e.g. a phone switching networks, right when messages are published: every server now reads newly written messages from its message cache once a second and sends them to the subscribers that missed them. In load tests with server restarts and crashes, this brought lost messages down from 465 to 2 out of about 615,000. It also adds a `/v1/ready` endpoint for load balancers, and continues the experimental clustering work with node roles. **Features:** - Add `/v1/ready` for load balancers, and the node's role to `/v1/health`; with clustering, a node with no other active node leads right away instead of after a one-minute hold-off ([#&#8203;2050](https://github.com/binwiederhier/ntfy/pull/2050)) - Experimental clustering: add `experimental-cluster-role` to run a `passive` node that never leads and never takes over another node's subscribers, e.g. one that is not behind the load balancer ([#&#8203;2049](https://github.com/binwiederhier/ntfy/pull/2049)) **Bug fixes + maintenance:** - Fix messages lost when a client reconnects before they are written to the message cache, or when a cluster node's fan-out is lost: every node now reads newly written messages once a second and sends them to the subscribers that missed them ([#&#8203;2040](https://github.com/binwiederhier/ntfy/pull/2040)) - Write user stats (messages, emails, calls) as increments, so servers sharing one database add up instead of overwriting each other's counts ([#&#8203;1989](https://github.com/binwiederhier/ntfy/pull/1989)) - Don't add a visitor's anonymous usage to an account's stats when the account takes over that visitor, e.g. right after upgrading ([#&#8203;2041](https://github.com/binwiederhier/ntfy/pull/2041)) **Upgrade notes:** - A reconnect with `since=<message ID>` now also returns the messages published in the same second as that message, so none are skipped when several servers write out of order. The ntfy apps and web app drop these by ID; your own scripts may see a few duplicates ([#&#8203;2040](https://github.com/binwiederhier/ntfy/pull/2040)) - Experimental clustering only: this release changes the cluster's node registry schema (version 1 to 2). Downgrading a clustered server to v2.30.0 afterwards requires setting the version back by hand first: `UPDATE schema_version SET version = 1 WHERE store = 'node_registry'` ([#&#8203;2049](https://github.com/binwiederhier/ntfy/pull/2049)) ### [`v2.30.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.30.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.29.0...v2.30.0) This release links attachments in email notifications, adds SMTP LOGIN auth (e.g. for OVH and Outlook), and fixes the PostgreSQL memory growth that came with v2.29.0. It also ships the first experimental version of clustering: several ntfy servers sharing one PostgreSQL database. Clustering is not ready for production yet. **Features:** - Link attachments in email notifications, including the file name and when the link expires ([#&#8203;672](https://github.com/binwiederhier/ntfy/issues/672), thanks to [@&#8203;merspieler](https://github.com/merspieler) for suggesting) - Support SMTP servers that only offer LOGIN auth (e.g. OVH, Outlook) for sending emails ([#&#8203;930](https://github.com/binwiederhier/ntfy/issues/930)/[#&#8203;1530](https://github.com/binwiederhier/ntfy/pull/1530), thanks to [@&#8203;wunter8](https://github.com/wunter8) for reporting and [@&#8203;santanoce](https://github.com/santanoce) for the initial implementation) - Experimental: run several ntfy servers as one cluster that shares a PostgreSQL database, enabled with `experimental-cluster-listen`; this is not ready for production yet ([#&#8203;2005](https://github.com/binwiederhier/ntfy/pull/2005), [#&#8203;2008](https://github.com/binwiederhier/ntfy/pull/2008), [#&#8203;2012](https://github.com/binwiederhier/ntfy/pull/2012), [#&#8203;2013](https://github.com/binwiederhier/ntfy/pull/2013)) **Bug fixes + maintenance:** - Fix `Dockerfile-build` failing to build: use Go 1.26 and add the `cluster` package ([#&#8203;1962](https://github.com/binwiederhier/ntfy/issues/1962), thanks to [@&#8203;ElectricTea](https://github.com/ElectricTea) for reporting) - Set the `org.opencontainers.image.version` label on release Docker images ([#&#8203;1921](https://github.com/binwiederhier/ntfy/issues/1921)/[#&#8203;1936](https://github.com/binwiederhier/ntfy/pull/1936), thanks to [@&#8203;Plazzmex](https://github.com/Plazzmex) for reporting and [@&#8203;w1977-0](https://github.com/w1977-0) for the fix) - Warn at startup if `attachment-expiry-duration` is longer than `cache-duration`, since attachments never outlive their message ([#&#8203;1053](https://github.com/binwiederhier/ntfy/issues/1053), thanks to [@&#8203;ctschach](https://github.com/ctschach) for reporting) - Fix PostgreSQL memory growth after v2.29.0: write message batches with one fixed `INSERT` for any batch size ([#&#8203;2011](https://github.com/binwiederhier/ntfy/pull/2011)) - CLI: fix `ntfy publish` failing with "invalid header field value" when sending a multi-line message or title along with a file ([#&#8203;1808](https://github.com/binwiederhier/ntfy/issues/1808), thanks to [@&#8203;quantenzitrone](https://github.com/quantenzitrone) for reporting) - Web app: fix an updated message showing next to its old version when the update arrived via the background poll instead of live ([#&#8203;2010](https://github.com/binwiederhier/ntfy/pull/2010)) **Documentation:** - Document recommended PostgreSQL pool settings for busy servers ([#&#8203;2011](https://github.com/binwiederhier/ntfy/pull/2011)) ### [`v2.29.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.29.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.28.0...v2.29.0) This release fixes cache writes under load. On ntfy.sh, hourly cron bursts overwhelmed the batch writer: messages took up to 40s to reach the database (so `poll=1` and `since=` missed them) and publishes stalled. Batches are now written in one statement, publishes no longer wait on the writer, and PostgreSQL connections stay idle instead of reconnecting. **Features:** - Timezone support for delayed notifications via `X-Timezone` header, `timezone` query param or JSON field; the web app sends the browser's timezone ([#&#8203;1967](https://github.com/binwiederhier/ntfy/pull/1967)/[#&#8203;1924](https://github.com/binwiederhier/ntfy/issues/1924), thanks [@&#8203;beemines](https://github.com/beemines)) - RFC 3339 timestamps for delayed notifications, e.g. `At: 2026-12-10T11:00:00-05:00` ([#&#8203;1931](https://github.com/binwiederhier/ntfy/pull/1931), thanks [@&#8203;ALPHACOM-Brehmer](https://github.com/ALPHACOM-Brehmer)) **Bug fixes + maintenance:** - Fix delayed message visibility and stalled publishes under bursts: multi-row `INSERT` per batch, non-blocking publishes (100-batch buffer), and no scheduled-message lookup unless a sequence ID is set ([#&#8203;2006](https://github.com/binwiederhier/ntfy/pull/2006)) - Fix a panic in the account token-update endpoint caused by a concurrent anonymous request racing on the shared visitor; now returns HTTP 401 - Fix messages lost on shutdown: the write queue is flushed and `ntfy serve` handles `SIGTERM`/`SIGINT` gracefully - `pool_max_idle_conns` now defaults to `pool_max_conns`, so PostgreSQL connections are reused instead of re-opened - Fix `since=<message-id>` replaying a topic's full history when the ID wasn't on the read replica yet; it's now resolved on the primary - Use the PostgreSQL row estimate for `messages_cached` instead of a `COUNT(*)` every minute - Detect Markdown when `Content-Type` has parameters or is uppercase ([#&#8203;1995](https://github.com/binwiederhier/ntfy/pull/1995), thanks [@&#8203;cipherprofessor](https://github.com/cipherprofessor)) - Fix the Alertmanager template's bogus `0001-01-01` end time and merged start/end lines ([#&#8203;1946](https://github.com/binwiederhier/ntfy/pull/1946)/[#&#8203;1940](https://github.com/binwiederhier/ntfy/issues/1940), thanks [@&#8203;justadityaraj](https://github.com/justadityaraj) and [@&#8203;deferred](https://github.com/deferred)) - Embed the time zone database (`time/tzdata`) so named time zones work on ARM Docker images and minimal runtimes - Build with Go 1.27; minimum Go version to build is now 1.26 - Groundwork for clustering (node registry, util primitives, reserved config options); not usable yet ([#&#8203;1991](https://github.com/binwiederhier/ntfy/pull/1991), [#&#8203;1997](https://github.com/binwiederhier/ntfy/pull/1997), [#&#8203;2001](https://github.com/binwiederhier/ntfy/pull/2001), [#&#8203;2003](https://github.com/binwiederhier/ntfy/pull/2003)) ### [`v2.28.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.28.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.27.0...v2.28.0) This is a hardening release. A single topic on ntfy.sh was polled continuously with `poll=1` and no `since` cursor, which replays a topic's entire cache on every request. The changes below bound what one replay can cost, close two fields that had no size limit at all, and fix an ordering bug found while digging into it. **Bug fixes + maintenance:** - Fix messages being returned out of publish order when polling or replaying **several topics at once** (`/topic1,topic2/json?poll=1`, [#&#8203;1297](https://github.com/binwiederhier/ntfy/issues/1297)) - Limit the message title to 1 KB and all tags combined to 512 bytes, rejecting larger requests with HTTP 400 (error codes `40057` and `40058`). Neither field had a size limit before, unlike the message body; on ntfy.sh the 99.9th percentile is 212 bytes for titles and 244 for tags - Cap a single cache replay at 10 MB of messages per topic. A poll without a `since` cursor returns a topic's entire cache, which was previously unbounded and could reach tens of megabytes on a busy topic, so one request could allocate that much on the server. The newest messages that fit are kept and a truncated response carries an `X-Messages-Truncated: 1` header - `visitor-attachment-daily-bandwidth-limit` now also covers messages replayed from the message cache by poll requests, not just attachment traffic. A poll without a `since` cursor returns a topic's entire cache, so a topic that is cheap to fill can be re-read for many times its own size; polls beyond the budget are rejected with HTTP 429 (error code 42905) before anything is written. **Note that heavy pollers now consume the same budget as attachment downloads**, so operators serving both may want to raise the limit ### [`v2.27.0`](https://github.com/binwiederhier/ntfy/releases/tag/v2.27.0) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.26.3...v2.27.0) This release lets you sign in with your verified email address instead of your username, which should help if you ever signed up with an email and then forgot which username you picked. It also hardens the message templating engine against a few ways a small template could eat a lot of memory, and it drops the "experimental" label from PostgreSQL support, which has been running ntfy.sh for a while now. I also did a bunch of refactoring in, mostly in preparation for being able to cluster ntfy nodes and scale the service horizontally. It'll be a while until then, ... baby steps. **Security:** - Limit message templates (`Template: yes`) to 32 KB, limit `printf` widths and precisions to below 1000, and limit `indent`/`nindent` to 100 spaces, preventing excessive memory use from a single small template - Exclude secrets from the config hash served to the web app, preventing a rather theoretical information leak **Features:** - Allow logging in with your verified primary email address (in addition to your username), so a password reset no longer leaves you unable to sign in when you only remember the email you signed up with **Bug fixes + maintenance:** - Fix Twilio phone calls and phone number verifications failing silently when Twilio rejected the request, and move the Twilio integration into its own `twilio` package - Move the Prometheus metrics into a dedicated `metrics` package - Message cache databases from ntfy older than v1.10.0 (November 2021) can no longer be migrated; upgrade via an older ntfy version first, or delete the cache database - Fix `user_phone` table in the SQLite user database referencing a dropped table after the v2.14 schema migration; repaired automatically by a new migration ### [`v2.26.3`](https://github.com/binwiederhier/ntfy/releases/tag/v2.26.3) [Compare Source](https://github.com/binwiederhier/ntfy/compare/v2.26.0...v2.26.3) This is a hotfix release, useful pretty much only for ntfy.sh. It was adds the ability to track abusive IPs mor efficiently, reducing the load on the IP banning services and preventing them from falling behind and leaving abusers unbanned for too long. It works by tracking HTTP errors, and writing out a ban file that fail2ban can read and ban offenders instantly. See [ban-feed](https://docs.ntfy.sh/config/#ban-feed) for details. **Features:** - Add an abuse ban-feed: when enabled via `ban-file`, ntfy tracks a weighted strike budget per visitor and appends abusive IPs to a file that fail2ban can tail and ban on sight (`ban-file`, `ban-window`, `ban-threshold`, `ban-weights`; see [ban-feed](https://docs.ntfy.sh/config/#ban-feed)) </details> <details> <summary>gotenberg/gotenberg (docker.io/gotenberg/gotenberg)</summary> ### [`v8.40.0`](https://github.com/gotenberg/gotenberg/releases/tag/v8.40.0): 8.40.0 [Compare Source](https://github.com/gotenberg/gotenberg/compare/v8.39.0...v8.40.0) > \[!IMPORTANT] > 8.40.0 is the final release of Gotenberg 8. The next release is Gotenberg 9. #### Security Fixes ⚠️ - **Pass the encryption passwords to QPDF as option values.** QPDF received `userPassword` and `ownerPassword` as positional arguments, and it reads an argument that starts with `@` as a file of further arguments. A password of `@/proc/self/cmdline`, with newlines in the other one, injected options such as `--add-attachment`, and the returned PDF embedded any file the `gotenberg` user can read. QPDF now receives `--user-password=` and `--owner-password=`, and every password encrypts the PDF as typed. - **Treat every special-purpose address range as non-public.** The `*_DENY_PRIVATE_IPS` checks let through ranges that IANA marks as not globally reachable, such as the IPv6 benchmarking range `2001:2::/48`, while they refused its IPv4 twin `198.18.0.0/15`. They now refuse every such block: `0.0.0.0/8`, where Docker Desktop answers its host gateway, `192.0.0.0/24`, the documentation ranges, `192.88.99.0/24` and `240.0.0.0/4` in IPv4, and the whole `2001::/23` block, `3fff::/20`, `5f00::/16` and `100:0:0:1::/64` in IPv6. - **Distrust the compromised eMudhra roots in Chromium from the first request.** 8.39.0 removed them from the OS bundle and the Java trust store, but Chromium's root store still trusted `emSign ECC Root CA - G3` until its component updater fetched a CRLSet, about two minutes after each start, and never without access to Google's update servers. Every Chromium restart opened the window again. A managed policy now distrusts `emSign ECC Root CA - G3`, `emSign Root TLS CA - G3` and `AAA Certificate Services` at startup. - **Keep the pinning proxy on with `--chromium-host-resolver-rules`.** Any host-resolver rule turned the pinning proxy off, and with it the only layer that refuses a WebSocket handshake: with `--chromium-deny-private-ips` set, a page, or a Web Worker, could open a WebSocket to a private address, and Gotenberg only logged it. Gotenberg now applies the rules itself, with Chromium's `MAP` and `EXCLUDE` semantics, in its outbound checks and in the proxy, so the IP-class checks judge the address a rule maps a host to. #### Behavior Changes - **An invalid `--chromium-host-resolver-rules` stops Gotenberg at startup.** Chromium skipped a rule it could not parse, so a typo silently sent requests elsewhere. - **Gotenberg, not Chromium, applies the host-resolver rules.** Loopback requests now go through the pinning proxy when a rule is set, and a host that only a `MAP` rule knows works as the URL to print, where it returned `403` before. Hops carried by the environment proxy keep their original host. - **`--chromium-proxy-server` with an outbound policy logs a warning at startup.** WebSocket handshakes reach that proxy without Gotenberg's checks, so enforce the policy there. - **The `*_DENY_PRIVATE_IPS` checks refuse more ranges.** See the security fix above. The rule covers whole blocks, so a few anycast services inside `192.0.0.0/24` and `2001::/23` are refused too. - **The `linux/386` image needs `seccomp=unconfined` on Docker 29.4 and later.** Docker's default seccomp profile now denies `socketcall` on i386, to block the `AF_ALG` sockets of CVE-2026-31431, and Gotenberg opens its sockets through it on that architecture. The container fails to start with `listen tcp :3000: socket: function not implemented`. Run it with `--security-opt seccomp=unconfined`, or with a copy of Docker's default profile that allows `socketcall`, and keep the host kernel patched. This comes from Docker and affects earlier releases too. #### Bug Fixes - **LibreOffice stopped answering after a restart** ([#&#8203;1713](https://github.com/gotenberg/gotenberg/issues/1713)). Since 8.32.0, the socket port was picked before LibreOffice's outbound proxy started, so the kernel could hand that same port to the proxy. LibreOffice then ran without its socket, the health check reached the proxy and reported it healthy, and every LibreOffice request timed out until the container restarted. The port is now picked once the proxy listens, and the startup and health checks wait for LibreOffice's own UNO greeting. Thanks [@&#8203;chladic](https://github.com/chladic). - **Merging with `pdfa` on `/forms/libreoffice/convert` returned a PDF that was not PDF/A** ([#&#8203;1705](https://github.com/gotenberg/gotenberg/pull/1705)). Each document got the formats before the merge, which undid them. The formats now apply once, to the merged file, as on `/forms/pdfengines/merge`. Thanks [@&#8203;APX403](https://github.com/APX403). - **Chromium called Google services at every start** ([#&#8203;1706](https://github.com/gotenberg/gotenberg/issues/1706)). Optimization hints, network time queries and account checks reached Google, or logged blocked CONNECTs in locked-down deployments. Those features are now off, and the sign-in URL points to a closed loopback port. Thanks [@&#8203;Moufle](https://github.com/Moufle). - **Aberrant print settings returned `500`** ([#&#8203;1707](https://github.com/gotenberg/gotenberg/pull/1707)). Only an empty content area returned `400`. A `scale` outside 0.1 to 2, a negative margin, a zero paper size and every other print parameter Chromium rejects now return `400` too. Thanks [@&#8203;SergeevDmitry](https://github.com/SergeevDmitry). - **`optimizeImages` swapped images between the pages of a merged PDF** ([#&#8203;1708](https://github.com/gotenberg/gotenberg/pull/1708)). Two merged documents may give their images the same name, such as `X5`. Extracted images are now matched by page and name. Thanks [@&#8203;APX403](https://github.com/APX403). - **`optimizeImages` made charts larger** ([#&#8203;1714](https://github.com/gotenberg/gotenberg/pull/1714)). Charts and other flat-color images often take more space as JPEG than in their lossless stream. A replacement is now kept only when it makes the file smaller, so the pass never grows a PDF. Thanks [@&#8203;APX403](https://github.com/APX403). #### Chore - Updated Chromium to `156.0.8078.79`. - Updated LibreOffice to `26.8.2`. - Dropped `python3-distutils-extra`, and the 45 unused packages it pulled in, from the images that ship LibreOffice ([#&#8203;1711](https://github.com/gotenberg/gotenberg/issues/1711), [#&#8203;1710](https://github.com/gotenberg/gotenberg/pull/1710)). Thanks [@&#8203;yusufgngor](https://github.com/yusufgngor). - Pinned golangci-lint `v2.15.0` in the Makefile, so local and CI linting match. - Updated Go dependencies. ### [`v8.39.0`](https://github.com/gotenberg/gotenberg/releases/tag/v8.39.0): 8.39.0 [Compare Source](https://github.com/gotenberg/gotenberg/compare/v8.38.1...v8.39.0) #### Security Fixes ⚠️ - **Reject ExifTool's `j` option alias and stop loading ExifTool config files.** The metadata check blocked `json` but not its alias `j`. A metadata key could import a JSON file carrying a `HardLink` pseudo-tag, plant `~/.ExifTool_config`, and have the next ExifTool run execute it as Perl. The keys `j`, `addtagsfromfile`, and `alltagsfromfile` now return `400`, and Gotenberg always runs ExifTool with `-config ""`. - **Accept only `http://` and `https://` URLs on the URL routes.** The default deny-list only covered `file://`, so `devtools://devtools/bundled/devtools_app.html` loaded Chromium's privileged DevTools page, and `waitForExpression` ran there with access to local files. `/forms/chromium/convert/url` and `/forms/chromium/screenshot/url` now return `400` for any other scheme. - **Apply path and `wss://` deny rules to WebSocket handshakes.** The pinning proxy matched CONNECT tunnels against `https://host:port`, so a deny rule anchored on a path, such as `^https?://host/`, or on `wss://` refused the plain request but let the handshake through. The proxy now matches tunnels against each scheme's root URL, and a handshake whose full URL is denied fails the conversion with a generic `403`. - **Drop the compromised eMudhra roots** ([#&#8203;1699](https://github.com/gotenberg/gotenberg/issues/1699)). The images trusted `emSign ECC Root CA - G3` and `AAA Certificate Services`, whose intermediates have recoverable private keys. The OS bundle now comes from `ca-certificates` `20250419+deb13u1`, and the Java trust store used by PDFtk drops both roots. **Correction:** Chromium 156 still accepted these chains for about two minutes after each start, until its component updater fetched a CRLSet, and never without access to Google's update servers. The next release, 8.40.0, distrusts both roots in Chromium from the first request. Thanks [@&#8203;hrueger](https://github.com/hrueger). #### New Features - **`failOnConsoleMessageTypes` for Chromium** ([#&#8203;1667](https://github.com/gotenberg/gotenberg/issues/1667)). Fails the conversion with `409` when the page logs a console message of one of the given types (`log`, `debug`, `info`, `warning`, `error`, `assert`). The response lists the messages. Thanks [@&#8203;jschneider](https://github.com/jschneider). - **PDF/A-4** ([#&#8203;1703](https://github.com/gotenberg/gotenberg/pull/1703)). The `pdfa` form field now accepts `PDF/A-4` on every route that supports it, through the LibreOffice PDF engine. Thanks [@&#8203;henningda](https://github.com/henningda). - **`Gotenberg-Version` response header** ([#&#8203;1693](https://github.com/gotenberg/gotenberg/issues/1693)). Set on every authenticated route, error responses included, and on webhook deliveries. It is not set on `401` responses or `/health` ([#&#8203;1694](https://github.com/gotenberg/gotenberg/pull/1694)). Thanks [@&#8203;fragkakis](https://github.com/fragkakis). #### Behavior Changes - **The URL routes reject non-HTTP schemes.** `chrome://`, `devtools://`, `data:`, and any other scheme besides `http` and `https` now return `400`. - **ExifTool ignores `~/.ExifTool_config`.** The metadata keys `j`, `addtagsfromfile`, and `alltagsfromfile` now return `400`. Prefix them with a group, for example `XMP:j`, to write a tag of that name. - **The `XRECHNUNG` Factur-X profile embeds `xrechnung.xml`.** See the bug fix below. #### Bug Fixes - **Sporadic `502` on uploads behind HTTP/2 proxies** ([#&#8203;1112](https://github.com/gotenberg/gotenberg/issues/1112)). Behind Cloud Run with an `h2c` port, the proxy sent large DATA frames, Go answered with a flood of WINDOW_UPDATE frames, and the proxy dropped the connection mid-upload. Gotenberg now advertises the 16 KiB HTTP/2 default frame size ([#&#8203;1700](https://github.com/gotenberg/gotenberg/pull/1700)). Thanks [@&#8203;TessilimiTheo](https://github.com/TessilimiTheo) and [@&#8203;geoherna](https://github.com/geoherna). - **No listener with absolute TLS paths** ([#&#8203;1690](https://github.com/gotenberg/gotenberg/issues/1690)). Since 8.38.0, `--api-tls-cert-file` and `--api-tls-key-file` with absolute paths left Gotenberg running without accepting connections. Both paths work again, and a missing or unreadable file now fails the startup ([#&#8203;1691](https://github.com/gotenberg/gotenberg/pull/1691)). Thanks [@&#8203;n-rodriguez](https://github.com/n-rodriguez). - **Empty `stampSource` or `watermarkSource` returned `400`** ([#&#8203;1692](https://github.com/gotenberg/gotenberg/pull/1692)). Since 8.36.0, a blank source failed the merge, split, Chromium, and LibreOffice routes. An empty source is skipped again. Thanks [@&#8203;APX403](https://github.com/APX403). - **OIDC rejected `bearer` in lower case** ([#&#8203;1696](https://github.com/gotenberg/gotenberg/pull/1696)). The Authorization scheme is now matched case-insensitively, as RFC 9110 requires. Thanks [@&#8203;MaxFreedomPollard](https://github.com/MaxFreedomPollard). - **The `XRECHNUNG` Factur-X profile embedded `factur-x.xml`** ([#&#8203;1701](https://github.com/gotenberg/gotenberg/issues/1701)). The spec requires `xrechnung.xml` for this profile, both as the embedded file and in `fx:DocumentFileName`. Other levels keep `factur-x.xml`. Thanks [@&#8203;nhh](https://github.com/nhh). #### Chore - Updated Chromium to `156.0.8078.47`. - Updated pdfcpu to `v0.16.3` and bumped Go to `1.27.3`, which fix several HIGH CVEs in the Go standard library and `golang.org/x` modules ([#&#8203;1695](https://github.com/gotenberg/gotenberg/issues/1695)). Thanks [@&#8203;sergeykad](https://github.com/sergeykad). - Updated the AWS Lambda Web Adapter to `1.1.0`, which supports Lambda SnapStart ([#&#8203;1704](https://github.com/gotenberg/gotenberg/issues/1704)). Thanks [@&#8203;michael-follmann](https://github.com/michael-follmann). - Bumped golangci-lint to `v2.15.0`. - Updated Go dependencies. </details> <details> <summary>grafana/grafana (docker.io/grafana/grafana)</summary> ### [`v13.3.1`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1331-2026-11-10) ##### Security - Security: Fix CVE-2026-102589 - Security: Fix CVE-2026-107509 - Security: Fix CVE-2026-110992 - Security: Fix CVE-2026-111024 - Security: Fix CVE-2026-13721 - Security: Fix CVE-2026-14242 ##### Features and enhancements - **DateTime:** Update moment-timezone and easy-tz for 2026 time zone changes [#&#8203;136951](https://github.com/grafana/grafana/pull/136951), [@&#8203;joshhunt](https://github.com/joshhunt) - **Provisioning:** allow same-host URL change on connection-backed repositories [#&#8203;137083](https://github.com/grafana/grafana/pull/137083), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) <!-- 13.3.1 END --> <!-- 13.3.0 START --> ### [`v13.3.0`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1330-2026-10-27) ##### Security - Security: Fix CVE-2026-100105 - Security: Fix CVE-2026-13719 - Security: Fix CVE-2026-13720 - Security: Fix CVE-2026-15577 - Security: Fix CVE-2026-33374 - Security: Fix CVE-2026-81841 - Security: Fix CVE-2026-88858 - Security: Fix CVE-2026-88967 - Security: Fix CVE-2026-93294 - Security: Fix CVE-2026-95502 ##### Features and enhancements - **Access control:** reject global role creation in single-org mode (Enterprise) - **Alerting:** Add AccessControlAction entries for inhibition rules [#&#8203;130977](https://github.com/grafana/grafana/pull/130977), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Add notifications API boundary module [#&#8203;134537](https://github.com/grafana/grafana/pull/134537), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Add the Config API data layer for external Alertmanager auto-sync [#&#8203;129478](https://github.com/grafana/grafana/pull/129478), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Allow drag and drop for yaml file as import source for import wizard [#&#8203;132705](https://github.com/grafana/grafana/pull/132705), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Cleanup promote staged config code [#&#8203;130974](https://github.com/grafana/grafana/pull/130974), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Disable datasource picker while an import is staged [#&#8203;133181](https://github.com/grafana/grafana/pull/133181), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Make stage default import method in GMA import wizard [#&#8203;130634](https://github.com/grafana/grafana/pull/130634), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Make the Import wizard review step preview look clickable [#&#8203;132711](https://github.com/grafana/grafana/pull/132711), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Migrate the Import-to-GMA wizard's auto-sync integration [#&#8203;131523](https://github.com/grafana/grafana/pull/131523), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Migrate the auto-sync settings hook and panel onto the Config API [#&#8203;131521](https://github.com/grafana/grafana/pull/131521), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Promote AlertRule, RecordingRule and RuleSequence to v1beta1 [#&#8203;134883](https://github.com/grafana/grafana/pull/134883), [@&#8203;moustafab](https://github.com/moustafab) - **Alerting:** Promote a staged import configuration [#&#8203;130327](https://github.com/grafana/grafana/pull/130327), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Read staged config origin from the managed_by field [#&#8203;130787](https://github.com/grafana/grafana/pull/130787), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Redact secrets from the Import-to-GMA preview modal [#&#8203;132827](https://github.com/grafana/grafana/pull/132827), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Refactor useIsAutoSyncActive onto the shared Config-API helpers [#&#8203;131520](https://github.com/grafana/grafana/pull/131520), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Remove import method from import to GMA wizard [#&#8203;130609](https://github.com/grafana/grafana/pull/130609), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Retire the legacy admin_config auto-sync path [#&#8203;131524](https://github.com/grafana/grafana/pull/131524), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Show Auto-sync support in the import wizard picker [#&#8203;131084](https://github.com/grafana/grafana/pull/131084), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Support Mimir alertmanager_config files in Import to GMA wizard [#&#8203;135637](https://github.com/grafana/grafana/pull/135637), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Surface external Alertmanager sync health in the settings UI [#&#8203;131527](https://github.com/grafana/grafana/pull/131527), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** stop auto-sync from force-skipping the Rules step in the GMA import wizard [#&#8203;131072](https://github.com/grafana/grafana/pull/131072), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Auth:** Bound OAuth token refresh lock waits by time instead of attempts [#&#8203;133929](https://github.com/grafana/grafana/pull/133929), [@&#8203;cinaglia](https://github.com/cinaglia) - **Canvas:** Load the standalone plugin by default [#&#8203;134873](https://github.com/grafana/grafana/pull/134873), [@&#8203;gtk-grafana](https://github.com/gtk-grafana) - **Chore:** Upgrade to k8s v0.37.0 (and grafana-app-sdk v0.60.0) [#&#8203;132571](https://github.com/grafana/grafana/pull/132571), [@&#8203;stevesg](https://github.com/stevesg) - **Dashboard:** Adds new a subtitle option for panel descriptions [#&#8203;129164](https://github.com/grafana/grafana/pull/129164), [@&#8203;torkelo](https://github.com/torkelo) - **Dashboard:** Fall back when collection deletion is unsupported [#&#8203;128259](https://github.com/grafana/grafana/pull/128259), [@&#8203;bestend](https://github.com/bestend) - **Dashboards:** Add $\_\_namespace global variable [#&#8203;132167](https://github.com/grafana/grafana/pull/132167), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Dashboards:** Allow `Add variable +` btn to add filters, links and annos as well [#&#8203;130841](https://github.com/grafana/grafana/pull/130841), [@&#8203;mdvictor](https://github.com/mdvictor) - **Dashboards:** Hide links to deleted folders in Recently Deleted [#&#8203;134469](https://github.com/grafana/grafana/pull/134469), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Dashboards:** Improve Recently Deleted performance with server-side search [#&#8203;134126](https://github.com/grafana/grafana/pull/134126), [@&#8203;pstibrany](https://github.com/pstibrany) - **Dashboards:** Make the auto grid to be default [#&#8203;130749](https://github.com/grafana/grafana/pull/130749), [@&#8203;bfmatei](https://github.com/bfmatei) - **Dashboards:** Show Git Sync badges in folder search [#&#8203;132790](https://github.com/grafana/grafana/pull/132790), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Faro:** add support for `trackResources` [#&#8203;130792](https://github.com/grafana/grafana/pull/130792), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **FieldOverrides:** Add ShowIfOverride to field config options [#&#8203;132419](https://github.com/grafana/grafana/pull/132419), [@&#8203;gtk-grafana](https://github.com/gtk-grafana) - **Frontend:** add subresource integrity [#&#8203;131596](https://github.com/grafana/grafana/pull/131596), [@&#8203;jackw](https://github.com/jackw) - **Git Sync:** Clarify repository links for pure Git [#&#8203;134238](https://github.com/grafana/grafana/pull/134238), [@&#8203;ferruvich](https://github.com/ferruvich) - **Git Sync:** Ignore hidden paths in repository scans and diffs [#&#8203;134731](https://github.com/grafana/grafana/pull/134731), [@&#8203;ferruvich](https://github.com/ferruvich) - **GrafanaBootData:** Restrict config.datasources usage via lint rule [#&#8203;130661](https://github.com/grafana/grafana/pull/130661), [@&#8203;mckn](https://github.com/mckn) - **Heatmap:** Keep exemplar marker size consistent across displays [#&#8203;134072](https://github.com/grafana/grafana/pull/134072), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Home:** Send the traces setup CTA to the OpenTelemetry onboarding guide [#&#8203;135135](https://github.com/grafana/grafana/pull/135135), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Homepage:** Add an On call schedules tab with your shifts and who's on call [#&#8203;134747](https://github.com/grafana/grafana/pull/134747), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Homepage:** Let the Synthetic Monitoring card ignore checks, targets, and probes [#&#8203;134217](https://github.com/grafana/grafana/pull/134217), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Homepage:** Let the metrics card exclude hosts and filesystems from its disk alert [#&#8203;133472](https://github.com/grafana/grafana/pull/133472), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Homepage:** Move card filters to a footer dropdown and show page kinds as icons [#&#8203;135851](https://github.com/grafana/grafana/pull/135851), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Homepage:** Replace the Recent tab with Recent activity [#&#8203;134633](https://github.com/grafana/grafana/pull/134633), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Homepage:** Stop the homepage from jumping while it loads [#&#8203;135321](https://github.com/grafana/grafana/pull/135321), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Log Details Sidebar:** Change default action to replace the current log instead of opening a new tab [#&#8203;133129](https://github.com/grafana/grafana/pull/133129), [@&#8203;matyax](https://github.com/matyax) - **Log Details:** Surface errors in logs and update links styles [#&#8203;134427](https://github.com/grafana/grafana/pull/134427), [@&#8203;matyax](https://github.com/matyax) - **Logs Table:** Disable hover overflow by default [#&#8203;132882](https://github.com/grafana/grafana/pull/132882), [@&#8203;matyax](https://github.com/matyax) - **Logs:** Invert the orientation of the arrow in the Logs Table and Logs Panel [#&#8203;131156](https://github.com/grafana/grafana/pull/131156), [@&#8203;matyax](https://github.com/matyax) - **Packaging:** Remove bash dependency from alpine Docker image [#&#8203;132643](https://github.com/grafana/grafana/pull/132643), [@&#8203;TheoBrigitte](https://github.com/TheoBrigitte) - **PanelEdit:** Conditional field config display & edit context [#&#8203;132398](https://github.com/grafana/grafana/pull/132398), [@&#8203;gtk-grafana](https://github.com/gtk-grafana) - **PanelOptions:** Add context options to overrides [#&#8203;132414](https://github.com/grafana/grafana/pull/132414), [@&#8203;gtk-grafana](https://github.com/gtk-grafana) - **Plugins:** Avoid to delete RBAC roles when upgrading [#&#8203;134143](https://github.com/grafana/grafana/pull/134143), [@&#8203;andresmgot](https://github.com/andresmgot) - **Plugins:** Expose OpenFeature provider discovery to backend plugins [#&#8203;129735](https://github.com/grafana/grafana/pull/129735), [@&#8203;adamyeats](https://github.com/adamyeats) - **Plugins:** Forward SSL certificate environment variables [#&#8203;131848](https://github.com/grafana/grafana/pull/131848), [@&#8203;osmocomet](https://github.com/osmocomet) - **Plugins:** Show the correct warning when grafana.com is unreachable [#&#8203;132028](https://github.com/grafana/grafana/pull/132028), [@&#8203;lazerg](https://github.com/lazerg) - **Provisioning:** Add generic git OAuth app connections [#&#8203;134186](https://github.com/grafana/grafana/pull/134186), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Add link back to the original dashboard in preview banner [#&#8203;129037](https://github.com/grafana/grafana/pull/129037), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Allow permission updates on provisioned folders [#&#8203;134725](https://github.com/grafana/grafana/pull/134725), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Allow resource previews in unsynced folders [#&#8203;133250](https://github.com/grafana/grafana/pull/133250), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Always interpret folder metadata in resources and sync [#&#8203;134726](https://github.com/grafana/grafana/pull/134726), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Always protect folder metadata from direct file writes [#&#8203;135038](https://github.com/grafana/grafana/pull/135038), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Always use folder metadata in Git Sync [#&#8203;134355](https://github.com/grafana/grafana/pull/134355), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Provisioning:** Default save from a branch preview to the previewed branch [#&#8203;135136](https://github.com/grafana/grafana/pull/135136), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Provisioning:** GitHub-style doc tabs for folder README [#&#8203;129073](https://github.com/grafana/grafana/pull/129073), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Handle repository build timeouts and branch outages [#&#8203;135072](https://github.com/grafana/grafana/pull/135072), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Keep folder when removing \_folder.json leaves its UID unchanged [#&#8203;135574](https://github.com/grafana/grafana/pull/135574), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Link README items to Grafana pages when viewed in Grafana [#&#8203;128455](https://github.com/grafana/grafana/pull/128455), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Make backend user attribution unconditional [#&#8203;134709](https://github.com/grafana/grafana/pull/134709), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Never replace the repository root folder during incremental sync [#&#8203;135397](https://github.com/grafana/grafana/pull/135397), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Reject invalid resource names before API calls [#&#8203;133666](https://github.com/grafana/grafana/pull/133666), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Respect Git Sync polling intervals after unchanged refs [#&#8203;134380](https://github.com/grafana/grafana/pull/134380), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Show last checked time in Pull status [#&#8203;134476](https://github.com/grafana/grafana/pull/134476), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Skip previews for pull requests from forks [#&#8203;132522](https://github.com/grafana/grafana/pull/132522), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Stop PR previews when refs disappear [#&#8203;132547](https://github.com/grafana/grafana/pull/132547), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Style branch/target-branch as GitHub-like pills in preview banner [#&#8203;131133](https://github.com/grafana/grafana/pull/131133), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Support generic git OAuth connections in the UI [#&#8203;134187](https://github.com/grafana/grafana/pull/134187), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Support legacy paths and diagnose missing source annotations [#&#8203;133225](https://github.com/grafana/grafana/pull/133225), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Surface the finalizer blocking a stuck repository deletion [#&#8203;133241](https://github.com/grafana/grafana/pull/133241), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Treat manager-kind conflicts as warnings [#&#8203;132364](https://github.com/grafana/grafana/pull/132364), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Use resource.action for preview banner title accuracy [#&#8203;131134](https://github.com/grafana/grafana/pull/131134), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** recover from a deleted PR branch (pre-flight + save to new branch) [#&#8203;128977](https://github.com/grafana/grafana/pull/128977), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** render mermaid diagrams in folder README [#&#8203;129096](https://github.com/grafana/grafana/pull/129096), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** tolerate quota lookup failures for existing repositories [#&#8203;131703](https://github.com/grafana/grafana/pull/131703), [@&#8203;ferruvich](https://github.com/ferruvich) - **QueryEditor:** Add extension point to the top toolbar [#&#8203;132289](https://github.com/grafana/grafana/pull/132289), [@&#8203;aocenas](https://github.com/aocenas) - **RBAC:** Allow removing unowned permissions through access-control APIs (Enterprise) - **RBAC:** Document APIs allow removing unowned permissions through access-control APIs [#&#8203;132518](https://github.com/grafana/grafana/pull/132518), [@&#8203;gamab](https://github.com/gamab) - Replace subtitle switch UI string [#&#8203;132965](https://github.com/grafana/grafana/pull/132965), [@&#8203;imatwawana](https://github.com/imatwawana) - **Reports:** say in the report when a variable value no longer exists (Enterprise) - **Sandbox:** Config flag deprecation message [#&#8203;135329](https://github.com/grafana/grafana/pull/135329), [@&#8203;jesdavpet](https://github.com/jesdavpet) - **Sandbox:** Show deprecation warning in UI tooltip (Enterprise) - **Standard options:** Add Ordinal unit. [#&#8203;130091](https://github.com/grafana/grafana/pull/130091), [@&#8203;simonprickett](https://github.com/simonprickett) - **Table:** Calculate column widths independently of scrollbar visibility [#&#8203;134337](https://github.com/grafana/grafana/pull/134337), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Table:** Prevent initial column width jump with vertical scrollbars [#&#8203;133615](https://github.com/grafana/grafana/pull/133615), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **TimeRangePicker:** Default isOnCanvas to true [#&#8203;135833](https://github.com/grafana/grafana/pull/135833), [@&#8203;torkelo](https://github.com/torkelo) - **TopNav:** Logo should not shrink [#&#8203;131170](https://github.com/grafana/grafana/pull/131170), [@&#8203;torkelo](https://github.com/torkelo) - **Trace View:** Open Logs link in a new tab (Drilldown) or in split view (Explore) [#&#8203;132987](https://github.com/grafana/grafana/pull/132987), [@&#8203;matyax](https://github.com/matyax) - **TraceView:** Add Go to span on the header error banner [#&#8203;132550](https://github.com/grafana/grafana/pull/132550), [@&#8203;joey-grafana](https://github.com/joey-grafana) - **TraceView:** Add a trace banner for error and warning spans [#&#8203;132250](https://github.com/grafana/grafana/pull/132250), [@&#8203;joey-grafana](https://github.com/joey-grafana) - **TraceView:** Expand attribute plugin cross-sell promos [#&#8203;131472](https://github.com/grafana/grafana/pull/131472), [@&#8203;joey-grafana](https://github.com/joey-grafana) - **TraceView:** Open the banner span from Go to span and surface exception [#&#8203;133122](https://github.com/grafana/grafana/pull/133122), [@&#8203;joey-grafana](https://github.com/joey-grafana) - **TraceView:** Use design system tokens in the header, minimap and timeline [#&#8203;133339](https://github.com/grafana/grafana/pull/133339), [@&#8203;joey-grafana](https://github.com/joey-grafana) - **TraceView:** Use design system tokens in waterfall rows and span details [#&#8203;133434](https://github.com/grafana/grafana/pull/133434), [@&#8203;joey-grafana](https://github.com/joey-grafana) - **Traces to logs:** Extend support, and discover trace and span related logs from [#&#8203;130515](https://github.com/grafana/grafana/pull/130515), [@&#8203;matyax](https://github.com/matyax) - **Transformations:** Allow setting static refIDs per transformation [#&#8203;131458](https://github.com/grafana/grafana/pull/131458), [@&#8203;Develer](https://github.com/Develer) - **Transformations:** Resolve variables in the classic transformation editor [#&#8203;135569](https://github.com/grafana/grafana/pull/135569), [@&#8203;Develer](https://github.com/Develer) - **UI:** Luxon on by default [#&#8203;134865](https://github.com/grafana/grafana/pull/134865), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Unified storage:** Enable automatic cleanup of deleted resources by default [#&#8203;133330](https://github.com/grafana/grafana/pull/133330), [@&#8203;pstibrany](https://github.com/pstibrany) - **alerting:** Remove method step from import to GMA wizard [#&#8203;130616](https://github.com/grafana/grafana/pull/130616), [@&#8203;rodrigopk](https://github.com/rodrigopk) ##### Bug fixes - **Alerting:** Fix alerts going to the built-in Alertmanager after startup for external-only orgs [#&#8203;134481](https://github.com/grafana/grafana/pull/134481), [@&#8203;gillesdemey](https://github.com/gillesdemey) - **Alerting:** Fix instance rows vanishing at coarse query steps in Triage [#&#8203;133516](https://github.com/grafana/grafana/pull/133516), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Fix notification policy drop and query drift in rule saves [#&#8203;131645](https://github.com/grafana/grafana/pull/131645), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Fix rule groups missing from a folder until "Show more" is clicked [#&#8203;131078](https://github.com/grafana/grafana/pull/131078), [@&#8203;JacobsonMT](https://github.com/JacobsonMT) - **Alerting:** Fix stale dry-run validation and YAML errors in the Import wizard [#&#8203;132707](https://github.com/grafana/grafana/pull/132707), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Fix useAutoSyncConfiguration's queries behind Org Admin + feature toggle [#&#8203;130627](https://github.com/grafana/grafana/pull/130627), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** fix GetManagedRoute returning imported route for unrelated names [#&#8203;132563](https://github.com/grafana/grafana/pull/132563), [@&#8203;JacobsonMT](https://github.com/JacobsonMT) - **Alerting:** reject managed route names with leading/trailing whitespace [#&#8203;132566](https://github.com/grafana/grafana/pull/132566), [@&#8203;JacobsonMT](https://github.com/JacobsonMT) - **Dashboard:** Preserve panel subtitle in V2 save model [#&#8203;133723](https://github.com/grafana/grafana/pull/133723), [@&#8203;adi-IL](https://github.com/adi-IL) - **Dashboards:** Fix Classic model returning v2 JSON when saving a provisioned dashboard [#&#8203;131718](https://github.com/grafana/grafana/pull/131718), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Dashboards:** Fix adhoc and groupby variable datasource on UI import [#&#8203;131817](https://github.com/grafana/grafana/pull/131817), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Dashboards:** Fix browse crash and hangs when a dashboard shares its folder's UID [#&#8203;132634](https://github.com/grafana/grafana/pull/132634), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Dashboards:** Fix edit state props when swapping dashboard state in place [#&#8203;132001](https://github.com/grafana/grafana/pull/132001), [@&#8203;ifrost](https://github.com/ifrost) - **Dashboards:** Fix missing deletion dates in Recently Deleted [#&#8203;133734](https://github.com/grafana/grafana/pull/133734), [@&#8203;pstibrany](https://github.com/pstibrany) - **Dashboards:** Fix query variable refresh reset to onDashboardLoad on v2 UI import [#&#8203;131837](https://github.com/grafana/grafana/pull/131837), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Dashboards:** Keep tags set on a new dashboard when saving it [#&#8203;131459](https://github.com/grafana/grafana/pull/131459), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Dashboards:** Keep variable values and time settings set by an applied spec instead of reverting them to the URL [#&#8203;134200](https://github.com/grafana/grafana/pull/134200), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Dashboards:** Preserve query variable refresh setting on v2 dashboard import [#&#8203;132007](https://github.com/grafana/grafana/pull/132007), [@&#8203;Sergej-Vlasov](https://github.com/Sergej-Vlasov) - **Dashboards:** Show values preview for data source variables in the edit pane [#&#8203;131736](https://github.com/grafana/grafana/pull/131736), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Library panels:** Fix skeleton alignment [#&#8203;133965](https://github.com/grafana/grafana/pull/133965), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **Navigation:** Hide NetworkError when switching organization [#&#8203;131955](https://github.com/grafana/grafana/pull/131955), [@&#8203;AshrithaSB](https://github.com/AshrithaSB) - **Packaging:** Fix issue with bundled plugins not being moved properly [#&#8203;131033](https://github.com/grafana/grafana/pull/131033), [@&#8203;kminehart](https://github.com/kminehart) - **PanelEditor:** Fix options pane not resizable beyond the preview's content width [#&#8203;131581](https://github.com/grafana/grafana/pull/131581), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **Plugins:** Don't report loaded plugins as not registered when a request times out [#&#8203;135591](https://github.com/grafana/grafana/pull/135591), [@&#8203;leventebalogh](https://github.com/leventebalogh) - **Provisioning:** Fix PR dashboard previews when served from a sub-path [#&#8203;132569](https://github.com/grafana/grafana/pull/132569), [@&#8203;gustaff-weldon](https://github.com/gustaff-weldon) - **Provisioning:** Fix folder cleanup and hidden directory scans [#&#8203;135050](https://github.com/grafana/grafana/pull/135050), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Fix folder rename UID collision during full sync [#&#8203;130401](https://github.com/grafana/grafana/pull/130401), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Fix sync step flicker in Git Sync wizard [#&#8203;134108](https://github.com/grafana/grafana/pull/134108), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Reporting:** Fix race condition with repeat panels on the /d-render/ page [#&#8203;128536](https://github.com/grafana/grafana/pull/128536), [@&#8203;mmandrus](https://github.com/mmandrus) - **SQL Expressions:** Read enum fields as their text [#&#8203;135225](https://github.com/grafana/grafana/pull/135225), [@&#8203;nicwestvold](https://github.com/nicwestvold) - **SQL Expressions:** Rename label columns that clash with generated column names [#&#8203;134869](https://github.com/grafana/grafana/pull/134869), [@&#8203;nicwestvold](https://github.com/nicwestvold) - **Security:** Fix CVE-2026-17183 [#&#8203;131061](https://github.com/grafana/grafana/pull/131061), [@&#8203;github-actions\[bot\]](https://github.com/github-actions\[bot]) - **Table:** Fix nested apply-to-row coloring to use the nested frame's own fields [#&#8203;129426](https://github.com/grafana/grafana/pull/129426), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Table:** Fix the height a wrapped header row reserves [#&#8203;132230](https://github.com/grafana/grafana/pull/132230), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Table:** fix JSON cell indentation, styling, and hover reveal [#&#8203;130452](https://github.com/grafana/grafana/pull/130452), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) ##### Breaking changes - **Plugins marketplace:** rename config.ini section from marketplace to plugins_marketplace [#&#8203;132172](https://github.com/grafana/grafana/pull/132172), [@&#8203;xnyo](https://github.com/xnyo) ##### Plugin development fixes & changes - **ConfirmModal:** Ensure focus correctly traps when invoked from a dropdown menu [#&#8203;132764](https://github.com/grafana/grafana/pull/132764), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **Datasources:** Remove deprecated `isDefault` from `DataSourceInstanceListItem` [#&#8203;133886](https://github.com/grafana/grafana/pull/133886), [@&#8203;leventebalogh](https://github.com/leventebalogh) - **GrafanaUI:** Fix focus ring appearance [#&#8203;132808](https://github.com/grafana/grafana/pull/132808), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **MultiCombobox:** Ensure height is consistent between empty/filled states [#&#8203;131255](https://github.com/grafana/grafana/pull/131255), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **Runtime:** Stabilize async data source APIs [#&#8203;134390](https://github.com/grafana/grafana/pull/134390), [@&#8203;leventebalogh](https://github.com/leventebalogh) - **Runtime:** Stabilize plugin settings APIs [#&#8203;134723](https://github.com/grafana/grafana/pull/134723), [@&#8203;leventebalogh](https://github.com/leventebalogh) <!-- 13.3.0 END --> <!-- 13.2.6 START --> ### [`v13.2.6`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1326-2026-11-10) ##### Security - Security: Fix CVE-2026-102589 - Security: Fix CVE-2026-107509 - Security: Fix CVE-2026-110992 - Security: Fix CVE-2026-111024 - Security: Fix CVE-2026-13721 - Security: Fix CVE-2026-14242 ##### Features and enhancements - **DateTime:** Update moment-timezone and easy-tz for 2026 time zone changes [#&#8203;136950](https://github.com/grafana/grafana/pull/136950), [@&#8203;joshhunt](https://github.com/joshhunt) - **Provisioning:** Handle repository build timeouts and branch outages [#&#8203;135723](https://github.com/grafana/grafana/pull/135723), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** allow same-host URL change on connection-backed repositories [#&#8203;137091](https://github.com/grafana/grafana/pull/137091), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) ##### Bug fixes - **Unified search:** Fix empty results when all query words are under 3 chars [#&#8203;137309](https://github.com/grafana/grafana/pull/137309), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) <!-- 13.2.6 END --> <!-- 13.2.5 START --> ### [`v13.2.5`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1325-2026-10-27) ##### Security - Security: Fix CVE-2026-100105 - Security: Fix CVE-2026-103506 - Security: Fix CVE-2026-88858 - Security: Fix CVE-2026-88967 ##### Features and enhancements - **Git Sync:** Ignore hidden paths in repository scans and diffs [#&#8203;135028](https://github.com/grafana/grafana/pull/135028), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Default save from a branch preview to the previewed branch [#&#8203;135174](https://github.com/grafana/grafana/pull/135174), [@&#8203;Clarity-89](https://github.com/Clarity-89) - **Provisioning:** Never replace the repository root folder during incremental sync [#&#8203;135463](https://github.com/grafana/grafana/pull/135463), [@&#8203;ferruvich](https://github.com/ferruvich) ##### Bug fixes - **Plugins:** Don't report loaded plugins as not registered when a request times out [#&#8203;135665](https://github.com/grafana/grafana/pull/135665), [@&#8203;leventebalogh](https://github.com/leventebalogh) - **Provisioning:** Fix PR dashboard previews when served from a sub-path [#&#8203;135559](https://github.com/grafana/grafana/pull/135559), [@&#8203;gustaff-weldon](https://github.com/gustaff-weldon) <!-- 13.2.5 END --> <!-- 13.2.4 START --> ### [`v13.2.4`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1324-2026-10-13) ##### Security - Security: Fix CVE-2026-15577 - Security: Fix CVE-2026-33374 - Security: Fix CVE-2026-93294 - Security: Fix CVE-2026-95502 ##### Features and enhancements - **Alerting:** Strip sensitive headers from oauth2 cross-host redirects [#&#8203;134433](https://github.com/grafana/grafana/pull/134433), [@&#8203;JacobsonMT](https://github.com/JacobsonMT) - **Dashboard:** Fall back when collection deletion is unsupported [#&#8203;134224](https://github.com/grafana/grafana/pull/134224), [@&#8203;bestend](https://github.com/bestend) - **Git Sync:** Clarify repository links for pure Git [#&#8203;134253](https://github.com/grafana/grafana/pull/134253), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Allow resource previews in unsynced folders [#&#8203;134391](https://github.com/grafana/grafana/pull/134391), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Provisioning:** Reject invalid resource names before API calls [#&#8203;133776](https://github.com/grafana/grafana/pull/133776), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Provisioning:** Show last checked time in Pull status [#&#8203;134483](https://github.com/grafana/grafana/pull/134483), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Skip previews for pull requests from forks [#&#8203;133799](https://github.com/grafana/grafana/pull/133799), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Stop PR previews when refs disappear [#&#8203;133855](https://github.com/grafana/grafana/pull/133855), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Support legacy paths and diagnose missing source annotations [#&#8203;133779](https://github.com/grafana/grafana/pull/133779), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Provisioning:** write terminal sync status back to repository on early sync-job failures and Respect Git Sync polling intervals after unchanged refs [#&#8203;134478](https://github.com/grafana/grafana/pull/134478), [@&#8203;mustafasencer](https://github.com/mustafasencer) ##### Bug fixes - **CVE-2026-92539:** IAM: Fix: SCIM (Enterprise) <!-- 13.2.4 END --> <!-- 13.2.3 START --> ### [`v13.2.3`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1323-2026-09-29) ##### Security - Security: Fix CVE-2026-13719 - Security: Fix CVE-2026-13720 - Security: Fix CVE-2026-81841 <!-- 13.2.3 END --> <!-- 13.2.2 START --> ### [`v13.2.2`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1322-2026-09-15) ##### Security - Security: Fix CVE-2026-15815 - Security: Fix CVE-2026-76154 - Security: Fix CVE-2026-79656 ##### Bug fixes - **Dashboards:** Preserve query variable refresh setting on v2 dashboard import [#&#8203;132089](https://github.com/grafana/grafana/pull/132089), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Provisioning:** Fix folder rename UID collision during full sync [#&#8203;132157](https://github.com/grafana/grafana/pull/132157), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) <!-- 13.2.2 END --> <!-- 13.2.1 START --> ### [`v13.2.1`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1321-2026-09-02) ##### Security - Security: Fix CVE-2026-12704 - Security: Fix CVE-2026-14199 ##### Bug fixes - **Dashboards:** Fix adhoc and groupby variable datasource on UI import [#&#8203;131819](https://github.com/grafana/grafana/pull/131819), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Packaging:** Fix issue with bundled plugins not being moved properly [#&#8203;131037](https://github.com/grafana/grafana/pull/131037), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **PanelEditor:** Fix options pane not resizable beyond the preview's content width [#&#8203;131608](https://github.com/grafana/grafana/pull/131608), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) <!-- 13.2.1 END --> <!-- 13.2.0 START --> ### [`v13.2.0`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1320-2026-08-18) ##### Security - CVE-2026-17183 ##### Features and enhancements - **Alerting:** Add Import tab in alerting settings page [#&#8203;129051](https://github.com/grafana/grafana/pull/129051), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Add notification template import to the import-to-GMA wizard [#&#8203;128329](https://github.com/grafana/grafana/pull/128329), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Add promote and auto sync to ImportToGMAWizard [#&#8203;126907](https://github.com/grafana/grafana/pull/126907), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Add staged configuration summary in import settings page [#&#8203;129204](https://github.com/grafana/grafana/pull/129204), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Compute staged config origin server-side [#&#8203;130727](https://github.com/grafana/grafana/pull/130727), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Migrate notifications API to v1beta1 [#&#8203;124702](https://github.com/grafana/grafana/pull/124702), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Recognize "default" and "user-defined" as the default routing tree (1/4) [#&#8203;127880](https://github.com/grafana/grafana/pull/127880), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Recognize "default" and "user-defined" as the default routing tree (2/4) [#&#8203;127881](https://github.com/grafana/grafana/pull/127881), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Recognize "default" and "user-defined" as the default routing tree (3/4) [#&#8203;127883](https://github.com/grafana/grafana/pull/127883), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Recognize "default" and "user-defined" as the default routing tree (4/4) [#&#8203;127884](https://github.com/grafana/grafana/pull/127884), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Return 403 instead of 500 on contact point provenance mismatch [#&#8203;127699](https://github.com/grafana/grafana/pull/127699), [@&#8203;rwwiv](https://github.com/rwwiv) - **Alerting:** Revert a staged import configuration [#&#8203;129243](https://github.com/grafana/grafana/pull/129243), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Show unusable time intervals as disabled in the mute timings selector [#&#8203;130323](https://github.com/grafana/grafana/pull/130323), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** Track import method analytics in import to gma [#&#8203;128142](https://github.com/grafana/grafana/pull/128142), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **Alerting:** remove AlertingCentralHistory FT [#&#8203;130164](https://github.com/grafana/grafana/pull/130164), [@&#8203;konstantinmv](https://github.com/konstantinmv) - **Analytics:** Add public dashboard UID to loki usage insights events (Enterprise) - **Auditing:** Record the user name on user deletion audit logs (Enterprise) - **Azure Monitor:** Cache subscription lookups and collapse double Unmarshal in buildQuery [#&#8203;123556](https://github.com/grafana/grafana/pull/123556), [@&#8203;adamyeats](https://github.com/adamyeats) - **Azure monitor:** Azure Metrics Batch API Implementation backend [#&#8203;123696](https://github.com/grafana/grafana/pull/123696), [@&#8203;bossinc](https://github.com/bossinc) - **CloudWatch Logs:** Add frontend support for querying by data source [#&#8203;123742](https://github.com/grafana/grafana/pull/123742), [@&#8203;kevinwcyu](https://github.com/kevinwcyu) - **ColorScale:** Remove live hoverValue, remove from HeatMap tooltip [#&#8203;128812](https://github.com/grafana/grafana/pull/128812), [@&#8203;leeoniya](https://github.com/leeoniya) - **DashList:** Show dashboard description tooltip when it's available [#&#8203;130006](https://github.com/grafana/grafana/pull/130006), [@&#8203;DeeGeeGit](https://github.com/DeeGeeGit) - **Dashboard:** redirect from dashboard settings tabs to sidebar counterparts [#&#8203;125966](https://github.com/grafana/grafana/pull/125966), [@&#8203;bfmatei](https://github.com/bfmatei) - **Dashboards:** Allow threshold interpolation [#&#8203;128451](https://github.com/grafana/grafana/pull/128451), [@&#8203;mdvictor](https://github.com/mdvictor) - **Dashboards:** Deprecate scripted dashboards and disable them by default [#&#8203;130207](https://github.com/grafana/grafana/pull/130207), [@&#8203;kristinademeshchik](https://github.com/kristinademeshchik) - **Dashboards:** Enable new view panel controls by default [#&#8203;129187](https://github.com/grafana/grafana/pull/129187), [@&#8203;torkelo](https://github.com/torkelo) - **Dashboards:** Increase nesting depth to 4 and allow nested tabs [#&#8203;129174](https://github.com/grafana/grafana/pull/129174), [@&#8203;bfmatei](https://github.com/bfmatei) - **Dashboards:** Show panel query errors and notices in one UI [#&#8203;127436](https://github.com/grafana/grafana/pull/127436), [@&#8203;mdvictor](https://github.com/mdvictor) - **Developer Guide:** Add note about requiring signed commits [#&#8203;127162](https://github.com/grafana/grafana/pull/127162), [@&#8203;gelicia](https://github.com/gelicia) - **Docs:** document the tracing file exporter [#&#8203;129339](https://github.com/grafana/grafana/pull/129339), [@&#8203;leandro-deveikis](https://github.com/leandro-deveikis) - **Explore Logs:** log line highlight color lighten in dark, update deprecated pinned color [#&#8203;130516](https://github.com/grafana/grafana/pull/130516), [@&#8203;L2D2Grafana](https://github.com/L2D2Grafana) - **Folder API:** Replace legacy access control logic with app platform API call [#&#8203;125642](https://github.com/grafana/grafana/pull/125642), [@&#8203;aocenas](https://github.com/aocenas) - **Go:** Update version to 1.26.5 [#&#8203;128011](https://github.com/grafana/grafana/pull/128011), [@&#8203;macabu](https://github.com/macabu) - **GrafanaUI:** Add real magnification effect to GrotNotFound lens [#&#8203;130118](https://github.com/grafana/grafana/pull/130118), [@&#8203;xndcn](https://github.com/xndcn) - **Home:** Enable unified homepage for all users (remove flag) [#&#8203;129054](https://github.com/grafana/grafana/pull/129054), [@&#8203;MattIPv4](https://github.com/MattIPv4) - **Live:** Support redis\:// and rediss\:// (TLS) connection URLs in ha_engine_address [#&#8203;129938](https://github.com/grafana/grafana/pull/129938), [@&#8203;DeeGeeGit](https://github.com/DeeGeeGit) - **Logs:** Add more suggested fields and integrate with the new Logs Table [#&#8203;128002](https://github.com/grafana/grafana/pull/128002), [@&#8203;matyax](https://github.com/matyax) - **Logs:** use gray (dimgray) for debug level color [#&#8203;129896](https://github.com/grafana/grafana/pull/129896), [@&#8203;L2D2Grafana](https://github.com/L2D2Grafana) - **Plugins:** Force TLS 1.3 feature toggle [#&#8203;130390](https://github.com/grafana/grafana/pull/130390), [@&#8203;aangelisc](https://github.com/aangelisc) - **Provisioning (enterprise):** (4/8) Add OAuth app connections for GitLab and Bitbucket (Enterprise) - **Provisioning:** Add Dashboard Previews to GitHub Enterprise [#&#8203;127614](https://github.com/grafana/grafana/pull/127614), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Add Github Enterprise frontend [#&#8203;127209](https://github.com/grafana/grafana/pull/127209), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Add filter for out-of-sync resources in Resources tab [#&#8203;128456](https://github.com/grafana/grafana/pull/128456), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Add option to author commits as the signer [#&#8203;127970](https://github.com/grafana/grafana/pull/127970), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Add resource kind icons to job summary table [#&#8203;127237](https://github.com/grafana/grafana/pull/127237), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Add webhook support for GithubEnterprise (Enterprise) - **Provisioning:** Allow overriding the Git Sync commit author [#&#8203;130547](https://github.com/grafana/grafana/pull/130547), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Attribute jobs to their author and origin [#&#8203;128819](https://github.com/grafana/grafana/pull/128819), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Attribute webhook-created jobs to the sending user (Enterprise) - **Provisioning:** Bitbucket webhook UI [#&#8203;128649](https://github.com/grafana/grafana/pull/128649), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Bitbucket webhooks (Enterprise) - **Provisioning:** Change commit message template to multi-line textarea [#&#8203;128529](https://github.com/grafana/grafana/pull/128529), [@&#8203;cursoragent](https://github.com/cursoragent) - **Provisioning:** Diff Git Sync PR previews against the merge base [#&#8203;128149](https://github.com/grafana/grafana/pull/128149), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Diff GitLab Git Sync PR previews against the merge base (Enterprise) - **Provisioning:** Enable Dashboard Previews for Github Enterprise in UI [#&#8203;127906](https://github.com/grafana/grafana/pull/127906), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Enable Git Sync conventions by default in public preview [#&#8203;130670](https://github.com/grafana/grafana/pull/130670), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Enable Git Sync user attribution by default [#&#8203;130671](https://github.com/grafana/grafana/pull/130671), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Enable Github Enterprise provider by default [#&#8203;128376](https://github.com/grafana/grafana/pull/128376), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Enable Github Enterprise provider by default for enterp… (Enterprise) - **Provisioning:** Exclude SLO-apps from UI in migrate gitops workflow [#&#8203;128961](https://github.com/grafana/grafana/pull/128961), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Exclude SLO-managed dashboards from being exported [#&#8203;128815](https://github.com/grafana/grafana/pull/128815), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** GitLab webhooks (backend) [#&#8203;127204](https://github.com/grafana/grafana/pull/127204), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Improve Git Sync pull-request comment [#&#8203;128100](https://github.com/grafana/grafana/pull/128100), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Improve form errors for github connections [#&#8203;128133](https://github.com/grafana/grafana/pull/128133), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Link folder metadata and deleted files in PR comments [#&#8203;128895](https://github.com/grafana/grafana/pull/128895), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Make Migrate to GitOps resource-agnostic for playlists [#&#8203;127028](https://github.com/grafana/grafana/pull/127028), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Make Resources tab tree foldable [#&#8203;128453](https://github.com/grafana/grafana/pull/128453), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Paginate the Migrate to GitOps resources table [#&#8203;128042](https://github.com/grafana/grafana/pull/128042), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Pretty-print generated \_folder.json [#&#8203;127947](https://github.com/grafana/grafana/pull/127947), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Show folder path in Migrate resources list [#&#8203;128454](https://github.com/grafana/grafana/pull/128454), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Show job author and origin in recent jobs [#&#8203;128820](https://github.com/grafana/grafana/pull/128820), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Show job errors in Migrate to GitOps drawer [#&#8203;127936](https://github.com/grafana/grafana/pull/127936), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Show sync status for playlists in Resources tab [#&#8203;127021](https://github.com/grafana/grafana/pull/127021), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Show who triggered repository jobs [#&#8203;127984](https://github.com/grafana/grafana/pull/127984), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Surface github error details [#&#8203;128059](https://github.com/grafana/grafana/pull/128059), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** UI to set branch when migrating grafana -> gitops [#&#8203;128562](https://github.com/grafana/grafana/pull/128562), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** adapt GitLab to the provider-agnostic webhook lifecycle (Enterprise) - **Provisioning:** add "View repository" link next to provisioned badges [#&#8203;127409](https://github.com/grafana/grafana/pull/127409), [@&#8203;ywzheng1](https://github.com/ywzheng1) - **Provisioning:** add ability to force full pull instead of incremental sync [#&#8203;128330](https://github.com/grafana/grafana/pull/128330), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** add option to disable webhook in repository and connection [#&#8203;126790](https://github.com/grafana/grafana/pull/126790), [@&#8203;Shubham19032004](https://github.com/Shubham19032004) - **Provisioning:** add provider logo to repository page title [#&#8203;127223](https://github.com/grafana/grafana/pull/127223), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** allow Git Sync option for root-level saves and new folders in folderless mode [#&#8203;127399](https://github.com/grafana/grafana/pull/127399), [@&#8203;Shubham19032004](https://github.com/Shubham19032004) - **Provisioning:** implement GitLab webhooks (Enterprise) - **Provisioning:** link Git Sync PR footer to repo admin page [#&#8203;128353](https://github.com/grafana/grafana/pull/128353), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** make sync per-resource write timeout configurable [#&#8203;127862](https://github.com/grafana/grafana/pull/127862), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** regenerate token when its secret is missing [#&#8203;127878](https://github.com/grafana/grafana/pull/127878), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** show webhook UI for GitLab repositories [#&#8203;127806](https://github.com/grafana/grafana/pull/127806), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** support migrating to a selected branch [#&#8203;128356](https://github.com/grafana/grafana/pull/128356), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **QueryVariable:** Redesign the query variable editor [#&#8203;127048](https://github.com/grafana/grafana/pull/127048), [@&#8203;grafakus](https://github.com/grafakus) - **Reports:** support template variables without a type allowlist (Enterprise) - **SQLite:** Revert the journal mode when wal is disabled [#&#8203;130695](https://github.com/grafana/grafana/pull/130695), [@&#8203;pstibrany](https://github.com/pstibrany) - **Table:** Make cell tooltips dynamic height so content is not cut off [#&#8203;127107](https://github.com/grafana/grafana/pull/127107), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Trace View:** Check for the existence of logs when showing the trace-to-logs button [#&#8203;128702](https://github.com/grafana/grafana/pull/128702), [@&#8203;matyax](https://github.com/matyax) - **Tracing:** add file exporter to write traces as OTLP/JSON [#&#8203;128679](https://github.com/grafana/grafana/pull/128679), [@&#8203;leandro-deveikis](https://github.com/leandro-deveikis) - **Transformations:** Keep Merge series/tables available with a single data series [#&#8203;129569](https://github.com/grafana/grafana/pull/129569), [@&#8203;nicwestvold](https://github.com/nicwestvold) - **Unified Storage:** set garbage collection dry run default to false [#&#8203;130533](https://github.com/grafana/grafana/pull/130533), [@&#8203;filewalkwithme](https://github.com/filewalkwithme) - **ViewPanel:** Url sync for fanout option [#&#8203;128270](https://github.com/grafana/grafana/pull/128270), [@&#8203;torkelo](https://github.com/torkelo) - **alerting:** allow import to gma wizard navigation for non admin users when sync is not active [#&#8203;127818](https://github.com/grafana/grafana/pull/127818), [@&#8203;rodrigopk](https://github.com/rodrigopk) - **provisioning:** allow authoring commits as the signer [#&#8203;127969](https://github.com/grafana/grafana/pull/127969), [@&#8203;amalavet](https://github.com/amalavet) ##### Bug fixes - \*\* Gauge:\*\* Fix gradient stops out of order for negative thresholds [#&#8203;128532](https://github.com/grafana/grafana/pull/128532), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Accessibility:** Ensure `InlineToast` contents are announced by screenreaders [#&#8203;128488](https://github.com/grafana/grafana/pull/128488), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **Accessibility:** Properly announce section headings on variable edit pages [#&#8203;130706](https://github.com/grafana/grafana/pull/130706), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **Alerting:** Check managed routes when deleting a time interval [#&#8203;129247](https://github.com/grafana/grafana/pull/129247), [@&#8203;JacobsonMT](https://github.com/JacobsonMT) - **Alerting:** Fix alert rule detail showing "Inhibited" when nothing is inhibited [#&#8203;130264](https://github.com/grafana/grafana/pull/130264), [@&#8203;petergreen86](https://github.com/petergreen86) - **Alerting:** Fix reset default route wiping provenance for all managed routes [#&#8203;130553](https://github.com/grafana/grafana/pull/130553), [@&#8203;JacobsonMT](https://github.com/JacobsonMT) - **Auth:** Deduplicate concurrent login pings [#&#8203;129927](https://github.com/grafana/grafana/pull/129927), [@&#8203;cipher416](https://github.com/cipher416) - **Auth:** Skip session token rotation when request is not session authenticated [#&#8203;129920](https://github.com/grafana/grafana/pull/129920), [@&#8203;thejamesgore](https://github.com/thejamesgore) - **Azure Monitor:** fix migration for dimension filters [#&#8203;128786](https://github.com/grafana/grafana/pull/128786), [@&#8203;olivierlemasle](https://github.com/olivierlemasle) - **Dashboard scene:** Activate edit pane for programmatic panel mutations [#&#8203;128433](https://github.com/grafana/grafana/pull/128433), [@&#8203;ivanortegaalba](https://github.com/ivanortegaalba) - **DashboardDS:** Fix chained dashboard datasource panels showing stale data [#&#8203;126378](https://github.com/grafana/grafana/pull/126378), [@&#8203;oscarkilhed](https://github.com/oscarkilhed) - **Dashboards:** Fix loading indicator not clipping to panel border radius [#&#8203;128040](https://github.com/grafana/grafana/pull/128040), [@&#8203;hckhanh](https://github.com/hckhanh) - **Dashboards:** Fixes panel header spacing issues [#&#8203;128910](https://github.com/grafana/grafana/pull/128910), [@&#8203;torkelo](https://github.com/torkelo) - **DataSourcePicker:** Fix selected datasource not being highlighted [#&#8203;126948](https://github.com/grafana/grafana/pull/126948), [@&#8203;mikkancso](https://github.com/mikkancso) - **Fix:** Parse epoch ms strings correctly to prevent NaN in Postgres queries [#&#8203;122693](https://github.com/grafana/grafana/pull/122693), [@&#8203;Tarasusrus](https://github.com/Tarasusrus) - **Logs Table:** Fix data export by passing the raw table frame [#&#8203;130245](https://github.com/grafana/grafana/pull/130245), [@&#8203;matyax](https://github.com/matyax) - **Logs Table:** Fix missing results when logs stream [#&#8203;128870](https://github.com/grafana/grafana/pull/128870), [@&#8203;matyax](https://github.com/matyax) - **Logs Table:** Fix mixed usage of field name and display name [#&#8203;128677](https://github.com/grafana/grafana/pull/128677), [@&#8203;matyax](https://github.com/matyax) - **Logs Table:** Fix sticky filter after closing details [#&#8203;128398](https://github.com/grafana/grafana/pull/128398), [@&#8203;matyax](https://github.com/matyax) - **Navigation:** Inject orgId into all navigations [#&#8203;120978](https://github.com/grafana/grafana/pull/120978), [@&#8203;QuentinBisson](https://github.com/QuentinBisson) - **PostgreSQL:** Fix data source init failure when maxOpenConns=0 [#&#8203;122556](https://github.com/grafana/grafana/pull/122556), [@&#8203;Tarasusrus](https://github.com/Tarasusrus) - **Provisioning:** Disable next button until a branch is selected in the Git Sync wizard [#&#8203;127973](https://github.com/grafana/grafana/pull/127973), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Export v0 dashboards as v1 so synced files load [#&#8203;128357](https://github.com/grafana/grafana/pull/128357), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Fix NPE when testing GHE repo on creation [#&#8203;127207](https://github.com/grafana/grafana/pull/127207), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Fix blank Action for deleted resources in PR comment [#&#8203;128522](https://github.com/grafana/grafana/pull/128522), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Fix customServerURL resolution for GHE [#&#8203;127113](https://github.com/grafana/grafana/pull/127113), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Fix enforced branch name template dropping ref on save [#&#8203;130163](https://github.com/grafana/grafana/pull/130163), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Fix job user attribution in multi-tenant deployments [#&#8203;129598](https://github.com/grafana/grafana/pull/129598), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Fix multi-org usage stats [#&#8203;127465](https://github.com/grafana/grafana/pull/127465), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** Fix selective export quota counting whole namespace [#&#8203;127927](https://github.com/grafana/grafana/pull/127927), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Keep migrate reachable when connected repo can't push [#&#8203;127921](https://github.com/grafana/grafana/pull/127921), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Only regenerate folder UIDs for folder/folderless migrations [#&#8203;127925](https://github.com/grafana/grafana/pull/127925), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** Preserve the original creator on job history records [#&#8203;128712](https://github.com/grafana/grafana/pull/128712), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** Set FileToLarge error as warning instead of error [#&#8203;128822](https://github.com/grafana/grafana/pull/128822), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Strip deprecatedInternalId label for dashboards [#&#8203;128530](https://github.com/grafana/grafana/pull/128530), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** Use neutral fallback in the jobs Triggered by column [#&#8203;128238](https://github.com/grafana/grafana/pull/128238), [@&#8203;amalavet](https://github.com/amalavet) - **Provisioning:** abort in-flight worker when job lease is lost [#&#8203;127792](https://github.com/grafana/grafana/pull/127792), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** don't stamp a folder on org-scoped resources when writing [#&#8203;127142](https://github.com/grafana/grafana/pull/127142), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** drop stale and duplicate watch events in the frontend list cache [#&#8203;128766](https://github.com/grafana/grafana/pull/128766), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** fix zero-margin job lease renewal, raise claim expiry to 60s [#&#8203;127786](https://github.com/grafana/grafana/pull/127786), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** make GitHub webhook creation idempotent (fix repos stuck unhealthy with HTTP 422) [#&#8203;128068](https://github.com/grafana/grafana/pull/128068), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** normalize folder titles into safe export paths [#&#8203;127946](https://github.com/grafana/grafana/pull/127946), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** only push variable changes to git if save variables is … [#&#8203;128818](https://github.com/grafana/grafana/pull/128818), [@&#8203;floriecai](https://github.com/floriecai) - **Provisioning:** retry connection status patch conflicts [#&#8203;127754](https://github.com/grafana/grafana/pull/127754), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** tolerate NotFound in expired job cleanup for multi-pod [#&#8203;127753](https://github.com/grafana/grafana/pull/127753), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Provisioning:** treat skip-delete of resource owned by another file as a warning [#&#8203;129029](https://github.com/grafana/grafana/pull/129029), [@&#8203;ferruvich](https://github.com/ferruvich) - **Provisioning:** verify claim ownership so two pods don't run the same job [#&#8203;127783](https://github.com/grafana/grafana/pull/127783), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) - **Reporting:** batch dashboard lookups when listing reports (Enterprise) - **Secrets:** Fix RBAC gate on AWS keeper creation route (Enterprise) - **SqlExpressions:** Fix parsing for Table Names with spaces [#&#8203;117615](https://github.com/grafana/grafana/pull/117615), [@&#8203;NWRichmond](https://github.com/NWRichmond) - **Table:** Fix apply to entire row when multiple columns enable it [#&#8203;128527](https://github.com/grafana/grafana/pull/128527), [@&#8203;fastfrwrd](https://github.com/fastfrwrd) - **Transformations:** Fix Filter by value regex matching null values [#&#8203;129572](https://github.com/grafana/grafana/pull/129572), [@&#8203;nicwestvold](https://github.com/nicwestvold) - **Transformations:** Fix field lookup failing for the Countries and USA States gazetteers [#&#8203;129568](https://github.com/grafana/grafana/pull/129568), [@&#8203;nicwestvold](https://github.com/nicwestvold) - **Transformations:** Fix field name deduplication in Extract fields [#&#8203;129889](https://github.com/grafana/grafana/pull/129889), [@&#8203;nicwestvold](https://github.com/nicwestvold) - **Transformations:** Fix inner join returning rows when a frame is dropped [#&#8203;129576](https://github.com/grafana/grafana/pull/129576), [@&#8203;nicwestvold](https://github.com/nicwestvold) - **fix:** fix panic for unimplemented gitlab webhook repo (Enterprise) ##### Breaking changes - **Alerting:** Remove alertingSaveStateCompressed feature flag [#&#8203;129135](https://github.com/grafana/grafana/pull/129135), [@&#8203;yuri-tceretian](https://github.com/yuri-tceretian) ##### Plugin development fixes & changes - **Combobox:** Fix duplicate async requests and stale errors overwriting fresh options [#&#8203;129788](https://github.com/grafana/grafana/pull/129788), [@&#8203;joshhunt](https://github.com/joshhunt) - **PageLoader:** Expose in [@&#8203;grafana/ui](https://github.com/grafana/ui) and apply custom branding automatically [#&#8203;124597](https://github.com/grafana/grafana/pull/124597), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **Pagination:** Set `aria-current` on active page [#&#8203;128494](https://github.com/grafana/grafana/pull/128494), [@&#8203;ashharrison90](https://github.com/ashharrison90) - **Tag:** Fix crash when picking an out of bounds `colorIndex` [#&#8203;129579](https://github.com/grafana/grafana/pull/129579), [@&#8203;ashharrison90](https://github.com/ashharrison90) <!-- 13.2.0 END --> <!-- 13.1.10 START --> ### [`v13.1.10`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#13110-2026-11-10) ##### Security - Security: Fix CVE-2026-102589 - Security: Fix CVE-2026-106472 - Security: Fix CVE-2026-107365 - Security: Fix CVE-2026-107509 - Security: Fix CVE-2026-110992 - Security: Fix CVE-2026-111024 - Security: Fix CVE-2026-13721 - Security: Fix CVE-2026-14242 ##### Features and enhancements - **Provisioning:** allow same-host URL change on connection-backed repositories [#&#8203;137090](https://github.com/grafana/grafana/pull/137090), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) <!-- 13.1.10 END --> <!-- 13.1.9 START --> ### [`v13.1.9`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1319-2026-10-27) ##### Security - Security: Fix CVE-2026-100105 - Security: Fix CVE-2026-88858 - Security: Fix CVE-2026-88967 ##### Features and enhancements - **Provisioning:** Default save from a branch preview to the previewed branch [#&#8203;135175](https://github.com/grafana/grafana/pull/135175), [@&#8203;Clarity-89](https://github.com/Clarity-89) <!-- 13.1.9 END --> <!-- 13.1.8 START --> ### [`v13.1.8`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1318-2026-10-13) ##### Security - Security: Fix CVE-2026-15577 - Security: Fix CVE-2026-33374 - Security: Fix CVE-2026-93294 - Security: Fix CVE-2026-95502 ##### Features and enhancements - **Alerting:** Strip sensitive headers from oauth2 cross-host redirects [#&#8203;134428](https://github.com/grafana/grafana/pull/134428), [@&#8203;JacobsonMT](https://github.com/JacobsonMT) - **Dashboard:** Fall back when collection deletion is unsupported [#&#8203;134225](https://github.com/grafana/grafana/pull/134225), [@&#8203;bestend](https://github.com/bestend) ##### Bug fixes - **CVE-2026-92539:** IAM: Fix: SCIM (Enterprise) <!-- 13.1.8 END --> <!-- 13.1.7 START --> ### [`v13.1.7`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1317-2026-09-29) ##### Security - Security: Fix CVE-2026-13719 - Security: Fix CVE-2026-13720 - Security: Fix CVE-2026-81841 <!-- 13.1.7 END --> <!-- 13.1.6 START --> ### [`v13.1.6`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1316-2026-09-15) ##### Security - Security: Fix CVE-2026-15815 - Security: Fix CVE-2026-76154 - Security: Fix CVE-2026-79656 ##### Bug fixes - **Dashboards:** Preserve query variable refresh setting on v2 dashboard import [#&#8203;132090](https://github.com/grafana/grafana/pull/132090), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Provisioning:** Fix folder rename UID collision during full sync [#&#8203;132164](https://github.com/grafana/grafana/pull/132164), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) <!-- 13.1.6 END --> <!-- 13.1.5 START --> ### [`v13.1.5`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1315-2026-09-02) ##### Security - Security: Fix CVE-2026-12704 - Security: Fix CVE-2026-14199 - Security: Fix CVE-2026-19475 <!-- 13.1.5 END --> <!-- 13.1.4 START --> ### [`v13.1.4`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1314-2026-08-18) ##### Security - CVE-2026-17183 ##### Bug fixes - **Reporting:** batch dashboard lookups when listing reports (Enterprise) <!-- 13.1.4 END --> <!-- 13.1.3 START --> ### [`v13.1.3`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1313-2026-08-07) <!-- 13.1.3 END --> <!-- 13.1.2 START --> ### [`v13.1.2`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#1312-2026-08-04) ##### Bug fixes - **Logs Table:** Fix missing results when logs stream [#&#8203;128946](https://github.com/grafana/grafana/pull/128946), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Logs Table:** Fix mixed usage of field name and display name [#&#8203;128698](https://github.com/grafana/grafana/pull/128698), [@&#8203;grafana-writer\[bot\]](https://github.com/grafana-writer\[bot]) - **Security**: Fix CVE-2026-13438 <!-- 13.1.2 END --> <!-- 13.1.1 START --> ### [`v13.1.1`](https://github.com/grafana/grafana/blob/HEAD/CHANGELOG.md#13110-2026-11-10) ##### Security - Security: Fix CVE-2026-102589 - Security: Fix CVE-2026-106472 - Security: Fix CVE-2026-107365 - Security: Fix CVE-2026-107509 - Security: Fix CVE-2026-110992 - Security: Fix CVE-2026-111024 - Security: Fix CVE-2026-13721 - Security: Fix CVE-2026-14242 ##### Features and enhancements - **Provisioning:** allow same-host URL change on connection-backed repositories [#&#8203;137090](https://github.com/grafana/grafana/pull/137090), [@&#8203;MissingRoberto](https://github.com/MissingRoberto) <!-- 13.1.10 END --> <!-- 13.1.9 START --> </details> <details> <summary>redis/docker-library-redis (docker.io/library/redis)</summary> ### [`v8.10.3`](https://github.com/redis/docker-library-redis/compare/v8.10.2...v8.10.3) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.10.2...v8.10.3) ### [`v8.10.2`](https://github.com/redis/docker-library-redis/compare/v8.10.1...v8.10.2) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.10.1...v8.10.2) ### [`v8.10.1`](https://github.com/redis/docker-library-redis/compare/v8.10.0...v8.10.1) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.10.0...v8.10.1) ### [`v8.10.0`](https://github.com/redis/docker-library-redis/compare/v8.8.4...v8.10.0) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.8.4...v8.10.0) ### [`v8.8.4`](https://github.com/redis/docker-library-redis/compare/v8.8.3...v8.8.4) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.8.3...v8.8.4) ### [`v8.8.3`](https://github.com/redis/docker-library-redis/compare/v8.8.2...v8.8.3) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.8.2...v8.8.3) ### [`v8.8.2`](https://github.com/redis/docker-library-redis/compare/v8.8.1...v8.8.2) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.8.1...v8.8.2) ### [`v8.8.1`](https://github.com/redis/docker-library-redis/compare/v8.8.0...v8.8.1) [Compare Source](https://github.com/redis/docker-library-redis/compare/v8.8.0...v8.8.1) </details> <details> <summary>prometheus/alertmanager (docker.io/prom/alertmanager)</summary> ### [`v0.35.0`](https://github.com/prometheus/alertmanager/releases/tag/v0.35.0): 0.35.0 / 2026-11-09 [Compare Source](https://github.com/prometheus/alertmanager/compare/v0.34.2...v0.35.0) - \[CHANGE] Promote the `auto-gomemlimit` feature flag to the `--auto-gomemlimit` command-line flag. This is a breaking change: the `--enable-feature=auto-gomemlimit` option has been removed. [#&#8203;5464](https://github.com/prometheus/alertmanager/issues/5464) - \[CHANGE] Remove the deprecated `types` package in favor of the `alert` package. [#&#8203;5585](https://github.com/prometheus/alertmanager/issues/5585) - \[CHANGE] eventrecorder: Every output now requires a `name`. This is a breaking change: configurations with unnamed outputs fail to load. The name identifies the output in metrics and logs instead of its URL, broker or topic. [#&#8203;5393](https://github.com/prometheus/alertmanager/issues/5393) - \[CHANGE] eventrecorder: The output data format now uses the new `events/v2` schema. This is a breaking change: alert labels, alert annotations, group labels, silence annotations, and muted-alert labels are JSON maps, and protobuf consumers must use the new schema. [#&#8203;5409](https://github.com/prometheus/alertmanager/issues/5409), [#&#8203;5500](https://github.com/prometheus/alertmanager/issues/5500) - \[FEATURE] Add a distroless container image. [#&#8203;5258](https://github.com/prometheus/alertmanager/issues/5258) - \[FEATURE] amtool: Look up the default config file in `%APPDATA%` and `%ProgramData%` on Windows. [#&#8203;5073](https://github.com/prometheus/alertmanager/issues/5073) - \[FEATURE] api: Add an experimental ConnectRPC API served alongside `/api/v2/` under the version-neutral `/api/` prefix, exposing the Connect, gRPC, and gRPC-Web protocols plus the gRPC Health Checking Protocol and server reflection. The first service is `status.v3.StatusService`. [#&#8203;5377](https://github.com/prometheus/alertmanager/issues/5377), [#&#8203;5506](https://github.com/prometheus/alertmanager/issues/5506), [#&#8203;5507](https://github.com/prometheus/alertmanager/issues/5507), [#&#8203;5508](https://github.com/prometheus/alertmanager/issues/5508), [#&#8203;5509](https://github.com/prometheus/alertmanager/issues/5509) - \[FEATURE] incidentio: Add templated `metadata` field. [#&#8203;5022](https://github.com/prometheus/alertmanager/issues/5022) - \[FEATURE] pagerduty: Report more specific failure reasons in `alertmanager_notifications_failed_total`. [#&#8203;5659](https://github.com/prometheus/alertmanager/issues/5659) - \[FEATURE] rocketchat: Add `message_text` option to set the message text shown in desktop and push notifications. [#&#8203;5595](https://github.com/prometheus/alertmanager/issues/5595) - \[FEATURE] slack: Add `post_updates_to_thread` option to post subsequent notifications of an alert group as replies in the thread of the initial message. [#&#8203;5540](https://github.com/prometheus/alertmanager/issues/5540) - \[FEATURE] telegram: Add `timeout` option to limit how long a notification request may take. [#&#8203;5127](https://github.com/prometheus/alertmanager/issues/5127) - \[FEATURE] telegram: Count only visible HTML text toward the message length limit, excluding link URLs. [#&#8203;5499](https://github.com/prometheus/alertmanager/issues/5499) - \[FEATURE] template: Add `addDuration` function to shift a timestamp by a duration such as `-30m` and return it in Unix milliseconds. [#&#8203;5550](https://github.com/prometheus/alertmanager/issues/5550) - \[FEATURE] template: Allow the `join` function to accept slices and arrays of any type. [#&#8203;5233](https://github.com/prometheus/alertmanager/issues/5233) - \[FEATURE] timeinterval: Allow weekday ranges to wrap around the end of the week, e.g. `friday:monday`. [#&#8203;5579](https://github.com/prometheus/alertmanager/issues/5579) - \[FEATURE] ui: Make the creator and comment of a silence optional, matching the API. [#&#8203;5471](https://github.com/prometheus/alertmanager/issues/5471) - \[FEATURE] ui: Serve the new Mantine UI at `/ui/` alongside the existing UI. [#&#8203;5502](https://github.com/prometheus/alertmanager/issues/5502), [#&#8203;5538](https://github.com/prometheus/alertmanager/issues/5538), [#&#8203;5539](https://github.com/prometheus/alertmanager/issues/5539), [#&#8203;5537](https://github.com/prometheus/alertmanager/issues/5537) - \[ENHANCEMENT] Compute alert fingerprints once at ingestion instead of on every mute check, reducing CPU usage and allocations. [#&#8203;5583](https://github.com/prometheus/alertmanager/issues/5583) - \[ENHANCEMENT] api: Speed up `/api/v2/alerts/groups` by evaluating mutes only once per alert and group. [#&#8203;5674](https://github.com/prometheus/alertmanager/issues/5674) - \[ENHANCEMENT] cluster: Fix the `memeberlist` typo in error messages. [#&#8203;5472](https://github.com/prometheus/alertmanager/issues/5472) - \[ENHANCEMENT] docs: Add a Gotify example using a custom webhook payload. [#&#8203;5408](https://github.com/prometheus/alertmanager/issues/5408), [#&#8203;5498](https://github.com/prometheus/alertmanager/issues/5498) - \[ENHANCEMENT] docs: Add a reusable HTML email template example. [#&#8203;5391](https://github.com/prometheus/alertmanager/issues/5391) - \[ENHANCEMENT] docs: Clarify the usage of the KV `Remove` template function. [#&#8203;5297](https://github.com/prometheus/alertmanager/issues/5297) - \[ENHANCEMENT] docs: Clarify which route options are inherited by child routes. [#&#8203;5565](https://github.com/prometheus/alertmanager/issues/5565) - \[ENHANCEMENT] docs: Correct the PagerDuty default config. [#&#8203;5397](https://github.com/prometheus/alertmanager/issues/5397) - \[ENHANCEMENT] docs: Document OAuth2 support in the `http_config` of `jira_config`. [#&#8203;5571](https://github.com/prometheus/alertmanager/issues/5571) - \[ENHANCEMENT] docs: Document VictorOps custom fields. [#&#8203;5399](https://github.com/prometheus/alertmanager/issues/5399) - \[ENHANCEMENT] docs: Document `project` and `issue_type` in `jira_config` as templated strings. [#&#8203;5549](https://github.com/prometheus/alertmanager/issues/5549) - \[ENHANCEMENT] docs: Document `victorops_api_key` and `victorops_api_key_file` in the global config. [#&#8203;5168](https://github.com/prometheus/alertmanager/issues/5168) - \[ENHANCEMENT] docs: Fix `rocketchat_config` defaults and field types. [#&#8203;5591](https://github.com/prometheus/alertmanager/issues/5591) - \[ENHANCEMENT] docs: Fix the `tracing` config key, which was misspelled as `traciing`. [#&#8203;5437](https://github.com/prometheus/alertmanager/issues/5437) - \[ENHANCEMENT] notify: Add the receiver name to the log message for failed notifications. [#&#8203;5401](https://github.com/prometheus/alertmanager/issues/5401) - \[ENHANCEMENT] silences: Reduce allocations when computing the `alertmanager_silences` metric. [#&#8203;5460](https://github.com/prometheus/alertmanager/issues/5460) - \[ENHANCEMENT] victorops: Use Splunk On-Call branding in documentation and error messages without renaming configuration fields. [#&#8203;5402](https://github.com/prometheus/alertmanager/issues/5402) - \[BUGFIX] api: Report alerts muted by time intervals as of the time of the request instead of the last group flush, matching silences and inhibitions. [#&#8203;5661](https://github.com/prometheus/alertmanager/issues/5661) - \[BUGFIX] cluster: Downgrade memberlist to v0.5.4 to fix `Failed to read remote state: user state length (...) exceeds limit` errors. [#&#8203;5640](https://github.com/prometheus/alertmanager/issues/5640) - \[BUGFIX] config: Fix merging of global configs for the smtp, opsgenie, victorops and rocketchat notifiers. [#&#8203;5448](https://github.com/prometheus/alertmanager/issues/5448), [#&#8203;5457](https://github.com/prometheus/alertmanager/issues/5457) - \[BUGFIX] discord: Retry notifications on HTTP 429 (rate limited) instead of dropping them. [#&#8203;5496](https://github.com/prometheus/alertmanager/issues/5496) - \[BUGFIX] httpserver: Fix the `/-/reload` endpoint getting stuck when the client cancels the request. [#&#8203;5234](https://github.com/prometheus/alertmanager/issues/5234) - \[BUGFIX] notify: Wait the full backoff interval before retrying a notification that failed slowly. [#&#8203;5497](https://github.com/prometheus/alertmanager/issues/5497), [#&#8203;5389](https://github.com/prometheus/alertmanager/issues/5389), [#&#8203;5553](https://github.com/prometheus/alertmanager/issues/5553) - \[BUGFIX] opsgenie: Respect the notification timeout and tracing span for the update-message request sent when `update_alerts` is enabled. [#&#8203;5465](https://github.com/prometheus/alertmanager/issues/5465) - \[BUGFIX] pagerduty: Report the failure reason of Events API v1 requests in `alertmanager_notifications_failed_total` instead of `reason="other"`. [#&#8203;5505](https://github.com/prometheus/alertmanager/issues/5505) - \[BUGFIX] pushover: Trim whitespace from `token_file` and `user_key_file` contents so keys stored in files with a trailing newline are accepted. [#&#8203;5590](https://github.com/prometheus/alertmanager/issues/5590) - \[BUGFIX] silences: Treat a silence as expired at exactly its end time, consistent with the API. [#&#8203;5665](https://github.com/prometheus/alertmanager/issues/5665) - \[BUGFIX] silences: Use a single evaluation time for each read or write of silences. [#&#8203;5666](https://github.com/prometheus/alertmanager/issues/5666) - \[BUGFIX] slack: Avoid a panic when `update_message` relies on `global.slack_api_url`. [#&#8203;5589](https://github.com/prometheus/alertmanager/issues/5589) - \[BUGFIX] slack: Retry notifications on HTTP 429 (rate limited) and honor the `Retry-After` header instead of dropping them. [#&#8203;5048](https://github.com/prometheus/alertmanager/issues/5048) - \[BUGFIX] telegram: Redact the bot token from logged notification errors. [#&#8203;5254](https://github.com/prometheus/alertmanager/issues/5254) - \[BUGFIX] telegram: Report the failure reason in `alertmanager_notifications_failed_total`. [#&#8203;5375](https://github.com/prometheus/alertmanager/issues/5375) - \[BUGFIX] template: Preserve quoted numeric strings as strings in templated JSON fields. [#&#8203;5098](https://github.com/prometheus/alertmanager/issues/5098) - \[BUGFIX] timeinterval: Fix negative `days_of_month` resolving one day early in months with a DST transition. [#&#8203;5447](https://github.com/prometheus/alertmanager/issues/5447) - \[BUGFIX] timeinterval: Reject month numbers outside 1-12. [#&#8203;5626](https://github.com/prometheus/alertmanager/issues/5626) - \[BUGFIX] webex: Fix a panic when truncating long notifications containing non-ASCII characters. [#&#8203;5544](https://github.com/prometheus/alertmanager/issues/5544) - \[BUGFIX] webex: Retry notifications on HTTP 429 (rate limited) and honor the `Retry-After` header instead of dropping them. [#&#8203;5548](https://github.com/prometheus/alertmanager/issues/5548) - \[BUGFIX] wechat: Report template errors in `corp_id` and `api_secret` instead of sending a token request with empty values. [#&#8203;5688](https://github.com/prometheus/alertmanager/issues/5688) ### [`v0.34.2`](https://github.com/prometheus/alertmanager/releases/tag/v0.34.2): 0.34.2 / 2026-10-29 [Compare Source](https://github.com/prometheus/alertmanager/compare/v0.34.1...v0.34.2) - \[SECURITY] api: Alertmanager no longer sends CORS headers by default. This means `api/v2` now disallows cross-origin requests. This is a breaking change. The new `--web.cors.origin` flag can be used to restore the previous behaviour. [#&#8203;5664](https://github.com/prometheus/alertmanager/issues/5664) - \[SECURITY] Build with Go 1.26.10, which distrusts the eight compromised eMudhra intermediate CA certificates in `crypto/x509`. CVE-2026-111943 ### [`v0.34.1`](https://github.com/prometheus/alertmanager/releases/tag/v0.34.1): 0.34.1 / 2026-09-17 [Compare Source](https://github.com/prometheus/alertmanager/compare/v0.34.0...v0.34.1) - \[BUGFIX] inhibit: Fix several issues related to inhibitions that caused alerts to be improperly un-muted in some cases. [#&#8203;5542](https://github.com/prometheus/alertmanager/issues/5542), [#&#8203;5449](https://github.com/prometheus/alertmanager/issues/5449), [#&#8203;5559](https://github.com/prometheus/alertmanager/issues/5559) ### [`v0.34.0`](https://github.com/prometheus/alertmanager/releases/tag/v0.34.0): 0.34.0 / 2026-08-16 [Compare Source](https://github.com/prometheus/alertmanager/compare/v0.33.1...v0.34.0) - \[CHANGE] notify: The `reason` label on `alertmanager_notifications_failed_total` now distinguishes `authError` (HTTP 401/403) and `rateLimited` (HTTP 429) from the generic `clientError`. Dashboards/alerts matching `reason="clientError"` for these codes must be updated. [#&#8203;5332](https://github.com/prometheus/alertmanager/issues/5332) - \[FEATURE] Add optional templatable labels to alert routes. [#&#8203;5328](https://github.com/prometheus/alertmanager/issues/5328) - \[FEATURE] eventrecorder: Add inhibit rule names to `inhibition_muted_alert` events. [#&#8203;5315](https://github.com/prometheus/alertmanager/issues/5315) - \[FEATURE] eventrecorder: Add stdout output type. [#&#8203;5311](https://github.com/prometheus/alertmanager/issues/5311) - \[FEATURE] silences: Add active, expired, and pending boolean filter parameters to GET /api/v2/silences to allow filtering silences by state server-side. [#&#8203;5406](https://github.com/prometheus/alertmanager/issues/5406) - \[FEATURE] sns: Add aws `external_id` support in sigv4 configuration. [#&#8203;5157](https://github.com/prometheus/alertmanager/issues/5157) - \[FEATURE] template: Add `toDate` and `mustToDate` functions. [#&#8203;5327](https://github.com/prometheus/alertmanager/issues/5327) - \[ENHANCEMENT] doc: Add AlertmanagerClusterFailedPeers alertmanager-mixin. [#&#8203;5301](https://github.com/prometheus/alertmanager/issues/5301) - \[ENHANCEMENT] doc: Add description for Rocketchat parameters in global config. [#&#8203;5181](https://github.com/prometheus/alertmanager/issues/5181) - \[ENHANCEMENT] doc: Add top level tracing configuration key. [#&#8203;5314](https://github.com/prometheus/alertmanager/issues/5314) - \[ENHANCEMENT] doc: Fix Alertmanager port in amtool config routes example. [#&#8203;5312](https://github.com/prometheus/alertmanager/issues/5312) - \[ENHANCEMENT] eventrecorder: Add optional webhook batching. [#&#8203;5392](https://github.com/prometheus/alertmanager/issues/5392) - \[ENHANCEMENT] notify: The discord and webex integrations now report a failure `reason` on `alertmanager_notifications_failed_total`. [#&#8203;5332](https://github.com/prometheus/alertmanager/issues/5332) - \[ENHANCEMENT] ui: Improve responsiveness of UI when loading thousands of alerts. [#&#8203;5357](https://github.com/prometheus/alertmanager/issues/5357) - \[BUGFIX] eventrecorder: Fixed a minor performance regression when the event recorder is enabled. [#&#8203;5307](https://github.com/prometheus/alertmanager/issues/5307) - \[BUGFIX] msteamsv2: Inherit global `proxy_url` into partial `http_config`. [#&#8203;5379](https://github.com/prometheus/alertmanager/issues/5379) - \[BUGFIX] webhook: Keep custom `payload` string values verbatim instead of reinterpreting JSON leaves that look like YAML (e.g. values ending with a colon). [#&#8203;5304](https://github.com/prometheus/alertmanager/issues/5304) </details> <details> <summary>prometheus/prometheus (docker.io/prom/prometheus)</summary> ### [`v3.16.0`](https://github.com/prometheus/prometheus/releases/tag/v3.16.0): 3.16.0 / 2026-11-04 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.15.1...v3.16.0) - \[CHANGE] API: The experimental search endpoints now clamp `batch_size` to 1000. [#&#8203;19731](https://github.com/prometheus/prometheus/issues/19731) - \[CHANGE] Configuration: Default --web.external-url to https when --web.config.file enables TLS. [#&#8203;19241](https://github.com/prometheus/prometheus/issues/19241) - \[CHANGE] PromQL: Subquery samples are now included in the query TotalSamples and TotalSamplesPerStep statistics, and SamplesRead now counts reads from subqueries with an @&#8203; modifier in range queries. [#&#8203;19165](https://github.com/prometheus/prometheus/issues/19165) - \[CHANGE] Remote write: Stop exposing the deprecated `prometheus_remote_storage_metadata_total`, `prometheus_remote_storage_metadata_failed_total`, `prometheus_remote_storage_metadata_retried_total`, and `prometheus_remote_storage_metadata_bytes_total` metrics for Remote Write 2.0 queues. [#&#8203;20080](https://github.com/prometheus/prometheus/issues/20080) - \[CHANGE] Remote write receiver: Count Remote Write 2.x samples and histograms ingested without metadata in `prometheus_api_remote_write_without_metadata_appended_samples_total` even when `metadata-wal-records` is disabled. [#&#8203;19812](https://github.com/prometheus/prometheus/issues/19812) - \[CHANGE] TSDB: Reject exemplars whose label names are not unique, instead of storing them and serving a duplicate JSON key from `/api/v1/query_exemplars`. [#&#8203;19896](https://github.com/prometheus/prometheus/issues/19896) - \[FEATURE] API: Allow overriding PromQL Start Timestamp processing on a per-query basis using the `X-Prometheus-Use-Start-Timestamps` HTTP header. [#&#8203;19066](https://github.com/prometheus/prometheus/issues/19066) - \[FEATURE] Agent: Support metadata-wal-records in Prometheus Agent mode. [#&#8203;19684](https://github.com/prometheus/prometheus/issues/19684) - \[FEATURE] PromQL: Add experimental `integral()` function for computing integral-over-time of range vectors behind the `--enable-feature=promql-experimental-functions` flag. [#&#8203;14440](https://github.com/prometheus/prometheus/issues/14440) - \[FEATURE] PromQL: Add experimental query cost estimation, actual cost reporting, and configurable execution limits, enabled with `--enable-feature=query-cost`. [#&#8203;20028](https://github.com/prometheus/prometheus/issues/20028) - \[FEATURE] PromQL: Smoothed and Anchored vector selectors are now stable and always-on. [#&#8203;19697](https://github.com/prometheus/prometheus/issues/19697) - \[FEATURE] PromQL: Use start timestamps to detect counter resets when float timeseries are queried using extended range selector modifiers (`anchored`, `smoothed`). This feature is hidden behind `use-start-timestamps` feature flag. [#&#8203;18966](https://github.com/prometheus/prometheus/issues/18966) - \[FEATURE] Promtool: print test filename during promtool tests [#&#8203;18271](https://github.com/prometheus/prometheus/issues/18271) - \[FEATURE] PromQL: Allow unquoted Unicode letters and dots behind a feature flag [#&#8203;20162](https://github.com/prometheus/prometheus/issues/20162) - \[ENHANCEMENT] Search API: Warn when participating remote-read storage does not support search. [#&#8203;19992](https://github.com/prometheus/prometheus/issues/19992) - \[ENHANCEMENT] Remote Read: Add native histogram prometheus_remote_read_handler_gate_wait_duration_seconds to measure concurrency-gate wait duration, including requests canceled while waiting. [#&#8203;18355](https://github.com/prometheus/prometheus/issues/18355) - \[ENHANCEMENT] Remote Write: Add experimental flag `convert_nhcb_to_classic` to convert NHCB to classic histograms for external systems that dont support NHCBs. [#&#8203;17205](https://github.com/prometheus/prometheus/issues/17205) - \[ENHANCEMENT] promtool: Add `--allow-incompatible-block-duration` so users can specify any max-block-duration instead of being restricted to the default Prometheus block durations. [#&#8203;19363](https://github.com/prometheus/prometheus/issues/19363) - \[PERF] Remote write: Cache repeated OTLP histogram metric names. [#&#8203;19717](https://github.com/prometheus/prometheus/issues/19717) - \[PERF] OpenMetrics 2.0 parser: Reuse classic histogram and summary expansion buffers across scrapes. [#&#8203;19907](https://github.com/prometheus/prometheus/issues/19907) - \[PERF] PromQL: Decode only histogram sum/count (not buckets) for timestamp(), start_timestamp() and absent(). [#&#8203;19738](https://github.com/prometheus/prometheus/issues/19738) - \[PERF] PromQL: Only select the fixed window for subqueries with an `@` modifier. [#&#8203;19863](https://github.com/prometheus/prometheus/issues/19863) - \[PERF] Remote write / TSDB: Deduplicate per-series metadata structs in memory with `unique.Handle`. [#&#8203;20040](https://github.com/prometheus/prometheus/issues/20040) - \[PERF] Scrape: Avoid some copies of scrape response bodies. [#&#8203;19394](https://github.com/prometheus/prometheus/issues/19394) - \[PERF] TSDB: Improve XOR2 compression and append performance by selecting value windows based on encoding cost. [#&#8203;19962](https://github.com/prometheus/prometheus/issues/19962) - \[PERF] TSDB: Reduce memory used writing and reading checkpoint metadata records. [#&#8203;19712](https://github.com/prometheus/prometheus/issues/19712) - \[PERF] Scrape: Convert classic histograms to NHCB directly in the OpenMetrics 2.0 parser without wrapping in `NHCBParser`. [#&#8203;19880](https://github.com/prometheus/prometheus/issues/19880) - \[PERF] Scrape: Reduce OpenMetrics 2.0 parser allocations and CPU overhead by lazily constructing composite series and exemplar labels. [#&#8203;19895](https://github.com/prometheus/prometheus/issues/19895) - \[BUGFIX] Remote read: Abort failed streaming responses without writing duplicate headers or appending plain-text errors to the protobuf stream [#&#8203;19749](https://github.com/prometheus/prometheus/issues/19749) - \[BUGFIX] TSDB: Fix loss of out-of-order samples when a WAL checkpoint drops a series record that the out-of-order write-behind log still needs [#&#8203;19737](https://github.com/prometheus/prometheus/issues/19737) - \[BUGFIX] TSDB: Fix queries that seek within a head chunk returning samples committed after the query started [#&#8203;19854](https://github.com/prometheus/prometheus/issues/19854) - \[BUGFIX] TSDB: Preserve mapped chunks when WAL replay merges multiple references for the same series, preventing missing out-of-order samples and duplicate in-order chunks after restart [#&#8203;19805](https://github.com/prometheus/prometheus/issues/19805) - \[BUGFIX] Fix auto-reload logic to reload after reverting a failed configuration change [#&#8203;19838](https://github.com/prometheus/prometheus/issues/19838) - \[BUGFIX] API: Do not match metric family metadata for doubled \_total and \_info suffixes in experimental search API. [#&#8203;19910](https://github.com/prometheus/prometheus/issues/19910) - \[BUGFIX] API: Reject `timeout` and `lookback_delta` values that overflow int64 instead of turning them into a negative duration [#&#8203;19658](https://github.com/prometheus/prometheus/issues/19658) - \[BUGFIX] API: Resolve metric family metadata for suffixed metric names in search results, in experimental search API. [#&#8203;19824](https://github.com/prometheus/prometheus/issues/19824) - \[BUGFIX] AWS SD: Describe each ElastiCache cluster once instead of twice for clusters that are not replication group members. [#&#8203;19434](https://github.com/prometheus/prometheus/issues/19434) - \[BUGFIX] Build: Allow installing promtool with version-suffixed go install commands [#&#8203;19754](https://github.com/prometheus/prometheus/issues/19754) - \[BUGFIX] Discovery: Fix a panic in Azure service discovery when a VM tag has a null value. [#&#8203;19755](https://github.com/prometheus/prometheus/issues/19755) - \[BUGFIX] Federation: fix corruption of float native histograms. [#&#8203;19679](https://github.com/prometheus/prometheus/issues/19679) - \[BUGFIX] Fix ts_of_last_over_time for samples before the Unix epoch. [#&#8203;19828](https://github.com/prometheus/prometheus/issues/19828) - \[BUGFIX] Histograms: Fix ConvertNHCBToClassic inflating classic bucket counts for integer native histograms whose spans have gaps. [#&#8203;19659](https://github.com/prometheus/prometheus/issues/19659) - \[BUGFIX] Logging: Preserve rule and TSDB block values in JSON logs. [#&#8203;19572](https://github.com/prometheus/prometheus/issues/19572) - \[BUGFIX] OTLP receiver: Drop exemplars with timestamps more than 10 minutes in the future instead of storing them and blocking subsequent exemplars for that series. [#&#8203;19812](https://github.com/prometheus/prometheus/issues/19812) - \[BUGFIX] OTLP: Count only out-of-order exemplars in `prometheus_api_otlp_out_of_order_exemplars_total`, not every rejected exemplar. [#&#8203;20030](https://github.com/prometheus/prometheus/issues/20030) - \[BUGFIX] OTLP: Do not drop exemplars that have a `trace_id` or `span_id` filtered attribute in addition to a trace or span ID. The trace context now takes precedence over the colliding attribute, as required by the OpenTelemetry specification. [#&#8203;20004](https://github.com/prometheus/prometheus/issues/20004) - \[BUGFIX] OTLP: Do not emit `le="+Inf"` twice when a histogram's explicit bounds end at `+Inf`, and warn about the bound. [#&#8203;19425](https://github.com/prometheus/prometheus/issues/19425) - \[BUGFIX] OTLP: Stop dropping exemplars that arrive out of timestamp order within a data point. [#&#8203;20029](https://github.com/prometheus/prometheus/issues/20029) - \[BUGFIX] OpenMetrics 2.0: Attach histogram exemplars to matching classic `_bucket` series and preserve them when scraping both native and classic histograms. [#&#8203;20020](https://github.com/prometheus/prometheus/issues/20020) - \[BUGFIX] PromQL: Avoid intermediate overflow in `rad()` and `deg()` conversions. [#&#8203;19901](https://github.com/prometheus/prometheus/issues/19901) - \[BUGFIX] PromQL: Consistently ignore and drop `__type__` and `__unit__` labels in `without` aggregations, `absent()`, `info()`, and binary operator fill matching. [#&#8203;19986](https://github.com/prometheus/prometheus/issues/19986) - \[BUGFIX] PromQL: Do not panic when printing the partial AST returned alongside a parse error. [#&#8203;19797](https://github.com/prometheus/prometheus/issues/19797) - \[BUGFIX] PromQL: Drop **type** and **unit** in binary operations so they are transparent to users, similar to how **name** is handled. [#&#8203;18680](https://github.com/prometheus/prometheus/issues/18680) - \[BUGFIX] PromQL: Fix `==`, `!=`, `changes()` and `count_values` on native histograms giving wrong results inside `histogram_count()`, `histogram_sum()` and `histogram_avg()`. [#&#8203;20024](https://github.com/prometheus/prometheus/issues/20024) - \[BUGFIX] PromQL: Fix histogram_fraction returning wrong results for native histograms with custom buckets when a bucket boundary is exactly 0. [#&#8203;19657](https://github.com/prometheus/prometheus/issues/19657) - \[BUGFIX] PromQL: Fix histogram_quantile and histogram_quantiles interpolating within the wrong bucket for native histograms whose sum is NaN. [#&#8203;19973](https://github.com/prometheus/prometheus/issues/19973) - \[BUGFIX] PromQL: Fix lexing of subqueries whose range is a duration keyword expression, e.g. `foo[range():1s]`. [#&#8203;19729](https://github.com/prometheus/prometheus/issues/19729) - \[BUGFIX] PromQL: Fix warning and error locations for duration expressions `min_of` and `max_of`. [#&#8203;19742](https://github.com/prometheus/prometheus/issues/19742) - \[BUGFIX] PromQL: Ignore NaN classic histogram bucket boundaries in `histogram_quantile`, `histogram_quantiles` and `histogram_fraction` and return correct value instead of NaN if there are normal buckets. [#&#8203;20057](https://github.com/prometheus/prometheus/issues/20057) - \[BUGFIX] PromQL: Preserve infinite values at exact quantile ranks. [#&#8203;19899](https://github.com/prometheus/prometheus/issues/19899) - \[BUGFIX] PromQL: Preserve original operand sides for experimental fill modifiers with group_right matching. [#&#8203;19939](https://github.com/prometheus/prometheus/issues/19939) - \[BUGFIX] PromQL: Preserve subquery step expressions when printing queries after preprocessing. [#&#8203;19743](https://github.com/prometheus/prometheus/issues/19743) - \[BUGFIX] PromQL: Range vector functions no longer raise a spurious "vector cannot contain metrics with the same labelset" error when series have different metric names but the same remaining labels, as long as their timestamps do not overlap within the evaluated range window [#&#8203;18631](https://github.com/prometheus/prometheus/issues/18631) - \[BUGFIX] PromQL: do not count subquery materialized samples in total samples statistics [#&#8203;19873](https://github.com/prometheus/prometheus/issues/19873) - \[BUGFIX] Remote write: Prevent future-dated exemplars from scaling shards down to the minimum. [#&#8203;19866](https://github.com/prometheus/prometheus/issues/19866) - \[BUGFIX] Agent: Prevent future sent timestamps from advancing WAL truncation beyond the minimum retention window. [#&#8203;19866](https://github.com/prometheus/prometheus/issues/19866) - \[BUGFIX] Rules: Restore firing alerts with for durations shorter than --rules.alert.for-grace-period after a restart. [#&#8203;19882](https://github.com/prometheus/prometheus/issues/19882) - \[BUGFIX] Scrape: fix failing scrape when float histogram is emitted over protobuf with count, zero count and buckets all zero, for example a result of recording `rate(x[1m])` over constant histogram. [#&#8203;19682](https://github.com/prometheus/prometheus/issues/19682) - \[BUGFIX] Search API: Return the lexically smallest label values when `limit` is set on `/api/v1/search/label_values`, instead of an arbitrary subset [#&#8203;19694](https://github.com/prometheus/prometheus/issues/19694) - \[BUGFIX] TSDB: Fix WAL watcher permanently skipping checkpoint series garbage collection when lagging behind head truncation. [#&#8203;20041](https://github.com/prometheus/prometheus/issues/20041) - \[BUGFIX] Search API: Avoid panics when the requested time range has no participating storage. [#&#8203;19992](https://github.com/prometheus/prometheus/issues/19992) - \[BUGFIX] TSDB: Fix a race in selected-series and stale-series compaction where a sample committed after the block was written but before the series was evicted from the head could be silently lost. The fix no longer depends on isolation being enabled. [#&#8203;19666](https://github.com/prometheus/prometheus/issues/19666) - \[BUGFIX] TSDB: Fix a rare case where a sample could be lost during selected-series or stale-series compaction if an unrelated write to the same series ran cleanup that erased the evidence needed to protect it. [#&#8203;19672](https://github.com/prometheus/prometheus/issues/19672) - \[BUGFIX] TSDB: Fix spurious "unknown series references" warnings during WAL replay after a restart, when the only blocks on disk were produced by selected-series or stale-series compaction. [#&#8203;19734](https://github.com/prometheus/prometheus/issues/19734) - \[BUGFIX] TSDB: Increment `prometheus_tsdb_wal_corruptions_total` when WAL corruption is detected during checkpoint creation, so the metric reflects corruption found at compaction time rather than only after a restart-triggered repair. [#&#8203;19858](https://github.com/prometheus/prometheus/issues/19858) - \[BUGFIX] TSDB: Preserve series identities needed to recover exemplars after compaction and restart. [#&#8203;19940](https://github.com/prometheus/prometheus/issues/19940) - \[BUGFIX] TSDB: Reject native histograms whose span offsets overflow the int32 bucket index instead of storing them with corrupted buckets. [#&#8203;20034](https://github.com/prometheus/prometheus/issues/20034) - \[BUGFIX] TSDB: fix no passing metadata-wal-records to TSDB from main feature flag. [#&#8203;19678](https://github.com/prometheus/prometheus/issues/19678) - \[BUGFIX] Templates: Preserve IPv6 addresses with dotted zone identifiers in `stripDomain`. [#&#8203;19908](https://github.com/prometheus/prometheus/issues/19908) - \[BUGFIX] UI: Don't automatically open an autocomplete dropdown after closing a function call body or aggregation operator with a closing parenthesis. [#&#8203;19825](https://github.com/prometheus/prometheus/issues/19825) - \[BUGFIX] Web: Fix HTTP/2 negotiation silently falling back to HTTP/1.1 under Go 1.27+ when TLS is enabled with `http2: true`. The server now correctly advertises `h2` via ALPN and multiplexes concurrent requests over a single connection. [#&#8203;19848](https://github.com/prometheus/prometheus/issues/19848) - \[BUGFIX] mixin: Fix double-counting of failed samples in the `PrometheusRemoteStorageFailures` alert denominator. [#&#8203;19877](https://github.com/prometheus/prometheus/issues/19877) - \[BUGFIX] promtool: Honor `--enable-feature` when evaluating rules in `test rules`. [#&#8203;20046](https://github.com/prometheus/prometheus/issues/20046) - \[BUGFIX] Scrape: Ensure UTF-8 works with the experimental OpenMetrics 2.0 [#&#8203;19902](https://github.com/prometheus/prometheus/issues/19902) - \[BUGFIX] Scrape: Reject sum-only classic histograms during NHCB conversion [#&#8203;19315](https://github.com/prometheus/prometheus/issues/19315) ### [`v3.15.1`](https://github.com/prometheus/prometheus/releases/tag/v3.15.1): 3.15.1 / 2026-10-21 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.15.0...v3.15.1) - \[SECURITY] Container images: Update CA certificates to distrust "emSign ECC Root CA - G3" and "Comodo AAA Services root" following the compromise of eMudhra intermediate CA private keys. - \[SECURITY] Build with Go 1.27.3 to fix vulnerabilities in `net/http`, `net/textproto`, `crypto/tls` and `html/template`. - \[SECURITY] Bump golang.org/x/net to v0.60.0 to fix HTTP/2 vulnerabilities (GO-2026-6603, GO-2026-6610, GO-2026-6611, GO-2026-6612, GO-2026-6617). ### [`v3.15.0`](https://github.com/prometheus/prometheus/releases/tag/v3.15.0): 3.15.0 / 2026-09-24 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.14.0...v3.15.0) - \[CHANGE] PromQL: A range query whose `end` was not aligned to `step` caused subqueries inside it to evaluate past the parent's last actual step, inflating `peakSamples` in the query stats and against the `query.max-samples` limit, and wasting storage I/O reading samples that were never used in the result. Add tests to prevent regression of the fix made in [#&#8203;18081](https://github.com/prometheus/prometheus/issues/18081). [#&#8203;18598](https://github.com/prometheus/prometheus/issues/18598) - \[CHANGE] PromQL: Do not register a start timestamp reset if the start timestamp hasn't changed between subsequent samples. [#&#8203;19454](https://github.com/prometheus/prometheus/issues/19454) - \[CHANGE] Logging: Deprecate `--log.level`; use `runtime.log_level` configuration to supply the default level. [#&#8203;19511](https://github.com/prometheus/prometheus/issues/19511) - \[FEATURE] Configuration: Allow changing the process log level through `runtime.log_level` on configuration reload. [#&#8203;19511](https://github.com/prometheus/prometheus/issues/19511) - \[FEATURE] Prometheus: Add `--auto-gomemlimit.refresh-interval` flag to periodically re-detect the container or system memory limit and update `GOMEMLIMIT` at runtime. [#&#8203;18843](https://github.com/prometheus/prometheus/issues/18843) - \[FEATURE] Scraping: Add support for scraping targets via Unix Domain Sockets. [#&#8203;12024](https://github.com/prometheus/prometheus/issues/12024). [#&#8203;18091](https://github.com/prometheus/prometheus/issues/18091) - \[FEATURE] scrape: Implement OM2.0 scrape format. [#&#8203;18606](https://github.com/prometheus/prometheus/issues/18606) - \[ENHANCEMENT] Reduce TSDB head CPU utilization when initializing. [#&#8203;18001](https://github.com/prometheus/prometheus/issues/18001) - \[ENHANCEMENT] Docker SD: Add labels `__meta_docker_container_image` and `__meta_docker_container_image_id`. [#&#8203;19386](https://github.com/prometheus/prometheus/issues/19386) - \[ENHANCEMENT] Mixin: Add a p95/p99 remote-write send-batch latency panel to the remote-write dashboard. [#&#8203;19500](https://github.com/prometheus/prometheus/issues/19500) - \[ENHANCEMENT] Mixin: Support native histograms in the remote-write send-batch latency panel. [#&#8203;19522](https://github.com/prometheus/prometheus/issues/19522) - \[ENHANCEMENT] PromQL/TSDB: The `--enable-feature=st-storage` flag now automatically enables XOR2 float chunk encoding and ST-capable histogram chunk encoding, so you no longer need to pass `xor2-encoding` and `histograms-st-encoding` alongside it. [#&#8203;19518](https://github.com/prometheus/prometheus/issues/19518) - \[ENHANCEMENT] Remote write / Alertmanager: upgrade sigv4 to v0.5.0, adding `session_name` and `tags` fields for STS AssumeRole sessions. The previously undocumented `service_name` field is now also documented. [#&#8203;19569](https://github.com/prometheus/prometheus/issues/19569) - \[ENHANCEMENT] Scraping: Support zstd-compressed scrape responses, enabled via feature flag `zstd-scrape`. [#&#8203;19502](https://github.com/prometheus/prometheus/issues/19502) - \[ENHANCEMENT] TSDB: Stabilize the XOR2 float chunk encoding. `--enable-feature=xor2-encoding` is deprecated; use `storage.tsdb.chunk_encoding.floats: xor2` instead. Check that other software reading the TSDB directly (e.g. Thanos sidecar) supports XOR2 before enabling. [#&#8203;19461](https://github.com/prometheus/prometheus/issues/19461) - \[ENHANCEMENT] TSDB: add `prometheus_tsdb_head_appenders_created_total` metric. [#&#8203;19411](https://github.com/prometheus/prometheus/issues/19411) - \[ENHANCEMENT] Tracing: add more spans to scrapes, API queries and rule evaluations. [#&#8203;19410](https://github.com/prometheus/prometheus/issues/19410) - \[ENHANCEMENT] UI: Show the effective configuration for each scrape pool on the Targets and Service Discovery pages. [#&#8203;19384](https://github.com/prometheus/prometheus/issues/19384) - \[ENHANCEMENT] scrape: Enable start time synthesis for summary `_count` and `_sum` series in scrape appender v2. [#&#8203;19323](https://github.com/prometheus/prometheus/issues/19323) - \[ENHANCEMENT] scrape: stop all pools in parallel for faster shutdowns. [#&#8203;19295](https://github.com/prometheus/prometheus/issues/19295) - \[ENHANCEMENT] storage/remote: Add undocumented failed_request_logging config field to debug log remote write V2 requests on send errors. [#&#8203;19249](https://github.com/prometheus/prometheus/issues/19249) - \[ENHANCEMENT] TSDB: Add fast path for XOR chunk decompression to speed up queries. [#&#8203;18049](https://github.com/prometheus/prometheus/issues/18049) - \[ENHANCEMENT] UI: Improve native histogram table formatting and add a background bar indicating the bucket count. [#&#8203;19332](https://github.com/prometheus/prometheus/issues/19332) - \[ENHANCEMENT] TSDB: Add `prometheus_tsdb_head_series_pending_commit_underflow_total` to report pending-sample reservation underflows. [#&#8203;19470](https://github.com/prometheus/prometheus/issues/19470) - \[PERF] AWS SD: Build RDS cluster labels once per cluster instead of once per instance. [#&#8203;19504](https://github.com/prometheus/prometheus/issues/19504) - \[PERF] AWS SD: Describe RDS instances of different clusters concurrently, bounded by `request_concurrency`. [#&#8203;19506](https://github.com/prometheus/prometheus/issues/19506) - \[PERF] AWS SD: Describe each ElastiCache resource once per refresh instead of twice. [#&#8203;19585](https://github.com/prometheus/prometheus/issues/19585) - \[PERF] Remote read: Avoid cloning labels for sampled reads when no external labels are configured. [#&#8203;19503](https://github.com/prometheus/prometheus/issues/19503) - \[PERF] Remote write: Reuse OTLP converter scratch state between requests. [#&#8203;19388](https://github.com/prometheus/prometheus/issues/19388) - \[PERF] scrape: conversion from classic to native histograms should only parse start times when enabled. [#&#8203;19446](https://github.com/prometheus/prometheus/issues/19446) - \[BUGFIX] PromQL: Fix `info()` enrichment for composite expressions with mixed `@`/offset references or selector-free vector branches, preventing metadata from being evaluated at an unrelated timestamp. [#&#8203;19387](https://github.com/prometheus/prometheus/issues/19387) - \[BUGFIX] PromQL: Fix info() enrichment when input series use different subsets of identifying labels. [#&#8203;19557](https://github.com/prometheus/prometheus/issues/19557) - \[BUGFIX] PromQL: Preserve metric-name dropping through the info function when delayed name removal is enabled. [#&#8203;19413](https://github.com/prometheus/prometheus/issues/19413) - \[BUGFIX] TSDB: Don't silently drop samples when head garbage collection removes a series while it is being appended to. [#&#8203;19272](https://github.com/prometheus/prometheus/issues/19272) - \[BUGFIX] TSDB: Keep series with uncommitted samples during selected- and stale-series compaction, including when appenders overlap. [#&#8203;19470](https://github.com/prometheus/prometheus/issues/19470) - \[BUGFIX] TSDB: Do not retain head series after a synthetic start-timestamp zero sample is rejected. [#&#8203;19470](https://github.com/prometheus/prometheus/issues/19470) - \[BUGFIX] TSDB: Prevent query panics during series eviction after WAL replay. [#&#8203;19664](https://github.com/prometheus/prometheus/issues/19664) - \[BUGFIX] TSDB: fix potential deadlock between mmapSeriesChunks and gcSeries. [#&#8203;19460](https://github.com/prometheus/prometheus/issues/19460) - \[BUGFIX] TSDB: fix default block reload interval for custom options. [#&#8203;19368](https://github.com/prometheus/prometheus/issues/19368) - \[BUGFIX] AWS SD: Do not crash on serverless MSK clusters or MSK clusters without Open Monitoring. [#&#8203;19194](https://github.com/prometheus/prometheus/issues/19194) - \[BUGFIX] AWS SD: Do not panic when the ElastiCache API omits optional fields of a serverless cache or cache cluster. [#&#8203;19435](https://github.com/prometheus/prometheus/issues/19435) - \[BUGFIX] AWS SD: Reject non-positive `request_concurrency` instead of hanging service discovery indefinitely. [#&#8203;19524](https://github.com/prometheus/prometheus/issues/19524) - \[BUGFIX] Discovery/AWS: Avoid a panic when discovering standalone ECS tasks with custom task groups. [#&#8203;19302](https://github.com/prometheus/prometheus/issues/19302) - \[BUGFIX] Discovery: Do not panic in AWS Lightsail service discovery when an instance is missing optional fields such as availability zone, blueprint, bundle, name, state or support code. [#&#8203;19324](https://github.com/prometheus/prometheus/issues/19324) - \[BUGFIX] Discovery: delete the stale `prometheus_sd_last_update_timestamp_seconds` series for a config that is removed on reload. [#&#8203;19131](https://github.com/prometheus/prometheus/issues/19131) - \[BUGFIX] HTTP: Avoid truncating compressed responses when handlers set Content-Length. [#&#8203;19661](https://github.com/prometheus/prometheus/issues/19661) - \[BUGFIX] IONOS SD: Do not panic when the API response omits the server, NIC or volume collections, or a server's properties. [#&#8203;19438](https://github.com/prometheus/prometheus/issues/19438) - \[BUGFIX] Metadata will not affect the number of Remote Write v2 shards. [#&#8203;19218](https://github.com/prometheus/prometheus/issues/19218) - \[BUGFIX] Mixins: Fix label mismatches that prevented PrometheusHAGroupNotIngestingSamples and PrometheusHAGroupCrashlooping from firing. [#&#8203;19444](https://github.com/prometheus/prometheus/issues/19444) - \[BUGFIX] Native histograms: `DetectReset` no longer misses a counter reset when a populated bucket behind an empty one disappears, which could make histogram `rate()`/`increase()` undercount. [#&#8203;19367](https://github.com/prometheus/prometheus/issues/19367) - \[BUGFIX] Never skip histogram buckets for histogram_stddev and histogram_stdvar functions. [#&#8203;19521](https://github.com/prometheus/prometheus/issues/19521) - \[BUGFIX] OTLP: Do not abort an entire OTLP payload ingestion if one metric has no datapoints. [#&#8203;19343](https://github.com/prometheus/prometheus/issues/19343) - \[BUGFIX] PromQL: Fix FastRegexMatcher false-positive match when a capturing group is directly adjacent to a literal (e.g. `.*\|(foo)\|.*`). [#&#8203;19516](https://github.com/prometheus/prometheus/issues/19516) - \[BUGFIX] PromQL: Fix a panic in range selectors using the experimental `anchored` or `smoothed` modifier when the selected series has no samples inside the query window, for example a query evaluated inside a scrape gap. [#&#8203;19431](https://github.com/prometheus/prometheus/issues/19431) - \[BUGFIX] PromQL: Fix empty results when a subquery with `@` is used as the matrix argument of a call that is not step-invariant (for example `quantile_over_time(scalar(x), metric[...:...] @ T)`). [#&#8203;19187](https://github.com/prometheus/prometheus/issues/19187) - \[BUGFIX] PromQL: Make the "found duplicate series for the match group" many-to-many matching error message deterministic by sorting the two duplicate labels. [#&#8203;18810](https://github.com/prometheus/prometheus/issues/18810) - \[BUGFIX] PromQL: Preserve parentheses around duration literals on Expr.String() round-trip. [#&#8203;19403](https://github.com/prometheus/prometheus/issues/19403) - \[BUGFIX] PromQL: Reject duration-expression offsets and `@ start()` / `@ end()` before range selectors, matching the existing rejection of literal offsets and `@ <timestamp>`. [#&#8203;19406](https://github.com/prometheus/prometheus/issues/19406) - \[BUGFIX] PromQL: Report the position of the histogram argument rather than of a scalar argument in the native histogram NaN observation annotations of `histogram_quantile` and `histogram_fraction`. [#&#8203;19330](https://github.com/prometheus/prometheus/issues/19330) - \[BUGFIX] PromQL: info() now applies the @&#8203; modifier/offset when evaluating the info series, so info(v @&#8203; T) enriches as of T consistently instead of depending on the query start/eval time. [#&#8203;19266](https://github.com/prometheus/prometheus/issues/19266) - \[BUGFIX] Rules: Fix a panic when a rule manager created without a logger loads a rule file containing multiple YAML documents. [#&#8203;19433](https://github.com/prometheus/prometheus/issues/19433) - \[BUGFIX] Scrape: Do not append a stale marker for a series that is still exposed when the storage returns a new series reference for it. [#&#8203;19328](https://github.com/prometheus/prometheus/issues/19328) - \[BUGFIX] Scrape: JSON log formatter correctly format scrape target info. [#&#8203;19472](https://github.com/prometheus/prometheus/issues/19472) - \[BUGFIX] TSDB: Fix in-order chunk ID overflow by wrapping head chunk IDs modulo 2^23 so they never collide with the out-of-order flag bit. [#&#8203;19450](https://github.com/prometheus/prometheus/issues/19450) - \[BUGFIX] TSDB: Fix out-of-order chunk ID overflow by wrapping `firstOOOChunkID` modulo 2^23 instead of growing unbounded. [#&#8203;19216](https://github.com/prometheus/prometheus/issues/19216) - \[BUGFIX] UI: Remove an extraneous X-axis tick mark in the native histogram chart when using the "linear" display mode. [#&#8203;19326](https://github.com/prometheus/prometheus/issues/19326) - \[BUGFIX] discovery/aws: Avoid a panic when an ElastiCache ARN is missing its resource ID. [#&#8203;19333](https://github.com/prometheus/prometheus/issues/19333) - \[BUGFIX] discovery/aws: Do not panic on MSK clusters whose optional API fields are absent. [#&#8203;19584](https://github.com/prometheus/prometheus/issues/19584) - \[BUGFIX] discovery/aws: Do not panic when the EC2 API omits optional instance fields. [#&#8203;19512](https://github.com/prometheus/prometheus/issues/19512) - \[BUGFIX] discovery/aws: Don't panic on ECS tasks with absent optional fields. [#&#8203;19396](https://github.com/prometheus/prometheus/issues/19396) - \[BUGFIX] discovery/aws: MSK Optional Custom Configuration Fields [#&#8203;19422](https://github.com/prometheus/prometheus/issues/19422). [#&#8203;19422](https://github.com/prometheus/prometheus/issues/19422) - \[BUGFIX] discovery/ionos: Fix panic when the IONOS API omits optional server fields. [#&#8203;19418](https://github.com/prometheus/prometheus/issues/19418) - \[BUGFIX] discovery/kubernetes: Populate `__meta_kubernetes_service_loadbalancer_ip` from `status.loadBalancer.ingress`, falling back to deprecated `spec.loadBalancerIP`. [#&#8203;19404](https://github.com/prometheus/prometheus/issues/19404) - \[BUGFIX] histogram: Fix Compact moving buckets to wrong indices, and producing negative bucket counts for integer histograms, when more than one span is merged in the same pass. [#&#8203;19312](https://github.com/prometheus/prometheus/issues/19312) - \[BUGFIX] promtool: Fixed `tsdb dump` silently dropping native histogram samples. [#&#8203;18051](https://github.com/prometheus/prometheus/issues/18051) - \[BUGFIX] scrape: fix data race in `Manager.TargetsDroppedCounts` to avoid miscounting dropped targets. [#&#8203;19304](https://github.com/prometheus/prometheus/issues/19304) - \[BUGFIX] scrape: fix nil histogram when native and classic histograms are mixed in one metric family. [#&#8203;19452](https://github.com/prometheus/prometheus/issues/19452) - \[BUGFIX] TSDB: Fix WAL and GC log messages to emit human-readable duration strings instead of nanosecond integers. [#&#8203;19307](https://github.com/prometheus/prometheus/issues/19307) - \[BUGFIX] TSDB: Avoid WAL corruption after a failed WAL write in Agent mode. [#&#8203;19700](https://github.com/prometheus/prometheus/issues/19700) - \[BUGFIX] Agent: Ignore unknown WAL record types, to help users rolling back. [#&#8203;19814](https://github.com/prometheus/prometheus/issues/19814) ### [`v3.14.0`](https://github.com/prometheus/prometheus/releases/tag/v3.14.0): 3.14.0 / 2026-08-17 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.13.5...v3.14.0) - \[CHANGE] API: Deprecate the `stats` query parameter of `/api/v1/query` and `/api/v1/query_range` for values other than `true` and `all`. Other values still enable basic statistics but now return a deprecation warning; they will be rejected in the next major release. [#&#8203;19124](https://github.com/prometheus/prometheus/issues/19124) - \[CHANGE] API: `/api/v1/status/config` now correctly shows `separator: ""` and `replacement: ""` in relabel configs when explicitly set to empty, instead of omitting them. [#&#8203;18653](https://github.com/prometheus/prometheus/issues/18653) - \[CHANGE] Discovery/Hetzner: Drop the `__meta_hetzner_datacenter` label for `hcloud` targets, following its removal from the Hetzner Cloud API. [#&#8203;19269](https://github.com/prometheus/prometheus/issues/19269) - \[CHANGE] PromQL: Enable duration expressions by default. The `promql-duration-expr` feature flag is now a no-op. [#&#8203;19033](https://github.com/prometheus/prometheus/issues/19033) - \[CHANGE] PromQL: Promote `first_over_time` to stable. It no longer requires the `promql-experimental-functions` feature flag. [#&#8203;19093](https://github.com/prometheus/prometheus/issues/19093) - \[FEATURE] Discovery: Add Oracle Cloud Infrastructure compute service discovery (`oci_sd_configs`). [#&#8203;18919](https://github.com/prometheus/prometheus/issues/18919) - \[FEATURE] PromQL: Add experimental `start_timestamp(instant-vector)` function returning the start timestamp of each sample in the given vector. Requires the `use-start-timestamps` feature flag. [#&#8203;19089](https://github.com/prometheus/prometheus/issues/19089) - \[FEATURE] PromQL: Allow `rate()` and `increase()` to use start timestamps as an alternative for rate extrapolation. Hidden behind the `use-start-timestamps` feature flag. [#&#8203;18619](https://github.com/prometheus/prometheus/issues/18619) - \[FEATURE] TSDB: Add experimental support for encoding start timestamps in histograms and float histograms. Hidden behind the `histograms-st-encoding` feature flag. [#&#8203;18609](https://github.com/prometheus/prometheus/issues/18609) - \[ENHANCEMENT] OTLP: Emit a warning when OTLP attribute names collide into the same Prometheus label after sanitization (e.g. `k8s.pod.name` and `k8s_pod_name` both become `k8s_pod_name`), and expose the `prometheus_api_otlp_translation_warnings_total` counter labelled by `category` to track such warnings. [#&#8203;18957](https://github.com/prometheus/prometheus/issues/18957) - \[ENHANCEMENT] Promtool: Add `--remote-write.path` flag to `push metrics` for backends that use a non-default remote-write endpoint. [#&#8203;19086](https://github.com/prometheus/prometheus/issues/19086) - \[ENHANCEMENT] Remote write: Forward histogram start timestamps in the remote write V2 protocol. [#&#8203;18903](https://github.com/prometheus/prometheus/issues/18903) - \[ENHANCEMENT] TSDB: Add `prometheus_tsdb_head_native_histogram_series` and `prometheus_tsdb_head_native_histogram_buckets` gauges tracking the number of native histogram series and buckets in the head. [#&#8203;19170](https://github.com/prometheus/prometheus/issues/19170) - \[ENHANCEMENT] UI: Add syntax highlighting, autocompletion, and linting for PromQL duration expressions (`step()`, `range()`, `min_of()`, `max_of()`) in range selectors and subqueries. [#&#8203;18625](https://github.com/prometheus/prometheus/issues/18625) - \[ENHANCEMENT] UI: Add copy button next to rule names on the Rules and Alerts pages. [#&#8203;18706](https://github.com/prometheus/prometheus/issues/18706) - \[ENHANCEMENT] UI: Improve rule group title contrast on the Rules page. [#&#8203;19181](https://github.com/prometheus/prometheus/issues/19181) - \[PERF] Speed up regex label matchers matching a set of literal values (e.g. `{job=~"foo|bar|baz"}`). [#&#8203;18833](https://github.com/prometheus/prometheus/issues/18833) - \[PERF] Remote read: Improve remote read throughput by removing unnecessary per-write flushing. [#&#8203;18470](https://github.com/prometheus/prometheus/issues/18470) - \[PERF] Scrape: Parse text and OpenMetrics formats without recursion, preventing stack overflow from deeply nested or malicious exposition input. [#&#8203;19143](https://github.com/prometheus/prometheus/issues/19143) - \[PERF] Scrape: Reduce native histogram scrape parsing allocations by \~49%. [#&#8203;19282](https://github.com/prometheus/prometheus/issues/19282) - \[PERF] TSDB: Speed up queries on series with many in-memory chunks. [#&#8203;18300](https://github.com/prometheus/prometheus/issues/18300) - \[BUGFIX] Alerting: Fix 100% CPU usage on shutdown that could delay graceful shutdown and trigger timeout-based kills. [#&#8203;17859](https://github.com/prometheus/prometheus/issues/17859) - \[BUGFIX] Discovery/AWS: Stop `promtool check config` from making AWS metadata service (IMDS) network calls when the `region` field is omitted in EC2, ECS, RDS, MSK, ElastiCache, and Lightsail service discovery configs. [#&#8203;19037](https://github.com/prometheus/prometheus/issues/19037) - \[BUGFIX] Discovery/Docker: Set a request timeout for `docker_sd` and `dockerswarm_sd` on `unix`, `npipe`, and `tcp` hosts. Previously an unresponsive daemon could freeze discovery indefinitely, silently pinning targets to a stale snapshot. [#&#8203;19237](https://github.com/prometheus/prometheus/issues/19237) - \[BUGFIX] Discovery/Docker: Fix panic in Docker Swarm service discovery when a service runs as a plugin or network-attachment. [#&#8203;19102](https://github.com/prometheus/prometheus/issues/19102) - \[BUGFIX] Discovery/Docker: Fix discovery of IPv6-only containers. [#&#8203;18778](https://github.com/prometheus/prometheus/issues/18778) - \[BUGFIX] PromQL: Fix case-insensitive regex label matchers silently dropping matching values. [#&#8203;19167](https://github.com/prometheus/prometheus/issues/19167) - \[BUGFIX] PromQL: Fix `mad_over_time` returning 0 instead of `NaN` when the range contains a `NaN` sample. [#&#8203;19040](https://github.com/prometheus/prometheus/issues/19040) - \[BUGFIX] Promtool: Accept `--enable-feature=promql-binop-fill-modifiers` in `check rules`, which previously rejected valid `fill()`/`fill_left()`/`fill_right()` expressions. [#&#8203;19153](https://github.com/prometheus/prometheus/issues/19153) - \[BUGFIX] Remote write: Respect the `AZURE_FEDERATED_TOKEN_FILE` environment variable for workload identity authentication instead of hardcoding the token file path. [#&#8203;18973](https://github.com/prometheus/prometheus/issues/18973) - \[BUGFIX] Rules: Clean up stale `rule_group_last_rule_duration_sum_seconds` and `rule_group_last_restore_duration_seconds` series when a rule group is removed or renamed on reload. Previously each reload leaked two series per dropped group, growing `/metrics` cardinality over time. [#&#8203;19107](https://github.com/prometheus/prometheus/issues/19107) - \[BUGFIX] Scrape: Fix scrape manager spinning at 100% CPU on shutdown. [#&#8203;19149](https://github.com/prometheus/prometheus/issues/19149) - \[BUGFIX] TSDB: Fix silent data loss and potential crash loop when `stale_series_compaction_threshold` is used in the config file. [#&#8203;19016](https://github.com/prometheus/prometheus/issues/19016) - \[BUGFIX] TSDB: Fix potential data loss on restart when out-of-order ingestion is enabled and blocks are compacted. [#&#8203;19016](https://github.com/prometheus/prometheus/issues/19016) - \[BUGFIX] TSDB: Fix `prometheus_tsdb_head_stale_series` over-counting and early eviction of series that change between float, integer histogram, and float histogram sample types. [#&#8203;19183](https://github.com/prometheus/prometheus/issues/19183) - \[BUGFIX] TSDB: Fix goroutine and file handle leaks when Prometheus fails to open a corrupt TSDB. On Windows, the leaked directory handle also prevented TSDB directory removal. [#&#8203;18291](https://github.com/prometheus/prometheus/issues/18291) - \[BUGFIX] TSDB: Fix out-of-order queries blocking compaction for hours, causing memory usage to grow. [#&#8203;19013](https://github.com/prometheus/prometheus/issues/19013) - \[BUGFIX] TSDB: Fix deleted series causing missing samples and errors after restart. [#&#8203;19140](https://github.com/prometheus/prometheus/issues/19140) - \[BUGFIX] TSDB: Fix native histogram data becoming incorrect after restart. [#&#8203;19202](https://github.com/prometheus/prometheus/issues/19202) - \[BUGFIX] TSDB: Surface query errors that were previously silently discarded. [#&#8203;19120](https://github.com/prometheus/prometheus/issues/19120) - \[BUGFIX] TSDB: Honour the configured float chunk encoding when compaction rewrites chunks; previously chunks encoded with `--enable-feature=xor2-encoding` could silently revert to XOR after compaction. [#&#8203;19145](https://github.com/prometheus/prometheus/issues/19145) - \[BUGFIX] UI: Show the delete-series form on the TSDB Status page when `--web.enable-admin-api` is enabled. [#&#8203;19025](https://github.com/prometheus/prometheus/issues/19025) ### [`v3.13.5`](https://github.com/prometheus/prometheus/releases/tag/v3.13.5): 3.13.5 / 2026-10-21 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.13.4...v3.13.5) - \[SECURITY] Container images: Update CA certificates to distrust "emSign ECC Root CA - G3" and "Comodo AAA Services root" following the compromise of eMudhra intermediate CA private keys. - \[SECURITY] Build with Go 1.26.10 to fix vulnerabilities in `net/http`, `net/textproto`, `crypto/tls` and `html/template`. - \[SECURITY] Bump golang.org/x/net to v0.60.0 to fix HTTP/2 vulnerabilities (GO-2026-6603, GO-2026-6610, GO-2026-6611, GO-2026-6612, GO-2026-6617). - \[SECURITY] Bump OpenTelemetry to v1.45.0 to fix exporter endpoint URLs leaking into info logs (GO-2026-6505). - \[CHANGE] Building Prometheus now requires Go 1.26 or later. ### [`v3.13.4`](https://github.com/prometheus/prometheus/releases/tag/v3.13.4): 3.13.4 / 2026-09-29 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.13.3...v3.13.4) - \[SECURITY] Bump google.golang.org/grpc to v1.83.1 to fix HTTP/2 DATA frame fragmentation memory exhaustion (GO-2026-6348). [#&#8203;19834](https://github.com/prometheus/prometheus/issues/19834) - \[SECURITY] UI: Update vulnerable npm dependencies. [#&#8203;19834](https://github.com/prometheus/prometheus/issues/19834) - \[BUGFIX] Agent: Ignore unknown WAL record types to allow rolling back from newer versions. [#&#8203;19814](https://github.com/prometheus/prometheus/issues/19814) - \[BUGFIX] Federation: Fix corruption of float native histograms. [#&#8203;19679](https://github.com/prometheus/prometheus/issues/19679) - \[BUGFIX] Scrape: Fix failing scrapes of protobuf float histograms with zero sample, zero and bucket counts, such as the result of recording `rate(x[1m])` over a constant histogram. [#&#8203;19682](https://github.com/prometheus/prometheus/issues/19682) ### [`v3.13.3`](https://github.com/prometheus/prometheus/releases/tag/v3.13.3): 3.13.3 / 2026-09-07 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.13.2...v3.13.3) - \[SECURITY] Bump github.com/klauspost/compress to v1.18.7 (GO-2026-5841) and golang.org/x/crypto to v0.55.0 (GO-2026-6303). - \[BUGFIX] Docker SD: Fix panic in Docker Swarm service discovery when a service runs as a plugin or network-attachment. [#&#8203;19102](https://github.com/prometheus/prometheus/issues/19102) - \[BUGFIX] PromQL: Fix case-insensitive regex label matchers silently dropping matching values. [#&#8203;19167](https://github.com/prometheus/prometheus/issues/19167) - \[BUGFIX] Scrape: Fix scrape manager spinning at 100% CPU on shutdown. [#&#8203;19149](https://github.com/prometheus/prometheus/issues/19149) - \[BUGFIX] Alerting: Fix 100% CPU usage on shutdown that could delay graceful shutdown and trigger timeout-based kills. [#&#8203;17859](https://github.com/prometheus/prometheus/issues/17859) - \[BUGFIX] TSDB: Fix out-of-order queries blocking compaction for hours, causing memory usage to grow. [#&#8203;19013](https://github.com/prometheus/prometheus/issues/19013) - \[BUGFIX] TSDB: Fix deleted series causing missing samples and errors after restart. [#&#8203;19140](https://github.com/prometheus/prometheus/issues/19140) - \[BUGFIX] TSDB: Fix goroutine and file handle leaks when Prometheus fails to open a corrupt TSDB. On Windows, the leaked directory handle also prevented TSDB directory removal. [#&#8203;18291](https://github.com/prometheus/prometheus/issues/18291) ### [`v3.13.2`](https://github.com/prometheus/prometheus/releases/tag/v3.13.2): 3.13.2 / 2026-07-29 [Compare Source](https://github.com/prometheus/prometheus/compare/v3.13.1...v3.13.2) #### What's Changed - \[SECURITY] Bump golang.org/x/text to v0.39.0 (CVE-2026-56852) and google.golang.org/grpc to v1.82.1 (GHSA-hrxh-6v49-42gf). [#&#8203;19290](https://github.com/prometheus/prometheus/issues/19290) by [@&#8203;krajorama](https://github.com/krajorama) - \[BUGFIX] PromQL: Preallocate the active query tracker file to avoid SIGBUS crashes when the data disk is full. [#&#8203;19289](https://github.com/prometheus/prometheus/issues/19289) by [@&#8203;akshajrawat](https://github.com/akshajrawat) **Full Changelog**: <https://github.com/prometheus/prometheus/compare/v3.13.1...v3.13.2> </details> <details> <summary>prometheus-pve/prometheus-pve-exporter (docker.io/prompve/prometheus-pve-exporter)</summary> ### [`v3.11.0`](https://github.com/prometheus-pve/prometheus-pve-exporter/blob/HEAD/CHANGELOG.rst#3110---2026-10-31) [Compare Source](https://github.com/prometheus-pve/prometheus-pve-exporter/compare/v3.10.2...v3.11.0) Added ``` - Support _FILE suffix for credential environment variables (#&#8203;542) Changed ``` - Bump paramiko from 5.0.0 to 5.1.0 ([#&#8203;541](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/541)) - Bump pypa/gh-action-pypi-publish from 1.14.2 to 1.14.3 ([#&#8203;540](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/540)) - Bump pycparser from 3.0 to 3.12 ([#&#8203;539](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/539)) - Bump docker/login-action from 4.6.0 to 4.7.0 ([#&#8203;538](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/538)) - Bump actions/setup-python from 7.0.0 to 7.1.0 ([#&#8203;537](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/537)) - Bump alpine from 3.24.2 to 3.24.3 ([#&#8203;536](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/536)) ### [`v3.10.2`](https://github.com/prometheus-pve/prometheus-pve-exporter/blob/HEAD/CHANGELOG.rst#3102---2026-10-26) [Compare Source](https://github.com/prometheus-pve/prometheus-pve-exporter/compare/v3.10.1...v3.10.2) Changed ``` - Bump markupsafe from 3.0.3 to 3.0.4 (#&#8203;525) - Bump wrapt from 2.4.1 to 2.5.1 (#&#8203;524) - Bump charset-normalizer from 3.5.1 to 3.5.2 (#&#8203;526) - Bump cryptography from 50.0.1 to 50.0.2 (#&#8203;523) - Bump werkzeug from 3.1.8 to 3.1.9 (#&#8203;527) - Bump actions/download-artifact from 8.0.1 to 8.0.2 (#&#8203;528) - Bump actions/upload-artifact from 7.0.1 to 7.0.2 (#&#8203;529) - Bump certifi from 2026.7.22 to 2026.10.23 (#&#8203;533) `3.10.1`_ - 2026-10-03 ---------------------- Changed ``` - Bump idna from 3.19 to 3.20 ([#&#8203;520](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/520)) - Bump urllib3 from 2.7.0 to 2.8.0 ([#&#8203;519](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/519)) - Bump cryptography from 50.0.0 to 50.0.1 ([#&#8203;511](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/511)) - Bump gunicorn from 26.1.0 to 26.2.0 ([#&#8203;509](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/509)) - Bump alpine from 3.24.1 to 3.24.2 ([#&#8203;517](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/517)) - Bump docker/build-push-action from 7.3.0 to 7.4.0 ([#&#8203;518](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/518)) - Bump docker/setup-qemu-action from 4.2.0 to 4.4.0 ([#&#8203;516](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/516)) - Bump docker/setup-buildx-action from 4.3.0 to 4.4.1 ([#&#8203;515](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/515)) - Bump wrapt from 2.3.0 to 2.4.1 ([#&#8203;514](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/514)) - Bump actions/attest from 4.1.1 to 4.2.2 ([#&#8203;506](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/506)) - Bump docker/setup-buildx-action from 4.1.0 to 4.3.0 ([#&#8203;507](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/507)) - Bump idna from 3.18 to 3.19 ([#&#8203;504](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/504)) - Bump gunicorn from 26.0.0 to 26.1.0 ([#&#8203;505](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/505)) - Bump charset-normalizer from 3.4.9 to 3.5.1 ([#&#8203;502](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/502)) - Bump cffi from 2.1.0 to 2.1.1 ([#&#8203;501](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/501)) - Bump docker/login-action from 4.4.0 to 4.6.0 ([#&#8203;500](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/500)) - Bump packaging from 26.2 to 26.3 ([#&#8203;499](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/499)) - Bump actions/setup-python from 6.3.0 to 7.0.0 ([#&#8203;498](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/498)) - Bump actions/checkout from 7.0.0 to 7.0.1 ([#&#8203;497](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/497)) - Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.2 ([#&#8203;495](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/495)) ### [`v3.10.1`](https://github.com/prometheus-pve/prometheus-pve-exporter/releases/tag/v3.10.1) [Compare Source](https://github.com/prometheus-pve/prometheus-pve-exporter/compare/v3.10.0...v3.10.1) #### What's Changed - Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;495](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/495) - Bump actions/checkout from 7.0.0 to 7.0.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;497](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/497) - Bump actions/setup-python from 6.3.0 to 7.0.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;498](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/498) - Bump packaging from 26.2 to 26.3 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;499](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/499) - Bump docker/login-action from 4.4.0 to 4.6.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;500](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/500) - Bump cffi from 2.1.0 to 2.1.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;501](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/501) - Bump charset-normalizer from 3.4.9 to 3.5.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;502](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/502) - Bump gunicorn from 26.0.0 to 26.1.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;505](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/505) - Bump idna from 3.18 to 3.19 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;504](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/504) - Bump docker/setup-buildx-action from 4.1.0 to 4.3.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;507](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/507) - Bump actions/attest from 4.1.1 to 4.2.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;506](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/506) - Bump wrapt from 2.3.0 to 2.4.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;514](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/514) - Bump docker/setup-buildx-action from 4.3.0 to 4.4.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;515](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/515) - Bump docker/setup-qemu-action from 4.2.0 to 4.4.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;516](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/516) - Bump docker/build-push-action from 7.3.0 to 7.4.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;518](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/518) - Bump alpine from 3.24.1 to 3.24.2 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;517](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/517) - Bump gunicorn from 26.1.0 to 26.2.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;509](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/509) - Bump cryptography from 50.0.0 to 50.0.1 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;511](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/511) - Bump urllib3 from 2.7.0 to 2.8.0 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;519](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/519) - Bump idna from 3.19 to 3.20 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;520](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/520) - Prepare release 3.10.1 by [@&#8203;znerol](https://github.com/znerol) in [#&#8203;522](https://github.com/prometheus-pve/prometheus-pve-exporter/pull/522) **Full Changelog**: <https://github.com/prometheus-pve/prometheus-pve-exporter/compare/v3.10.0...v3.10.1> ### [`v3.10.0`](https://github.com/prometheus-pve/prometheus-pve-exporter/blob/HEAD/CHANGELOG.rst#3100---2026-08-10) [Compare Source](https://github.com/prometheus-pve/prometheus-pve-exporter/compare/v3.9.0...v3.10.0) Added ``` - Bump minimum python version to 3.11 (#&#8203;458) Changed ``` - Bump cryptography from 49.0.0 to 50.0.0 ([#&#8203;491](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/491)) - Bump wrapt from 2.2.2 to 2.3.0 ([#&#8203;490](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/490)) - Bump prometheus-client from 0.25.0 to 0.26.0 ([#&#8203;489](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/489)) - Bump certifi from 2026.6.17 to 2026.7.22 ([#&#8203;486](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/486)) - Bump charset-normalizer from 3.4.7 to 3.4.9 ([#&#8203;484](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/484)) - Bump cffi from 2.0.0 to 2.1.0 ([#&#8203;483](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/483)) - Bump docker/login-action from 4.2.0 to 4.4.0 ([#&#8203;482](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/482)) - Bump docker/build-push-action from 7.2.0 to 7.3.0 ([#&#8203;481](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/481)) - Bump docker/metadata-action from 6.1.0 to 6.2.0 ([#&#8203;480](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/480)) - Bump actions/attest from 4.1.0 to 4.1.1 ([#&#8203;478](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/478)) - Bump docker/setup-qemu-action from 4.1.0 to 4.2.0 ([#&#8203;477](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/477)) - Switch from actions/attest-build-provenance to actions/attest ([#&#8203;473](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/473)) - Bump actions/checkout from 6.0.3 to 7.0.0 ([#&#8203;475](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/475)) - Bump wrapt from 2.2.1 to 2.2.2 ([#&#8203;476](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/476)) - Bump actions/setup-python from 6.2.0 to 6.3.0 ([#&#8203;474](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/474)) - Disable gunicorn control socket ([#&#8203;472](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/472)) - Bump cryptography from 48.0.1 to 49.0.0 ([#&#8203;470](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/470)) - Bump certifi from 2026.5.20 to 2026.6.17 ([#&#8203;469](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/469)) - Bump alpine from 3.24.0 to 3.24.1 ([#&#8203;468](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/468)) - Bump alpine from 3.23.4 to 3.24.0 ([#&#8203;465](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/465)) - Bump cryptography from 46.0.7 to 48.0.1 ([#&#8203;466](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/466)) - Bump gunicorn from 23.0.0 to 26.0.0 ([#&#8203;462](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/462)) - Bump requests from 2.33.1 to 2.34.2 ([#&#8203;463](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/463)) - Bump charset-normalizer from 3.3.2 to 3.4.7 ([#&#8203;464](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/464)) - Bump idna from 3.17 to 3.18 ([#&#8203;461](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/461)) - Bump certifi from 2024.7.4 to 2026.5.20 ([#&#8203;460](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/460)) - Bump actions/checkout from 6.0.2 to 6.0.3 ([#&#8203;459](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/459)) - Bump bcrypt from 4.1.2 to 5.0.0 ([#&#8203;457](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/457)) - Bump pycparser from 2.21 to 3.0 ([#&#8203;456](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/456)) - Bump invoke from 2.2.0 to 3.0.3 ([#&#8203;455](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/455)) - Bump markupsafe from 2.1.3 to 3.0.3 ([#&#8203;454](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/454)) - Bump packaging from 23.2 to 26.2 ([#&#8203;453](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/453)) - Bump docker/setup-qemu-action from 4.0.0 to 4.1.0 ([#&#8203;452](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/452)) - Allow dependabot to update all pip dependencies ([#&#8203;451](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/451)) - Bump idna from 3.7 to 3.17 ([#&#8203;450](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/450)) - fixup! Bump wrapt from 2.1.2 to 2.2.1 ([#&#8203;449](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/449)) - Revert "Bump wrapt from 2.1.2 to 2.2.1 ([#&#8203;449](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/449))" - Bump wrapt from 2.1.2 to 2.2.1 ([#&#8203;449](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/449)) - Bump docker/metadata-action from 6.0.0 to 6.1.0 ([#&#8203;448](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/448)) - Bump docker/setup-buildx-action from 4.0.0 to 4.1.0 ([#&#8203;447](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/447)) - Bump docker/login-action from 4.1.0 to 4.2.0 ([#&#8203;446](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/446)) - Bump docker/build-push-action from 7.1.0 to 7.2.0 ([#&#8203;445](https://github.com/prometheus-pve/prometheus-pve-exporter/issues/445)) </details> <details> <summary>TwiN/gatus (ghcr.io/twin/gatus)</summary> ### [`v5.38.0`](https://github.com/TwiN/gatus/releases/tag/v5.38.0) [Compare Source](https://github.com/TwiN/gatus/compare/v5.37.0...v5.38.0) #### What's Changed - feat(alerting): add Resend alerting provider by [@&#8203;geffersonFerraz](https://github.com/geffersonFerraz) in [#&#8203;1830](https://github.com/TwiN/gatus/pull/1830) - fix(maintenance): validate maintenance windows for external, DNS and SSH endpoints by [@&#8203;anandghegde](https://github.com/anandghegde) in [#&#8203;1804](https://github.com/TwiN/gatus/pull/1804) - fix(alerting): Redact telegram token from errors on send failure by [@&#8203;hippi345](https://github.com/hippi345) in [#&#8203;1843](https://github.com/TwiN/gatus/pull/1843) - fix(websocket): apply the client timeout to reads and writes by [@&#8203;somaz94](https://github.com/somaz94) in [#&#8203;1845](https://github.com/TwiN/gatus/pull/1845) - fix(ssh): support keyboard-interactive authentication for endpoints and tunnels by [@&#8203;peckto](https://github.com/peckto) in [#&#8203;1863](https://github.com/TwiN/gatus/pull/1863) - fix(security): add comprehensive logging and diagnostics for OIDC ([#&#8203;1802](https://github.com/TwiN/gatus/issues/1802)) by [@&#8203;tech00exploere](https://github.com/tech00exploere) in [#&#8203;1862](https://github.com/TwiN/gatus/pull/1862) - fix(jsonpath): support object keys containing dots via quoted accessors by [@&#8203;leotemtem](https://github.com/leotemtem) in [#&#8203;1864](https://github.com/TwiN/gatus/pull/1864) - fix: Honor minimum-reminder-interval for external endpoints by [@&#8203;yzxcj797](https://github.com/yzxcj797) in [#&#8203;1773](https://github.com/TwiN/gatus/pull/1773) - chore(alerting): restyle matrix alerts with errors, safe links and escaping by [@&#8203;mazzz1y](https://github.com/mazzz1y) in [#&#8203;1875](https://github.com/TwiN/gatus/pull/1875) #### New Contributors - [@&#8203;anandghegde](https://github.com/anandghegde) made their first contribution in [#&#8203;1804](https://github.com/TwiN/gatus/pull/1804) - [@&#8203;yzxcj797](https://github.com/yzxcj797) made their first contribution in [#&#8203;1773](https://github.com/TwiN/gatus/pull/1773) - [@&#8203;hippi345](https://github.com/hippi345) made their first contribution in [#&#8203;1843](https://github.com/TwiN/gatus/pull/1843) - [@&#8203;geffersonFerraz](https://github.com/geffersonFerraz) made their first contribution in [#&#8203;1830](https://github.com/TwiN/gatus/pull/1830) - [@&#8203;somaz94](https://github.com/somaz94) made their first contribution in [#&#8203;1845](https://github.com/TwiN/gatus/pull/1845) - [@&#8203;peckto](https://github.com/peckto) made their first contribution in [#&#8203;1863](https://github.com/TwiN/gatus/pull/1863) - [@&#8203;tech00exploere](https://github.com/tech00exploere) made their first contribution in [#&#8203;1862](https://github.com/TwiN/gatus/pull/1862) - [@&#8203;leotemtem](https://github.com/leotemtem) made their first contribution in [#&#8203;1864](https://github.com/TwiN/gatus/pull/1864) - [@&#8203;mazzz1y](https://github.com/mazzz1y) made their first contribution in [#&#8203;1875](https://github.com/TwiN/gatus/pull/1875) **Full Changelog**: <https://github.com/TwiN/gatus/compare/v5.37.0...v5.38.0> ### [`v5.37.0`](https://github.com/TwiN/gatus/releases/tag/v5.37.0) [Compare Source](https://github.com/TwiN/gatus/compare/v5.36.0...v5.37.0) #### What's Changed - feat(alerting): allow configuring the topic for Zulip alerts by [@&#8203;ChrisJr404](https://github.com/ChrisJr404) in [#&#8203;1764](https://github.com/TwiN/gatus/pull/1764) - feat(client): Allow configuration of client cookie storage by [@&#8203;AaronLionsheep](https://github.com/AaronLionsheep) in [#&#8203;1716](https://github.com/TwiN/gatus/pull/1716) - feat(dns): Support TXT query type by [@&#8203;hernil](https://github.com/hernil) in [#&#8203;1679](https://github.com/TwiN/gatus/pull/1679) - ci: Remove codecov from repository by [@&#8203;TwiN](https://github.com/TwiN) with [@&#8203;Copilot](https://github.com/Copilot) in [#&#8203;1684](https://github.com/TwiN/gatus/pull/1684) - fix(jsonpath): prevent panic on negative array index by [@&#8203;nikolauspschuetz](https://github.com/nikolauspschuetz) in [#&#8203;1703](https://github.com/TwiN/gatus/pull/1703) - docs(alerting): Revise HomeAssistant alerts and add Home Assistant integration info by [@&#8203;TN-1](https://github.com/TN-1) in [#&#8203;1723](https://github.com/TwiN/gatus/pull/1723) - docs: update the postgres bind mount in the compose example by [@&#8203;vshulcz](https://github.com/vshulcz) in [#&#8203;1761](https://github.com/TwiN/gatus/pull/1761) - test(config): make HasLoadedConfigurationBeenModified deterministic by [@&#8203;nikolauspschuetz](https://github.com/nikolauspschuetz) in [#&#8203;1786](https://github.com/TwiN/gatus/pull/1786) #### New Contributors - [@&#8203;hernil](https://github.com/hernil) made their first contribution in [#&#8203;1679](https://github.com/TwiN/gatus/pull/1679) - [@&#8203;nikolauspschuetz](https://github.com/nikolauspschuetz) made their first contribution in [#&#8203;1703](https://github.com/TwiN/gatus/pull/1703) - [@&#8203;AaronLionsheep](https://github.com/AaronLionsheep) made their first contribution in [#&#8203;1716](https://github.com/TwiN/gatus/pull/1716) - [@&#8203;TN-1](https://github.com/TN-1) made their first contribution in [#&#8203;1723](https://github.com/TwiN/gatus/pull/1723) - [@&#8203;vshulcz](https://github.com/vshulcz) made their first contribution in [#&#8203;1761](https://github.com/TwiN/gatus/pull/1761) - [@&#8203;GRbit](https://github.com/GRbit) made their first contribution in [#&#8203;1787](https://github.com/TwiN/gatus/pull/1787) - [@&#8203;ChrisJr404](https://github.com/ChrisJr404) made their first contribution in [#&#8203;1764](https://github.com/TwiN/gatus/pull/1764) - [@&#8203;pujitha24](https://github.com/pujitha24) made their first contribution in [#&#8203;1813](https://github.com/TwiN/gatus/pull/1813) **Full Changelog**: <https://github.com/TwiN/gatus/compare/v5.36.0...v5.37.0> </details> <details> <summary>ansible/ansible-lint (https://github.com/ansible/ansible-lint)</summary> ### [`v26.11.0`](https://github.com/ansible/ansible-lint/releases/tag/v26.11.0) [Compare Source](https://github.com/ansible/ansible-lint/compare/v26.10.1...v26.11.0) #### What's Changed - fix: pin Python to 3.13 to avoid Ansible compatibility issues with… by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5224](https://github.com/ansible/ansible-lint/pull/5224) - Amazon Linux 2027 is in Preview by [@&#8203;OurFriendIrony](https://github.com/OurFriendIrony) in [#&#8203;5208](https://github.com/ansible/ansible-lint/pull/5208) - fix: resolve collection playbooks with extensions by [@&#8203;jhang01](https://github.com/jhang01) in [#&#8203;5191](https://github.com/ansible/ansible-lint/pull/5191) - fix: preserve explicit YAML tags like !!python/name during --fix by [@&#8203;Ishita-Singh-12](https://github.com/Ishita-Singh-12) in [#&#8203;5202](https://github.com/ansible/ansible-lint/pull/5202) - fix: do not color stderr output when stderr is redirected by [@&#8203;Ishita-Singh-12](https://github.com/Ishita-Singh-12) in [#&#8203;5203](https://github.com/ansible/ansible-lint/pull/5203) - Combine cache exclusion, YAML formatting, and event-query fixes by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5228](https://github.com/ansible/ansible-lint/pull/5228) - perf: avoid deepcopy in \_sanitize_task by [@&#8203;simonpahl](https://github.com/simonpahl) in [#&#8203;5207](https://github.com/ansible/ansible-lint/pull/5207) - fix(security): update dependencies to resolve Dependabot alerts by [@&#8203;sudhirverma](https://github.com/sudhirverma) in [#&#8203;5230](https://github.com/ansible/ansible-lint/pull/5230) #### New Contributors - [@&#8203;OurFriendIrony](https://github.com/OurFriendIrony) made their first contribution in [#&#8203;5208](https://github.com/ansible/ansible-lint/pull/5208) - [@&#8203;jhang01](https://github.com/jhang01) made their first contribution in [#&#8203;5191](https://github.com/ansible/ansible-lint/pull/5191) - [@&#8203;Ishita-Singh-12](https://github.com/Ishita-Singh-12) made their first contribution in [#&#8203;5202](https://github.com/ansible/ansible-lint/pull/5202) - [@&#8203;simonpahl](https://github.com/simonpahl) made their first contribution in [#&#8203;5207](https://github.com/ansible/ansible-lint/pull/5207) **Full Changelog**: <https://github.com/ansible/ansible-lint/compare/v26.10.1...v26.11.0> ### [`v26.10.1`](https://github.com/ansible/ansible-lint/releases/tag/v26.10.1) [Compare Source](https://github.com/ansible/ansible-lint/compare/v26.10.0...v26.10.1) #### What's Changed - fix: lower cryptography minimum version to 46.0.7 by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5212](https://github.com/ansible/ansible-lint/pull/5212) **Full Changelog**: <https://github.com/ansible/ansible-lint/compare/v26.10.0...v26.10.1> ### [`v26.10.0`](https://github.com/ansible/ansible-lint/releases/tag/v26.10.0) [Compare Source](https://github.com/ansible/ansible-lint/compare/v26.9.0...v26.10.0) #### What's Changed - fix: respect skip_list for yaml\[comments] during --fix by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5177](https://github.com/ansible/ansible-lint/pull/5177) - Fix/scorecard security improvements v2 by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5194](https://github.com/ansible/ansible-lint/pull/5194) - fix: correctly match symlinked PATH entries in path_inject() by [@&#8203;sushmithainjeti](https://github.com/sushmithainjeti) in [#&#8203;5205](https://github.com/ansible/ansible-lint/pull/5205) - fix(security): update dependencies \[SECURITY] by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5206](https://github.com/ansible/ansible-lint/pull/5206) #### New Contributors - [@&#8203;sushmithainjeti](https://github.com/sushmithainjeti) made their first contribution in [#&#8203;5205](https://github.com/ansible/ansible-lint/pull/5205) **Full Changelog**: <https://github.com/ansible/ansible-lint/compare/v26.9.0...v26.10.0> ### [`v26.9.0`](https://github.com/ansible/ansible-lint/releases/tag/v26.9.0) [Compare Source](https://github.com/ansible/ansible-lint/compare/v26.8.0...v26.9.0) #### Features - feat: support `example` section in file `meta/argument_specs.yml` ([#&#8203;5164](https://github.com/ansible/ansible-lint/issues/5164)) [@&#8203;berndfinger](https://github.com/berndfinger) #### Fixes - fix: resolve short mock modules during syntax check ([#&#8203;5149](https://github.com/ansible/ansible-lint/issues/5149)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: propagate `extra_vars` to `import_playbook` syntax check ([#&#8203;5148](https://github.com/ansible/ansible-lint/issues/5148)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: resolve nested `include_tasks` relative paths ([#&#8203;5159](https://github.com/ansible/ansible-lint/issues/5159)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: resolve `include_tasks` paths from playbook dir ([#&#8203;5184](https://github.com/ansible/ansible-lint/issues/5184)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: apply profile-level skip list during linting ([#&#8203;5151](https://github.com/ansible/ansible-lint/issues/5151)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: honor `warn_list` after `--fix` rewrites task names ([#&#8203;5085](https://github.com/ansible/ansible-lint/issues/5085)) [@&#8203;santosh7676](https://github.com/santosh7676) - fix: mock_modules clobbering collections and args false positives ([#&#8203;5157](https://github.com/ansible/ansible-lint/issues/5157)) [@&#8203;djdanielsson](https://github.com/djdanielsson) - fix: inject plain-name mock roles path regardless of `--offline` ([#&#8203;5183](https://github.com/ansible/ansible-lint/issues/5183)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: warn users when directory expansion discovers new files ([#&#8203;5158](https://github.com/ansible/ansible-lint/issues/5158)) [@&#8203;rockygeekz](https://github.com/rockygeekz) - fix: skip auto-fix `no-jinja-when` on string-embedded jinja ([#&#8203;5103](https://github.com/ansible/ansible-lint/issues/5103)) [@&#8203;f1047](https://github.com/f1047) - fix: do not warn when Jinja block indent is only trim-marker noise ([#&#8203;5153](https://github.com/ansible/ansible-lint/issues/5153)) [@&#8203;DSeaStar](https://github.com/DSeaStar) - fix: preserve blank lines after flow collections ([#&#8203;5178](https://github.com/ansible/ansible-lint/issues/5178)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: add `validate_argspec` to play schema ([#&#8203;5187](https://github.com/ansible/ansible-lint/issues/5187)) [@&#8203;sameeralam3127](https://github.com/sameeralam3127) - fix: use ThreadPoolExecutor for syntax check workers ([#&#8203;5173](https://github.com/ansible/ansible-lint/issues/5173)) [@&#8203;rockygeekz](https://github.com/rockygeekz) - fix: drop ruamel.yaml.clib ([#&#8203;5163](https://github.com/ansible/ansible-lint/issues/5163)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix(deps): upgrade gitpython 3.1.57 to 3.1.59 ([#&#8203;5152](https://github.com/ansible/ansible-lint/issues/5152)) [@&#8203;rockygeekz](https://github.com/rockygeekz) - fix: upgrade black to >=25.2.0 to address CVE-2026-32274 ([#&#8203;5166](https://github.com/ansible/ansible-lint/issues/5166)) [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) - fix: raise cryptography floor and bump js-yaml for Guardian prod vulns ([#&#8203;5174](https://github.com/ansible/ansible-lint/issues/5174)) [@&#8203;rockygeekz](https://github.com/rockygeekz) #### Performance - perf: cache `get_deps_versions()` result ([#&#8203;5113](https://github.com/ansible/ansible-lint/issues/5113)) [@&#8203;BlackDark](https://github.com/BlackDark) #### Maintenance - chore: Add `.github/SECURITY.md` ([#&#8203;5165](https://github.com/ansible/ansible-lint/issues/5165)) [@&#8203;gundalow](https://github.com/gundalow) - chore(deps): update all dependencies and pep621 ([#&#8203;5138](https://github.com/ansible/ansible-lint/issues/5138), [#&#8203;5154](https://github.com/ansible/ansible-lint/issues/5154), [#&#8203;5155](https://github.com/ansible/ansible-lint/issues/5155), [#&#8203;5160](https://github.com/ansible/ansible-lint/issues/5160), [#&#8203;5161](https://github.com/ansible/ansible-lint/issues/5161), [#&#8203;5172](https://github.com/ansible/ansible-lint/issues/5172), [#&#8203;5175](https://github.com/ansible/ansible-lint/issues/5175), [#&#8203;5176](https://github.com/ansible/ansible-lint/issues/5176)) @&#8203;[renovate\[bot\]](https://github.com/apps/renovate) #### What's Changed - chore(deps): update all dependencies by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5138](https://github.com/ansible/ansible-lint/pull/5138) - fix: resolve short mock modules during syntax check by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5149](https://github.com/ansible/ansible-lint/pull/5149) - fix(deps): upgrade gitpython 3.1.57 to 3.1.59 by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5152](https://github.com/ansible/ansible-lint/pull/5152) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5155](https://github.com/ansible/ansible-lint/pull/5155) - fix: propagate extra_vars to import_playbook syntax check by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5148](https://github.com/ansible/ansible-lint/pull/5148) - fix: warn users when directory expansion discovers new files by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5158](https://github.com/ansible/ansible-lint/pull/5158) - fix: resolve nested include_tasks relative paths by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5159](https://github.com/ansible/ansible-lint/pull/5159) - fix: apply profile-level skip list during linting by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5151](https://github.com/ansible/ansible-lint/pull/5151) - chore(deps): update all dependencies by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5154](https://github.com/ansible/ansible-lint/pull/5154) - chore(deps): update all dependencies by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5160](https://github.com/ansible/ansible-lint/pull/5160) - fix: skip auto-fix no-jinja-when on string-embedded jinja by [@&#8203;f1047](https://github.com/f1047) in [#&#8203;5103](https://github.com/ansible/ansible-lint/pull/5103) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5161](https://github.com/ansible/ansible-lint/pull/5161) - fix: do not warn when Jinja block indent is only trim-marker noise by [@&#8203;DSeaStar](https://github.com/DSeaStar) in [#&#8203;5153](https://github.com/ansible/ansible-lint/pull/5153) - chore: Add .github/SECURITY.md by [@&#8203;gundalow](https://github.com/gundalow) in [#&#8203;5165](https://github.com/ansible/ansible-lint/pull/5165) - fix: upgrade black to >=25.2.0 to address CVE-2026-32274 by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5166](https://github.com/ansible/ansible-lint/pull/5166) - Fix/drop ruamel yaml clib fresh by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5163](https://github.com/ansible/ansible-lint/pull/5163) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5172](https://github.com/ansible/ansible-lint/pull/5172) - fix: honor warn_list after --fix rewrites task names by [@&#8203;santosh7676](https://github.com/santosh7676) in [#&#8203;5085](https://github.com/ansible/ansible-lint/pull/5085) - feat: support 'example' section in file meta/argument_specs.yml by [@&#8203;berndfinger](https://github.com/berndfinger) in [#&#8203;5164](https://github.com/ansible/ansible-lint/pull/5164) - fix: use ThreadPoolExecutor for syntax check workers by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5173](https://github.com/ansible/ansible-lint/pull/5173) - fix: mock_modules clobbering collections and args false positives by [@&#8203;djdanielsson](https://github.com/djdanielsson) in [#&#8203;5157](https://github.com/ansible/ansible-lint/pull/5157) - fix: raise cryptography floor and bump js-yaml for Guardian prod vulns by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5174](https://github.com/ansible/ansible-lint/pull/5174) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5176](https://github.com/ansible/ansible-lint/pull/5176) - chore(deps): update all dependencies by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5175](https://github.com/ansible/ansible-lint/pull/5175) - fix: preserve blank lines after flow collections by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5178](https://github.com/ansible/ansible-lint/pull/5178) - perf: cache get_deps_versions() result by [@&#8203;BlackDark](https://github.com/BlackDark) in [#&#8203;5113](https://github.com/ansible/ansible-lint/pull/5113) - fix: inject plain-name mock roles path regardless of --offline by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5183](https://github.com/ansible/ansible-lint/pull/5183) - fix: resolve include_tasks paths from playbook dir by [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) in [#&#8203;5184](https://github.com/ansible/ansible-lint/pull/5184) - fix: add validate_argspec to play schema by [@&#8203;sameeralam3127](https://github.com/sameeralam3127) in [#&#8203;5187](https://github.com/ansible/ansible-lint/pull/5187) #### New Contributors - [@&#8203;shvenkat-rh](https://github.com/shvenkat-rh) made their first contribution in [#&#8203;5149](https://github.com/ansible/ansible-lint/pull/5149) - [@&#8203;f1047](https://github.com/f1047) made their first contribution in [#&#8203;5103](https://github.com/ansible/ansible-lint/pull/5103) - [@&#8203;DSeaStar](https://github.com/DSeaStar) made their first contribution in [#&#8203;5153](https://github.com/ansible/ansible-lint/pull/5153) - [@&#8203;berndfinger](https://github.com/berndfinger) made their first contribution in [#&#8203;5164](https://github.com/ansible/ansible-lint/pull/5164) - [@&#8203;BlackDark](https://github.com/BlackDark) made their first contribution in [#&#8203;5113](https://github.com/ansible/ansible-lint/pull/5113) - [@&#8203;sameeralam3127](https://github.com/sameeralam3127) made their first contribution in [#&#8203;5187](https://github.com/ansible/ansible-lint/pull/5187) **Full Changelog**: <https://github.com/ansible/ansible-lint/compare/v26.8.0...v26.9.0> ### [`v26.8.0`](https://github.com/ansible/ansible-lint/releases/tag/v26.8.0) [Compare Source](https://github.com/ansible/ansible-lint/compare/v26.6.0...v26.8.0) #### What's Changed - Fix/sonarcloud unbounded recursion complexity by [@&#8203;sathyapramod](https://github.com/sathyapramod) in [#&#8203;5098](https://github.com/ansible/ansible-lint/pull/5098) - feat: honor ANSIBLE_VAULT_PASSWORD_FILE for vault decryption by [@&#8203;JohnLahr](https://github.com/JohnLahr) in [#&#8203;5019](https://github.com/ansible/ansible-lint/pull/5019) - fix: jinja\[spacing] rule creating invalid syntax for minus modifiers by [@&#8203;Dotify71](https://github.com/Dotify71) in [#&#8203;5102](https://github.com/ansible/ansible-lint/pull/5102) - chore(deps): update all dependencies by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5081](https://github.com/ansible/ansible-lint/pull/5081) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5082](https://github.com/ansible/ansible-lint/pull/5082) - fix: remove stale words from cspell dictionary by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5109](https://github.com/ansible/ansible-lint/pull/5109) - chore(deps): bump schemas npm packages for Dependabot CVEs by [@&#8203;sudhirverma](https://github.com/sudhirverma) in [#&#8203;5114](https://github.com/ansible/ansible-lint/pull/5114) - fix(security): update dependencies \[SECURITY] by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5111](https://github.com/ansible/ansible-lint/pull/5111) - fix: address SonarCloud new code violations by [@&#8203;sudhirverma](https://github.com/sudhirverma) in [#&#8203;5116](https://github.com/ansible/ansible-lint/pull/5116) - chore(deps): update all dependencies by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5121](https://github.com/ansible/ansible-lint/pull/5121) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5122](https://github.com/ansible/ansible-lint/pull/5122) - fix(deps): exclude ansible-core 2.17.x (CVE-2026-11332) by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5123](https://github.com/ansible/ansible-lint/pull/5123) - fix: expose ansible-galaxy on the uv tool-install path by [@&#8203;jeffcpullen](https://github.com/jeffcpullen) in [#&#8203;5124](https://github.com/ansible/ansible-lint/pull/5124) - fix: var-naming for register projections by [@&#8203;0xTaoZ](https://github.com/0xTaoZ) in [#&#8203;5110](https://github.com/ansible/ansible-lint/pull/5110) - chore: Adding OpenWrt 25.12 as platform by [@&#8203;sscheib](https://github.com/sscheib) in [#&#8203;5132](https://github.com/ansible/ansible-lint/pull/5132) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5134](https://github.com/ansible/ansible-lint/pull/5134) - chore(deps): update all dependencies by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5133](https://github.com/ansible/ansible-lint/pull/5133) - fix: add timeout to release-check urlopen() call by [@&#8203;cooperlees](https://github.com/cooperlees) in [#&#8203;5128](https://github.com/ansible/ansible-lint/pull/5128) - fix: respect ANSIBLE_HOME env var for cache dir selection ([#&#8203;5806](https://github.com/ansible/ansible-lint/issues/5806)) by [@&#8203;Jkhall81](https://github.com/Jkhall81) in [#&#8203;5105](https://github.com/ansible/ansible-lint/pull/5105) - fix: deduplicate ANSIBLE_HOME isolation check by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5140](https://github.com/ansible/ansible-lint/pull/5140) - fix(security): update dependencies \[SECURITY] by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5141](https://github.com/ansible/ansible-lint/pull/5141) - fix: do not require role prefix for ansible\_ connection variables by [@&#8203;Sanjays2402](https://github.com/Sanjays2402) in [#&#8203;5130](https://github.com/ansible/ansible-lint/pull/5130) - Adding missing FreeBSD versions. by [@&#8203;jmpalacios](https://github.com/jmpalacios) in [#&#8203;5143](https://github.com/ansible/ansible-lint/pull/5143) - chore(deps): update all dependencies pep621 by [@&#8203;renovate](https://github.com/renovate)\[bot] in [#&#8203;5139](https://github.com/ansible/ansible-lint/pull/5139) - fix: prepend runtime cache dir to collections paths ([#&#8203;5137](https://github.com/ansible/ansible-lint/issues/5137)) by [@&#8203;rockygeekz](https://github.com/rockygeekz) in [#&#8203;5145](https://github.com/ansible/ansible-lint/pull/5145) #### New Contributors - [@&#8203;sathyapramod](https://github.com/sathyapramod) made their first contribution in [#&#8203;5098](https://github.com/ansible/ansible-lint/pull/5098) - [@&#8203;JohnLahr](https://github.com/JohnLahr) made their first contribution in [#&#8203;5019](https://github.com/ansible/ansible-lint/pull/5019) - [@&#8203;jeffcpullen](https://github.com/jeffcpullen) made their first contribution in [#&#8203;5124](https://github.com/ansible/ansible-lint/pull/5124) - [@&#8203;0xTaoZ](https://github.com/0xTaoZ) made their first contribution in [#&#8203;5110](https://github.com/ansible/ansible-lint/pull/5110) - [@&#8203;cooperlees](https://github.com/cooperlees) made their first contribution in [#&#8203;5128](https://github.com/ansible/ansible-lint/pull/5128) - [@&#8203;Sanjays2402](https://github.com/Sanjays2402) made their first contribution in [#&#8203;5130](https://github.com/ansible/ansible-lint/pull/5130) - [@&#8203;jmpalacios](https://github.com/jmpalacios) made their first contribution in [#&#8203;5143](https://github.com/ansible/ansible-lint/pull/5143) **Full Changelog**: <https://github.com/ansible/ansible-lint/compare/v26.6.0...v26.8.0> </details> <details> <summary>netbox-community/netbox (netbox)</summary> ### [`v4.7.5`](https://github.com/netbox-community/netbox/releases/tag/v4.7.5): - 2026-11-10 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.7.4...v4.7.5) #### Enhancements - [#&#8203;23470](https://github.com/netbox-community/netbox/issues/23470) - Add 3C8P, 3C12P, and 4C12P trunk cable profiles #### Performance Improvements - [#&#8203;23505](https://github.com/netbox-community/netbox/issues/23505) - Avoid redundant query conditions when filtering by a non-unique name or slug, such as MAC addresses by `interface` or device components by `device` - [#&#8203;23562](https://github.com/netbox-community/netbox/issues/23562) - Batch the loading of related objects read by export templates, rather than querying them for each object - [#&#8203;23563](https://github.com/netbox-community/netbox/issues/23563) - Batch the loading of related objects when rendering global search results - [#&#8203;23564](https://github.com/netbox-community/netbox/issues/23564) - Batch the loading of cable terminations and their parent objects when listing cables, cable terminations, ports, and power feeds via the REST API - [#&#8203;23565](https://github.com/netbox-community/netbox/issues/23565) - Batch the loading of deferred fields and related objects which the GraphQL query optimizer can't anticipate, such as those read when resolving `link_peers` and `connected_endpoints` #### Bug Fixes - [#&#8203;23185](https://github.com/netbox-community/netbox/issues/23185) - Prevent the deletion of a region or site group from also deleting the circuit terminations attached to its sites and locations - [#&#8203;23260](https://github.com/netbox-community/netbox/issues/23260) - Fix exception when applying migration `dcim.0245_consolidate_unique_constraints` on installations whose location, region, or site group unique constraints have auto-generated names - [#&#8203;23407](https://github.com/netbox-community/netbox/issues/23407) - Restrict the image attachments listed under an object's Images tab to those the user is permitted to view - [#&#8203;23446](https://github.com/netbox-community/netbox/issues/23446) - Prevent duplicate submissions of object add and edit forms (such as duplicate image attachments) by disabling the submit button after the first click - [#&#8203;23447](https://github.com/netbox-community/netbox/issues/23447) - Fix exception when ordering REST API results by an object count field (e.g. `count_ipaddresses`) which is omitted from the response by `brief` or `fields` - [#&#8203;23477](https://github.com/netbox-community/netbox/issues/23477) - Include the `asn_count` field in the REST API representation of ASN ranges - [#&#8203;23478](https://github.com/netbox-community/netbox/issues/23478) - Validate `{module}` placeholders in component labels and module bay templates when installing a module, rather than raising an exception or resolving them to an empty string - [#&#8203;23486](https://github.com/netbox-community/netbox/issues/23486) - Record pre-change data in the change log for virtual chassis members when creating, editing, or deleting a virtual chassis - [#&#8203;23510](https://github.com/netbox-community/netbox/issues/23510) - Prevent a queued background job from running after it has been deleted or marked as failed - [#&#8203;23511](https://github.com/netbox-community/netbox/issues/23511) - Display the correct file path on a script's Source tab, and identify the script file (rather than `<string>`) in error tracebacks - [#&#8203;23534](https://github.com/netbox-community/netbox/issues/23534) - Fix `IntegrityError` exception when completing a job whose owner already has a notification for it - [#&#8203;23535](https://github.com/netbox-community/netbox/issues/23535) - Prevent a duplicate recurring sync job from being created when a data source is saved as its scheduled sync finishes - [#&#8203;23542](https://github.com/netbox-community/netbox/issues/23542) - Fix `FileNotFoundError` exception when synchronizing a local data source whose subdirectory paths repeat the root path (e.g. `/scripts/scripts_old/`) - [#&#8203;23558](https://github.com/netbox-community/netbox/issues/23558) - Fix errors when editing an API token without permission to view users, or from the user's own API tokens view - [#&#8203;23559](https://github.com/netbox-community/netbox/issues/23559) - Fix the prefetching of related objects shown as display attributes in global search results - [#&#8203;23574](https://github.com/netbox-community/netbox/issues/23574) - Fix exception when passing `null` to several filters (e.g. `present_in_vrf_id`, `available_at_site`, and `interface_id`), and support filtering data sources by `sync_interval=null` - [#&#8203;23584](https://github.com/netbox-community/netbox/issues/23584) - Enforce SSO allowlist settings (e.g. `WHITELISTED_DOMAINS` and `WHITELISTED_EMAILS`) by adding `auth_allowed` to the default `SOCIAL_AUTH_PIPELINE` - [#&#8203;23585](https://github.com/netbox-community/netbox/issues/23585) - Enforce view permissions on parent and related objects when adding individual components or component templates, and when bulk adding prefixes, IP addresses, and VLANs - [#&#8203;23595](https://github.com/netbox-community/netbox/issues/23595) - Implement `update_dependent_objects()` for wireless links, circuit terminations, and channel subinterfaces, to rebuild cable paths after writes which bypass `save()` - [#&#8203;23596](https://github.com/netbox-community/netbox/issues/23596) - Record pre-change data in the change log for components adopted when installing a module - [#&#8203;23597](https://github.com/netbox-community/netbox/issues/23597) - Record change log entries and trigger event rules for port mappings created from device type and module type templates, or moved with a module to another device ### [`v4.7.4`](https://github.com/netbox-community/netbox/releases/tag/v4.7.4): - 2026-10-27 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.7.3...v4.7.4) > \[!WARNING] > This release upgrades the sorl-thumbnail dependency to v13.4.0, which fixes how cached image thumbnails resolve their storage backend. If your `STORAGES` configuration defines `OPTIONS` for a `BACKEND` path which re-exports a class defined elsewhere (for example, `storages.backends.s3boto3.S3Boto3Storage`, which is an alias of `storages.backends.s3.S3Storage`), run `manage.py thumbnail clear` once after upgrading. This purges sorl-thumbnail's record of previously generated thumbnails, which may reference the storage backend without its configured options. No image files are deleted. > \[!WARNING] > The GraphQL enum for circuit and virtual circuit status is now exposed correctly as `CircuitStatusEnum`, and its values carry the `STATUS_` prefix used by other status enums. Queries which filter on unprefixed values (e.g. `{exact: ACTIVE}`) must be updated to use the prefixed form (e.g. `{exact: STATUS_ACTIVE}`). See [#&#8203;23469](https://github.com/netbox-community/netbox/issues/23469) for details. ##### Enhancements - [#&#8203;23031](https://github.com/netbox-community/netbox/issues/23031) - Add 8C1P, 12C1P, and 24C1P trunk cable profiles - [#&#8203;23238](https://github.com/netbox-community/netbox/issues/23238) - Support the `__empty` lookup for boolean custom field filters - [#&#8203;23365](https://github.com/netbox-community/netbox/issues/23365) - Add a copy-to-clipboard button for site addresses - [#&#8203;23463](https://github.com/netbox-community/netbox/issues/23463) - Include the IDs of the associated change log records (`object_change_ids`) in event data and webhook payloads ##### Performance Improvements - [#&#8203;23076](https://github.com/netbox-community/netbox/issues/23076) - Avoid reloading deferred columns for each object when resolving the `display` field via GraphQL - [#&#8203;23259](https://github.com/netbox-community/netbox/issues/23259) - Coalesce search cache updates rather than enqueuing a background job for each change - [#&#8203;23286](https://github.com/netbox-community/netbox/issues/23286) - Count the IP addresses and FHRP group assignments of device and VM interfaces in REST API responses without loading the related objects - [#&#8203;23355](https://github.com/netbox-community/netbox/issues/23355) - Prefetch the objects referenced by object custom fields when rendering REST API lists - [#&#8203;23371](https://github.com/netbox-community/netbox/issues/23371) - Avoid deep-copying cached config context data when serializing REST and GraphQL API responses ##### Bug Fixes - [#&#8203;22359](https://github.com/netbox-community/netbox/issues/22359) - Apply the `query_params` of a custom script `ObjectVar` to its object selector - [#&#8203;22714](https://github.com/netbox-community/netbox/issues/22714) - Recover the schedules of system jobs (e.g. housekeeping) lost from the task queue, such as after restoring a database backup - [#&#8203;22883](https://github.com/netbox-community/netbox/issues/22883) - Retain existing terminations when editing a cable with multiple devices on one end, and identify the device of each termination - [#&#8203;23212](https://github.com/netbox-community/netbox/issues/23212) - Prevent the removal of a virtual chassis member whose interfaces form a LAG with another member - [#&#8203;23235](https://github.com/netbox-community/netbox/issues/23235) - Restrict the jobs listed under an object's or script's jobs tab to those the user is permitted to view - [#&#8203;23329](https://github.com/netbox-community/netbox/issues/23329) - Prevent a search within the object selector from reloading the parent form - [#&#8203;23364](https://github.com/netbox-community/netbox/issues/23364) - Restrict the most recent job reported by the scripts REST API endpoint to jobs the user is permitted to view - [#&#8203;23372](https://github.com/netbox-community/netbox/issues/23372) - Fix exception when listing bookmarks, journal entries, and other objects assigned to objects which have no REST API serializer - [#&#8203;23375](https://github.com/netbox-community/netbox/issues/23375) - Resolve the deprecated `finalize` environment parameter for export and config templates only from the template's saved record - [#&#8203;23422](https://github.com/netbox-community/netbox/issues/23422) - Fix exception when assigning a service or service template to an object custom field via the REST API - [#&#8203;23423](https://github.com/netbox-community/netbox/issues/23423) - Represent 64-bit integer fields (such as object IDs) as `BigInt` in the GraphQL API - [#&#8203;23424](https://github.com/netbox-community/netbox/issues/23424) - Declare object IDs as 64-bit integers in the OpenAPI schema - [#&#8203;23425](https://github.com/netbox-community/netbox/issues/23425) - Fix "integer out of range" error when tagging an object with an ID greater than 2,147,483,647 - [#&#8203;23445](https://github.com/netbox-community/netbox/issues/23445) - Prevent concurrent REST API updates to an object from overwriting each other's changes - [#&#8203;23448](https://github.com/netbox-community/netbox/issues/23448) - Fix the GraphQL `config_context` field when selected within an inline or named fragment - [#&#8203;23464](https://github.com/netbox-community/netbox/issues/23464) - Apply data source synchronizations atomically, so that a failed sync leaves the previously synchronized files unchanged - [#&#8203;23467](https://github.com/netbox-community/netbox/issues/23467) - Enforce view permissions on parent devices and virtual machines when creating components in bulk - [#&#8203;23469](https://github.com/netbox-community/netbox/issues/23469) - Expose the GraphQL circuit status enum as `CircuitStatusEnum`, with values prefixed by `STATUS_` (consistent with other status enums) - [#&#8203;23473](https://github.com/netbox-community/netbox/issues/23473) - Enable filtering circuits, circuit terminations, virtual circuits, and virtual circuit terminations by provider network name - [#&#8203;23484](https://github.com/netbox-community/netbox/issues/23484) - Pre-populate the location when adding a non-racked device from a location's view ### [`v4.7.3`](https://github.com/netbox-community/netbox/releases/tag/v4.7.3): - 2026-10-13 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.7.2...v4.7.3) #### Enhancements - [#&#8203;23230](https://github.com/netbox-community/netbox/issues/23230) - Add a location filter to the power feeds list view #### Performance Improvements - [#&#8203;23288](https://github.com/netbox-community/netbox/issues/23288) - Skip the loading of config context data when the field is excluded from a REST API response - [#&#8203;23290](https://github.com/netbox-community/netbox/issues/23290) - Reuse nested serializer instances when rendering REST API list responses - [#&#8203;23291](https://github.com/netbox-community/netbox/issues/23291) - Avoid loading unused virtual machines when serializing clusters via the REST API - [#&#8203;23292](https://github.com/netbox-community/netbox/issues/23292) - Skip static prefetches for fields which have been excluded from a REST API response - [#&#8203;23311](https://github.com/netbox-community/netbox/issues/23311) - Defer building the GraphQL schema until it is needed, rather than during the initialization of every management command - [#&#8203;23350](https://github.com/netbox-community/netbox/issues/23350) - Extend automatic table prefetching to reverse many-to-many relations #### Bug Fixes - [#&#8203;22802](https://github.com/netbox-community/netbox/issues/22802) - Correct the OpenAPI request body schema for the available prefixes REST API endpoint - [#&#8203;23094](https://github.com/netbox-community/netbox/issues/23094) - Fix the detection of changes to a cable's terminations - [#&#8203;23099](https://github.com/netbox-community/netbox/issues/23099) - Persist the status change of cable paths deactivated during a partial cable save - [#&#8203;23121](https://github.com/netbox-community/netbox/issues/23121) - Remove stale cable paths when a cable's terminations are changed - [#&#8203;23134](https://github.com/netbox-community/netbox/issues/23134) - Record a change log entry when a circuit's termination pointer is updated - [#&#8203;23172](https://github.com/netbox-community/netbox/issues/23172) - Permit the selection of a numeric enum value for a module type profile attribute via the UI - [#&#8203;23198](https://github.com/netbox-community/netbox/issues/23198) - Restrict the rack elevation `highlight` parameter to prevent the disclosure of data the user is not permitted to view - [#&#8203;23227](https://github.com/netbox-community/netbox/issues/23227) - Display date & time custom field values in the user's local time zone within object tables - [#&#8203;23233](https://github.com/netbox-community/netbox/issues/23233) - Synchronizing a data source should not require the `add` permission - [#&#8203;23240](https://github.com/netbox-community/netbox/issues/23240) - Hide the bulk actions container on list views which have no bulk actions available - [#&#8203;23247](https://github.com/netbox-community/netbox/issues/23247) - Preserve request headers and query parameters for REST API bulk writes processed in the background - [#&#8203;23274](https://github.com/netbox-community/netbox/issues/23274) - Prevent the assignment of a primary or OOB IP address belonging to another device when creating a device - [#&#8203;23275](https://github.com/netbox-community/netbox/issues/23275) - Fix exception when setting a primary IP on a virtual device context with no assigned device - [#&#8203;23278](https://github.com/netbox-community/netbox/issues/23278) - Fix exception when creating a virtual machine with a primary IP address - [#&#8203;23280](https://github.com/netbox-community/netbox/issues/23280) - Fix exception when retrieving change log entries for port mappings via the REST API - [#&#8203;23281](https://github.com/netbox-community/netbox/issues/23281) - Ensure that modifying a new user's preferences does not alter the default preferences for other users - [#&#8203;23283](https://github.com/netbox-community/netbox/issues/23283) - Fix exception when logging in as a user with no preferences record - [#&#8203;23307](https://github.com/netbox-community/netbox/issues/23307) - Ensure that changing a cable's profile does not remove its connection from cable traces - [#&#8203;23310](https://github.com/netbox-community/netbox/issues/23310) - Fix exception when listing jobs or tagged objects assigned to objects which have no REST API serializer - [#&#8203;23321](https://github.com/netbox-community/netbox/issues/23321) - Fix `TypeError` exception when creating a device type with a front or rear image via the REST API - [#&#8203;23322](https://github.com/netbox-community/netbox/issues/23322) - Fix the `q` search filter for tunnel terminations - [#&#8203;23323](https://github.com/netbox-community/netbox/issues/23323) - Fix exception when specifying `installed_module` while creating a module bay via the REST API - [#&#8203;23324](https://github.com/netbox-community/netbox/issues/23324) - Include a circuit's group assignments in its REST API representation, and fix exception when specifying them on creation - [#&#8203;23325](https://github.com/netbox-community/netbox/issues/23325) - Fix `FieldError` exception when filtering circuits and virtual circuits by provider account - [#&#8203;23326](https://github.com/netbox-community/netbox/issues/23326) - Fix `FieldError` exception when filtering front & rear ports (and their templates) by `rear_port_id` or `front_port_id` - [#&#8203;23327](https://github.com/netbox-community/netbox/issues/23327) - Fix `FieldError` exception when searching circuit group assignments - [#&#8203;23328](https://github.com/netbox-community/netbox/issues/23328) - Return empty results or a 400 response, rather than raising an exception, when passing malformed values to certain filters - [#&#8203;23332](https://github.com/netbox-community/netbox/issues/23332) - Fix `AttributeError` exception when executing a bulk edit as a background job - [#&#8203;23340](https://github.com/netbox-community/netbox/issues/23340) - Fix exception when applying the `__empty` lookup to numeric and date/time filters - [#&#8203;23342](https://github.com/netbox-community/netbox/issues/23342) - Fix the display of circuit group assignments in the circuits list - [#&#8203;23345](https://github.com/netbox-community/netbox/issues/23345) - Validate the IDs passed to the installed module and data file filters against the correct models - [#&#8203;23367](https://github.com/netbox-community/netbox/issues/23367) - Fix the rollback of failed REST API bulk operations when writes are routed to a non-default database - [#&#8203;23369](https://github.com/netbox-community/netbox/issues/23369) - Add custom fields support to the circuit group assignment REST API serializer ### [`v4.7.2`](https://github.com/netbox-community/netbox/releases/tag/v4.7.2): - 2026-09-29 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.7.1...v4.7.2) > \[!WARNING] > NetBox v4.7.0 and v4.7.1 recorded the plaintext of API tokens created via background bulk requests in the job results, where they were readable by any user permitted to view jobs. This release rejects such requests; any tokens created this way should be considered exposed and replaced. See [#&#8203;23196](https://github.com/netbox-community/netbox/issues/23196) for details. ##### Enhancements - [#&#8203;21879](https://github.com/netbox-community/netbox/issues/21879) - Introduce the `Cable.update_dependent_objects()` hook to rebuild cable paths and related attributes after writes which bypass `save()` - [#&#8203;22886](https://github.com/netbox-community/netbox/issues/22886) - Include VLANs assigned via VLAN groups scoped to a site (or its site group) among the site's related objects - [#&#8203;22949](https://github.com/netbox-community/netbox/issues/22949) - Focus and scroll to the first field with a validation error when a form fails validation - [#&#8203;23095](https://github.com/netbox-community/netbox/issues/23095) - Display the compatible module types for a module bay type in a dedicated, sortable, and paginated table ##### Bug Fixes - [#&#8203;23122](https://github.com/netbox-community/netbox/issues/23122) - Prevent the failure to automatically sync one object from skipping the sync of subsequent objects - [#&#8203;23150](https://github.com/netbox-community/netbox/issues/23150) - Preserve the parent device type assignment when using "Create & Add Another" to add component templates - [#&#8203;23160](https://github.com/netbox-community/netbox/issues/23160) - Record a change log entry for each terminating object when a cable is deleted - [#&#8203;23181](https://github.com/netbox-community/netbox/issues/23181) - Restore the display of the cluster group in the virtual machine detail view - [#&#8203;23187](https://github.com/netbox-community/netbox/issues/23187) - Permit the assignment of a data file when creating an export template via the REST API - [#&#8203;23195](https://github.com/netbox-community/netbox/issues/23195) - Validate the `return_url` parameter used for the cancel button on the IP address assignment view - [#&#8203;23196](https://github.com/netbox-community/netbox/issues/23196) - Ensure plaintext API tokens are never recorded in background job results (see the warning above) - [#&#8203;23197](https://github.com/netbox-community/netbox/issues/23197) - Enforce object permission constraints on the REST API `sync` action for synced data models - [#&#8203;23203](https://github.com/netbox-community/netbox/issues/23203) - Fix the population of the related objects panel for owners ### [`v4.7.1`](https://github.com/netbox-community/netbox/releases/tag/v4.7.1): - 2026-09-15 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.7.0...v4.7.1) > \[!WARNING] > The triggers which cascade a hierarchical object's path to its descendants could not be recreated when restoring a `pg_dump` of a v4.7.0 database, so such a restore reported success while leaving the database without those triggers. Renaming or moving a region, site group, location, device role, platform, tenant group, contact group, wireless LAN group, module bay, inventory item, or inventory item template then did not update its descendants. Upgrading reinstalls the triggers so that all subsequent changes cascade correctly, but does **not** repair values which have already gone stale. See [Repairing Hierarchical Paths](https://docs.netbox.dev/en/stable/administration/repairing-hierarchical-paths/) for how to detect and correct them, and for the steps plugins maintaining their own `ltree` models must take. ##### Enhancements - [#&#8203;22999](https://github.com/netbox-community/netbox/issues/22999) - Add a default module type profile for transceivers - [#&#8203;23041](https://github.com/netbox-community/netbox/issues/23041) - Add InfiniBand 2X interface types for HDR and later generations (HDR100, NDR200, and XDR400) ##### Bug Fixes - [#&#8203;22750](https://github.com/netbox-community/netbox/issues/22750) - Resolve object IDs to model instances and validate the submitted data when executing a custom script via the REST API - [#&#8203;23012](https://github.com/netbox-community/netbox/issues/23012) - Apply a field's collation to both sides of a case-insensitive comparison, so that names containing characters such as `ß` can be matched - [#&#8203;23096](https://github.com/netbox-community/netbox/issues/23096) - Persist a cable's normalized length when saving only its `length` or `length_unit` field - [#&#8203;23112](https://github.com/netbox-community/netbox/issues/23112) - Initiate SSO logins via script-driven navigation, so that they are not blocked by a restrictive `form-action` content security policy - [#&#8203;23117](https://github.com/netbox-community/netbox/issues/23117) - Fix the negation (`__n`) filter lookup for multiple selection custom fields - [#&#8203;23120](https://github.com/netbox-community/netbox/issues/23120) - Include tags in the REST API representation of a data source, and honor them on write - [#&#8203;23125](https://github.com/netbox-community/netbox/issues/23125) - Add the missing standard fields to the VLAN translation policy & rule REST API serializers - [#&#8203;23130](https://github.com/netbox-community/netbox/issues/23130) - Ensure that the cascade triggers for hierarchical models can be restored from a `pg_dump` (see the warning above) - [#&#8203;23154](https://github.com/netbox-community/netbox/issues/23154) - Correct the optional/required mismatch on the L2VPN `type` and rack type `form_factor` fields - [#&#8203;23166](https://github.com/netbox-community/netbox/issues/23166) - Apply a zero-valued minimum or maximum bound from a module type profile attribute to its form field - [#&#8203;23167](https://github.com/netbox-community/netbox/issues/23167) - Sanitize the JSON schema property descriptions used as form help text for module type profile attributes ### [`v4.7.0`](https://github.com/netbox-community/netbox/releases/tag/v4.7.0): - 2026-09-02 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.6.10...v4.7.0) > \[!WARNING] > This release of NetBox drops support for PostgreSQL 14. > \[!WARNING] > The PostgreSQL database must support the [ltree extension](https://www.postgresql.org/docs/current/ltree.html). This is a trusted module which ships with PostgreSQL and does not require superuser permission to activate. It will be installed automatically upon upgrade. > \[!WARNING] > This release of NetBox drops support for Redis 5.x. ##### Breaking Changes - PostgreSQL 14 is no longer supported. NetBox now requires PostgreSQL 15 or later: The upgrade script will abort when connected to an earlier release. (NetBox v4.6 reported this as a warning.) - Redis 5.x is no longer supported. NetBox now requires Redis 6.0 or later. - Selection and multiple selection custom field values are now returned as objects specifying both the raw value and its human-friendly label (e.g. `{"value": "datacenter", "label": "Data Center"}`) in both the REST and GraphQL APIs. These fields continue to accept the raw value on write. - The `protocol` and `ports` fields on the `ipam.Service` and `ipam.ServiceTemplate` models have been replaced by a unified `port_mappings` field, which supports multiple protocols per service. The legacy fields are retained (as deprecated) in the REST and GraphQL APIs, but at the ORM level they are now read-only properties derived from `port_mappings`: Passing `protocol` or `ports` to the model raises a `TypeError`, and assigning to `service.ports` raises an `AttributeError`. This restriction applies only at the ORM level: The REST API continues to accept the legacy pair on write, translating it into `port_mappings`. - Because `protocol` is now filtered against the `port_mappings` array rather than a dedicated model field, the character-based REST filter lookups previously generated for it (`protocol__ic`, `protocol__isw`, `protocol__empty`, etc.) are no longer available. The `port__empty` lookup has been removed as well. - The GraphQL filters for `ipam.Service` and `ipam.ServiceTemplate` have changed shape: The nested `ports` integer lookup has been replaced by the flat `port`, `port__gt`, `port__gte`, `port__lt`, and `port__lte` parameters (each accepting a list of values), alongside the new `port_mappings` parameter. Additionally, the members of `ServiceProtocolEnum` have been renamed to drop a spurious `ROLE_` prefix (e.g. `ROLE_TCP` is now `TCP`). - Config context data is now pre-rendered and cached for each device and virtual machine, and is always included in their REST API representations. The `DeviceWithConfigContextSerializer` and `VirtualMachineWithConfigContextSerializer` classes have been removed (merged into the base serializers), and the `?exclude=config_context` query parameter is now silently ignored. - Failed bulk create and update operations via the REST API now return a structured response of the form `{"detail": ..., "errors": [{"index": N, "errors": {...}}]}`, correlating each error with the index of the offending object in the submitted list. (Bulk operations remain all-or-none.) - API token plaintexts can no longer be specified by the client when creating a token via the REST API. The `token` field is now read-only, and any value supplied is ignored. (This restriction was already in effect in the web UI.) - Executing a custom script via the REST API now requires that the calling token have its write ability enabled. - The `username` argument has been removed from `extras.webhooks.send_webhook()` (the value remains available to webhook templates as `request.user`). Any webhook jobs still enqueued when the workers are restarted will fail with a `TypeError`, so the background queues should be allowed to drain before upgrading. - Updates to the global search cache are now deferred to a background task. As a result, a newly created or modified object may not appear in search results for a brief period. (When no background worker is running, the index is updated synchronously as before.) - Hierarchical models are now backed by a PostgreSQL `ltree` column rather than django-mptt. This covers the nested group models (Region, SiteGroup, Location, DeviceRole, Platform, TenantGroup, ContactGroup, WirelessLANGroup, etc.) as well as ModuleBay, InventoryItem, and InventoryItemTemplate. The `lft`, `rght`, `tree_id`, and `level` columns have been dropped from every migrated model: `level` remains available as a Python property, but can no longer be used in a queryset filter or `order_by()` clause. NetBox's `ltree` implementation deliberately covers only the subset of MPTT's API which NetBox itself uses (`get_ancestors()`, `get_descendants()`, `get_children()`, and `add_related_count()`); methods such as `get_root()`, `get_family()`, `is_leaf_node()`, `move_to()`, and `insert_at()` are no longer available. The MPTT-backed `NestedGroupModel` base class is retained for backward compatibility with plugins, but is deprecated: New code should use `NestedLtreeGroupModel` instead. - django-tables2 has been upgraded to v3.0, which renames its `querystring` template tag to `querystring_replace` and removes the `RelatedLinkColumn` class. - `social-auth-app-django` and `social-auth-core` have been upgraded to v6.0 and v5.1 respectively, each a major release. Deployments which employ single sign-on should test authentication against a non-production instance before upgrading. - The `request` object passed to custom link templates is now a sanitized subset of the current request. Only the `id`, `path`, `path_info`, `method`, `GET`, and `user` attributes are available; cookies, headers, and session state are no longer accessible. - URL custom field values are now validated against the [`ALLOWED_URL_SCHEMES`](https://docs.netbox.dev/en/stable/configuration/security/#allowed_url_schemes) configuration parameter. A value entered without a scheme is assumed to use `https` and stored as an absolute URL. - Webhooks now support a configurable timeout. If you have lowered `RQ_DEFAULT_TIMEOUT` to 60 seconds or less, you must also set [`WEBHOOK_DEFAULT_TIMEOUT`](https://docs.netbox.dev/en/stable/configuration/miscellaneous/#webhook_default_timeout) to a lower value; NetBox will refuse to start otherwise. - Specifying an email server under the [`EMAIL`](https://docs.netbox.dev/en/stable/configuration/system/#email) configuration parameter is now mandatory in order to send mail: A deployment which does not define `EMAIL['SERVER']` will raise an `InvalidMailer` exception when attempting to send, rather than failing at the SMTP connection. - NetBox now populates Django's `MAILERS` setting rather than the individual `EMAIL_*` settings which it supersedes. `EMAIL_HOST`, `EMAIL_PORT`, `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD`, `EMAIL_USE_SSL`, `EMAIL_USE_TLS`, `EMAIL_TIMEOUT`, `EMAIL_SSL_CERTFILE`, and `EMAIL_SSL_KEYFILE` are no longer defined, and `EMAIL_BACKEND` is no longer consulted. Plugin code which reads any of these, or which calls `django.core.mail.get_connection()` with an explicit backend (now raising a `RuntimeError`), must be updated. The `EMAIL` configuration parameter itself is unchanged. - The upgrade script now runs the `rebuild_config_context_cache` management command to populate the new config context cache. This issues one `UPDATE` per device and virtual machine, and may extend the duration of the upgrade considerably for deployments with a large number of either. The command skips objects whose cache is already populated, so it is safe to interrupt and re-run; it may also be deferred until after NetBox is back online, as any object whose cache is empty falls back to rendering its config context on demand. - Creating a custom field which has a default value, and deleting a custom field, are now deferred to a background job where the field's assigned object types hold more than [`BULK_UPDATE_CHUNK_SIZE`](https://docs.netbox.dev/en/stable/configuration/system/#bulk_update_chunk_size) objects in total. - The obsolete `populate_custom_field_defaults()` method has been removed from `CustomFieldsMixin`. - `CustomField.objects.get_for_model()` and the `custom_fields` property of `CustomFieldsMixin` now return a list rather than a queryset, and `get_for_model()` returns only those fields which are active: Any whose stored data is being updated by a background job is omitted (see [field status](https://docs.netbox.dev/en/stable/customization/custom-fields/#field-status)) unless selected via its `statuses` argument. - Removal of deprecated behavior - The `housekeeping` management command has been removed. (Its constituent tasks are performed by the individual management commands introduced in NetBox v4.6.) - NetBox's custom `querystring` template tag has been removed in favor of Django's built-in tag of the same name. The two are not interchangeable: Django's tag reads the current request from the template context, so the `request` argument must be dropped (`{% querystring request page=1 %}` becomes `{% querystring page=1 %}`; passing `request` raises a `TemplateSyntaxError`). It also returns a bare `?` where NetBox's tag returned an empty string. - The legacy Sentry configuration parameters `SENTRY_DSN`, `SENTRY_SAMPLE_RATE`, `SENTRY_SEND_DEFAULT_PII`, and `SENTRY_TRACES_SAMPLE_RATE` have been removed. Use `SENTRY_CONFIG` instead. - The obsolete `DEFAULT_ACTION_PERMISSIONS` constant has been removed. - Support for legacy view action mappings has been dropped, and the `LEGACY_ACTIONS` constant has been removed. - Registered models are no longer populated under `registry['models']`. (Use `ObjectType.objects.public()` instead.) The `registry['denormalized_fields']` store has been removed as well. - The backward compatibility shims for `OptionalLimitOffsetPagination` (now `NetBoxPagination`), `ExpandableIPAddressField` (now `ExpandableIPNetworkField`), and `expand_ipaddress_pattern()` (now `expand_ipnetwork_pattern()`) have been removed. - The `request_id` and `username` keys have been removed from the context available to outgoing webhooks. Use `request.id` and `request.user` instead. - The automatic reverse relationship created by `OwnerMixin` (e.g. `site_set`) has been removed. ##### New Features ##### Cooling Infrastructure Modeling ([#&#8203;22447](https://github.com/netbox-community/netbox/issues/22447)) NetBox has long modeled power distribution end to end, but had no equivalent for cooling. This release introduces a cooling data model which deliberately mirrors the power model, so that the concepts and workflows feel familiar. Two new top-level models parallel PowerPanel and PowerFeed: **CoolingSource** represents facility-level cooling plant (a chiller, cooling tower, dry cooler, or facility water system) scoped to a site or location, and **CoolingFeed** represents a coolant loop delivered from a source to a rack. Two new device components parallel PowerPort and PowerOutlet: **CoolingIntake** represents a coolant intake on a device (e.g. a server cold-plate connection or a CDU's facility water inlet), and **CoolingOutflow** represents a coolant outlet on a CDU or manifold which supplies downstream equipment. Each intake may reference the upstream outflow which serves it, and both components have corresponding device type templates. CDUs and manifolds are modeled as ordinary devices carrying these components. Lightweight descriptive attributes have also been added for users who want to record cooling characteristics without modeling the full plumbing: a `cooling_method` field (air, liquid, hybrid, or immersion) on the Device, DeviceType, and ModuleType models, and `cooling_capability` (air-only, hybrid, or liquid-only) and `cooling_capacity` fields on the Rack and RackType models. ##### Channelized Subinterfaces ([#&#8203;20972](https://github.com/netbox-community/netbox/issues/20972)) Channelized (breakout) interfaces can now be modeled natively. A new `channels` field on the Interface model indicates the number of physical channels into which an interface is divided, and each channel is represented by a subinterface of the new generic `channel` type, bound to its parent via the new `channel_id` field. A single cable terminates to the channelized parent interface, and NetBox traces a distinct cable path for each channel subinterface. Both fields are available on interface templates as well. ##### Multi-Protocol Application Services ([#&#8203;20285](https://github.com/netbox-community/netbox/issues/20285)) Application services and service templates can now expose the same port on multiple protocols — for example, DNS listening on both `tcp/53` and `udp/53`. The single-protocol `protocol` and `ports` fields have been replaced by a unified `port_mappings` field, represented in the APIs as a flat list of `protocol/port` strings (e.g. `["tcp/80", "udp/53"]`). New `port_mappings`, `protocol`, and `port` filters are available in the UI and in both APIs, with the latter two correlated so that they must be satisfied by a single mapping. ##### Module Bay Types ([#&#8203;19731](https://github.com/netbox-community/netbox/issues/19731)) A new ModuleBayType model has been introduced to convey which kinds of modules a module bay is able to accommodate (e.g. an SFP28 cage or a PCIe x16 slot). Bay types can be assigned to module bays, module bay templates, and module types; where both a bay and a module type declare bay types, NetBox validates that the two sets share at least one type in common before permitting installation. Bay types assigned to a module bay template propagate automatically to each instantiated module bay. ##### Relocating Installed Modules ([#&#8203;15289](https://github.com/netbox-community/netbox/issues/15289)) An installed module can now be moved to a different module bay, including a bay on a different device, rather than having to be deleted and recreated. A move relocates the module's entire subtree — its components, its own module bays, and any child modules installed within them — and re-resolves any component names, labels, and positions derived from the module type's templates for the destination bay. Cross-device moves are permitted only where the moved components carry no active topology or device-scoped configuration. ##### Background Processing for REST API Requests ([#&#8203;21992](https://github.com/netbox-community/netbox/issues/21992)) Bulk write operations via the REST API can now be processed as a background job rather than synchronously, avoiding proxy and gateway timeouts on large batches. Appending `?background=true` to a bulk write request enqueues a job and immediately returns an `HTTP 202 Accepted` response containing the job's ID and URL; the job's `data` field records the response the synchronous request would have returned. Note that validation is deferred to the worker, so a `202` response indicates only that the request was accepted, and the job's final status must be inspected to confirm the outcome. ##### Per-Object Errors for Bulk Operations ([#&#8203;20054](https://github.com/netbox-community/netbox/issues/20054)) When a bulk create or update via the REST API fails validation, the response now identifies each offending object by its index within the submitted list, along with its specific field errors, rather than reporting only the first failure. This enables clients to correct and resubmit only the objects which actually failed. ##### Pre-Rendered Config Context Data ([#&#8203;21025](https://github.com/netbox-community/netbox/issues/21025)) Rather than compiling config context data on demand from the full set of applicable ConfigContext instances, NetBox now pre-renders each device's and virtual machine's merged context data and caches it on the object itself. The cache is invalidated automatically whenever an upstream change is detected — a config context being created, modified, or deleted, or a change to an attribute which determines which contexts apply — and repopulated by a non-blocking background job. During the brief window between invalidation and re-render, reads fall back to the original on-demand rendering path, so the data returned is always correct rather than stale. ##### Snapshot-Aware Event Rule Conditions ([#&#8203;18159](https://github.com/netbox-community/netbox/issues/18159)) Event rule conditions can now inspect the pre-change and post-change snapshots captured at the time of an event, rather than only the object's current data. New `changed` and `unchanged` operators compare an attribute's value across the two snapshots, and the `snapshots.prechange.<attr>` and `snapshots.postchange.<attr>` dot-path syntax exposes either snapshot to any standard operator. This makes it possible to express the long-requested "fire only when status changes *to* active" rule, avoiding webhooks and scripts triggered by unrelated updates. A new `regex` operator has been added as well, and conditions which reference an attribute that cannot be resolved now fail closed and log an error rather than silently disabling the rule. ##### Enhancements - [#&#8203;15165](https://github.com/netbox-community/netbox/issues/15165) - Re-render only the affected fieldset, rather than the entire form, when an HTMX-driven selection changes - [#&#8203;18645](https://github.com/netbox-community/netbox/issues/18645) - Support the bulk import of cables having multiple terminations per side - [#&#8203;18821](https://github.com/netbox-community/netbox/issues/18821) - Set or update an interface's primary MAC address in a single operation via the `mac_address` field - [#&#8203;20897](https://github.com/netbox-community/netbox/issues/20897) - Include the label alongside the value for selection custom fields in the REST & GraphQL APIs - [#&#8203;21367](https://github.com/netbox-community/netbox/issues/21367) - Add a read-only `is_primary` field to the MAC address REST API representation - [#&#8203;21712](https://github.com/netbox-community/netbox/issues/21712) - Support description annotations for static choice fields, and permit choices to be declared as dictionaries in `FIELD_CHOICES` - [#&#8203;22205](https://github.com/netbox-community/netbox/issues/22205) - Add an `end_of_life` date field to device types and module types to aid in hardware lifecycle planning - [#&#8203;22231](https://github.com/netbox-community/netbox/issues/22231) - Introduce a `nulls_first` parameter to control the placement of empty values when ordering by a custom field - [#&#8203;22409](https://github.com/netbox-community/netbox/issues/22409) - Disallow client-specified API token plaintexts via the REST API - [#&#8203;22411](https://github.com/netbox-community/netbox/issues/22411) - Enforce token write ability when executing a custom script via the REST API - [#&#8203;22441](https://github.com/netbox-community/netbox/issues/22441) - Record and display the execution time of each background job - [#&#8203;22446](https://github.com/netbox-community/netbox/issues/22446) - Introduce breadcrumbs support for declarative layouts - [#&#8203;22486](https://github.com/netbox-community/netbox/issues/22486) - Support a configurable timeout for webhooks, with a new `WEBHOOK_DEFAULT_TIMEOUT` configuration parameter - [#&#8203;22563](https://github.com/netbox-community/netbox/issues/22563) - Preserve the scroll position of the sidebar navigation when moving between pages - [#&#8203;22595](https://github.com/netbox-community/netbox/issues/22595) - Introduce the [`BULK_UPDATE_CHUNK_SIZE`](https://docs.netbox.dev/en/stable/configuration/system/#bulk_update_chunk_size) configuration parameter to bound the number of rows affected by a single bulk `UPDATE` statement - [#&#8203;22604](https://github.com/netbox-community/netbox/issues/22604) - Document the experimental Python package installation and upgrade workflow - [#&#8203;22607](https://github.com/netbox-community/netbox/issues/22607) - Sanitize the HTTP request passed to the template context when rendering custom links - [#&#8203;22640](https://github.com/netbox-community/netbox/issues/22640) - Enforce `ALLOWED_URL_SCHEMES` when validating URL custom field values - [#&#8203;22757](https://github.com/netbox-community/netbox/issues/22757) - Support arbitrary help text on inline form fields - [#&#8203;22786](https://github.com/netbox-community/netbox/issues/22786) - Publish NetBox releases to the production Python Package Index (PyPI) - [#&#8203;22851](https://github.com/netbox-community/netbox/issues/22851) - Unpin `social-auth-core` to permit the installation of newer PyJWT versions - [#&#8203;23010](https://github.com/netbox-community/netbox/issues/23010) - Defer the provisioning of default and purging of stale custom field data to a background job ##### Performance Improvements - [#&#8203;21326](https://github.com/netbox-community/netbox/issues/21326) - Defer updates to the global search cache to a background job, so that they no longer delay the response - [#&#8203;21355](https://github.com/netbox-community/netbox/issues/21355) - Maintain denormalized field data using PostgreSQL triggers rather than Python signal handlers - [#&#8203;21418](https://github.com/netbox-community/netbox/issues/21418) - Replace django-mptt with a PostgreSQL `ltree` implementation for hierarchical models ##### Plugins - [#&#8203;19821](https://github.com/netbox-community/netbox/issues/19821) - Introduce `GenericObjectChoiceField` and `GenericObjectFormMixin` to represent a generic foreign key relation as a single form field - [#&#8203;22351](https://github.com/netbox-community/netbox/issues/22351) - Enable plugins to register custom Jinja filters and to inject context variables for config template rendering - [#&#8203;22592](https://github.com/netbox-community/netbox/issues/22592) - Enable plugins to add fields and filters to NetBox's existing core GraphQL types - [#&#8203;22770](https://github.com/netbox-community/netbox/issues/22770) - Enable plugins to register custom Event Rule action types by subclassing `EventRuleAction` ##### Deprecations - [#&#8203;22288](https://github.com/netbox-community/netbox/issues/22288) - The `JINJA2_FILTERS` configuration parameter has been renamed to `JINJA_FILTERS`. The old name remains supported, but will be removed in NetBox v5.0. - [#&#8203;22593](https://github.com/netbox-community/netbox/issues/22593) - The `form_factor`, `width`, `outer_width`, `outer_height`, `outer_depth`, and `outer_unit` fields on the Rack model have been deprecated, and will be removed in NetBox v5.0. These values will instead be inferred from the rack's assigned rack type, which will become a mandatory assignment. - [#&#8203;22935](https://github.com/netbox-community/netbox/issues/22935) - The custom scripts functionality in core NetBox has been deprecated in favor of a dedicated plugin, and will be removed in NetBox v5.0. - The `protocol` and `ports` fields on application services and service templates have been deprecated in favor of `port_mappings`, and will be removed from the REST & GraphQL APIs in NetBox v5.0. - The MPTT-backed `NestedGroupModel` base class has been deprecated in favor of `NestedLtreeGroupModel`, and will be removed in a future release. ##### Other Changes - [#&#8203;19091](https://github.com/netbox-community/netbox/issues/19091) - Remove NetBox's custom `querystring` template tag in favor of Django's built-in tag - [#&#8203;20546](https://github.com/netbox-community/netbox/issues/20546) - Raise the minimum required PostgreSQL version from 14 to 15 - [#&#8203;20547](https://github.com/netbox-community/netbox/issues/20547) - Consolidate paired uniqueness constraints on nullable fields into single constraints using PostgreSQL's `NULLS NOT DISTINCT` - [#&#8203;21565](https://github.com/netbox-community/netbox/issues/21565) - Remove the obsolete `housekeeping` management command - [#&#8203;21883](https://github.com/netbox-community/netbox/issues/21883) - Drop support for the deprecated Sentry configuration parameters - [#&#8203;21886](https://github.com/netbox-community/netbox/issues/21886) - Remove the obsolete `DEFAULT_ACTION_PERMISSIONS` constant - [#&#8203;21888](https://github.com/netbox-community/netbox/issues/21888) - Remove support for legacy view actions - [#&#8203;21891](https://github.com/netbox-community/netbox/issues/21891) - Remove the `models` key from the application registry - [#&#8203;21902](https://github.com/netbox-community/netbox/issues/21902) - Upgrade django-tables2 to v3.0 - [#&#8203;22052](https://github.com/netbox-community/netbox/issues/22052) - Remove the backward compatibility shim for `OptionalLimitOffsetPagination` - [#&#8203;22053](https://github.com/netbox-community/netbox/issues/22053) - Remove the backward compatibility shim for `ExpandableIPAddressField` - [#&#8203;22054](https://github.com/netbox-community/netbox/issues/22054) - Remove the backward compatibility shim for `expand_ipaddress_pattern()` - [#&#8203;22161](https://github.com/netbox-community/netbox/issues/22161) - Rename the filterset test mixin base classes to use a `*TestMixin` suffix - [#&#8203;22300](https://github.com/netbox-community/netbox/issues/22300) - Drop the automatic reverse relationship defined by `OwnerMixin` - [#&#8203;22393](https://github.com/netbox-community/netbox/issues/22393) - Drop support for Redis 5.x - [#&#8203;22438](https://github.com/netbox-community/netbox/issues/22438) - Omit the "2" suffix from the new Jinja plugin resources (`jinja_filters`, `get_jinja_context()`, `register_jinja_filters()`) for consistency with `JINJA_FILTERS` - [#&#8203;22485](https://github.com/netbox-community/netbox/issues/22485) - Move the search subsystem's signal wiring into `AppConfig.ready()` and break its import cycle - [#&#8203;22571](https://github.com/netbox-community/netbox/issues/22571) - Migrate from django-pglocks to django-pgware - [#&#8203;22615](https://github.com/netbox-community/netbox/issues/22615) - Remove the legacy `request_id` and `username` keys from the webhook context - [#&#8203;22942](https://github.com/netbox-community/netbox/issues/22942) - Upgrade to Django 6.1 ### [`v4.6.10`](https://github.com/netbox-community/netbox/releases/tag/v4.6.10): - 2026-09-01 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.6.9...v4.6.10) #### Performance Improvements - [#&#8203;22988](https://github.com/netbox-community/netbox/issues/22988) - Prefetch the related fields of nested serializers referenced by `SerializedPKRelatedField` - [#&#8203;23060](https://github.com/netbox-community/netbox/issues/23060) - Include reverse many-to-many relationships when determining REST API prefetches #### Bug Fixes - [#&#8203;22671](https://github.com/netbox-community/netbox/issues/22671) - Support the selection of multiple values when filtering VLAN groups by scope (e.g. by site group) - [#&#8203;22872](https://github.com/netbox-community/netbox/issues/22872) - Gracefully handle invalid values assigned to a custom script's `Meta` attributes - [#&#8203;22989](https://github.com/netbox-community/netbox/issues/22989) - Reference brief components in the OpenAPI response schemas for nested `SerializedPKRelatedField` fields - [#&#8203;23035](https://github.com/netbox-community/netbox/issues/23035) - Expand the active navigation menu section when resizing from a mobile to a desktop viewport - [#&#8203;23038](https://github.com/netbox-community/netbox/issues/23038) - Omit the cache-busting query parameter from signed static file URLs (e.g. when using S3 storage) - [#&#8203;23040](https://github.com/netbox-community/netbox/issues/23040) - Fix the validation error raised when removing the scope assigned to a VLAN group - [#&#8203;23043](https://github.com/netbox-community/netbox/issues/23043) - Correct the validation of front port positions when creating front ports in bulk - [#&#8203;23052](https://github.com/netbox-community/netbox/issues/23052) - Fix the duplicated `owner` field on the power outlet and service forms - [#&#8203;23066](https://github.com/netbox-community/netbox/issues/23066) - Include the configured Redis username in the default Django cache settings - [#&#8203;23072](https://github.com/netbox-community/netbox/issues/23072) - Retain cable paths when applying a cable profile via bulk edit - [#&#8203;23078](https://github.com/netbox-community/netbox/issues/23078) - Normalize `update_fields` to avoid consuming a generator in `VLANGroup.save()` and `CircuitTermination.save()` - [#&#8203;23090](https://github.com/netbox-community/netbox/issues/23090) - Fix the filtering of background jobs by user in the UI ### [`v4.6.9`](https://github.com/netbox-community/netbox/releases/tag/v4.6.9): - 2026-08-25 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.6.8...v4.6.9) #### Enhancements - [#&#8203;21387](https://github.com/netbox-community/netbox/issues/21387) - Add InfiniBand 4X interface types - [#&#8203;22660](https://github.com/netbox-community/netbox/issues/22660) - Add an interface type for HPE Synergy interconnect links - [#&#8203;22716](https://github.com/netbox-community/netbox/issues/22716) - Restrict images in rendered Markdown to HTTP(S) and relative URLs - [#&#8203;22998](https://github.com/netbox-community/netbox/issues/22998) - Add a 100GBase-X-SFP112 interface type #### Performance Improvements - [#&#8203;23000](https://github.com/netbox-community/netbox/issues/23000) - Prefetch cable terminations to avoid N+1 queries when fetching cables via the GraphQL API #### Bug Fixes - [#&#8203;22683](https://github.com/netbox-community/netbox/issues/22683) - Prevent a server error when bulk import validation raises an error referencing a field omitted from the import data - [#&#8203;22812](https://github.com/netbox-community/netbox/issues/22812) - Avoid loading all associated jobs into memory when deleting a custom script or other job-bearing object - [#&#8203;22889](https://github.com/netbox-community/netbox/issues/22889) - Restore the monospace font for text areas on the config revision form - [#&#8203;22922](https://github.com/netbox-community/netbox/issues/22922) - Honor the saving database connection in the scope propagation signal handlers - [#&#8203;22923](https://github.com/netbox-community/netbox/issues/22923) - Clear `current_request` and the query cache when an exception is raised within an `event_tracking()` block - [#&#8203;22929](https://github.com/netbox-community/netbox/issues/22929) - Avoid initializing a second `SideNav` instance for the top header - [#&#8203;22930](https://github.com/netbox-community/netbox/issues/22930) - Fix sidebar navigation initialization at a viewport width of exactly 1200 pixels - [#&#8203;22934](https://github.com/netbox-community/netbox/issues/22934) - Discard queued events when a write performed by a UI view is rolled back - [#&#8203;22944](https://github.com/netbox-community/netbox/issues/22944) - Display the complete role hierarchy in the virtual machine info panel - [#&#8203;22953](https://github.com/netbox-community/netbox/issues/22953) - Restore custom script log messages in the output of the `runscript` management command - [#&#8203;22954](https://github.com/netbox-community/netbox/issues/22954) - Display nested group and platform hierarchies in several info panels - [#&#8203;22957](https://github.com/netbox-community/netbox/issues/22957) - Include ancestors in the breadcrumbs for device roles, platforms, and power panels - [#&#8203;22963](https://github.com/netbox-community/netbox/issues/22963) - Honor the saving database connection in the counter cache signal handlers - [#&#8203;22967](https://github.com/netbox-community/netbox/issues/22967) - Update the cached scope fields of circuit terminations when a location is moved to a different site - [#&#8203;22978](https://github.com/netbox-community/netbox/issues/22978) - Discard queued events when a write performed via the REST API is rolled back - [#&#8203;22985](https://github.com/netbox-community/netbox/issues/22985) - Exempt data file content from browser caching - [#&#8203;22990](https://github.com/netbox-community/netbox/issues/22990) - Correct inconsistent field declarations which prevented certain fields from being edited or cleared via bulk edit - [#&#8203;23007](https://github.com/netbox-community/netbox/issues/23007) - Align the sidebar navigation JavaScript breakpoint with that of the responsive layout - [#&#8203;23013](https://github.com/netbox-community/netbox/issues/23013) - Avoid propagating a location's site assignment to descendant objects when the site has not changed ### [`v4.6.8`](https://github.com/netbox-community/netbox/releases/tag/v4.6.8): - 2026-08-11 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.6.7...v4.6.8) #### Performance Improvements - [#&#8203;22787](https://github.com/netbox-community/netbox/issues/22787) - Avoid N+1 queries when resolving generic relations (e.g. assigned objects) via the GraphQL API - [#&#8203;22835](https://github.com/netbox-community/netbox/issues/22835) - Improve performance when provisioning new custom fields - [#&#8203;22837](https://github.com/netbox-community/netbox/issues/22837) - Omit implicit pagination when prefetching to-one relations via the GraphQL API - [#&#8203;22877](https://github.com/netbox-community/netbox/issues/22877) - Improve caching logic when retrieving custom fields via `get_for_model()` #### Bug Fixes - [#&#8203;22694](https://github.com/netbox-community/netbox/issues/22694) - Clear a device's stale rack assignment when changing its site - [#&#8203;22745](https://github.com/netbox-community/netbox/issues/22745) - Enforce object permissions on custom script write operations via the REST API - [#&#8203;22805](https://github.com/netbox-community/netbox/issues/22805) - Avoid re-executing the LDAP configuration file on every permission check - [#&#8203;22821](https://github.com/netbox-community/netbox/issues/22821) - Prevent the deletion of a tenant group from creating duplicate tenant names or slugs - [#&#8203;22825](https://github.com/netbox-community/netbox/issues/22825) - Fix cable path tracing for paths which originate from a circuit termination and traverse only pass-through ports - [#&#8203;22828](https://github.com/netbox-community/netbox/issues/22828) - Validate that a webhook's payload URL is a valid URL or Jinja2 template when saving - [#&#8203;22844](https://github.com/netbox-community/netbox/issues/22844) - Allow a null value for `base_choices` when creating a custom field choice set via the REST API - [#&#8203;22848](https://github.com/netbox-community/netbox/issues/22848) - Ensure deterministic ordering of duplicate IP addresses to avoid repeating an object across paginated REST API results - [#&#8203;22852](https://github.com/netbox-community/netbox/issues/22852) - Honor a custom script's `notifications_default` setting when the script is run from an event rule - [#&#8203;22865](https://github.com/netbox-community/netbox/issues/22865) - Reference the appropriate component template types on the GraphQL type for inventory item templates - [#&#8203;22879](https://github.com/netbox-community/netbox/issues/22879) - Improve the contrast of unselected radio buttons and checkboxes in dark mode - [#&#8203;22882](https://github.com/netbox-community/netbox/issues/22882) - Fix support for the `DISTINCT` filter on nested GraphQL list fields - [#&#8203;22894](https://github.com/netbox-community/netbox/issues/22894) - Sanitize the error message rendered when an exception occurs in `CustomLinkColumn` ### [`v4.6.7`](https://github.com/netbox-community/netbox/releases/tag/v4.6.7): - 2026-07-30 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.6.6...v4.6.7) ##### Performance Improvements - [#&#8203;22810](https://github.com/netbox-community/netbox/issues/22810) - Skip cached scope rebuild for sites and locations when scope fields are unchanged - [#&#8203;22813](https://github.com/netbox-community/netbox/issues/22813) - Avoid extraneous database queries when fetching custom field data via the GraphQL API - [#&#8203;22822](https://github.com/netbox-community/netbox/issues/22822) - Avoid an extra database query when including rack reservation units via the GraphQL API - [#&#8203;22823](https://github.com/netbox-community/netbox/issues/22823) - Avoid extraneous database queries when fetching the IP address or prefix family via the GraphQL API ##### Bug Fixes - [#&#8203;22738](https://github.com/netbox-community/netbox/issues/22738) - Correctly evaluate IP availability for users whose permissions are constrained by a custom field on a related object - [#&#8203;22800](https://github.com/netbox-community/netbox/issues/22800) - Filter circuit group assignments by member type to avoid displaying assignments belonging to a virtual circuit with the same ID ### [`v4.6.6`](https://github.com/netbox-community/netbox/releases/tag/v4.6.6): - 2026-07-28 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.6.5...v4.6.6) ##### Enhancements - [#&#8203;19273](https://github.com/netbox-community/netbox/issues/19273) - Enable the selection of VLANs scoped to a device's cluster or cluster group when assigning VLANs to interfaces - [#&#8203;22522](https://github.com/netbox-community/netbox/issues/22522) - Render colored badges for custom field choices in tables - [#&#8203;22623](https://github.com/netbox-community/netbox/issues/22623) - Change the default color of the DHCP IP address status from green to purple to distinguish it from "available" - [#&#8203;22685](https://github.com/netbox-community/netbox/issues/22685) - Introduce an "any" lookup for the `tag` and `tag_id` filters to match objects assigned any of the specified tags - [#&#8203;22753](https://github.com/netbox-community/netbox/issues/22753) - Add a `header_safe` Jinja2 filter for sanitizing HTTP header values ##### Performance Improvements - [#&#8203;22497](https://github.com/netbox-community/netbox/issues/22497) - Improve the speed of bulk object deletion by avoiding per-object cascade handling and N+1 counter updates - [#&#8203;22687](https://github.com/netbox-community/netbox/issues/22687) - Avoid an unnecessary queryset evaluation when rendering export templates ##### Bug Fixes - [#&#8203;21988](https://github.com/netbox-community/netbox/issues/21988) - Ensure view permissions are enforced when referencing a related object by its attributes in the REST API - [#&#8203;22513](https://github.com/netbox-community/netbox/issues/22513) - Make `JournalEntry.created_by` immutable after creation to prevent audit trail spoofing - [#&#8203;22565](https://github.com/netbox-community/netbox/issues/22565) - Include circuit distance when calculating the total length of a cable path - [#&#8203;22588](https://github.com/netbox-community/netbox/issues/22588) - Restrict the VLANs available for assignment to a prefix scoped to a site group - [#&#8203;22644](https://github.com/netbox-community/netbox/issues/22644) - Record changes to front/rear port mappings in the changelog - [#&#8203;22654](https://github.com/netbox-community/netbox/issues/22654) - Redact server filesystem paths from tracebacks rendered by ConfigTemplate debug mode - [#&#8203;22656](https://github.com/netbox-community/netbox/issues/22656) - Pre-populate interface attributes when using "Create & Add Another" - [#&#8203;22662](https://github.com/netbox-community/netbox/issues/22662) - Avoid raising a `DataError` exception when a cable length exceeds the maximum supported value - [#&#8203;22675](https://github.com/netbox-community/netbox/issues/22675) - Validate the URL scheme of RSS feed entries to prevent DOM-based cross-site scripting - [#&#8203;22677](https://github.com/netbox-community/netbox/issues/22677) - Display validation errors for form fields which lack HTML5 constraints - [#&#8203;22682](https://github.com/netbox-community/netbox/issues/22682) - Prevent the deletion of a site group from cascading to prefixes scoped to its member sites - [#&#8203;22690](https://github.com/netbox-community/netbox/issues/22690) - Restore the left border on the quick search field - [#&#8203;22697](https://github.com/netbox-community/netbox/issues/22697) - Return to the scripts list when cancelling out of the "add script" form - [#&#8203;22707](https://github.com/netbox-community/netbox/issues/22707) - Fix the resolution of port mappings when `{vc_position}` is used on device type component templates - [#&#8203;22712](https://github.com/netbox-community/netbox/issues/22712) - Highlight relevant dropdown fields when form validation fails - [#&#8203;22717](https://github.com/netbox-community/netbox/issues/22717) - Fix `KeyError` raised when validating a device assigned to a cluster scoped to a different location - [#&#8203;22719](https://github.com/netbox-community/netbox/issues/22719) - Avoid raising a `KeyError` for malformed IP address and prefix values submitted via the REST API - [#&#8203;22720](https://github.com/netbox-community/netbox/issues/22720) - Raise a protected-deletion error rather than a `TypeError` when deleting a virtual chassis with a cross-chassis LAG - [#&#8203;22729](https://github.com/netbox-community/netbox/issues/22729) - Escape object names when populating the `Content-Disposition` header of file responses - [#&#8203;22736](https://github.com/netbox-community/netbox/issues/22736) - Include the `comments` field of ASNs in the global search index - [#&#8203;22737](https://github.com/netbox-community/netbox/issues/22737) - Clear stale connector metadata from cable endpoints when deleting a profiled cable - [#&#8203;22748](https://github.com/netbox-community/netbox/issues/22748) - Ensure `ContentTypeField` respects its declared queryset to prevent the selection of non-public object types - [#&#8203;22752](https://github.com/netbox-community/netbox/issues/22752) - Restore the rear port fields on the front port bulk import form - [#&#8203;22766](https://github.com/netbox-community/netbox/issues/22766) - Fix the GraphQL `length` lookup for array filters - [#&#8203;22767](https://github.com/netbox-community/netbox/issues/22767) - Include the `comments` field of several models in the global search indexes - [#&#8203;22768](https://github.com/netbox-community/netbox/issues/22768) - Store a null value rather than an empty string for `cable_end` when removing a cable - [#&#8203;22773](https://github.com/netbox-community/netbox/issues/22773) - Fix `TypeError` exception when bulk adding module bays to devices - [#&#8203;22790](https://github.com/netbox-community/netbox/issues/22790) - Enforce saved filter visibility when applied via the `filter` or `filter_id` query parameter ### [`v4.6.5`](https://github.com/netbox-community/netbox/releases/tag/v4.6.5): - 2026-07-14 [Compare Source](https://github.com/netbox-community/netbox/compare/v4.6.4...v4.6.5) #### Enhancements - [#&#8203;18828](https://github.com/netbox-community/netbox/issues/18828) - Add MDC connector type for fiber ports and cables - [#&#8203;22544](https://github.com/netbox-community/netbox/issues/22544) - Provide a REST API method to update or overwrite an existing custom script module - [#&#8203;22629](https://github.com/netbox-community/netbox/issues/22629) - Enforce a lower maximum uploaded image size (50 megapixels) than the Pillow default - [#&#8203;22649](https://github.com/netbox-community/netbox/issues/22649) - Add Korean language support #### Performance Improvements - [#&#8203;22551](https://github.com/netbox-community/netbox/issues/22551) - Add a prefetch hint to the GraphQL `tags` field to avoid N+1 queries on list endpoints - [#&#8203;22589](https://github.com/netbox-community/netbox/issues/22589) - Cache serializers to avoid repeated reinstantiation on the cables list REST API endpoint #### Bug Fixes - [#&#8203;22154](https://github.com/netbox-community/netbox/issues/22154) - Correct the OpenAPI schema for relation counts on nested (brief) object representations - [#&#8203;22500](https://github.com/netbox-community/netbox/issues/22500) - Return the configured maintenance mode message for REST API requests - [#&#8203;22521](https://github.com/netbox-community/netbox/issues/22521) - Honor `RAM_BASE_UNIT` for the default memory of a virtual machine type - [#&#8203;22539](https://github.com/netbox-community/netbox/issues/22539) - Restore the available IPs button for users with constrained permissions - [#&#8203;22566](https://github.com/netbox-community/netbox/issues/22566) - Avoid name collisions when a custom script's filename matches a core app label - [#&#8203;22568](https://github.com/netbox-community/netbox/issues/22568) - Fix uncaught `ValueError` (HTTP 500) when an invalid `filter_id` query parameter is provided - [#&#8203;22573](https://github.com/netbox-community/netbox/issues/22573) - Remove persistent scrollbar on the navigation menu in Chrome - [#&#8203;22578](https://github.com/netbox-community/netbox/issues/22578) - Ensure shared objects are treated consistently across the UI and REST API - [#&#8203;22582](https://github.com/netbox-community/netbox/issues/22582) - Use a theme-aware color for interface list row separators in dark mode - [#&#8203;22598](https://github.com/netbox-community/netbox/issues/22598) - Fix `ValueError` exception when viewing background tasks under RQ 2.10 - [#&#8203;22617](https://github.com/netbox-community/netbox/issues/22617) - Require the "change" permission (rather than "add") when editing objects via the bulk import form - [#&#8203;22626](https://github.com/netbox-community/netbox/issues/22626) - Ensure custom link names are escaped when rendering fails - [#&#8203;22632](https://github.com/netbox-community/netbox/issues/22632) - Fix `ValueError` raised by object-level permission checks for cross-app proxy models - [#&#8203;22652](https://github.com/netbox-community/netbox/issues/22652) - Explicitly disable autoescaping for config templates rendered via `SandboxedEnvironment` - [#&#8203;22657](https://github.com/netbox-community/netbox/issues/22657) - Escape the exception message in the `render_widget` template tag before marking it safe </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- 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:eyJjcmVhdGVkSW5WZXIiOiI0NC42MS42IiwidXBkYXRlZEluVmVyIjoiNDQuMjM5LjEiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlIl19-->
Update all stable non-major dependencies
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m4s
/ Ansible Lint (pull_request) Failing after 3m15s
c155e3e756
You can view your changes at https://staging.infra-docs.hamburg.ccc.de/pr158/
renovate force-pushed renovate/all-stable-minor from c155e3e756
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m4s
/ Ansible Lint (pull_request) Failing after 3m15s
to b0bbe97a27
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 3m15s
/ Ansible Lint (pull_request) Failing after 2m58s
2026-09-05 02:16:49 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from b0bbe97a27
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 3m15s
/ Ansible Lint (pull_request) Failing after 2m58s
to 4ad8444cbf
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 2m39s
/ Ansible Lint (pull_request) Failing after 2m46s
2026-09-05 12:31:13 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 4ad8444cbf
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 2m39s
/ Ansible Lint (pull_request) Failing after 2m46s
to 6f136110a1
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 2m41s
/ Ansible Lint (pull_request) Failing after 2m31s
2026-09-05 23:31:09 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 6f136110a1
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 2m41s
/ Ansible Lint (pull_request) Failing after 2m31s
to 5a70f4bada
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m5s
/ Ansible Lint (pull_request) Failing after 3m18s
2026-09-08 02:16:49 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 5a70f4bada
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m5s
/ Ansible Lint (pull_request) Failing after 3m18s
to 294de3c583
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m13s
/ Ansible Lint (pull_request) Failing after 3m43s
2026-09-08 15:46:03 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 294de3c583
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m13s
/ Ansible Lint (pull_request) Failing after 3m43s
to 2db68efcd7
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 6m1s
/ Ansible Lint (pull_request) Failing after 6m8s
2026-09-11 11:01:10 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 2db68efcd7
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 6m1s
/ Ansible Lint (pull_request) Failing after 6m8s
to e69f644095
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Failing after 12m2s
/ Ansible Lint (pull_request) Failing after 12m16s
2026-09-15 11:46:02 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from e69f644095
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Failing after 12m2s
/ Ansible Lint (pull_request) Failing after 12m16s
to 9d57a5ac58
Some checks failed
/ build (pull_request) Successful in 2m5s
/ Ansible Lint (push) Failing after 6m37s
/ Ansible Lint (pull_request) Failing after 6m57s
2026-09-16 02:16:49 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 9d57a5ac58
Some checks failed
/ build (pull_request) Successful in 2m5s
/ Ansible Lint (push) Failing after 6m37s
/ Ansible Lint (pull_request) Failing after 6m57s
to 319502a5dc
Some checks failed
/ build (pull_request) Successful in 27s
/ Ansible Lint (push) Failing after 13m26s
/ Ansible Lint (pull_request) Failing after 15m29s
2026-09-16 13:46:21 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 319502a5dc
Some checks failed
/ build (pull_request) Successful in 27s
/ Ansible Lint (push) Failing after 13m26s
/ Ansible Lint (pull_request) Failing after 15m29s
to b0620fbfd1
Some checks failed
/ build (pull_request) Successful in 1m0s
/ Ansible Lint (push) Failing after 3m16s
/ Ansible Lint (pull_request) Failing after 3m18s
2026-09-17 10:31:37 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from b0620fbfd1
Some checks failed
/ build (pull_request) Successful in 1m0s
/ Ansible Lint (push) Failing after 3m16s
/ Ansible Lint (pull_request) Failing after 3m18s
to 6b4e455cc3
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m18s
/ Ansible Lint (pull_request) Failing after 3m2s
2026-09-19 02:16:51 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 6b4e455cc3
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m18s
/ Ansible Lint (pull_request) Failing after 3m2s
to c77934ca6f
Some checks failed
/ build (pull_request) Successful in 27s
/ Ansible Lint (push) Failing after 3m15s
/ Ansible Lint (pull_request) Failing after 3m37s
2026-09-22 02:16:54 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from c77934ca6f
Some checks failed
/ build (pull_request) Successful in 27s
/ Ansible Lint (push) Failing after 3m15s
/ Ansible Lint (pull_request) Failing after 3m37s
to e7ac450d7b
Some checks failed
/ build (pull_request) Successful in 27s
/ Ansible Lint (push) Failing after 2m41s
/ Ansible Lint (pull_request) Failing after 2m35s
2026-09-22 02:47:28 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from e7ac450d7b
Some checks failed
/ build (pull_request) Successful in 27s
/ Ansible Lint (push) Failing after 2m41s
/ Ansible Lint (pull_request) Failing after 2m35s
to cd7a64f46c
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m12s
/ Ansible Lint (pull_request) Failing after 4m0s
2026-09-22 16:16:02 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from cd7a64f46c
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m12s
/ Ansible Lint (pull_request) Failing after 4m0s
to 4f89064133
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m2s
/ Ansible Lint (pull_request) Failing after 3m16s
2026-09-22 19:16:00 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 4f89064133
Some checks failed
/ build (pull_request) Successful in 28s
/ Ansible Lint (push) Failing after 3m2s
/ Ansible Lint (pull_request) Failing after 3m16s
to 24ffc0f8e0
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m19s
/ Ansible Lint (pull_request) Failing after 3m20s
2026-09-24 02:17:13 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 24ffc0f8e0
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m19s
/ Ansible Lint (pull_request) Failing after 3m20s
to 7b10ee2dea
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 3m5s
/ Ansible Lint (pull_request) Failing after 2m47s
2026-09-24 02:32:02 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 7b10ee2dea
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 3m5s
/ Ansible Lint (pull_request) Failing after 2m47s
to 2280194c9c
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 3m51s
/ Ansible Lint (pull_request) Failing after 3m37s
2026-09-25 02:17:06 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 2280194c9c
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 3m51s
/ Ansible Lint (pull_request) Failing after 3m37s
to bfeef72160
Some checks failed
/ build (pull_request) Successful in 57s
/ Ansible Lint (pull_request) Failing after 3m31s
/ Ansible Lint (push) Failing after 3m52s
2026-09-25 10:30:58 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from bfeef72160
Some checks failed
/ build (pull_request) Successful in 57s
/ Ansible Lint (pull_request) Failing after 3m31s
/ Ansible Lint (push) Failing after 3m52s
to b030340bc8
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 4m10s
/ Ansible Lint (pull_request) Failing after 5m7s
2026-09-25 12:15:49 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from b030340bc8
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 4m10s
/ Ansible Lint (pull_request) Failing after 5m7s
to 9173f157b5
Some checks failed
/ build (pull_request) Successful in 58s
/ Ansible Lint (push) Failing after 4m46s
/ Ansible Lint (pull_request) Failing after 5m9s
2026-09-26 04:02:03 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 9173f157b5
Some checks failed
/ build (pull_request) Successful in 58s
/ Ansible Lint (push) Failing after 4m46s
/ Ansible Lint (pull_request) Failing after 5m9s
to 2851c4dc22
Some checks failed
/ build (pull_request) Successful in 58s
/ Ansible Lint (pull_request) Failing after 3m24s
/ Ansible Lint (push) Failing after 3m56s
2026-09-28 04:16:58 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 2851c4dc22
Some checks failed
/ build (pull_request) Successful in 58s
/ Ansible Lint (pull_request) Failing after 3m24s
/ Ansible Lint (push) Failing after 3m56s
to 9afdedeb62
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (pull_request) Failing after 5m45s
/ Ansible Lint (push) Failing after 8m11s
2026-09-28 16:16:26 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 9afdedeb62
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (pull_request) Failing after 5m45s
/ Ansible Lint (push) Failing after 8m11s
to 84eaa6b231
Some checks failed
/ build (pull_request) Successful in 31s
/ Ansible Lint (pull_request) Failing after 3m59s
/ Ansible Lint (push) Failing after 4m15s
2026-09-29 04:16:54 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 84eaa6b231
Some checks failed
/ build (pull_request) Successful in 31s
/ Ansible Lint (pull_request) Failing after 3m59s
/ Ansible Lint (push) Failing after 4m15s
to 72c6c81d5f
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 5m31s
/ Ansible Lint (pull_request) Failing after 5m46s
2026-09-29 10:16:48 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 72c6c81d5f
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 5m31s
/ Ansible Lint (pull_request) Failing after 5m46s
to b4bd9d9932
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Failing after 3m51s
/ Ansible Lint (push) Failing after 4m57s
2026-09-30 04:16:58 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from b4bd9d9932
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Failing after 3m51s
/ Ansible Lint (push) Failing after 4m57s
to 2788f8c39d
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 4m4s
/ Ansible Lint (pull_request) Failing after 3m29s
2026-10-01 04:46:26 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 2788f8c39d
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 4m4s
/ Ansible Lint (pull_request) Failing after 3m29s
to 250cda919c
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 2m53s
/ Ansible Lint (pull_request) Failing after 3m7s
2026-10-01 16:17:00 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 250cda919c
Some checks failed
/ build (pull_request) Successful in 29s
/ Ansible Lint (push) Failing after 2m53s
/ Ansible Lint (pull_request) Failing after 3m7s
to d54c5ef459
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m11s
/ Ansible Lint (pull_request) Failing after 3m11s
2026-10-02 16:46:04 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from d54c5ef459
Some checks failed
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Failing after 3m11s
/ Ansible Lint (pull_request) Failing after 3m11s
to 4fdbb89747
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Failing after 2m54s
/ Ansible Lint (push) Failing after 2m56s
2026-10-03 10:16:07 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 4fdbb89747
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Failing after 2m54s
/ Ansible Lint (push) Failing after 2m56s
to 9b9f56ea50
Some checks failed
/ build (pull_request) Successful in 32s
/ Ansible Lint (pull_request) Failing after 2m39s
/ Ansible Lint (push) Failing after 2m41s
2026-10-04 16:16:09 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 9b9f56ea50
Some checks failed
/ build (pull_request) Successful in 32s
/ Ansible Lint (pull_request) Failing after 2m39s
/ Ansible Lint (push) Failing after 2m41s
to 27cc1dda10
Some checks failed
/ build (pull_request) Successful in 58s
/ Ansible Lint (pull_request) Failing after 3m49s
/ Ansible Lint (push) Failing after 4m3s
2026-10-07 22:16:59 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 27cc1dda10
Some checks failed
/ build (pull_request) Successful in 58s
/ Ansible Lint (pull_request) Failing after 3m49s
/ Ansible Lint (push) Failing after 4m3s
to e16d684c79
Some checks failed
/ build (pull_request) Successful in 31s
/ Ansible Lint (pull_request) Failing after 5m46s
/ Ansible Lint (push) Failing after 7m3s
2026-10-08 16:16:59 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from e16d684c79
Some checks failed
/ build (pull_request) Successful in 31s
/ Ansible Lint (pull_request) Failing after 5m46s
/ Ansible Lint (push) Failing after 7m3s
to c2ffb5b7a8
Some checks failed
/ build (pull_request) Successful in 57s
/ Ansible Lint (push) Failing after 3m56s
/ Ansible Lint (pull_request) Failing after 4m24s
2026-10-11 04:17:12 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from c2ffb5b7a8
Some checks failed
/ build (pull_request) Successful in 57s
/ Ansible Lint (push) Failing after 3m56s
/ Ansible Lint (pull_request) Failing after 4m24s
to f98f5bc888
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Failing after 16m49s
/ Ansible Lint (pull_request) Failing after 17m23s
2026-10-12 16:16:31 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from f98f5bc888
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Failing after 16m49s
/ Ansible Lint (pull_request) Failing after 17m23s
to d4a512a8d1
Some checks failed
/ build (pull_request) Successful in 1m14s
/ Ansible Lint (pull_request) Failing after 6m16s
/ Ansible Lint (push) Failing after 6m37s
2026-10-13 04:16:56 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from d4a512a8d1
Some checks failed
/ build (pull_request) Successful in 1m14s
/ Ansible Lint (pull_request) Failing after 6m16s
/ Ansible Lint (push) Failing after 6m37s
to 48c42ed7ea
Some checks failed
/ build (pull_request) Successful in 49s
/ Ansible Lint (pull_request) Failing after 9m54s
/ Ansible Lint (push) Failing after 10m5s
2026-10-13 16:16:36 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 48c42ed7ea
Some checks failed
/ build (pull_request) Successful in 49s
/ Ansible Lint (pull_request) Failing after 9m54s
/ Ansible Lint (push) Failing after 10m5s
to 212a889a33
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Failing after 2m58s
/ Ansible Lint (push) Failing after 3m12s
2026-10-13 22:16:34 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 212a889a33
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Failing after 2m58s
/ Ansible Lint (push) Failing after 3m12s
to 9871ecb0d9
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Failing after 2m57s
/ Ansible Lint (pull_request) Failing after 2m45s
2026-10-15 16:17:17 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 9871ecb0d9
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Failing after 2m57s
/ Ansible Lint (pull_request) Failing after 2m45s
to 6df8a15a26
Some checks failed
/ build (pull_request) Successful in 48s
/ Ansible Lint (push) Failing after 3m17s
/ Ansible Lint (pull_request) Failing after 3m44s
2026-10-15 22:16:22 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 6df8a15a26
Some checks failed
/ build (pull_request) Successful in 48s
/ Ansible Lint (push) Failing after 3m17s
/ Ansible Lint (pull_request) Failing after 3m44s
to ff7d01fcda
Some checks failed
/ build (pull_request) Successful in 1m20s
/ Ansible Lint (push) Failing after 3m23s
/ Ansible Lint (pull_request) Failing after 3m25s
2026-10-17 04:17:08 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from ff7d01fcda
Some checks failed
/ build (pull_request) Successful in 1m20s
/ Ansible Lint (push) Failing after 3m23s
/ Ansible Lint (pull_request) Failing after 3m25s
to a1af8184b2
Some checks failed
/ build (pull_request) Successful in 1m18s
/ Ansible Lint (pull_request) Failing after 3m3s
/ Ansible Lint (push) Failing after 3m5s
2026-10-18 16:16:32 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from a1af8184b2
Some checks failed
/ build (pull_request) Successful in 1m18s
/ Ansible Lint (pull_request) Failing after 3m3s
/ Ansible Lint (push) Failing after 3m5s
to a9a1e58163
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Failing after 3m19s
/ Ansible Lint (push) Failing after 3m43s
2026-10-19 16:17:02 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from a9a1e58163
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Failing after 3m19s
/ Ansible Lint (push) Failing after 3m43s
to 0ec52411e4
Some checks failed
/ build (pull_request) Successful in 53s
/ Ansible Lint (pull_request) Failing after 2m58s
/ Ansible Lint (push) Failing after 3m12s
2026-10-20 16:16:59 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 0ec52411e4
Some checks failed
/ build (pull_request) Successful in 53s
/ Ansible Lint (pull_request) Failing after 2m58s
/ Ansible Lint (push) Failing after 3m12s
to 5e351a09d9
Some checks failed
/ build (pull_request) Successful in 1m1s
/ Ansible Lint (push) Failing after 3m9s
/ Ansible Lint (pull_request) Failing after 3m10s
2026-10-20 22:17:23 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 5e351a09d9
Some checks failed
/ build (pull_request) Successful in 1m1s
/ Ansible Lint (push) Failing after 3m9s
/ Ansible Lint (pull_request) Failing after 3m10s
to 77e2474bc7
Some checks failed
/ build (pull_request) Successful in 53s
/ Ansible Lint (push) Failing after 3m5s
/ Ansible Lint (pull_request) Failing after 2m50s
2026-10-21 04:18:01 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 77e2474bc7
Some checks failed
/ build (pull_request) Successful in 53s
/ Ansible Lint (push) Failing after 3m5s
/ Ansible Lint (pull_request) Failing after 2m50s
to fa87bb41b5
Some checks failed
/ build (pull_request) Successful in 1m23s
/ Ansible Lint (push) Failing after 4m11s
/ Ansible Lint (pull_request) Failing after 4m13s
2026-10-21 16:17:55 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from fa87bb41b5
Some checks failed
/ build (pull_request) Successful in 1m23s
/ Ansible Lint (push) Failing after 4m11s
/ Ansible Lint (pull_request) Failing after 4m13s
to 253a3f87ef
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Failing after 2m58s
/ Ansible Lint (pull_request) Failing after 3m3s
2026-10-21 16:46:23 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 253a3f87ef
Some checks failed
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Failing after 2m58s
/ Ansible Lint (pull_request) Failing after 3m3s
to 23d998911e
Some checks failed
/ build (pull_request) Successful in 53s
/ Ansible Lint (pull_request) Failing after 2m53s
/ Ansible Lint (push) Failing after 2m57s
2026-10-21 22:17:58 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 23d998911e
Some checks failed
/ build (pull_request) Successful in 53s
/ Ansible Lint (pull_request) Failing after 2m53s
/ Ansible Lint (push) Failing after 2m57s
to e3b6ea7b1f
Some checks failed
/ build (pull_request) Successful in 55s
/ Ansible Lint (push) Failing after 2m49s
/ Ansible Lint (pull_request) Failing after 2m49s
2026-10-22 04:17:38 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from e3b6ea7b1f
Some checks failed
/ build (pull_request) Successful in 55s
/ Ansible Lint (push) Failing after 2m49s
/ Ansible Lint (pull_request) Failing after 2m49s
to 2d1cc8bc90
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Failing after 3m24s
/ Ansible Lint (push) Failing after 3m47s
2026-10-22 22:16:47 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from 2d1cc8bc90
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Failing after 3m24s
/ Ansible Lint (push) Failing after 3m47s
to a583581dec
Some checks failed
/ build (pull_request) Successful in 1m12s
/ Ansible Lint (push) Failing after 2m58s
/ Ansible Lint (pull_request) Failing after 2m59s
2026-10-23 04:17:23 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from a583581dec
Some checks failed
/ build (pull_request) Successful in 1m12s
/ Ansible Lint (push) Failing after 2m58s
/ Ansible Lint (pull_request) Failing after 2m59s
to e828f3467f
Some checks failed
/ build (pull_request) Successful in 48s
/ Ansible Lint (push) Failing after 2m28s
/ Ansible Lint (pull_request) Failing after 2m34s
2026-10-23 04:47:55 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from e828f3467f
Some checks failed
/ build (pull_request) Successful in 48s
/ Ansible Lint (push) Failing after 2m28s
/ Ansible Lint (pull_request) Failing after 2m34s
to c91ae48f5a
Some checks failed
/ build (pull_request) Successful in 1m15s
/ Ansible Lint (push) Failing after 2m58s
/ Ansible Lint (pull_request) Failing after 2m58s
2026-10-24 22:17:18 +02:00
Compare
renovate force-pushed renovate/all-stable-minor from c91ae48f5a
Some checks failed
/ build (pull_request) Successful in 1m15s
/ Ansible Lint (push) Failing after 2m58s
/ Ansible Lint (pull_request) Failing after 2m58s
to f0f84ecf4f
Some checks failed
/ build (pull_request) Successful in 1m16s
/ Ansible Lint (pull_request) Failing after 3m15s
/ Ansible Lint (push) Failing after 3m17s
2026-10-26 09:17:06 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from f0f84ecf4f
Some checks failed
/ build (pull_request) Successful in 1m16s
/ Ansible Lint (pull_request) Failing after 3m15s
/ Ansible Lint (push) Failing after 3m17s
to a9449688d5
Some checks failed
/ build (pull_request) Successful in 49s
/ Ansible Lint (push) Failing after 3m3s
/ Ansible Lint (pull_request) Failing after 3m11s
2026-10-26 21:17:08 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from a9449688d5
Some checks failed
/ build (pull_request) Successful in 49s
/ Ansible Lint (push) Failing after 3m3s
/ Ansible Lint (pull_request) Failing after 3m11s
to 0d36c1fadf
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Failing after 3m55s
/ Ansible Lint (push) Failing after 4m9s
2026-10-27 15:17:00 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 0d36c1fadf
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Failing after 3m55s
/ Ansible Lint (push) Failing after 4m9s
to a09292688b
Some checks failed
/ build (pull_request) Successful in 50s
/ Ansible Lint (pull_request) Failing after 2m35s
/ Ansible Lint (push) Failing after 3m5s
2026-10-27 21:17:13 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from a09292688b
Some checks failed
/ build (pull_request) Successful in 50s
/ Ansible Lint (pull_request) Failing after 2m35s
/ Ansible Lint (push) Failing after 3m5s
to f2ffc4bc90
Some checks failed
/ build (pull_request) Successful in 1m20s
/ Ansible Lint (pull_request) Failing after 3m21s
/ Ansible Lint (push) Failing after 3m24s
2026-10-28 03:17:02 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from f2ffc4bc90
Some checks failed
/ build (pull_request) Successful in 1m20s
/ Ansible Lint (pull_request) Failing after 3m21s
/ Ansible Lint (push) Failing after 3m24s
to 1578ab90e7
Some checks failed
/ build (pull_request) Successful in 1m11s
/ Ansible Lint (pull_request) Failing after 2m55s
/ Ansible Lint (push) Failing after 3m1s
2026-10-29 03:17:27 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 1578ab90e7
Some checks failed
/ build (pull_request) Successful in 1m11s
/ Ansible Lint (pull_request) Failing after 2m55s
/ Ansible Lint (push) Failing after 3m1s
to 0b44b534d7
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Failing after 3m20s
/ Ansible Lint (pull_request) Failing after 3m24s
2026-10-29 15:16:42 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 0b44b534d7
Some checks failed
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Failing after 3m20s
/ Ansible Lint (pull_request) Failing after 3m24s
to f569ded2be
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Successful in 2m43s
/ Ansible Lint (push) Successful in 2m55s
2026-10-29 21:17:05 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from f569ded2be
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (pull_request) Successful in 2m43s
/ Ansible Lint (push) Successful in 2m55s
to b3a4aac904
All checks were successful
/ build (pull_request) Successful in 49s
/ Ansible Lint (push) Successful in 2m34s
/ Ansible Lint (pull_request) Successful in 2m36s
2026-10-30 03:17:15 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from b3a4aac904
All checks were successful
/ build (pull_request) Successful in 49s
/ Ansible Lint (push) Successful in 2m34s
/ Ansible Lint (pull_request) Successful in 2m36s
to b3b48f106a
All checks were successful
/ build (pull_request) Successful in 47s
/ Ansible Lint (pull_request) Successful in 2m36s
/ Ansible Lint (push) Successful in 2m47s
2026-10-30 15:16:23 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from b3b48f106a
All checks were successful
/ build (pull_request) Successful in 47s
/ Ansible Lint (pull_request) Successful in 2m36s
/ Ansible Lint (push) Successful in 2m47s
to 1815e87aae
All checks were successful
/ build (pull_request) Successful in 49s
/ Ansible Lint (push) Successful in 2m25s
/ Ansible Lint (pull_request) Successful in 2m25s
2026-10-31 21:16:22 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 1815e87aae
All checks were successful
/ build (pull_request) Successful in 49s
/ Ansible Lint (push) Successful in 2m25s
/ Ansible Lint (pull_request) Successful in 2m25s
to b082a7f298
All checks were successful
/ build (pull_request) Successful in 1m11s
/ Ansible Lint (push) Successful in 2m59s
/ Ansible Lint (pull_request) Successful in 3m1s
2026-11-01 03:17:16 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from b082a7f298
All checks were successful
/ build (pull_request) Successful in 1m11s
/ Ansible Lint (push) Successful in 2m59s
/ Ansible Lint (pull_request) Successful in 3m1s
to 6f2a27e93b
All checks were successful
/ build (pull_request) Successful in 1m9s
/ Ansible Lint (pull_request) Successful in 3m7s
/ Ansible Lint (push) Successful in 3m8s
2026-11-02 03:16:53 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 6f2a27e93b
All checks were successful
/ build (pull_request) Successful in 1m9s
/ Ansible Lint (pull_request) Successful in 3m7s
/ Ansible Lint (push) Successful in 3m8s
to acb71a6f63
All checks were successful
/ build (pull_request) Successful in 47s
/ Ansible Lint (pull_request) Successful in 3m4s
/ Ansible Lint (push) Successful in 3m27s
2026-11-02 15:17:00 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from acb71a6f63
All checks were successful
/ build (pull_request) Successful in 47s
/ Ansible Lint (pull_request) Successful in 3m4s
/ Ansible Lint (push) Successful in 3m27s
to 2bcc0554d1
All checks were successful
/ build (pull_request) Successful in 49s
/ Ansible Lint (pull_request) Successful in 2m42s
/ Ansible Lint (push) Successful in 3m10s
2026-11-02 21:17:00 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 2bcc0554d1
All checks were successful
/ build (pull_request) Successful in 49s
/ Ansible Lint (pull_request) Successful in 2m42s
/ Ansible Lint (push) Successful in 3m10s
to cf4d88b190
All checks were successful
/ build (pull_request) Successful in 1m18s
/ Ansible Lint (push) Successful in 3m6s
/ Ansible Lint (pull_request) Successful in 3m9s
2026-11-03 03:17:16 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from cf4d88b190
All checks were successful
/ build (pull_request) Successful in 1m18s
/ Ansible Lint (push) Successful in 3m6s
/ Ansible Lint (pull_request) Successful in 3m9s
to 78bfdf70fa
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 3m8s
/ Ansible Lint (pull_request) Successful in 3m10s
2026-11-03 21:16:21 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 78bfdf70fa
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 3m8s
/ Ansible Lint (pull_request) Successful in 3m10s
to a56d7521ac
All checks were successful
/ build (pull_request) Successful in 1m8s
/ Ansible Lint (push) Successful in 2m46s
/ Ansible Lint (pull_request) Successful in 2m48s
2026-11-04 03:16:57 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from a56d7521ac
All checks were successful
/ build (pull_request) Successful in 1m8s
/ Ansible Lint (push) Successful in 2m46s
/ Ansible Lint (pull_request) Successful in 2m48s
to f1545e6dc2
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Successful in 3m50s
/ Ansible Lint (pull_request) Successful in 3m52s
2026-11-04 21:17:06 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from f1545e6dc2
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Successful in 3m50s
/ Ansible Lint (pull_request) Successful in 3m52s
to 94d20c55b4
All checks were successful
/ build (pull_request) Successful in 1m10s
/ Ansible Lint (push) Successful in 2m51s
/ Ansible Lint (pull_request) Successful in 3m0s
2026-11-05 03:17:13 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 94d20c55b4
All checks were successful
/ build (pull_request) Successful in 1m10s
/ Ansible Lint (push) Successful in 2m51s
/ Ansible Lint (pull_request) Successful in 3m0s
to 01d411bb3a
All checks were successful
/ build (pull_request) Successful in 50s
/ Ansible Lint (push) Successful in 2m55s
/ Ansible Lint (pull_request) Successful in 3m6s
2026-11-05 09:17:01 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 01d411bb3a
All checks were successful
/ build (pull_request) Successful in 50s
/ Ansible Lint (push) Successful in 2m55s
/ Ansible Lint (pull_request) Successful in 3m6s
to 171550d259
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Successful in 2m42s
/ Ansible Lint (push) Successful in 2m44s
2026-11-05 09:46:22 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 171550d259
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (pull_request) Successful in 2m42s
/ Ansible Lint (push) Successful in 2m44s
to 988cf78a52
All checks were successful
/ build (pull_request) Successful in 1m12s
/ Ansible Lint (pull_request) Successful in 3m44s
/ Ansible Lint (push) Successful in 5m16s
2026-11-05 15:16:39 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 988cf78a52
All checks were successful
/ build (pull_request) Successful in 1m12s
/ Ansible Lint (pull_request) Successful in 3m44s
/ Ansible Lint (push) Successful in 5m16s
to 482a71a876
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 2m36s
/ Ansible Lint (pull_request) Successful in 2m36s
2026-11-05 15:46:06 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 482a71a876
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 2m36s
/ Ansible Lint (pull_request) Successful in 2m36s
to ed5a17655f
All checks were successful
/ build (pull_request) Successful in 50s
/ Ansible Lint (push) Successful in 5m7s
/ Ansible Lint (pull_request) Successful in 4m19s
2026-11-05 21:16:51 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from ed5a17655f
All checks were successful
/ build (pull_request) Successful in 50s
/ Ansible Lint (push) Successful in 5m7s
/ Ansible Lint (pull_request) Successful in 4m19s
to 22fdcc9440
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 2m31s
/ Ansible Lint (pull_request) Successful in 2m16s
2026-11-06 03:17:20 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 22fdcc9440
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 2m31s
/ Ansible Lint (pull_request) Successful in 2m16s
to ce19c4630c
All checks were successful
/ build (pull_request) Successful in 51s
/ Ansible Lint (push) Successful in 2m34s
/ Ansible Lint (pull_request) Successful in 2m50s
2026-11-06 15:16:34 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from ce19c4630c
All checks were successful
/ build (pull_request) Successful in 51s
/ Ansible Lint (push) Successful in 2m34s
/ Ansible Lint (pull_request) Successful in 2m50s
to 2a90223414
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Successful in 2m37s
/ Ansible Lint (pull_request) Successful in 3m1s
2026-11-07 15:16:36 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 2a90223414
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Successful in 2m37s
/ Ansible Lint (pull_request) Successful in 3m1s
to 674c4122c0
All checks were successful
/ build (pull_request) Successful in 53s
/ Ansible Lint (pull_request) Successful in 2m29s
/ Ansible Lint (push) Successful in 2m31s
2026-11-07 21:16:54 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 674c4122c0
All checks were successful
/ build (pull_request) Successful in 53s
/ Ansible Lint (pull_request) Successful in 2m29s
/ Ansible Lint (push) Successful in 2m31s
to 9e7ba0ac17
All checks were successful
/ build (pull_request) Successful in 1m23s
/ Ansible Lint (push) Successful in 3m30s
/ Ansible Lint (pull_request) Successful in 4m2s
2026-11-09 21:16:49 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 9e7ba0ac17
All checks were successful
/ build (pull_request) Successful in 1m23s
/ Ansible Lint (push) Successful in 3m30s
/ Ansible Lint (pull_request) Successful in 4m2s
to 0b24fd27d4
All checks were successful
/ build (pull_request) Successful in 55s
/ Ansible Lint (pull_request) Successful in 3m5s
/ Ansible Lint (push) Successful in 3m8s
2026-11-10 21:17:00 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 0b24fd27d4
All checks were successful
/ build (pull_request) Successful in 55s
/ Ansible Lint (pull_request) Successful in 3m5s
/ Ansible Lint (push) Successful in 3m8s
to 6913b5d194
All checks were successful
/ build (pull_request) Successful in 1m16s
/ Ansible Lint (push) Successful in 3m2s
/ Ansible Lint (pull_request) Successful in 3m3s
2026-11-13 03:17:05 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 6913b5d194
All checks were successful
/ build (pull_request) Successful in 1m16s
/ Ansible Lint (push) Successful in 3m2s
/ Ansible Lint (pull_request) Successful in 3m3s
to 5fdae5b558
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 3m39s
/ Ansible Lint (pull_request) Successful in 2m55s
2026-11-13 09:17:26 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from 5fdae5b558
All checks were successful
/ build (pull_request) Successful in 52s
/ Ansible Lint (push) Successful in 3m39s
/ Ansible Lint (pull_request) Successful in 2m55s
to e2bb1452f5
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Successful in 3m17s
/ Ansible Lint (pull_request) Successful in 3m44s
2026-11-13 21:16:33 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from e2bb1452f5
All checks were successful
/ build (pull_request) Successful in 54s
/ Ansible Lint (push) Successful in 3m17s
/ Ansible Lint (pull_request) Successful in 3m44s
to a66268e0ac
All checks were successful
/ build (pull_request) Successful in 1m22s
/ Ansible Lint (pull_request) Successful in 3m4s
/ Ansible Lint (push) Successful in 3m13s
2026-11-14 03:17:09 +01:00
Compare
renovate force-pushed renovate/all-stable-minor from a66268e0ac
All checks were successful
/ build (pull_request) Successful in 1m22s
/ Ansible Lint (pull_request) Successful in 3m4s
/ Ansible Lint (push) Successful in 3m13s
to e9d8b59bcc
All checks were successful
/ build (pull_request) Successful in 55s
/ Ansible Lint (pull_request) Successful in 2m34s
/ Ansible Lint (push) Successful in 2m46s
2026-11-14 09:16:00 +01:00
Compare
All checks were successful
/ build (pull_request) Successful in 55s
Required
Details
/ Ansible Lint (pull_request) Successful in 2m34s
Required
Details
/ Ansible Lint (push) Successful in 2m46s
Required
Details
This pull request doesn't have enough approvals yet. 0 of 1 approvals granted.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin 'renovate/all-stable-minor:renovate/all-stable-minor'
git switch 'renovate/all-stable-minor'
Sign in to join this conversation.
No description provided.