hexvero_open
Open target
Register a local file or directory for analysis. Returns its id, size, hash and detected format. Ids are stable per content.
pathrequired
io.github.maximilianfeixPublished by GitHub account maximilianfeixv0.12.0Updated Nov 1, 2026
Electron release diff for security review: what changed in IPC, contextBridge, windows and hosts.
Statically inspects local software builds, mainly Electron apps, so an assistant can diff two releases and see what changed in IPC, preload bridges, windows…
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
Know what changed inside your Electron release.
Diff two builds of an Electron app and see the IPC channels, preload bridge, window settings and network hosts that changed, with file and line on both sides.
Website · Try it · CI · AI agents · Comparison · Limits · Docs
English · Deutsch · Español · Français · Português (Brasil) · Русский · 中文 · 日本語 · 한국어
30 seconds of real output: a terminal recording and a browser recording, joined with a fade · mp4 · terminal: release-review-terminal.tape, UI: record-release-review.mjs
Needs Node.js 22.12 or newer. It copies two builds of a small example app (NotesDesk 1.4.0 and 1.5.0) into ./hexvero-demo and shows what changed. Excerpt, … marks cuts:
? means hexvero could not tell, so shell:open is reported as unknown, not as removed. Then turn it into a gate:
npx hexvero ui --demo --open shows the same comparison in a local web UI with the source lines of both builds side by side. The full tour: walkthrough.
app.asar; running the app to find out is not always allowed, and a checklist scanner looks at one build, not the change.Inputs: an app.asar, a macOS .app, a Windows or Linux install directory, or the release .zip you publish. Installers (.dmg, setup .exe, AppImage) need unpacking first. Per-platform paths: docs/cli.md.
To accept what is there today, add --baseline .hexvero/baseline.json --update-baseline once; later runs fail only on new findings.
One build instead of two, with the single-build checks known from Electronegativity (CSP, shell.openExternal, permission handlers, window settings, certificate and command-line switches):
Pinned to a version so a release cannot change your results unannounced:
Baseline, Markdown job summary and a least-privilege SARIF upload for code scanning: docs/ci.md.
In Claude Code, server and skill come as one plugin:
Elsewhere, npx hexvero setup --apply registers the MCP server with the coding agents it finds (dry run without --apply), or run npx -y [email protected] mcp over stdio. Text inside the target is treated as data, never as instructions. Clients, tools and what an agent receives: docs/mcp.md.
Electronegativity was archived on 2026-10-24. hexvero audit <build> runs part of its single-build checks with the same exit codes and SARIF as check; which checks are covered and which are not is listed in the migration page. REA does much that hexvero does not (dynamic analysis, devices, decompilers); use it for that. Sources, dates and every caveat: docs/comparison.md.
On the newest blind set, written by someone without access to hexvero, it found 52 of 64 IPC channels with none false, and it misses and misreports rows in other lists (all numbers). On real releases it is checked against the source (GitHub Desktop 3.6.7 → 3.6.10, Electron Fiddle 0.38 → 0.39), misses included. It reads files and never runs them, so a finding is what the code contains, not what it does at run time or whether it is exploitable; a passing check is not a security verdict. Parsing a hostile file still processes attacker-controlled bytes, within size, depth and time limits. The full list: docs/accuracy.md.
Walkthrough · CLI · CI · MCP · Policy schema · Electron rules and sources · Accuracy · Benchmarks · Other formats (native binaries, APK, WebAssembly and more) · Changelog
No. Targets are parsed as bytes; nothing is executed. The UI binds to 127.0.0.1 with a per-session token. There is no telemetry and no network call in the code base. Through a cloud-hosted agent, the results that agent requests go to its model provider like any other tool output. Use hexvero only on software you may examine (DISCLAIMER.md).
Rules in CONTRIBUTING.md; good first issue is sized for an afternoon. Found a wrong or missing fact? Open a bug report with hexvero doctor output and, if you can, the file.
If hexvero showed you something you would have missed in a release, a ⭐ helps the next Electron team find it.
MIT
Source: README.md at commit 12626b3
Open target
Register a local file or directory for analysis. Returns its id, size, hash and detected format. Ids are stable per content.
pathrequiredList targets
List targets opened in this session.
Takes no parameters.
Close target
Release a target and its retained analysis.
targetIdrequiredAnalyze target
Run the built-in analyzer for the target's format (ELF/PE/Mach-O, Go, .NET, WASM, EVM, SQLite, plist, APK, ZIP, Electron ASAR, JavaScript apps, source maps, HAR). Returns a summary, findings with confidence, limitations, a compact overview and the collections available for paging. Large JavaScript apps are read in batches: when `complete` is false, `coverage` says how many files are unread and every list covers the scanned part only; call again with scan to read more.
scanbatchfreshdetailincludetargetIdrequiredPage a collection
Page through one named list from the analysis, e.g. symbols, imports, exports, sections, libraries, types, methods, pinvokes, selectors, instructions, tables, columns, requests, endpoints, permissions, components, modules, edges, ipcChannels, findings. Use hexvero_analyze to see which exist.
textlimitoffsetmaxBytestargetIdrequiredcollectionrequiredStrings
Printable ASCII (and optional UTF-16LE) strings with offsets and tags (url, path, email, ip, format, secret-ish, base64-ish).
tagtextlimitutf16offsetmaxBytestargetIdrequiredminLengthRead bytes
Read a bounded window (max 64 KiB) of the target as hex plus an ASCII gutter.
lengthrequiredoffsetrequiredtargetIdrequiredExport analysis
Write the complete analysis as JSON to a file and return its path and size. Use this instead of paging when you need everything.
pathrequiredtargetIdrequiredoverwriteRecover sources
Write recoverable sources into a new directory: the modules of a webpack/Rspack/browserify/esbuild bundle (one file each plus hexvero-bundle.json with requires/exports), or the original files embedded in a source map (sourcesContent). No engine needed; nothing is executed.
targetIdrequiredoutputDirrequiredUnknowns ledger
Record a material question the investigation could not answer (with what was already checked), list open or resolved unknowns, or resolve one. Unknowns are exported with the analysis so reports never silently drop them.
idlimitactionrequiredoffsetstatuscheckedquestiontargetIdresolutionCompare collections
Diff one collection between two targets: added, removed, changed (with the fields that differ) and unchanged items, matched by key (auto-detected: name, channel, id, path, url, type+name … or pass key, a+b for composites). States completeness; unknown items are neither added nor removed. Each list pages on its own (list + offset). Without collection: counts per shared collection, to pick one.
keylistlimitignoreoffsetstricttargetArequiredtargetBrequiredcollectionCheck release policy
Apply a release policy (inline JSON or file) to two builds, as `hexvero check`: status pass, fail or incomplete, and findings paged by offset. Reads a baseline, never writes one.
limitformatoffsetpolicytargetArequiredtargetBrequiredpolicyPathbaselinePathResolve source map position
Map a generated line/column of a source map target back to its original source, line, column and name.
linerequiredcolumnrequiredtargetIdrequiredProviders
Detect optional external engines (radare2/rizin, Ghidra) and the operations each supports.
Takes no parameters.
Run provider operation
Run one engine operation on a target: functions, disassemble, decompile, strings, imports, xrefs (references to an address), callers, callees, callgraph or search (names + strings). Output is bounded and cached.
textaddressproviderrequiredtargetIdrequiredoperationrequiredtimeoutMsCall graph
Bounded call-graph neighborhood around a function (callers, callees or both, by depth and node count), or the shortest call path from root to goal. One engine run per target, cached; levels state what was cut.
goalrootrequiredmaxDepthmaxNodesproviderrequiredtargetIdrequireddirectiontimeoutMs90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
npx hexvero demoWhat changed between notesdesk-1.4.0.asar and notesdesk-1.5.0.asar Two builds of a small example Electron app, read statically. Nothing was executed.
interfaces (2) + preload.js::notesdesk::checkUpdate @ b: preload.js:9, handler main.js:30 · link direct - preload.js::notesdesk::openInShell @ a: preload.js:9, handler main.js:30 · link direct … ipcChannels (2) + update:check @ b: receiver main.js:30, sender preload.js:9 ? shell:open @ a: receiver main.js:30, sender preload.js:9 the other side has values there that could not be resolved windows (1) ~ main.js::win @ b: main.js:8 nodeIntegration: true → false, nodeIntegrationInEffect: "on" → "off", sandbox: false → true … endpoints (1) + main.js::fetch::https://updates.notesdesk.example/latest.json @ b: main.js:30 · literal$ npx hexvero check hexvero-demo/notesdesk-1.4.0.asar hexvero-demo/notesdesk-1.5.0.asar --policy hexvero-demo/policy.jsonhexvero check fail: the policy is violated ✗ new-interface-member notesdesk.checkUpdate new · fail ✗ new-external-host updates.notesdesk.example new · fail …$ echo $?3npx hexvero compare old/YourApp.app new/YourApp.app --report report.html # one offline HTML pagenpx hexvero init old/YourApp.app # starting policy, current hosts allowednpx hexvero check old/YourApp.app new/YourApp.app --policy .hexvero/policy.jsonnpx hexvero audit YourApp.app --format sarif > audit.sarif # exit 3 when a rule is violatedjobs: hexvero: runs-on: ubuntu-latest permissions: contents: read steps: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: persist-credentials: false - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7 with: node-version: 24 # Build your app and fetch the previous release here, e.g. into previous/ and dist/. - run: npx --yes [email protected] check previous/app.asar dist/app.asar --policy .hexvero/policy.json/plugin marketplace add maximilianfeix/hexvero/plugin install hexvero@hexveronpm install && npm run check # typecheck, lint, format, unit tests, shape rulesnpm run e2e # the user flows on real inputs