A scalable overlay networking tool with a focus on performance, simplicity and security
This report summarizes scanner evidence for slackhq/nebula, a Go project with 18,490 GitHub stars. SynthScan examined 90,572 lines of code across 390 source files, recording 109 pattern matches distributed across 3 syntactic categories. The legacy adjusted pattern signal is 1.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? 109 finding(s).
Are imports declared and package/API names verified? 0 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 109 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 109 distinct pattern matches across 3 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 | dns_server.go | 41 | server *dns.Server | COMMENT |
| LOW | inside.go | 21 | // borrowed: pkt.Bytes is owned by the originating tio.Queue and is | COMMENT |
| LOW | handshake_manager.go | 121 | // ecmpGateways remembers whether each gateway of a multi-gateway route is up. A gateway is down once a handshake with | COMMENT |
| LOW | handshake_manager.go | 501 | COMMENT | |
| LOW | bits.go | 141 | l.Debug("rejected a packet (top)", "current", b.current, "incoming", i) | COMMENT |
| LOW | hostmap.go | 61 | // Hosts maps a vpn address to its primary hostinfo, one entry per address we hold a tunnel | COMMENT |
| LOW | timeout.go | 1 | package nebula | COMMENT |
| LOW | timeout.go | 21 | // per-tunnel traffic checks at fixed intervals. O(1) insert plus the item cache means the hot path doesn't allocate. | COMMENT |
| LOW | graphite.go | 1 | package nebula | COMMENT |
| LOW | inside_test.go | 221 | }) | COMMENT |
| LOW | hostdns.go | 41 | // settings. It is tun.dev, which is fixed for the life of the process, | COMMENT |
| LOW | hostdns.go | 241 | // | COMMENT |
| LOW | info_api.go | 21 | // GET /v1/identity this node | COMMENT |
| LOW | identity.go | 21 | // hostIdentity is what identity reports: the identity a certificate asserts for a host, | COMMENT |
| LOW | identity.go | 221 | // findCertificateForVpnAddr answers who owns a vpn address: this node, from its own | COMMENT |
| LOW | main.go | 401 | COMMENT | |
| LOW | scheduler.go | 1 | package nebula | COMMENT |
| LOW | bits_test.go | 361 | // 84 is just outside: the underflow clause activates; 84 > 100-16=84 is false. | COMMENT |
| LOW | cmd/internal/ctl/ctl.go | 201 | // socket the operator named, or the one the config implies, and nothing else. | COMMENT |
| LOW | cmd/nebula-service/logs_windows.go | 21 | // only Handle / WithAttrs / WithGroup, so Event Viewer's severity | COMMENT |
| LOW | udp/udp_linux_writebatch.go | 21 | // batchWriter owns the sendmmsg(2)/UDP-GSO transmit path for a StdConn: the | COMMENT |
| LOW | udp/udp_linux_writebatch.go | 181 | break | COMMENT |
| LOW | udp/netchange_darwin.go | 21 | // single network change is never a single message, it is a burst: the link drops, addresses go away, new ones | COMMENT |
| LOW | handshake/machine.go | 41 | Initiator bool | COMMENT |
| LOW | handshake/machine.go | 181 | // header counter 1 and remote index 0, which is what the initial message needs. | COMMENT |
| LOW | wfp/wfp_windows.go | 1 | //go:build (amd64 || arm64) && !e2e_testing | COMMENT |
| LOW | ratelimit/limiter.go | 1 | package ratelimit | COMMENT |
| LOW | ratelimit/limiter.go | 21 | // Check Allow before doing the work being limited, so a denied call stays cheap: | COMMENT |
| LOW | localapi/platform_unix.go | 41 | } | COMMENT |
| LOW | localapi/platform_unix.go | 61 | // a connection and for anyone else is permission denied. | COMMENT |
| LOW | localapi/platform_unix.go | 161 | // and writable by its owner alone; a sticky bit is not an exception. A runtime directory | COMMENT |
| LOW | localapi/platform_unix.go | 221 | if u, err := user.LookupId(id); err == nil && u.Username != "" { | COMMENT |
| LOW | localapi/platform_unix.go | 301 | // sunPathMax is the smallest sun_path any platform we build for offers (104 on darwin, | COMMENT |
| LOW | localapi/platform_unix.go | 321 | // DefaultSocketPath is the control socket when the config names none. It is root's to | COMMENT |
| LOW | localapi/protocol.go | 1 | // Package localapi serves the nebula command registry over local IPC endpoints: the | COMMENT |
| LOW | localapi/protocol.go | 61 | // Args carries the command's operands, the values that are not options: the vpn | COMMENT |
| LOW | localapi/protocol.go | 81 | // Whitespace inside a JSON result is not preserved: an envelope normalises it, and | COMMENT |
| LOW | localapi/protocol.go | 101 | Error string `json:"error,omitempty"` | COMMENT |
| LOW | localapi/platform_windows.go | 21 | COMMENT | |
| LOW | localapi/platform_windows.go | 141 | sddl += fmt.Sprintf("(A;;0x%x;;;%s)", pipeClientAccess, acc.group.id) | COMMENT |
| LOW | localapi/platform_windows.go | 161 | COMMENT | |
| LOW | localapi/wire.go | 21 | e.Info.Stop() | COMMENT |
| LOW | localapi/wire.go | 41 | } | COMMENT |
| LOW | localapi/wire.go | 241 | reconcile(c) | COMMENT |
| LOW | localapi/endpoint.go | 121 | // stopOnCancelLocked arranges for the endpoint to stop when ctx is cancelled. It is | COMMENT |
| LOW | localapi/endpoint.go | 161 | // since a starting daemon's stale check refuses to remove a socket that answers. The | COMMENT |
| LOW | localapi/info.go | 41 | infoMaxHeaderBytes = 64 * 1024 | COMMENT |
| LOW | localapi/info.go | 61 | // The control socket is for the user who runs nebula, serves nearly everything and needs | COMMENT |
| LOW | examples/config.yml | 1 | # This is the nebula example configuration file. You must edit, at a minimum, the static_host_map, lighthouse, and firew | COMMENT |
| LOW | examples/config.yml | 21 | # initiating_version: 1 | COMMENT |
| LOW | examples/config.yml | 41 | COMMENT | |
| LOW | examples/config.yml | 61 | # IMPORTANT: THIS SHOULD BE EMPTY ON LIGHTHOUSE NODES | COMMENT |
| LOW | examples/config.yml | 81 | #"10.42.42.0/24": true | COMMENT |
| LOW | examples/config.yml | 101 | #tun0: false | COMMENT |
| LOW | examples/config.yml | 121 | # from the lighthouse). Both CIDRs must have the same mask size. | COMMENT |
| LOW | examples/config.yml | 141 | # Linux only. Reloadable, but removing a value leaves the socket at the old size until Nebula restarts. | COMMENT |
| LOW | examples/config.yml | 161 | # Default true. Not reloadable. | COMMENT |
| LOW | examples/config.yml | 181 | COMMENT | |
| LOW | examples/config.yml | 201 | # This setting is reloadable. | COMMENT |
| LOW | examples/config.yml | 221 | # Toggles the feature | COMMENT |
| 44 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/smoke/smoke-vagrant.sh | 29 | # Create a dedicated smoke network with an explicit subnet (required for --ip | COMMENT |
| MEDIUM | .github/workflows/smoke/smoke-relay.sh | 26 | # Create a dedicated smoke network with an explicit subnet (required for --ip | COMMENT |
| MEDIUM | .github/workflows/smoke/smoke.sh | 26 | # Create a dedicated smoke network with an explicit subnet (required for --ip | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/config.yml | 302 | # Set am_relay to true to permit other hosts to list my IP in their relays config. Default false. | COMMENT |
| LOW | examples/config.yml | 304 | # Set use_relays to false to prevent this instance from attempting to establish connections through relays. | COMMENT |