Merged
Conversation
✅ Docs preview readyThe preview is ready to be viewed. View the preview File Changes 0 new, 6 changed, 0 removedBuild ID: cd3435bc7bf7f372c0649aaf URL: https://www.apollographql.com/docs/deploy-preview/cd3435bc7bf7f372c0649aaf |
lrlna
commented
Aug 25, 2025
lrlna
commented
Aug 26, 2025
BrynCooke
reviewed
Aug 26, 2025
lrlna
commented
Aug 26, 2025
Co-authored-by: Bryn Cooke <BrynCooke@gmail.com>
abernix
approved these changes
Aug 26, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🚀 Features
[Subgraph Insights] Experimental Apollo Subgraph Fetch Histogram (PR #8013, PR #8045)
This change adds a new, experimental histogram to capture subgraph fetch duration for GraphOS. This will
eventually be used to power subgraph-level insights in Apollo Studio.
This can be toggled on using a new boolean config flag:
The new instrument is only sent to GraphOS and is not available in 3rd-party OTel export targets. It is not currently
customizable. Users requiring a customizable alternative can use the existing
http.client.request.durationinstrument, which measures the same value.
By @rregitsky in #8013 and #8045
Redis cache metrics (PR #7920)
The router now provides Redis cache monitoring with new metrics that help track performance, errors, and resource usage.
Connection and performance metrics:
apollo.router.cache.redis.connections: Number of active Redis connectionsapollo.router.cache.redis.command_queue_length: Commands waiting to be sent to Redis, indicates if Redis is keeping up with demandapollo.router.cache.redis.commands_executed: Total number of Redis commands executedapollo.router.cache.redis.redelivery_count: Commands retried due to connection issuesapollo.router.cache.redis.errors: Redis errors by type, to help diagnose authentication, network, and configuration problemsExperimental performance metrics:
experimental.apollo.router.cache.redis.network_latency_avg: Average network latency to Redisexperimental.apollo.router.cache.redis.latency_avg: Average Redis command execution timeexperimental.apollo.router.cache.redis.request_size_avg: Average request payload sizeexperimental.apollo.router.cache.redis.response_size_avg: Average response payload sizeNote
The experimental metrics may change in future versions as we improve the underlying Redis client integration.
You can configure how often metrics are collected using the
metrics_intervalsetting:By @BrynCooke in #7920
Enforcing allowed features (PR #7917)
The router now enforces feature access based on the
allowed_featuresclaim in the license. Theallowed_featuresclaim may be found in all Apollo licenses. Features enforced include APQ caching and distributed query planning and plugins such as subscriptions and demand control. If a feature isn't included in the license, the router will fail to start and will emit an error message describing which features must be removed from the configuration file or which directives must be removed from the schema. For a full list of features see theAllowedFeatureenum.By @DMallare in #7917
Additional Connector Custom Instrument Selectors (PR #8045)
This adds new custom instrument selectors for Connectors and enhances some existing selectors. The new selectors are:
supergraph_operation_namesupergraph_operation_kindquery,mutation,subscription)request_contextconnector_on_response_erroris_successfulcondition. Or, if that condition is not set,returns true when the response has a non-200 status code
These selectors were modified to add additional functionality:
connector_request_mapping_problemsbooleanvariant that will returntruewhen a mapping problem exists on the requestconnector_response_mapping_problemsbooleanvariant that will returntruewhen a mapping problem exists on the responseBy @rregitsky in #8045
Enable jemalloc on MacOS (PR #8046)
This PR enables the jemalloc allocator on MacOS by default, making it easier to do memory profiling. Previously, this was only done for Linux.
By @Velfi in #8046
🐛 Fixes
Entity caching: fix inconsistency in cache-control header handling (PR #7987)
When the Subgraph Entity Caching feature is in use, it determines the
Cache-ControlHTTP response header sent to supergraph clients based on those received from subgraph servers.In this process, Apollo Router only emits the
max-agedirective and nots-maxage.This PR fixes a bug where, for a query that involved a single subgraph fetch that was not already cached, the subgraph response’s
Cache-Controlheader would be forwarded as-is.Instead, it now goes through the same algorithm as other cases.
By @SimonSapin in #7987
Query planning errors with progressive override on interface implementations (PR #7929)
The router now correctly generates query plans when using progressive override (
@overridewith labels) on types that implement interfaces within the same subgraph. Previously, the Rust query planner would fail to generate plans for these scenarios with the error"Was not able to find any options for {}: This shouldn't have happened.", while the JavaScript planner handled them correctly.This fix resolves planning failures when your schema uses:
The router will now successfully plan and execute queries that previously resulted in query planning errors.
By @TylerBloom in #7929
Reliably distinguish GraphQL errors and transport errors in subscriptions (PR #7901)
The Multipart HTTP protocol for GraphQL Subscriptions distinguishes between GraphQL-level errors and fatal transport-level errors. The router previously used a heuristic to determine if a given error was fatal or not, which could sometimes cause errors to be wrongly classified. For example, if a subgraph returned a GraphQL-level error for a subscription and then immediately ended the subscription, the router might propagate this as a fatal transport-level error.
This is now fixed. Fatal transport-level errors are tagged as such when they are constructed, so the router can reliably know how to serialize errors when sending them to the client.
By @goto-bus-stop in #7901
📚 Documentation
Update Documentation To Add DockerHub References
Now that we have a DockerHub account we have published the Runtime Container to that account.
This fix simply adds a reference to that to the documentation
By @jonathanrainer in #8054