The Microsoft Store doesn't update EXE installs, so the app updates itself with Tauri's updater. It reads updater/latest.json from the Kestrove Gitea a minute after startup and once a day. A new version shows as a banner and in Settings > Updates, and installs only on "Update and restart". The vault locks before the installer takes over. The installer must be signed with the Kestrove updater key, with the signature bound to its version (requireSignedVersion), so a compromised download server can hold updates back but can't ship one or replay an old installer. Signing is a release step, after Authenticode: gitea-release.sh signs, uploads the .sig, and writes latest.json last. Plain builds need no key. Checks reveal only the IP address and app version, and can be turned off in Settings. endpoints is a list, so a mirror can be added. Linux packages update through their package manager. Co-Authored-By: Claude Opus 5.5 <[email protected]>
94 lines
3.1 KiB
TOML
94 lines
3.1 KiB
TOML
[package]
|
|
name = "kestrove-desktop"
|
|
version = "1.2.0"
|
|
edition = "2021"
|
|
rust-version = "1.82"
|
|
license = "Apache-2.0"
|
|
publish = false
|
|
|
|
# Shared by the app, the native-messaging host and the integration tests.
|
|
[lib]
|
|
name = "kestrove_desktop"
|
|
path = "src/lib.rs"
|
|
|
|
[[bin]]
|
|
name = "kestrove-desktop"
|
|
path = "src/main.rs"
|
|
|
|
# Native messaging host: started by the browser, relays to the running app (docs/05). Shared with the macOS
|
|
# app, so the source lives in kestrove-core (crates/kv-nmh).
|
|
[[bin]]
|
|
name = "kestrove-nmh"
|
|
path = "../../kestrove-core/crates/kv-nmh/src/main.rs"
|
|
|
|
[build-dependencies]
|
|
tauri-build = { version = "2", features = [] }
|
|
|
|
[dependencies]
|
|
# Repos are checked out side by side (see ../../README.md).
|
|
kv-ffi = { path = "../../kestrove-core/crates/kv-ffi", features = ["browser-bridge"] }
|
|
kv-ipc = { path = "../../kestrove-core/crates/kv-ipc" }
|
|
tauri = { version = "2", features = ["tray-icon"] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
arboard = "3"
|
|
sha2 = "0.10"
|
|
getrandom = "0.2"
|
|
base64 = "0.22"
|
|
uuid = { version = "1", features = ["v4"] }
|
|
url = "2"
|
|
zeroize = "1"
|
|
# Device key (docs/03 "Device keys"): P-256 software key where no hardware key is available.
|
|
p256 = { version = "0.13", features = ["ecdsa"] }
|
|
# Onboarding (docs/10): render QR codes locally, read the Emergency Kit QR from an image or a PDF.
|
|
qrcode = { version = "0.14", default-features = false, features = ["svg"] }
|
|
rqrr = { version = "0.11", default-features = false }
|
|
image = { version = "0.25", default-features = false, features = ["png", "jpeg"] }
|
|
hayro = { version = "0.8", default-features = false }
|
|
tokio = { version = "1", features = ["time", "sync", "macros"] }
|
|
# Windows Hello unlock (docs/02 "Local unlock"): a key derived from Hello's signature seals the LUK.
|
|
hkdf = "0.12"
|
|
chacha20poly1305 = "0.10"
|
|
|
|
[target.'cfg(unix)'.dependencies]
|
|
libc = "0.2"
|
|
|
|
# macOS (dev) keychain / Linux Secret Service for the device key. Windows uses CNG (TPM) or DPAPI instead.
|
|
[target.'cfg(not(windows))'.dependencies]
|
|
keyring = "4"
|
|
|
|
[target.'cfg(windows)'.dependencies]
|
|
windows-sys = { version = "0.61", features = [
|
|
"Win32_Security_Cryptography",
|
|
"Win32_Foundation",
|
|
"Win32_Graphics_Dwm",
|
|
"Win32_Security",
|
|
"Win32_Security_Authorization",
|
|
"Win32_Storage_FileSystem",
|
|
"Win32_System_IO",
|
|
"Win32_System_Pipes",
|
|
"Win32_System_Threading",
|
|
"Win32_System_StationsAndDesktops",
|
|
"Win32_System_SystemInformation",
|
|
"Win32_UI_Input_KeyboardAndMouse",
|
|
"Win32_UI_WindowsAndMessaging",
|
|
] }
|
|
# In-app updates (updates.rs): signed installers listed in latest.json on the Kestrove Gitea.
|
|
tauri-plugin-updater = "2"
|
|
# Windows Hello (KeyCredentialManager); the same version Tauri already pulls in.
|
|
windows = { version = "0.62", features = ["Foundation", "Security_Credentials", "Security_Cryptography", "Storage_Streams"] }
|
|
|
|
[target.'cfg(target_os = "macos")'.dependencies]
|
|
core-foundation = "0.10"
|
|
|
|
[dev-dependencies]
|
|
tempfile = "3"
|
|
kv-sync = { path = "../../kestrove-core/crates/kv-sync", features = ["test-server"] }
|
|
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
|
|
|
|
[profile.release]
|
|
lto = true
|
|
codegen-units = 1
|
|
panic = "abort"
|
|
strip = true
|