环境变量

四类环境变量作用域——前端公开、Rust 运行时、构建密钥与 Edge 密钥——以及模板读取的每个键。

桌面应用有不止一条环境边界。本模板有四类,分清它们,就分清了哪些值可以安全地 随应用发布、哪些会泄露密钥。

四类作用域

作用域前缀 / 位置是否打包进应用?
前端.env 中的 VITE_*——内联进 webview bundle。设计上公开。
Rust 运行时SENTRY_DSNSENTRY_ENVIRONMENTUPDATE_SERVER_URL否——由 Rust 进程在运行时读取(或编译期烘焙)。
构建 / CI 密钥TAURI_SIGNING_*APPLE_*WINDOWS_CERTIFICATE*否——仅供发布构建;未设置时为空操作。
Edge 密钥CREEM_*BILLING_SUCCESS_URL否——用 supabase secrets set 设置;绝不放进应用 .env

Supabase URL 与 publishable key 可安全发布,因为 Row Level Security 在服务端 强制授权。Supabase service-role key 不安全,绝不能出现在 .env 中。minisign 私钥绝不进入仓库——只有公钥存在 tauri.conf.json 里。

所有前端配置在 shared/config.ts 中只读一次;带注释的权威来源见 .env.example。 下面每个 VITE_* 键都已在 .env.example 中。

前端参考(VITE_*

功能开关

Prop

Type

Supabase

Prop

Type

Creem 产品 ID

Prop

Type

产品 ID 不是密钥。shared/price-config.ts 将其映射到方案层级;未设置或未知的 ID 回退为 free,因此未配置的构建绝不会误解锁付费功能。

可观测性、分析与支持

Prop

Type

Rust 运行时 env

由 Rust 进程读取,打包进 webview。每项都通过 std::env::var 在运行时读取, 回退到 option_env!(编译期烘焙),因此两种方式都可提供。

Prop

Type

更新端点优先级src-tauri/src/commands/update.rs):非空的运行时 UPDATE_SERVER_URL 优先;否则用编译期 option_env! 值;否则用内置默认值 https://updates.soarstarter.com。此外,tauri.conf.json 硬编码了一个 endpoints 条目与 minisign 公钥——请把两者改指向你自己的更新源。见 自动更新

构建戳

“关于”页诊断显示的构建时间与提交 SHA,通过编译期 option_env!("VITE_BUILD_TIME")option_env!("VITE_COMMIT_SHA") 读取。它们不在 .env.example 中,随附的 CI 也不注入它们,因此默认为 "dev"。若想要真实戳记,在你的发布构建环境中设置它们。

构建 / CI 密钥

每个签名输入都由 env 驱动且未设置时为空操作,因此 fork 与本地构建在没有密钥时 也能正常工作。

Prop

Type

Edge 密钥

supabase secrets set 设置;由 supabase/functions/ 下的函数读取。它们在 .env.example仅供参考(已注释)——绝不把真实值放进应用 .env

Prop

Type

可安全发布清单

可放入应用 bundle?原因
Supabase URL标识项目端点。
Supabase publishable key面向客户端;RLS 决定用户可读哪些行。
Creem 产品 ID仅为标识符;本身不创建结账会话。
Sentry DSN是,带 opt-inDSN 是上报地址,不是签名密钥;用户 opt-in 仍控制是否上报。
分析 write key视为公开若设置会随 webview 发布。
Supabase service-role key绕过 RLS。仅限服务端。
Creem API key / webhook secret服务端凭据;仅作 Edge 密钥。
minisign 私钥为你的更新签名;只有公钥随应用发布(在 tauri.conf.json)。
代码签名证书供 CI 或你的签名机使用的发布密钥。

相关页面

On this page