You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+167Lines changed: 167 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,173 @@
2
2
3
3
This project adheres to [Semantic Versioning v2.0.0](https://semver.org/spec/v2.0.0.html).
4
4
5
+
# [2.9.0] - 2025-11-27
6
+
7
+
## 🚀 Features
8
+
9
+
### Add CORS Private Network Access support ([PR #8279](https://github.com/apollographql/router/pull/8279))
10
+
11
+
CORS configuration now supports [private network access](https://wicg.github.io/private-network-access/) (PNA). Enable PNA for a CORS policy by specifying the `private_network_access` field, which supports two optional subfields: `access_id` and `access_name`.
By [@TylerBloom](https://github.com/TylerBloom) in https://github.com/apollographql/router/pull/8279
28
+
29
+
### Configure maximum HTTP/2 header list size ([PR #8636](https://github.com/apollographql/router/pull/8636))
30
+
31
+
The router now supports configuring the maximum size for HTTP/2 header lists via the `limits.http2_max_headers_list_bytes` setting. This protects against excessive resource usage from clients sending large sets of HTTP/2 headers.
32
+
33
+
The default remains 16KiB. When a client sends a request with HTTP/2 headers whose total size exceeds the configured limit, the router rejects the request with a 431 error code.
34
+
35
+
**Example configuration:**
36
+
37
+
```yaml
38
+
limits:
39
+
http2_max_headers_list_bytes: "48KiB"
40
+
```
41
+
42
+
By [@aaronArinder](https://github.com/aaronArinder) in https://github.com/apollographql/router/pull/8636
43
+
44
+
### Customize response cache key per subgraph via context ([PR #8543](https://github.com/apollographql/router/pull/8543))
45
+
46
+
The response cache key can now be customized per subgraph using the `apollo::response_cache::key` context entry. The new `subgraphs` field enables defining separate cache keys for individual subgraphs.
47
+
48
+
Subgraph-specific data takes precedence over data in the `all` field—the router doesn't merge them. To set common data when providing subgraph-specific data, add it to the subgraph-specific section.
49
+
50
+
**Example payload:**
51
+
52
+
```json
53
+
{
54
+
"all": 1,
55
+
"subgraph_operation1": "key1",
56
+
"subgraph_operation2": {
57
+
"data": "key2"
58
+
},
59
+
"subgraphs": {
60
+
"my_subgraph": {
61
+
"locale": "be"
62
+
}
63
+
}
64
+
}
65
+
```
66
+
67
+
By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router/pull/8543
68
+
69
+
### Add telemetry selector for Cache-Control metrics ([PR #8524](https://github.com/apollographql/router/pull/8524))
70
+
71
+
The new `response_cache_control` selector enables telemetry metrics based on the computed [`Cache-Control` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Cache-Control) from subgraph responses.
72
+
73
+
**Example configuration:**
74
+
75
+
```yaml
76
+
telemetry:
77
+
exporters:
78
+
metrics:
79
+
common:
80
+
service_name: apollo-router
81
+
views:
82
+
- name: subgraph.response.cache_control.max_age
83
+
aggregation:
84
+
histogram:
85
+
buckets:
86
+
- 10
87
+
- 100
88
+
- 1000
89
+
- 10000
90
+
- 100000
91
+
instrumentation:
92
+
instruments:
93
+
subgraph:
94
+
subgraph.response.cache_control.max_age:
95
+
value:
96
+
response_cache_control: max_age
97
+
type: histogram
98
+
unit: s
99
+
description: A histogram of the computed TTL for a subgraph response
100
+
```
101
+
102
+
By [@bnjjj](https://github.com/bnjjj) in https://github.com/apollographql/router/pull/8524
103
+
104
+
## 🐛 Fixes
105
+
106
+
### Remove `_redacted` suffix from event attributes in `apollo.router.state.change.total` metric ([Issue #8464](https://github.com/apollographql/router/issues/8464))
107
+
108
+
Event names in the `apollo.router.state.change.total` metric no longer include the `_redacted` suffix. The metric now uses the `Display` trait instead of `Debug` for event names, changing values like `updateconfiguration_redacted` to `updateconfiguration` in APM platforms.
109
+
110
+
The custom behavior for `UpdateLicense` events is retained—the license state name is still appended.
111
+
112
+
By [@rohan-b99](https://github.com/rohan-b99) in https://github.com/apollographql/router/pull/8464
113
+
114
+
### Preserve Content-Length header for responses with known size ([Issue #7941](https://github.com/apollographql/router/issues/7941))
115
+
116
+
The router now uses the `Content-Length` header for GraphQL responses with known content lengths instead of `transfer-encoding: chunked`. Previously, the `fleet_detector` plugin destroyed HTTP body size hints when collecting metrics.
117
+
118
+
This extends the fix from [#6538](https://github.com/apollographql/router/pull/6538), which preserved size hints for `router → subgraph` requests, to also cover `client → router` requests and responses. Size hints now flow correctly through the entire pipeline for optimal HTTP header selection.
119
+
120
+
By [@morriswchris](https://github.com/morriswchris) in https://github.com/apollographql/router/pull/7977
The `apollo.router.operations.subscriptions.events` metric now increments correctly for each subscription event (excluding ping/pong/close messages). The counter call has been moved into the stream to trigger on each event.
125
+
126
+
This change also removes custom pong response handling before connection acknowledgment, which previously caused duplicate pongs because the WebSocket implementation already handles pings by default.
127
+
128
+
By [@rohan-b99](https://github.com/rohan-b99) in https://github.com/apollographql/router/pull/8483
129
+
130
+
### Unify timeout codes in response caching metrics ([PR #8515](https://github.com/apollographql/router/pull/8515))
131
+
132
+
Tokio- and Redis-based timeouts now use the same `timeout` code in `apollo.router.operations.response_cache.*.error` metrics. Previously, they were inadvertently given different code values.
133
+
134
+
By [@carodewig](https://github.com/carodewig) in https://github.com/apollographql/router/pull/8515
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -82,7 +82,7 @@ Don't be a bad actor.
82
82
83
83
It’s important that every piece of code in Apollo packages is reviewed by at least one core contributor familiar with that codebase. Here are some things we look for:
84
84
85
-
1.**Required CI checks pass.** This is a prerequisite for the review, and it is the PR author's responsibility. As long as the tests don’t pass, the PR won't get reviewed. To learn more about our CI pipeline, read about it [below](#pipelines)
85
+
1.**Required CI checks pass.** This is a prerequisite for the review, and it is the PR author's responsibility. As long as the tests don’t pass, the PR won't get reviewed. To learn more about our CI pipeline, read about it [above](#continuous-integration).
86
86
2.**Simplicity.** Is this the simplest way to achieve the intended goal? If there are too many files, redundant functions, or complex lines of code, suggest a simpler way to do the same thing. In particular, avoid implementing an overly general solution when a simple, small, and pragmatic fix will do.
87
87
3.**Testing.** Please make sure that the tests ensure that the code won’t break when other stuff change around it. The error messages in the test should help identify what is broken exactly and how. The tests should test every edge case if possible. Please make sure you get as much coverage as possible.
88
88
4.**No unnecessary or unrelated changes.** PRs shouldn’t come with random formatting changes, especially in unrelated parts of the code. If there is some refactoring that needs to be done, it should be in a separate PR from a bug fix or feature, if possible.
0 commit comments