Files
kestrove-desktop/src-tauri/Cargo.toml
T
samiandClaude Opus 5.5 d70dcc04b6
ci / build (ubuntu-22.04) (push) Canceled after 0s
ci / build (windows-2025) (push) Canceled after 0s
ci / deny (push) Canceled after 0s
In-app updates on Windows
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]>
2026-10-30 18:19:24 +04:00

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