Skip to content
项目

wavever/buildby has 84 GitHub stars and 4 forks. GitHot measured -1 stars in 24 hours and -1 in 7 days. Last checked 2026-11-13 05:39 UTC. Last push 2026-11-03.

这些数字如何统计

CLI tool to detect desktop app tech stacks, code signatures, and notarization status. 桌面应用技术栈、代码签名与公证状态识别 CLI 工具。

可以做什么

  • 🔍 23 stacks detected — Electron, Tauri, Flutter, Qt, CEF, React Native, .NET, JVM, Unity, Godot… or Native.
  • 🧬 Architecture & versions — arm64 / x86_64 / universal, plus Electron, Flutter, and Qt versions.
  • 🔒 Trust check — developer, Team ID, Apple notarization, Hardened Runtime, Authenticode.
  • ⚡ Fast & safe — pure-JS binary header parsing, no admin rights, cached batch scans.

实测星标增长

24小时
-1
7天
-1
15天
正在收集历史
1个月
正在收集历史

各周期内的星标净变化,周期相互重叠,并非每日新增。缺失的测量保持空白。星标代表关注度,不代表软件质量。

README.zh-CN.md

原文
buildby logo

buildby

是 Electron?Tauri?还是原生 Swift?一条命令看穿任何桌面应用。
检测任意桌面应用的技术栈、CPU 架构、代码签名与公证状态 — macOS、Windows 与 Linux。

npm downloads stars License Platforms

官网 · English · 用法 · 23 种技术栈

buildby 演示

双应用并排对比(buildby vs / buildby pk)

十秒上手

npx @wavever/buildby                        # 浏览并搜索已安装应用
npx @wavever/buildby discord                # 查看单个应用
npx @wavever/buildby vs "ChatGPT" "Discord" # 并排对比

喜欢的话:npm i -g @wavever/buildby,之后直接运行 buildby。

曾用包名 desktop-app-build-by(已弃用)。命令仍是 buildby。详见 CHANGELOG.md。

从源码安装
git clone https://github.com/wavever/buildby.git
cd buildby
npm install
npm link

# 或直接从源码运行
node bin/buildby.js

亮点

  • 🔍 识别 23 种技术栈 — Electron、Tauri、Flutter、Qt、CEF、React Native、.NET、JVM、Unity、Godot……或原生。
  • 🧬 架构与版本 — arm64 / x86_64 / universal,以及 Electron、Flutter、Qt 的版本。
  • 🔒 签名与信任 — 开发者、Team ID、Apple 公证、Hardened Runtime、Authenticode。
  • ⚡ 又快又安全 — 纯 JS 解析二进制头,无需管理员权限,批量扫描有缓存。
  • 📤 随处导出 — --json、--md、--csv,方便脚本和报告。

截图

查看单个应用 扫描所有已安装应用 按技术栈过滤

用法

应用浏览与搜索(默认模式)

在终端中直接运行 buildby 不传参数,默认启动应用浏览与搜索:

buildby                  # 默认浏览与搜索已安装应用
buildby -i               # 指定搜索浏览模式
buildby interactive      # 同一浏览模式的子命令
  • 全键盘操作:使用方向键 ↑ / ↓ 浏览应用,按 Enter 查看选中应用的完整详情。
  • 即时输入过滤:随时键入文字即可实时模糊搜索匹配应用。
  • 平滑视口滚动:丝滑无闪烁地滚动浏览系统内全部已安装应用,带分页与位置提示(▲ / ▼ 及 [当前/总数])。
  • 快捷退出:按 q 或 Ctrl+C 随时退出。

双应用对比(vs / pk)

并排对比两个应用的技术栈、芯片架构、体积差与代码签名:

# 直接指定两个应用进行对比
buildby vs "ChatGPT" "Amphetamine"
buildby pk "WeChat" "Discord"
buildby compare "Visual Studio Code" "Sublime Text"

# 或直接进入多选对比
buildby vs
# → 方向键浏览,按空格键勾选两个应用,回车即可开始并排对比!

查看单个应用

buildby wechat
buildby discord
buildby "visual studio code"
buildby "clash verge"

输出示例:

  ╭──────────────────────────────────────────────────────────────────────────╮
  │ 📦 Discord (v0.0.335)                                      macOS · arm64 │
  │ 📂 /Applications/Discord.app                                             │
  ├──────────────────────────────────────────────────────────────────────────┤
  │  跨平台   ⚡ Electron                                                    │
  │ 使用 Web 技术(HTML/CSS/JS)构建的跨平台桌面应用                         │
  │ 🌐 https://www.electronjs.org                                            │
  ├───────────────────────────────────┬──────────────────────────────────────┤
  │ 📋 核心规格                       │ 🔒 签名与安全                        │
  │   • 架构: Apple Silicon (arm64)   │   • 签名: ✓ 已签名                   │
  │   • 体积: 375.4 MB                │   • 开发者: Discord, Inc. (53Q6…    │
  │   • 版本: 0.0.335                 │   • 公证: ✓ Apple 公证               │
  │   • 标识: com.hnc.Discord         │   • 强化运行: ✓ 已启用               │
  ├───────────────────────────────────┴──────────────────────────────────────┤
  │ 🔍 判定依据                                                              │
  │   • Electron Framework.framework                                         │
  │   • app.asar                                                             │
  ╰──────────────────────────────────────────────────────────────────────────╯

签名与安全 部分仅在单应用查看时输出(buildby <name> 与 --path)。--all 与 --<stack> 模式为了保证批量扫描速度,会跳过这一部分。

扫描所有已安装应用

buildby --all
buildby -a

会扫描 /Applications(macOS)或 Program Files(Windows)等目录下的所有桌面应用,按技术栈分组,并展示适合截图分享的“桌面应用技术栈画像”。

--scan 仍然保留为 --all 的兼容别名。

批量扫描会使用本地分析缓存。如果应用版本与主可执行文件指纹没有变化,BuildBy 会直接复用上一次分析结论,重复扫描几乎是瞬时完成。

buildby --all --no-cache   # 强制重新分析

导出格式

Markdown 表格(--markdown / --md)

将检测结果导出为整洁的 GitHub Flavored Markdown (GFM) 表格,包含详细信息及顶部的技术栈分布汇总表:

buildby --all --md > apps.md
buildby discord --md

CSV 表格(--csv)

将应用清单导出为标准 RFC 4180 CSV 格式,方便导入 Excel、Numbers 或数据分析工具:

buildby --all --csv > apps.csv

JSON 输出(--json)

任意检测模式加上 --json 即可在 stdout 得到机器可读输出(update 是动作命令,没有 JSON 形式)。进度与错误信息走 stderr,因此 stdout 始终可以安全地管道传递。

buildby discord --json
buildby --all --json | jq '.summary.stacks'
buildby --electron --json | jq -r '.apps[].name'
JSON schema、字段说明与退出码

所有模式返回同一个信封结构,消费方无需按模式分支处理:

{
  "schema": 1,
  "buildbyVersion": "1.5.0",
  "platform": "darwin",
  "query": { "mode": "app", "value": "calibre" },
  "apps": [
    {
      "name": "calibre",
      "stack": "python",
      "stackName": "Python (PyQt)",
      "variant": "PyQt",
      "category": "cross-platform",
      "confidence": "high",
      "evidence": ["Python.framework", "PyQt UI toolkit"],
      "bundleId": "net.kovidgoyal.calibre",
      "version": "7.22.0",
      "sizeBytes": 1052946432
    }
  ],
  "summary": null
}

消费方须知:

  • stack 才是稳定标识符 —— 请基于它判断,而不是 stackName。stackName 是展示用名称,variant 承载子技术(如 PyQt、Rust · AppKit)。
  • evidence 是给人看的,不属于稳定 API,请勿解析。
  • 体积为原始字节数;JSON 输出中不含任何本地化文案。
  • summary 仅在 --all 下填充,其余模式为 null。
  • 签名与公证信息仅在单应用模式采集(与报告行为一致),因此 --all 下为 null。
  • schema 带版本号,请在依赖字段语义前先校验。

退出码(仅在 --json 下生效,不影响既有用法):

退出码 含义
0 至少匹配到一个应用
1 无匹配(payload 仍然合法,apps: [])
2 错误 —— 平台不支持、路径不存在、分析失败

出错时 stdout 返回可解析的错误对象,而不是 apps:

{ "schema": 1, "error": { "code": "path_not_found", "message": "Path not found: /nope" } }

配置文件

BuildBy 会在首次运行时创建默认 JSON 配置,之后每次运行都会读取。批量扫描会遵守 cache 与 excludeApps。

配置路径与选项
  • macOS / Linux / 其他:$XDG_CONFIG_HOME/buildby/config.json 或 ~/.config/buildby/config.json
  • Windows:%APPDATA%\buildby\config.json

在 macOS 上,如果新路径还不存在,但旧的 ~/.buildby/config.json 已存在,BuildBy 会自动将旧配置复制到新的 XDG 路径。

也可以通过 BUILDBY_CONFIG=/path/to/config.json 指定自定义配置文件;如果该文件不存在,BuildBy 会自动写入默认值。

{
  "cache": true,
  "excludeApps": [
    "Xcode",
    "com.apple.Safari",
    "/Applications/VMware Fusion.app"
  ]
}

cache: false 会默认禁用分析缓存。excludeApps 会让匹配的应用不参与 --all 与按技术栈过滤扫描;条目可以写应用名、Bundle ID 或完整路径。单应用查询仍然可以查看这些被排除的应用。

"checkForUpdates": false 会跳过命令前的更新提示。同样可以传 --no-update-check,或设置环境变量 BUILDBY_NO_UPDATE_CHECK=1。

输出语言

BuildBy 默认会跟随终端或系统语言。无需修改系统语言,也可以临时展示英文输出:

LC_ALL=en_US.UTF-8 buildby -a

也可以创建一个 alias:

alias buildby-en='LC_ALL=en_US.UTF-8 buildby'

按技术栈过滤

buildby -e     # 所有 Electron 应用(--electron)
buildby -f     # 所有 Flutter 应用(--flutter)
buildby -t     # 所有 Tauri 应用(--tauri)
buildby -q     # 所有 Qt 应用(--qt)
buildby -j     # 所有 JVM 应用(--jvm)
buildby -c     # 所有 CEF 应用(--cef)
buildby -d     # 所有 .NET / MAUI / WPF 应用(--dotnet)
buildby -b     # 所有 Chromium 应用(--chromium)
buildby -W     # 所有 NW.js 应用(--nwjs)
buildby -r     # 所有 React Native 桌面应用(--reactnative)
buildby -w     # 所有 wxWidgets / wxPython 应用(--wxwidgets)
buildby -u     # 所有 Unity 应用(--unity)
buildby -n     # 所有原生应用(--native)

指定自定义路径

buildby --path /Applications/SomeApp.app
buildby --path "C:\Program Files\SomeApp"

更新

在终端中,buildby 在执行命令前会检查是否有新版本发布:

  • 新版本提示:当发现新版本时,终端会弹出更新提示框。
  • 全键盘选择:使用方向键 ↑ / ↓ 或数字键 1 / 2 切换 立即升级并继续 或 稍后升级(跳过),按 Enter 确认(按 q 或 Esc 快速跳过)。
  • 无感继续执行:选择升级后,buildby 会通过 npm 安装最新版本,并在安装完成后直接用新版本继续执行你原本输入的命令。
  • 跳过检查:添加 --no-update-check、设置环境变量 BUILDBY_NO_UPDATE_CHECK=1,或在 config.json 中配置 "checkForUpdates": false。
buildby update           # 检查新版本并直接安装
buildby update --check   # 仅检查是否有新版本,不安装

update 通过 npm 查询最新版本,因此会沿用你自己的 registry 镜像、代理与认证配置。如果当前运行的是 git 检出或 npm link 的副本,它会提示所在路径并停止,不会覆盖你的工作目录。

由于 update 是子命令,名字恰好叫 "update" 的应用无法再按名称检测。这种情况请用 buildby --path。

支持检测的技术栈

栈 说明 主要检测方式
⚡ Electron Node.js + Chromium Electron Framework.framework、app.asar、提取框架主版本号
🐦 Flutter Google 跨平台 UI 工具包 FlutterMacOS.framework、flutter_windows.dll、提取 Flutter 版本
🌐 CEF Chromium Embedded Framework Chromium Embedded Framework.framework、libcef.dll
🌐 Chromium 直接基于 Chromium 构建 .pak 资源包 + V8 快照(已排除 Qt WebEngine)
🟩 NW.js Node.js + Chromium(原 node‑webkit) nwjs Framework.framework、app.nw
⚛️ React Native React Native 桌面端实现 React.framework、Hermes.framework / hermes.dll
🦀 Tauri Rust + 系统 WebView 二进制中的 Tauri crate 特征、v1/v2 变体 / Windows 上 WebView2Loader.dll
⚡ Neutralinojs 轻量级 HTML/JS 跨平台框架 neutralino.js、neutralino.config.json、二进制特征
🐹 Wails Go + 系统 WebView 二进制中的 github.com/wailsapp/wails
🔷 Qt C++ 跨平台框架 Qt*.framework(含嵌套目录)、Qt5Core.dll / Qt6Core.dll、提取 Qt 版本
🟫 GTK GNOME 控件工具包 libgtk-3/4.dylib、libgtk-3-0.dll
🧩 wxWidgets C++ 跨平台 GUI 库 macOS 上 libwx*.dylib,Windows 上 wxmswXXu_*.dll 等
🧩 Sciter 嵌入式 HTML/CSS 界面引擎 sciter.dll、libsciter.dylib、二进制特征
🎵 JUCE 音频应用与插件宿主 C++ 框架 二进制中的 JUCE v / juce:: 特征
🐍 Python py2app / PyInstaller / 内置 CPython __boot__.py、base_library.zip、Python.framework
☕ JVM Java/Kotlin/Scala jbr/、libjvm.dylib、lib/ app/ Java/ 下的 .jar
🟣 Compose Multiplatform 基于 Skia 的 Kotlin UI 框架 libskiko-macos-*.dylib、skiko-awt-runtime-*.jar
🔵 .NET Microsoft .NET / MAUI / WPF MonoBundle/、coreclr.dll、.dll 组合特征
🦅 Avalonia 跨平台 .NET UI 框架 Avalonia*.dll、libAvalonia*
🎮 Unity Unity 游戏引擎 UnityPlayer.dll、Data/ 目录结构
🎯 Unreal Engine Epic 虚幻引擎 UE4 / UE5 Content/Paks/*.pak、Contents/UE5/
🤖 Godot Godot 游戏引擎 *.pck 归档 + 二进制中的引擎特征
🖥️ Native 平台原生技术 兜底分类;区分 Swift / Objective-C / Rust / Go / C++ / Win32

平台支持

平台 应用发现位置 检测方式
macOS /Applications、~/Applications Contents/Frameworks、进程内纯 JS Mach-O 解析器、Info.plist 元数据
Windows Program Files、Program Files (x86)、AppData/Local/Programs PE 二进制头探测、扫描 .exe / .dll、特定框架文件与目录结构
Linux /usr/share/applications、~/.local/share/applications、Flatpak、Snap .desktop 桌面规范解析、ELF 二进制头解析、动态库依赖

工作原理

检测完全基于 文件系统与二进制头解析,安全极速,不需要管理员权限:

  1. 扫描框架目录与动态库:读取应用目录或 Contents/Frameworks/ 下的 DLL / dylib,匹配各类已知框架的特征文件。
  2. 纯 JS 二进制头解析:使用内置流式解析器读取 Mach-O 动态库链接命令(LC_LOAD_DYLIB)、Universal 通用二进制、PE 与 ELF CPU 芯片架构,避免启动外部子进程。
  3. 资源特征模式:查找 app.asar、flutter_assets、neutralino.js、app.nw 等典型资源。
  4. 框架版本提取:从 Electron 资源包、Flutter 框架符号、Qt 动态库中自动提取运行时主版本号。
  5. JVM / 游戏引擎检测:识别打包的 JRE/JBR、.NET 运行时、Unity Data、Unreal Engine Pak 与 Godot pck 归档。
  6. 元数据提取:从 Info.plist、PE 版本资源与 Linux .desktop 文件解析名称、版本号与 Bundle ID。
  7. 签名与公证:macOS 上调用 codesign 与 spctl,Windows 上调用 PowerShell Get-AuthenticodeSignature,提取开发者 / Team ID / 签发者,以及 Apple 公证或 Authenticode 信任状态。
  8. 智能分析缓存:根据应用版本与主程序指纹哈希缓存分析结果,重复扫描瞬间完成。
  9. 兜底策略:如果未匹配到任何跨平台框架特征,则将应用归类为原生技术栈(Native:Swift / Objective-C / Rust / Go / C++ / Win32)。

检测按照优先级顺序依次执行,特征越独特的框架越先匹配,以减少误报和重复分类。

环境要求

  • Node.js >= 18
  • macOS、Windows 或 Linux
  • macOS 需要 Xcode Command Line Tools(自带 codesign 与 spctl,用于签名信息查询)
  • Windows 需要 powershell 在 PATH 中(用于读取 Authenticode 签名)
  • Linux 需要标准 FreeDesktop / XDG 桌面环境

许可证

MIT

探索相关项目