Toolkit for building native desktop apps
This report summarizes scanner evidence for vercel-labs/native, a Zig project with 7,820 GitHub stars. SynthScan examined 229,116 lines of code across 934 source files, recording 347 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.8 (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? 336 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 43 finding(s).
Which changes need focused human review? 347 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 347 distinct pattern matches across 8 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 | evals/sandbox/build-image.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | evals/src/agent.ts | 21 | "Bash(node *)", | COMMENT |
| LOW | evals/src/authoring-metrics.ts | 1 | // Authoring-joy metrics, computed from finished eval runs' transcripts. | COMMENT |
| LOW | evals/src/authoring-metrics.ts | 21 | // - teaching-error encounters: failing compliance runs that carried a | COMMENT |
| LOW | evals/src/efficiency.ts | 1 | // Transcript-derived efficiency analysis, shared by the runner (main.ts stamps | COMMENT |
| LOW | evals/src/efficiency.ts | 21 | // | COMMENT |
| LOW | tools/prepare-example-music.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/prepare-example-music.sh | 21 | # five fields: title, artist, album, date, track (the track's 1-based | COMMENT |
| LOW | tools/prepare-example-music.sh | 301 | # the prepared file's exact size, the cache integrity gate for streamed | COMMENT |
| LOW | tools/bench-render-budgets.txt | 1 | # Render-benchmark p50 budgets, in microseconds per scenario. | COMMENT |
| LOW | tools/bench-render-budgets.txt | 21 | # observed 3971-5010 across healthy runs, so the budget carries extra | COMMENT |
| LOW | tools/bench-render-budgets.txt | 41 | # README-sized doc. Theme-token syntax highlighting emits separate text | COMMENT |
| LOW | tools/guest-mac/src/vm_host.m | 1 | // guest-mac VM engine implementation. See vm_host.h for the contract. | COMMENT |
| LOW | tools/guest-mac/src/vm_host.h | 1 | // guest-mac VM engine: Apple Virtualization.framework behind a C ABI, house | COMMENT |
| LOW | tools/guest-mac/src/vm_host.h | 61 | // Current engine state (guest_mac_vm_state_t). Reflects on-disk bundle | COMMENT |
| LOW | tools/guest-mac/src/vm_host.h | 81 | // devices, and a graphics device sized for the display view. Must be | COMMENT |
| LOW | tools/guest-mac/src/vm_host.h | 101 | COMMENT | |
| LOW | tools/linux-truth/lib.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/linux-truth/run-all.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tools/corewire/core.test.ts | 41 | const ts = require("@typescript/old"); | COMMENT |
| LOW | tools/corewire/invocation.test.ts | 1 | import assert from "node:assert/strict"; | COMMENT |
| LOW | tests/ts-core/markup_fixture.ts | 1 | // The markup-view fixture core: a small task board whose entire view is | COMMENT |
| LOW | tests/ts-core/markup_fixture.ts | 261 | return null; | COMMENT |
| LOW | tests/ts-core/fixture.ts | 1 | // The end-to-end fixture core: a small status poller exercising every | COMMENT |
| LOW | tests/ts-core/fixture.ts | 441 | // verify against a size the app never declared. | COMMENT |
| LOW | tests/ts-core/fixture.ts | 461 | // frees the id for a same-id retry. | COMMENT |
| LOW | tests/compiled-core/build_core.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/compiled-core/build_core.sh | 101 | # 1. bare-specifier resolution — the staged tree carries the SDK | COMMENT |
| LOW | tests/compiled-core/build_core.sh | 141 | sed -e 's|^export interface \([A-Za-z0-9_]*\) {|export type \1 = {|' \ | COMMENT |
| LOW | tests/compiled-core/fence_check.sh | 1 | #!/bin/sh | COMMENT |
| LOW | docs/src/components/code-toggle.tsx | 1 | "use client"; | COMMENT |
| LOW | docs/src/components/code-toggle.tsx | 21 | // The children are server-rendered and cross the RSC boundary as one opaque | COMMENT |
| LOW | docs/src/components/ui/segmented-control.tsx | 1 | "use client"; | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 81 | # define SQLITE_APICALL | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 441 | ** | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 461 | #define SQLITE_CORRUPT 11 /* The database disk image is malformed */ | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 501 | #define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 521 | #define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8)) | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 541 | #define SQLITE_IOERR_CODEC (SQLITE_IOERR | (36<<8)) | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 561 | #define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6<<8)) | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 601 | ** error in future versions of SQLite. | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 1241 | ** </ul> | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 1261 | #define SQLITE_FCNTL_HAS_MOVED 20 | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 2221 | #define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 2701 | #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */ | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 3501 | ** top-level SQL code. | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 3521 | #define SQLITE_INSERT 18 /* Table Name NULL */ | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 4401 | ** <dd>The maximum depth of recursion for triggers, and the maximum | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 8581 | */ | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 8681 | ** as the first argument to [sqlite3_test_control()]. | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 8701 | #define SQLITE_TESTCTRL_OPTIMIZATIONS 15 | COMMENT |
| LOW | third_party/sqlite/sqlite3.h | 11341 | #define CARRAY_INT32 0 /* Data is 32-bit signed integers */ | COMMENT |
| LOW | examples/soundboard/src/core.ts | 1 | // soundboard core: the soundboard's whole logic tier in the TypeScript | COMMENT |
| LOW | examples/soundboard/src/core.ts | 21 | // surface (the "player" key), every report arrives on the `audio_event` | COMMENT |
| LOW | examples/soundboard/src/core.ts | 101 | const CLOCK_TICK_MS = 250; | COMMENT |
| LOW | examples/soundboard/src/core.ts | 201 | /// new playback's `loaded` acknowledgment. One audio channel serves | COMMENT |
| LOW | examples/soundboard/src/core.ts | 221 | /// The library page's scroll offset, echoed from markup's `on-scroll` | COMMENT |
| LOW | examples/chatbot/src/api.ts | 1 | // Chatbot API module: the Vercel AI Gateway's OpenAI-compatible | COMMENT |
| LOW | examples/chatbot/src/api.ts | 41 | COMMENT | |
| LOW | examples/chatbot/src/core.ts | 1 | // Chatbot core: a streaming chat client for the Vercel AI Gateway's | COMMENT |
| 198 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | evals/README.md | 41 | # scaffold + skill delivery, print env + claude argv, | COMMENT |
| MEDIUM | evals/README.md | 42 | # run the graders against the untouched scaffold | COMMENT |
| MEDIUM | evals/src/main.ts | 179 | // One crashed trial (sandbox provisioning, scaffold failure, ...) should | COMMENT |
| MEDIUM | evals/src/main.ts | 227 | // In --dry-run, grader failures against the untouched scaffold are expected | COMMENT |
| MEDIUM | evals/src/main.ts | 322 | // builder calls. In --dry-run this measures the untouched scaffold. | COMMENT |
| MEDIUM | evals/src/scaffold.ts | 56 | // build.zig.zon is computed the same way as the repo's scaffold CI job. | COMMENT |
| MEDIUM | evals/src/authoring-metrics.ts | 12 | // starters compile clean, so they would grade the scaffold, not the agent. | COMMENT |
| MEDIUM | evals/src/sandbox.ts | 192 | // linux-sandbox lane: repo-root zig build, scaffold + skill, pre-warm, | COMMENT |
| MEDIUM | packages/core/sdk/bytes_text_methods.d.ts | 4 | // every core's program) and of the editor surface the scaffold ships; at | COMMENT |
| MEDIUM | packages/native-sdk/scripts/copy-framework.js | 22 | // package.json (the bundled version every scaffold pin follows), and | COMMENT |
| MEDIUM | packages/native-sdk/scripts/check-version-sync.js | 6 | // the version every TS scaffold, example and test app pin follows), and the | COMMENT |
| MEDIUM | packages/native-sdk/scripts/check-version-sync.js | 97 | // exactly — half-bumped, a published CLI would scaffold pins npm cannot | COMMENT |
| MEDIUM | packages/native-sdk/scripts/sync-version.js | 15 | // scaffold pins (templates read the bundled manifest) and the editor copy | COMMENT |
| MEDIUM | packages/native-sdk/scripts/sync-version.js | 118 | // scaffold's, so a post-publish `npm install` resolves the same content | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 93 | # The default TypeScript scaffold must link a signed UIKit dev bundle | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 399 | # The scaffold default is the TypeScript core; its frontend and | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 402 | # No WebKitGTK dev package, same as linux-canvas-smoke: the scaffold | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 513 | # The default scaffold is a TypeScript core: its build runs the | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 524 | # Slim scaffold: no build files — the CLI's generated graph drives it. | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 548 | # Every scaffold ships a CI workflow; parse it as real YAML. | COMMENT |
| MEDIUM | .github/scripts/linux-dev-smoke.sh | 2 | # Linux DEBUG-scaffold smoke under Xvfb — the `native dev` shape, pinned. | COMMENT |
| MEDIUM | .github/scripts/linux-dev-smoke.sh | 68 | # ---- scaffold the default template (ts-core, native frontend) -------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/chatbot/src/api.ts | 79 | export function encodeChatRequestWithinLimit( | CODE |
| LOW | packages/core/sdk/text.ts | 197 | export function sanitizedSingleLineTextInputEvent(event: TextInputEvent): TextInputEvent | null { | CODE |
| LOW | packages/core/sdk/text.ts | 365 | export function textWordSelectionAtOffset(text: Uint8Array, offset: number): TextSelection { | CODE |
| LOW | packages/core/sdk/text.ts | 382 | export function textLineSelectionAtOffset(text: Uint8Array, offset: number): TextSelection { | CODE |
| LOW | packages/core/sdk/text.ts | 574 | function deleteWordBackwardTextEdit(state: TextEditState, capacity: number): TextEditState | null { | CODE |
| LOW | packages/core/sdk/text.ts | 593 | function deleteWordForwardTextEdit(state: TextEditState, capacity: number): TextEditState | null { | CODE |
| LOW | packages/core/sdk/text.ts | 638 | function deleteToLineStartTextEdit(state: TextEditState, capacity: number): TextEditState | null { | CODE |
| LOW⚡ | packages/core/sdk/text.d.ts | 64 | export declare function sanitizedSingleLineTextInputEvent(event: TextInputEvent): TextInputEvent | null; | CODE |
| LOW⚡ | packages/core/sdk/text.d.ts | 74 | export declare function textWordSelectionAtOffset(text: Uint8Array, offset: number): TextSelection; | CODE |
| LOW⚡ | packages/core/sdk/text.d.ts | 76 | export declare function textLineSelectionAtOffset(text: Uint8Array, offset: number): TextSelection; | CODE |
| LOW | packages/core/sdk/internal/markdown_policy.ts | 835 | function nscvMarkdownContentPolicy(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/automation_interactions.ts | 5 | export function nscvAutomationInteractions(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/canvas_presentation_lifecycle.ts | 3 | function nscvCanvasPresentationLifecycle(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/service_contract.ts | 102 | function isServiceCancellationType(tast: TypedAst, node: ts.TypeNode | undefined): boolean { | CODE |
| LOW | packages/core/src/service_contract.ts | 117 | function explicitThrowIsKindTagged(tast: TypedAst, expr: ts.Expression): boolean { | CODE |
| LOW | packages/core/src/service_contract.ts | 174 | function supportedOperationIdentifier(name: string): boolean { | CODE |
| LOW | packages/core/src/service_contract.ts | 338 | function emitServiceClientDocument(document: { | CODE |
| LOW | packages/core/src/service_contract.ts | 408 | function emitServiceClientDeclarations(document: { | CODE |
| LOW | packages/core/src/canvas_scene_observation.ts | 7 | function nscvCanvasSceneObservation(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/canvas_frame_coordination.ts | 3 | function nscvCanvasFrameCoordination(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/sqlite_codegen.ts | 419 | function hasTopLevelCompoundSelect(sql: string): boolean { | CODE |
| LOW | packages/core/src/sqlite_codegen.ts | 478 | function topLevelSelectExpressions(sql: string): string[] { | CODE |
| LOW | packages/core/src/sqlite_codegen.ts | 713 | export function generatedDeclarationFragments(analysis: SqliteAnalysis): { types: string[]; cmds: string[]; subs: string | CODE |
| LOW⚡ | packages/core/src/control_appearance.ts | 36 | function nscvAppearanceWriteVisual(visual: NscAppearanceVisual): Uint8Array { | CODE |
| LOW⚡ | packages/core/src/control_appearance.ts | 44 | function nscvAppearanceNonNegative(value: number, numeric = 0): number { if (Number.isNaN(value)) return 0; if (value == | CODE |
| LOW⚡ | packages/core/src/control_appearance.ts | 52 | function nscvAppearanceTransparent(): NscAppearanceColor { return new Uint8Array(16); } | CODE |
| LOW | packages/core/src/control_appearance.ts | 75 | function nscvAppearanceControlState(c: NscAppearanceContext, fallback: NscAppearanceColor): NscAppearanceColor { | CODE |
| LOW | packages/core/src/control_appearance.ts | 124 | function nscvAppearanceButtonBorder(c: NscAppearanceContext): NscAppearanceColor { | CODE |
| LOW | packages/core/src/control_appearance.ts | 140 | function nscvAppearanceBadgeBackground(c: NscAppearanceContext): NscAppearanceColor { | CODE |
| LOW | packages/core/src/status_validation.ts | 65 | function nscvStatusPresentationError(input: Uint8Array, value: NscvStatusPresentation): number { | CODE |
| LOW | packages/core/src/view_components.ts | 651 | function nscvKeyboardParticipation(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/view_components.ts | 1573 | function nscvTextCompositionHistory(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/control_payloads.ts | 67 | function nscvControlPayloadGeometry(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/runtime_policy.ts | 2699 | function requestCoordinationPolicy(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/runtime_policy.ts | 3086 | function componentCoordinationPolicy(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/runtime_policy.ts | 3339 | export function snapshotCoordinationPolicy(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/runtime_policy.ts | 3562 | export function snapshotSerializationPolicy(request: Uint8Array): Uint8Array { | CODE |
| LOW | packages/core/src/sqlite_runtime_policy.ts | 143 | export function relationalTableReferences(sql: string): readonly RelationalTableReference[] { | CODE |
| LOW | packages/core/src/text_run_layout.ts | 8 | function nscvTextRunSequenceLength(byte: number): nscContracts.NoThrow<nscContracts.Int32> { return (byte & 128) === 0 ? | CODE |
| LOW | packages/core/src/widget_presentation.ts | 29 | function nscvPresentationTransform(c: NscPresentationContext, slot: number, motion: boolean, preview: boolean, outer: Ns | CODE |
| LOW | packages/core/src/widget_presentation.ts | 107 | function nscvPresentationPutTransform(w: DataView, at: number, t: NscRenderAffine | null): void { | CODE |
| LOW | packages/native-sdk/scripts/check-runtime-types.js | 137 | function bridgePlatformFeatureAliases() { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/src/components/component-index-grid.tsx | 34 | #0a0a0a dark) keep any rounding slivers seamless. */} | COMMENT |
| MEDIUM | examples/mobile-canvas/ios/verify_layout.sh | 162 | # ------------------------------------------- XCUITest rotation harness | COMMENT |
| MEDIUM | scripts/mobile-e2e.sh | 142 | # ---- the battery harness ---------------------------------------------------- | COMMENT |
| MEDIUM | scripts/mobile-e2e.sh | 206 | # floor is the EMBEDDER contract; this harness is lane tooling. | COMMENT |
| MEDIUM | scripts/gate.sh | 71 | # the --perf harness it is headless, in-process, and seconds-long once the | COMMENT |
| MEDIUM | scripts/perf-gpu-dashboard.sh | 5 | # load-tolerant latency sample; this harness measures a distribution: | COMMENT |
| MEDIUM | scripts/perf-gpu-dashboard.sh | 17 | # 4. Starts one harness-controlled retained animation and requires a 60 Hz-class | COMMENT |
| MEDIUM | scripts/perf-gpu-dashboard.sh | 231 | # harness-controlled loop even when the operator prefers reduced product | COMMENT |
| MEDIUM | scripts/perf-gpu-dashboard.sh | 233 | # input until the harness explicitly stops it. | COMMENT |
| MEDIUM | packages/core/src/infer.ts | 925 | // Definitely-float sources: round/sqrt of NaN/Infinity is not an | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/platform/appkit_accessibility.m | 52 | @"placeholder": present(e.accessibilityPlaceholderValue), @"min": present(e.accessibilityMinValue), @"max": pres | CODE |
| LOW | docs/src/lib/component-vocab.json | 324 | "name": "placeholder", | CODE |
| LOW | packages/core/test/view_frontend.test.ts | 26 | for (const field of ["text", "label", "placeholder", "icon"]) if (item[field + "Bytes"] !== undefined) { | CODE |
| LOW | packages/core/test/markup_values.test.ts | 238 | const initial = (raw: string | Uint8Array, aware: number, name: string) => new Packet(31).word(0).blob(raw).word(aware | CODE |
| LOW | packages/core/test/markup_values.test.ts | 240 | for (const name of ["text", "placeholder", "label"]) assert.equal(initial(raw, 1, name).action, 81); | CODE |
| LOW | packages/core/src/markup_elements.ts | 113 | if (a11y === 3 && !nsceNonblank(node, "label") && !nsceNonblank(node, "placeholder") && !(schemaText && hasName)) { ns | CODE |
| LOW | packages/core/src/view_frontend.ts | 1000 | } else if (["label", "text", "placeholder", "command"].includes(name)) { | CODE |
| LOW | packages/core/src/view_frontend.ts | 1002 | if (name === "placeholder" && !["input", "text-field", "search-field", "textarea", "combobox", "select"].include | CODE |
| LOW | packages/core/src/view_evaluator.ts | 168 | case "placeholder": node.placeholder = nscvdString(value); return; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/mobile-canvas/ios/verify_layout.sh | 20 | # Usage: | COMMENT |
| LOW | examples/mobile-canvas/ios/run.sh | 7 | # Usage: | COMMENT |
| LOW | examples/mobile-canvas/ios/verify_input.sh | 21 | # Usage: | COMMENT |
| LOW | examples/mobile-canvas/android/run.sh | 19 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tools/corewire/core_emission.ts | 40 | print(text: string, args: string[]): void { this.out += formatCode(text, args); } | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/release.yml | 248 | # ============================================================= | COMMENT |