[package] name = "thoughtsync-desktop" version = "0.1.0" description = "ThoughtSync desktop — local-first Keep-style thought capture" authors = ["bvandeusen"] edition = "2021" # The executable is named below, not inferred from this package name. Off so the # inferred `thoughtsync-desktop` target and the explicit one can't both claim # src/main.rs. autobins = false # App logic lives in the library (Tauri v2 pattern: a single `run()` entry point # reusable across desktop and any future mobile target); main.rs is a thin shim. [lib] name = "thoughtsync_desktop_lib" crate-type = ["staticlib", "cdylib", "rlib"] # The shipped command is `thoughtsync` on every install channel, and the binary's # own name is what the desktop actually keys on: GTK derives the window's WM_CLASS # from it, and Tauri's generated .desktop file sets StartupWMClass to that same # name. (Written without braces on purpose: `tauri android init` round-trips this # file through a TOML serializer that reformats brace tokens inside comments.) # So the canonical name has to be carried by the build target itself, not just by # the path it gets installed to (issue 2075). The crate stays `thoughtsync-desktop` # — only the executable is renamed. `thoughtsync` is also fixed under kebab-casing, # which the AppImage bundler applies to the binary name on its way in. [[bin]] name = "thoughtsync" path = "src/main.rs" [build-dependencies] tauri-build = { version = "2", features = [] } [dependencies] tauri = { version = "2", features = [] } serde = { version = "1", features = ["derive"] } serde_json = "1" # Local-first store (M10.4): bundled = compile SQLite in, so there's no system # libsqlite dependency to vary across the AppImage / native / Windows builds. rusqlite = { version = "0.32", features = ["bundled"] } uuid = { version = "1", features = ["v4"] } # RFC3339 timestamps for created_at/updated_at/remind_at (Date.parse-able on the JS side). chrono = { version = "0.4", default-features = false, features = ["clock"] } # Startup + operation logging to stdout AND a persistent file, so portability # issues are diagnosable from any environment. `log` is the facade the code uses. tauri-plugin-log = "2" log = "0.4" # In-app updates (M10.9). Signature verification is minisign; the public half lives # in tauri.conf.json and the private half only ever as a CI secret. tauri-plugin-updater = "2" # HTTP for the opt-in server handshake (M10.6) and, next, the sync engine (M10.7). # # native-tls, NOT rustls, deliberately: on x86_64-pc-windows-msvc native-tls # resolves to `schannel` — pure-Rust bindings to the OS TLS stack — so nothing C or # assembly has to cross-compile on the Windows lane, which is the fragile one (it # builds on Linux via cargo-xwin, and a C dependency there is what broke it before). # rustls would instead pull in ring/aws-lc-rs and their assembler. On Linux # native-tls uses OpenSSL, whose headers (libssl-dev) ci-tauri already ships. # default-features off drops http2/charset we don't need for a JSON API. reqwest = { version = "0.12", default-features = false, features = ["json", "native-tls"] } # Verifying downloaded attachment bytes against the sha256 the server advertised. # Pure Rust (no C/asm beyond optional cpufeatures), so it costs the Windows # cross-compile lane nothing — see ci-requirements.md on why that matters here. sha2 = "0.10" # Tauri's default release profile: smaller, faster shipped binaries. [profile.release] codegen-units = 1 lto = true opt-level = "s" panic = "abort" strip = true