🌍 Spec-compliant and production ready JavaScript GraphQL server that lets you develop in a schema-first way. Built for Express, Connect, Hapi, Koa, and more.
This report summarizes scanner evidence for apollographql/apollo-server, a TypeScript project with 13,958 GitHub stars. SynthScan examined 52,250 lines of code across 209 source files, recording 100 pattern matches distributed across 5 syntactic categories. The legacy adjusted pattern signal is 2.2 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 98 finding(s).
Are imports declared and package/API names verified? 2 finding(s).
Are wrappers, guards, and repeated structures necessary? 49 finding(s).
Which changes need focused human review? 100 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 100 distinct pattern matches across 5 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/integration-testsuite/src/httpSpecTests.ts | 8 | export function defineIntegrationTestSuiteHttpSpecTests( | CODE |
| LOW | packages/integration-testsuite/src/apolloServerTests.ts | 164 | export function defineIntegrationTestSuiteApolloServerTests( | CODE |
| LOW | packages/integration-testsuite/src/apolloServerTests.ts | 2379 | async function makeFakeUsageReportingServer({ | CODE |
| LOW | packages/integration-testsuite/src/apolloServerTests.ts | 2584 | function createApolloFetchAsIfFromGateway(uri: string): ApolloFetch { | CODE |
| LOW | packages/integration-testsuite/src/httpServerTests.ts | 268 | export function defineIntegrationTestSuiteHttpServerTests( | CODE |
| LOW | packages/integration-testsuite/src/index.ts | 27 | export function defineIntegrationTestSuite( | CODE |
| LOW | packages/server/src/runHttpQuery.ts | 37 | function searchParamIfSpecifiedOnce( | CODE |
| LOW | packages/server/src/runHttpQuery.ts | 54 | function jsonParsedSearchParamIfSpecifiedOnce( | CODE |
| LOW | packages/server/src/runHttpQuery.ts | 99 | function ensureQueryIsStringOrMissing(query: unknown) { | CODE |
| LOW | packages/server/src/runHttpQuery.ts | 369 | function orderExecutionResultFields( | CODE |
| LOW | packages/server/src/requestPipeline.ts | 88 | function isBadUserInputGraphQLError(error: GraphQLError): boolean { | CODE |
| LOW | packages/server/src/ApolloServer.ts | 1429 | export function chooseContentTypeForSingleResultResponse( | CODE |
| LOW | …ckages/server/src/plugin/subscriptionCallback/index.ts | 20 | export function ApolloServerPluginSubscriptionCallback( | CODE |
| LOW | packages/server/src/plugin/cacheControl/index.ts | 55 | export function ApolloServerPluginCacheControl( | CODE |
| LOW | packages/server/src/plugin/cacheControl/index.ts | 102 | function memoizedCacheAnnotationFromType( | CODE |
| LOW | packages/server/src/plugin/cacheControl/index.ts | 114 | function memoizedCacheAnnotationFromField( | CODE |
| LOW | packages/server/src/plugin/cacheControl/index.ts | 350 | function parseExistingCacheControlHeader( | CODE |
| LOW | packages/server/src/plugin/cacheControl/index.ts | 372 | function cacheAnnotationFromDirectives( | CODE |
| LOW | packages/server/src/plugin/inlineTrace/index.ts | 47 | export function ApolloServerPluginInlineTrace( | CODE |
| LOW | …src/plugin/usageReporting/operationDerivedDataCache.ts | 10 | export function createOperationDerivedDataCache({ | CODE |
| LOW | …src/plugin/usageReporting/operationDerivedDataCache.ts | 56 | export function operationDerivedDataCacheKey( | CODE |
| LOW | packages/server/src/plugin/usageReporting/plugin.ts | 221 | function executableSchemaIdForSchema(schema: GraphQLSchema) { | CODE |
| LOW | packages/server/src/plugin/usageReporting/plugin.ts | 237 | async function sendAllReportsAndReportErrors(): Promise<void> { | CODE |
| LOW | packages/server/src/plugin/usageReporting/plugin.ts | 245 | async function sendReportAndReportErrors( | CODE |
| LOW | packages/server/src/plugin/usageReporting/plugin.ts | 423 | async function maybeCallIncludeRequestHook( | CODE |
| LOW | …kages/server/src/plugin/usageReporting/traceDetails.ts | 75 | function handleVariableValueTransformError( | CODE |
| LOW | …/plugin/usageReporting/defaultSendOperationsAsTrace.ts | 6 | export function defaultSendOperationsAsTrace() { | CODE |
| LOW⚡ | packages/server/src/plugin/disabled/index.ts | 23 | export function ApolloServerPluginCacheControlDisabled(): ApolloServerPlugin<BaseContext> { | CODE |
| LOW⚡ | packages/server/src/plugin/disabled/index.ts | 27 | export function ApolloServerPluginInlineTraceDisabled(): ApolloServerPlugin<BaseContext> { | CODE |
| LOW⚡ | packages/server/src/plugin/disabled/index.ts | 31 | export function ApolloServerPluginLandingPageDisabled(): ApolloServerPlugin<BaseContext> { | CODE |
| LOW⚡ | packages/server/src/plugin/disabled/index.ts | 35 | export function ApolloServerPluginSchemaReportingDisabled(): ApolloServerPlugin<BaseContext> { | CODE |
| LOW⚡ | packages/server/src/plugin/disabled/index.ts | 39 | export function ApolloServerPluginUsageReportingDisabled(): ApolloServerPlugin<BaseContext> { | CODE |
| LOW | packages/server/src/plugin/schemaReporting/index.ts | 60 | export function ApolloServerPluginSchemaReporting( | CODE |
| LOW | packages/server/src/plugin/drainHttpServer/index.ts | 27 | export function ApolloServerPluginDrainHttpServer( | CODE |
| LOW | packages/server/src/plugin/landingPage/default/index.ts | 23 | export function ApolloServerPluginLandingPageLocalDefault( | CODE |
| LOW | packages/server/src/plugin/landingPage/default/index.ts | 38 | export function ApolloServerPluginLandingPageProductionDefault( | CODE |
| LOW | packages/server/src/plugin/disableSuggestions/index.ts | 4 | export function ApolloServerPluginDisableSuggestions(): ApolloServerPlugin { | CODE |
| LOW | packages/server/src/utils/schemaInstrumentation.ts | 46 | export function pluginsEnabledForSchemaResolvers( | CODE |
| LOW | packages/server/src/__tests__/runQuery.test.ts | 1037 | function createLifecyclePluginMocks() { | CODE |
| LOW | packages/server/src/__tests__/runQuery.test.ts | 1141 | function cacheRepresentationOfQuery(query: string): string { | CODE |
| LOW | …rc/__tests__/plugin/subscriptionCallback/index.test.ts | 2151 | function mockRouterCheckResponseWithError(opts?: { | CODE |
| LOW | …rc/__tests__/plugin/subscriptionCallback/index.test.ts | 2213 | function mockRouterCompleteResponse(requestOpts?: { | CODE |
| LOW | …ests__/plugin/cacheControl/collectCacheControlHints.ts | 10 | export async function collectCacheControlHintsAndPolicyIfCacheable( | CODE |
| LOW | …c/__tests__/plugin/cacheControl/cacheControlSupport.ts | 8 | export function augmentTypeDefsWithCacheControlSupport(typeDefs: string) { | CODE |
| LOW | …c/__tests__/plugin/cacheControl/cacheControlSupport.ts | 25 | export function buildSchemaWithCacheControlSupport(source: string) { | CODE |
| LOW | …c/__tests__/plugin/cacheControl/cacheControlSupport.ts | 29 | export function makeExecutableSchemaWithCacheControlSupport( | CODE |
| LOW | …ver/src/__tests__/plugin/usageReporting/plugin.test.ts | 311 | function containsFieldExecutionData( | CODE |
| LOW | …server/src/validationRules/RecursiveSelectionsLimit.ts | 157 | export function createMaxRecursiveSelectionsRule( | CODE |
| LOW | packages/cache-control-types/src/index.ts | 79 | export function maybeCacheControlFromInfo( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .gitleaks.toml | 1 | # This file exists primarily to influence scheduled scans that Apollo runs of all repos in Apollo-managed orgs. | COMMENT |
| LOW | smoke-test/smoke-test.sh | 41 | node generated/tsc/smoke-test.mjs | COMMENT |
| LOW | packages/integration-testsuite/src/httpSpecTests.ts | 41 | } | COMMENT |
| LOW | packages/integration-testsuite/src/resolvable.ts | 1 | // Copyright 2019 Joseph Gentle | COMMENT |
| LOW | packages/server/src/internalPlugin.ts | 1 | import type { BaseContext, ApolloServerPlugin } from './externalTypes/index.js'; | COMMENT |
| LOW | packages/server/src/preventCsrf.ts | 1 | import MIMEType from 'whatwg-mimetype'; | COMMENT |
| LOW | packages/server/src/preventCsrf.ts | 21 | const NON_PREFLIGHTED_CONTENT_TYPES = [ | COMMENT |
| LOW | packages/server/src/preventCsrf.ts | 41 | // content types. For those operations, we require (if this feature is enabled) | COMMENT |
| LOW | packages/server/src/preventCsrf.ts | 61 | // actually *ok* because that would lead to a preflight. (For example, the | COMMENT |
| LOW | packages/server/src/requestPipeline.ts | 281 | return await sendErrorResponse( | COMMENT |
| LOW | packages/server/src/requestPipeline.ts | 481 | // The first thing that execution does is coerce the request's variables | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 181 | legacyExperimentalExecuteIncrementally?: LegacyExperimentalExecuteIncrementally; | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 381 | 'The `status400ForVariableCoercionErrors: false` configuration option is deprecated and will be removed in Apo | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 401 | // Apollo Server 3+ the functions like `expressMiddleware` use `assertStarted` | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 621 | process.on(signal, signalHandler); | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 681 | }.'`, | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 761 | // missing/undefined means use the default (creating a new one each | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 1001 | // this if an API key was configured and log a warning.) | COMMENT |
| LOW | packages/server/src/ApolloServer.ts | 1341 | logger: server.logger, | COMMENT |
| LOW | packages/server/src/externalTypes/plugins.ts | 81 | // Called on startup fail. This can occur if the schema fails to load or if a | COMMENT |
| LOW | packages/server/src/plugin/traceTreeBuilder.ts | 81 | } | COMMENT |
| LOW | packages/server/src/plugin/traceTreeBuilder.ts | 101 | // | COMMENT |
| LOW | packages/server/src/plugin/traceTreeBuilder.ts | 281 | return err; | COMMENT |
| LOW | packages/server/src/plugin/schemaIsSubgraph.ts | 1 | import { | COMMENT |
| LOW | packages/server/src/plugin/cacheControl/index.ts | 221 | // (uncached) or the default if specified in the constructor. | COMMENT |
| LOW | packages/server/src/plugin/cacheControl/index.ts | 301 | policyIfCacheable && | COMMENT |
| LOW | …src/plugin/usageReporting/operationDerivedDataCache.ts | 21 | }, | COMMENT |
| LOW | packages/server/src/plugin/usageReporting/plugin.ts | 141 | COMMENT | |
| LOW | packages/server/src/plugin/usageReporting/plugin.ts | 501 | requestContext.operation === undefined; | COMMENT |
| LOW | packages/server/src/plugin/usageReporting/stats.ts | 21 | // interface is what is accepted as input. We build up our messages using custom | COMMENT |
| LOW | packages/server/src/plugin/usageReporting/stats.ts | 301 | COMMENT | |
| LOW | …/plugin/usageReporting/defaultSendOperationsAsTrace.ts | 1 | import { LRUCache } from 'lru-cache'; | COMMENT |
| LOW | packages/server/src/plugin/drainHttpServer/stoppable.ts | 1 | // This file is adapted from the stoppable npm package: | COMMENT |
| LOW | …s/server/src/utils/makeGatewayGraphQLRequestContext.ts | 21 | // exist any more. | COMMENT |
| LOW | …s/server/src/utils/makeGatewayGraphQLRequestContext.ts | 41 | // | COMMENT |
| LOW | …s/server/src/utils/makeGatewayGraphQLRequestContext.ts | 61 | // Similarly, it's not clear what the intended use case of mutating `debug` in | COMMENT |
| LOW | packages/server/src/utils/resolvable.ts | 1 | // Copyright 2019 Joseph Gentle | COMMENT |
| LOW | …src/__tests__/plugin/drainHttpServer/stoppable.test.ts | 1 | // This file is adapted from the stoppable npm package: | COMMENT |
| LOW | packages/cache-control-types/src/index.ts | 61 | extends Omit<GraphQLResolveInfo, 'cacheControl'> { | COMMENT |
| LOW | …-response-cache/src/ApolloServerPluginResponseCache.ts | 21 | // JSON object with keys representing the query document, operation name, | COMMENT |
| LOW | …-response-cache/src/ApolloServerPluginResponseCache.ts | 41 | // - Else it will be cached under a cache key tagged with the mode | COMMENT |
| LOW | …-response-cache/src/ApolloServerPluginResponseCache.ts | 61 | // Note: this hook has been updated in Apollo Server v4 to only return a | COMMENT |
| LOW | …-response-cache/src/ApolloServerPluginResponseCache.ts | 81 | COMMENT | |
| LOW | …-response-cache/src/ApolloServerPluginResponseCache.ts | 301 | if (errors || !data || !policyIfCacheable) { | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | CHANGELOG_historical.md | 1202 | - Add support for GraphiQL editor themes in [#484](https://github.com/apollographql/apollo-server/pull/484) as requested | CODE |
| HIGH | CHANGELOG_historical.md | 1202 | - Add support for GraphiQL editor themes in [#484](https://github.com/apollographql/apollo-server/pull/484) as requested | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .gitleaks.toml | 12 | # or wasn't as robust as we needed. For example, one of the allowlisting options offered by Gitleaks depends on the line | COMMENT |
| MEDIUM | .gitleaks.toml | 14 | # This creates a fairly fragile allowlisting mechanism. This file allows us to leverage the full capabilities of the Git | COMMENT |
| MEDIUM | packages/server/src/requestPipeline.ts | 216 | // utilize the operation's hash to lookup the AST from the previously | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/source/schema/schema.md | 557 | "name": "Jane Doe", | CODE |
| LOW | docs/source/schema/schema.md | 606 | "name": "Jane Doe", | CODE |