A developer-friendly API for converting many document formats into PDF files, and more!
This report summarizes scanner evidence for gotenberg/gotenberg, a Go project with 13,490 GitHub stars. SynthScan examined 49,214 lines of code across 253 source files, recording 94 pattern matches distributed across 2 syntactic categories. The legacy adjusted pattern signal is 1.9 (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? 93 finding(s).
Are imports declared and package/API names verified? 1 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 94 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 94 distinct pattern matches across 2 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 | test/integration/scenario/containers.go | 21 | COMMENT | |
| LOW | test/integration/scenario/containers.go | 61 | COMMENT | |
| LOW | pkg/gotenberg/pattern.go | 1 | package gotenberg | COMMENT |
| LOW | pkg/gotenberg/pattern.go | 21 | // Anything that stops the whole process, a cgroup CPU-quota throttle or a long | COMMENT |
| LOW | pkg/gotenberg/pdfengine.go | 281 | // Go. | COMMENT |
| LOW | pkg/gotenberg/pdfengine.go | 321 | // The bookmarks parameter represents the hierarchical tree of the outline. | COMMENT |
| LOW | pkg/gotenberg/pdfengine.go | 341 | // Watermark applies a watermark (behind page content) to a PDF file. | COMMENT |
| LOW | pkg/gotenberg/pdfengine.go | 361 | ReadPdfAConformance(ctx context.Context, logger *slog.Logger, inputPath string) (part string, conformance string, err e | COMMENT |
| LOW | pkg/gotenberg/flags.go | 201 | // It panics if an error occurs. | COMMENT |
| LOW | pkg/gotenberg/flags.go | 221 | // every pattern they compile, which is how all four production lists are | COMMENT |
| LOW | pkg/gotenberg/supervisor.go | 21 | // ErrMaximumQueueSizeExceeded happens if Run() is called but the maximum queue | COMMENT |
| LOW | pkg/gotenberg/supervisor.go | 41 | // is healthy; otherwise, it returns false. | COMMENT |
| LOW | pkg/gotenberg/supervisor.go | 61 | // A non-started process is considered healthy (startup is deferred until | COMMENT |
| LOW | pkg/gotenberg/supervisor.go | 81 | COMMENT | |
| LOW | pkg/gotenberg/supervisor.go | 101 | // Browser.getVersion roundtrip when several conversion slots are | COMMENT |
| LOW | pkg/gotenberg/doc.go | 1 | // Package gotenberg implements the core module system. | COMMENT |
| LOW | pkg/gotenberg/context.go | 61 | // Modules return the list of modules which satisfies the requested interface. | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 21 | ) | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 61 | // not classify via [netip.Addr] helpers but that must not be considered | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 101 | // returns false for loopback, private (RFC1918), link-local, unspecified, | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 201 | } | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 221 | // outboundDecisionKey is the context key under which an [OutboundDecision] | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 241 | type DecideOption func(*decideConfig) | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 281 | // closes the DNS rebinding window that affects callers that only receive | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 401 | // Match on a credential-free form. [url.URL.String] re-emits userinfo | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 461 | // | COMMENT |
| LOW | pkg/gotenberg/outbound.go | 521 | // underlying [http.Client] invokes the wrapping [http.RoundTripper] once | COMMENT |
| LOW | pkg/gotenberg/allowlist.go | 41 | COMMENT | |
| LOW | pkg/gotenberg/modules.go | 21 | // ID: "your_module", | COMMENT |
| LOW | pkg/gotenberg/modules.go | 81 | Debug() map[string]any | COMMENT |
| LOW | pkg/gotenberg/semconv/gen.go | 1 | // Copyright The OpenTelemetry Authors | COMMENT |
| LOW | pkg/gotenberg/semconv/server.go | 81 | // RequestTraceAttrs returns trace attributes for an HTTP request received by a | COMMENT |
| LOW | pkg/gotenberg/semconv/doc.go | 1 | // Package semconv contains utilities not yet exposed in the OpenTelemetry Go | COMMENT |
| LOW | pkg/gotenberg/internal/otel/doc.go | 1 | // Package otel gathers initialization utilities for OpenTelemetry | COMMENT |
| LOW | pkg/gotenberg/internal/otel/doc.go | 21 | // sampling ratio. | COMMENT |
| LOW | pkg/gotenberg/internal/otel/otel.go | 21 | ) | COMMENT |
| LOW | pkg/modules/webhook/pool_safe_context.go | 1 | package webhook | COMMENT |
| LOW | pkg/modules/webhook/middleware.go | 321 | cancel = detachAsyncContext(ctx, cancel) | COMMENT |
| LOW | pkg/modules/exiftool/exiftool.go | 81 | "FilePermissions", // Writing this changes the file's permissions | COMMENT |
| LOW | pkg/modules/exiftool/doc.go | 1 | // Package exiftool implements gotenberg.PdfEngine using the ExifTool command-line tool. Reads and writes PDF metadata. | COMMENT |
| LOW | pkg/modules/pdfcpu/doc.go | 1 | // Package pdfcpu implements gotenberg.PdfEngine using the pdfcpu command-line | COMMENT |
| LOW | pkg/modules/chromium/tasks.go | 481 | } | COMMENT |
| LOW | pkg/modules/chromium/tasks.go | 501 | // } | COMMENT |
| LOW | pkg/modules/chromium/events.go | 61 | } | COMMENT |
| LOW | pkg/modules/chromium/pinning_proxy.go | 21 | "github.com/gotenberg/gotenberg/v8/pkg/gotenberg" | COMMENT |
| LOW | pkg/modules/chromium/pinning_proxy.go | 201 | } | COMMENT |
| LOW | pkg/modules/chromium/pinning_proxy.go | 321 | }{ | COMMENT |
| LOW | pkg/modules/chromium/pinning_proxy.go | 381 | } | COMMENT |
| LOW | pkg/modules/chromium/pinning_proxy.go | 401 | // a slow origin is never cut off. A transfer that keeps making progress | COMMENT |
| LOW | pkg/modules/chromium/chromium.go | 41 | COMMENT | |
| LOW | pkg/modules/chromium/chromium.go | 141 | COMMENT | |
| LOW | pkg/modules/chromium/chromium.go | 161 | // Values are normalized (trimmed, lowercased) and may be provided as: | COMMENT |
| LOW | pkg/modules/chromium/chromium.go | 221 | // these directory prefixes. Applied in listenForEventRequestPaused in | COMMENT |
| LOW | pkg/modules/chromium/chromium.go | 301 | COMMENT | |
| LOW | pkg/modules/chromium/browser.go | 21 | "github.com/chromedp/cdproto/target" | COMMENT |
| LOW | pkg/modules/chromium/browser.go | 41 | // ~85 MB of anonymous memory for a UI a PDF service can never show. Chromium | COMMENT |
| LOW | pkg/modules/chromium/browser.go | 221 | // or any sub-resource. The proxy resolves and validates each URL | COMMENT |
| LOW | pkg/modules/chromium/browser.go | 241 | // cannot filter it; the pinning proxy is the only layer that sees | COMMENT |
| LOW | pkg/modules/chromium/browser.go | 701 | // browser went away mid-flight; fail fast with the same crash error | COMMENT |
| LOW | pkg/modules/chromium/routes.go | 41 | COMMENT | |
| 33 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/actions/clean/clean.sh | 61 | token="placeholder" | CODE |