Skip to content

配置 ​

位于项目根目录的 mygo.config.ts 描述应用,以及 CLI 如何开发和构建它。它 的默认导出是配置,由项目所依赖的 mygo-cli 包中的 defineConfig 提供类 型,因此编辑器能补全并展示每个字段的文档:

ts
import { defineConfig } from "mygo-cli";

export default defineConfig({
  name: "My App",
  slug: "my-app",
  identifier: "com.example.myapp",
  version: "1.2.0",
  copyright: "© 2026 Example Inc.",

  devUrl: "http://localhost:5173",
  devCommand: "bun run dev:web",
  buildCommand: "bun run build:web",
  frontendDist: "dist",
  bindings: "src/mygo.ts",
  out: "build",

  resources: ["third_party/licenses"],
  urlSchemes: ["myapp"],
  fileAssociations: [{ ext: ["md"], name: "Markdown Document", mimeType: "text/markdown" }],

  i18n: { dir: "locales", source: "en" },
  updates: { publicKey: "…", github: "you/my-app" },
  macos: { signingIdentity: "Developer ID Application: Jane Doe (TEAMID)" },
  windows: { certificate: "certs/code-signing.pfx" },
  linux: { maintainer: "Jane Doe <jane@example.com>" },
});

所有字段都是可选的。配置也可以是 JSON,即 mygo.json,原生 UI 项目就是这样:它们没有 JavaScript,也没有需要开发或构建的前端,因此省略 前端相关的字段。

应用 ​

字段默认值
name目录名用户看到的名称:应用、其可执行文件、菜单、安装程序;Windows 可以显示另一个名称,windows.displayName
slug名称的小写形式,单词之间以连字符相连,例如 My App 得到 my-app;汉字取其最常见的无调普通话读音,每个字自成一个词,假名和谚文取其罗马化,例如 云音乐 得到 yun-yin-le、ラーメン 得到 ramen当名称必须是纯 ASCII 时,应用文件所用的名称:macOS 的磁盘镜像和 Windows 的安装程序,Linux 的可执行文件、其桌面入口、图标、Debian 包和 /opt 目录,各平台的更新归档,安装脚本的变量,以及应用定义的 MIME 类型;由小写字母和数字组成,其间以单个连字符相连。可设置它以选择其他名称,如为 云音乐 设置 cloud-music,并在应用发布后保持不变(见 Linux)
identifiercom.mygo. 加上名称中的字母和数字,例如 com.mygo.myapp应用独有的反向 DNS 名称,例如 com.example.myapp;系统以它为键存储偏好、权限和注册
version0.1.0应用的版本,App.Version() 返回它,更新时也比较它
copyright应用的版权声明,写入其 Info.plist(macOS)和文件属性(Windows)
publisher去掉"©"和年份的版权声明,例如 © 2026 Example Inc. 得到 Example Inc.应用的制作者:Windows 上"设置 > 应用"为已安装应用列出的发布者,以及其文件属性中的公司
icon存在时为 resources/icon.png方形 PNG,最好是 1024×1024;若其旁边存在以 -dev 结尾的同名文件,如 icon-dev.png,则为开发版应用的图标
main.应用所在的 Go 包,相对于项目目录

开发与前端 ​

字段默认值
devUrlmygo dev 让应用指向的开发服务器,一个 http(s) URL;窗口对没有协议方案的 URL(如 /)加载它
devCommand在 mygo dev 运行期间于项目目录中执行的命令,例如 Vite 开发服务器;devUrl 有响应后应用才启动
buildCommand在 mygo build 编译应用之前构建前端
frontendDist构建后的前端所在目录,mygo build 将其嵌入应用;没有 devUrl 时,mygo dev 直接从磁盘提供它
bindings当 frontend/package.json 依赖 mygo-runtime 时为 frontend/src/mygo.ts;否则,当根目录的 package.json 依赖它时为 src/mygo.ts;否则,当配置含有前端(devUrl、devCommand、buildCommand 或 frontendDist)时为 mygo.ts;没有前端的应用(如原生 UI 应用)则没有mygo generate 写入 TypeScript 客户端的位置
outdistmygo build 写入构建产物的位置,每个平台一个目录

它们如何配合,见前端。新项目将 out 设为 build,与 Vite 的 dist 分开。

集成 ​

字段
resources复制到每个平台应用中的文件和目录,与 resources 目录的内容放在一起,以其基本名命名;见资源,单一平台的文件见平台资源
urlSchemes应用可打开的 URL 方案,例如 myapp://… 中的 myapp,它们会到达 App.OnOpenURL;见深度链接
fileAssociations应用可打开的文件类型,它们会到达 App.OnOpenFile;见文件关联

每个文件关联包含:

字段
ext文件扩展名,不含点:["md", "markdown"]
name文件的称谓:"Markdown Document"
mimeType它们的 MIME 类型,Linux 以此识别文件;未注册类型由应用自行定义(x-),不设置时为 application/x-<app>-<ext>
rolemacOS 上的 Editor(默认)或 Viewer

i18n ​

应用消息的目录,每种语言一个 JSON 文件;见语言。没有 i18n 时, 应用只附带英文。

字段默认值
dirlocales消息目录所在的目录,应用所附每种语言对应一个 <tag>.json(de.json、zh-Hant.json);它是一个独立的 Go 包,mygo generate 在其中写入消息的 Go 函数
sourceen应用编写所用的语言,其目录包含每条消息,其他语言回退到它

updates ​

签名的自动更新。publicKey 以及 github 和 url 之一为 必填。

字段默认值
publicKeymygo-update.pub 的内容,由 mygo keygen 生成
github一个公开仓库,owner/name 格式,其 releases 存放更新
tagPrefixvrelease 标签中版本之前的前缀;改用其他前缀(如 desktop-v)时,应用会找到以它标记的最新 release,而不是仓库最新的那个
url代替 github:存放更新的目录的 HTTPS URL
s3为 url 提供服务的存储桶,mygo build -upload 会上传到那里:bucket,以及可选的 prefix(其目录)、region(默认:AWS_REGION,否则 us-east-1)、endpoint(用于 Cloudflare R2 等兼容服务)和 pathStyle(见发布到 S3)
privateKeymygo-update.key 的路径,供 mygo build 使用;持有该密钥的 MYGO_UPDATER_PRIVATE_KEY 环境变量优先
changelog存在时为 CHANGELOG.md一个 Markdown 文件,其 ## <version> 小节成为发行说明
deltas3为多少个较早的版本生成增量更新;0 表示不生成

macos ​

字段默认值
icon以资源目录形式提供的图标:Assets.car 或 Icon Composer 的 .icon,放在 icon 生成的 .icns 旁边;或用一个 .icns 取代它。见图标
minimumSystemVersion12.0应用可运行的最旧 macOS 版本
signingIdentity-,即临时签名为应用及其磁盘镜像签名的身份,例如 Developer ID Application: Jane Doe (TEAMID)
entitlements签名应用时使用的 entitlements 属性列表
provisioningProfile签名前以 Contents/embedded.provisionprofile 嵌入的描述文件;必须与应用的标识符、entitlements 和签名身份匹配;不能与临时签名一起使用。见描述文件
helperEntitlements为资源中的代码指定的 entitlements 属性列表,按其在其中的路径,例如 { "bin/server": "server.entitlements.plist" };其他代码保持其签名时附带的 entitlements。见辅助可执行文件
infoPlist添加到应用 Info.plist 的键,会替换 MyGo 生成的,例如 NSCameraUsageDescription
dmgTitlename磁盘镜像的卷标名称
notarize对生产磁盘镜像进行公证:keychainProfile,即 xcrun notarytool store-credentials 存储的配置名,以及可选的 keychain,即存放它的钥匙串

见 macOS。

windows ​

字段默认值
displayNamenameWindows 显示应用时使用的名称:其开始菜单和桌面快捷方式、"设置 > 应用"中的条目、安装程序的标题与消息,以及可执行文件属性中的产品名。可执行文件、其安装目录,以及以 name 或 slug 命名的文件保持原名,例如名为 weather 的应用可设为 天气助手,其可执行文件仍是 weather.exe
installDirNamename安装程序把应用安装到的文件夹名,%LOCALAPPDATA%\Programs\<installDirName>,例如名为 智链 的应用可用 ASCII 的 ZhiLian;可执行文件、快捷方式、"设置 > 应用"中的条目以及用户看到的其他一切保持该名称。不得包含路径分隔符、:*?"<>|、. 或 ..。更改它只影响新的安装。见安装程序
certificate代码签名证书(.pfx),用于可执行文件、资源中未签名的可执行文件和库,以及安装程序;其密码来自 MYGO_WINDOWS_CERTIFICATE_PASSWORD
signCommand代替 certificate:一个为文件签名的命令,以 %1 表示文件路径
timestampUrlhttp://timestamp.digicert.comcertificate 使用的时间戳服务器
installerInclude安装程序包含的 NSIS 脚本,例如 build/installer.nsh,其 customInit、customInstall 和 customUnInstall 宏分别在安装程序启动时、安装结束时,以及卸载中删除应用文件夹之前运行。见安装程序钩子

见 Windows。

linux ​

字段默认值
maintainerpackage.json 中的 author,否则为 nameName <email>,Debian 包的维护者
comment简短描述,用于桌面入口和软件包
categories["Utility"]桌面入口的类别,决定它在应用菜单中的位置
depends除 GTK 和 WebKitGTK 之外应用所需的 Debian 包
webviewtrue不显示网页的应用(如原生 UI 应用)设为 false:Debian 包只依赖 GTK,install.sh 和 mygo doctor 也不再要求 WebKitGTK
command无运行应用的命令:来自 Debian 包的 /usr/bin/<command>,或来自 install.sh 的 ~/.local/bin/<command>

见 Linux。

计算配置 ​

配置就是代码,因此可以计算字段:从 package.json 读取版本,或从 CI 的环境 变量读取签名身份。默认导出也可以是一个函数(可以是 async 的),接收正在 运行的命令("dev"、"build"、"generate" 或 "init"):

ts
import { defineConfig } from "mygo-cli";
import pkg from "./package.json" with { type: "json" };

export default defineConfig(({ command }) => ({
  name: command === "dev" ? "My App (dev)" : "My App",
  version: pkg.version,
  macos: {
    signingIdentity: process.env.MACOS_SIGNING_IDENTITY ?? "-",
  },
}));

运行方式 ​

CLI 在项目目录中用 Bun(否则用 Node.js 22.6 或更高版本) 求值 mygo.config.ts,并检查结果。Node.js 通过移除类型来运行 TypeScript, 因此该文件可以使用类型标注,但不能使用会生成代码的语法,例如 enum。该 文件打印的内容输出到终端,与 CLI 自身的输出分开。mygo dev 在该文件变化 时重载应用,但其导入的文件变化时不会。

mygo.json ​

配置也可以是 JSON,即 mygo.json,读取它不需要 JavaScript 运行时; mygo init -template native 会生成一个:

json
{
  "name": "My App",
  "identifier": "com.example.myapp",
  "devUrl": "http://localhost:5173",
  "macos": { "signingIdentity": "Developer ID Application: Jane Doe (TEAMID)" }
}

它有相同的字段。一个项目要么用 mygo.config.ts,要么用 mygo.json, 不能两者都有。