Android becomes a native Kotlin client over this same code (Scribe note 2730), so
the local store and sync engine stop being modules of the desktop app and become
`thoughtsync-core`, a crate with no UI framework in it at all.
This is a move, not a rewrite, and the measurement is why: every file in local/
and sync/ already carried ZERO Tauri references — 4,980 of 6,372 lines. The
coupling was 473 lines of command shim, which stays behind in the desktop crate
as src/commands/. Kept as git renames so history follows the files.
The desktop imports them under their old names (`use thoughtsync_core::{local,
sync}`) so every call site reads exactly as before. What moved is where they
live, not what they are.
Two things a workspace changes that are easy to miss, both caught before pushing:
[profile.release] now lives at the workspace ROOT. Cargo silently ignores
profiles declared by a non-root member — leaving it in the desktop crate would
have dropped lto/strip/opt-level from every release build with only a warning.
And a workspace shares ONE target dir, so the bundles moved from
desktop/src-tauri/target to target/. Thirteen references across publish-release,
debundle-graphics, verify.sh, package-prebuilt and the workflow now point there.
Pinning target-dir back would have been the smaller diff, but the Android lane
also produces Rust artifacts and they do not belong under desktop/.
Also retires the Tauri Android lane in the same push rather than leaving a path
that is being replaced: gen/android, android.yml and docs/android-dev.md are
gone, the mobile_entry_point attribute with them, and the lib drops to rlib —
staticlib/cdylib existed for Tauri mobile, and the .so Android loads will be
built from the core crate instead. Rule 22, no parallel path.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
55 lines
2.4 KiB
TOML
55 lines
2.4 KiB
TOML
[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);
|
|
# main.rs is a thin shim.
|
|
#
|
|
# rlib only. The staticlib/cdylib types existed for Tauri mobile, which Android no
|
|
# longer uses — it is a native Kotlin client over `thoughtsync-core` instead
|
|
# (Scribe note 2730), and the .so it loads is built from that crate, not this one.
|
|
[lib]
|
|
name = "thoughtsync_desktop_lib"
|
|
crate-type = ["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]
|
|
# The framework-free client core: local SQLite store + sync engine. Shared with the
|
|
# Android client, which binds the same crate through uniffi (Scribe note 2730).
|
|
thoughtsync-core = { path = "../../core" }
|
|
|
|
tauri = { version = "2", features = [] }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
log = { workspace = true }
|
|
# Startup + operation logging to stdout AND a persistent file, so portability
|
|
# issues are diagnosable from any environment.
|
|
tauri-plugin-log = "2"
|
|
# 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. Desktop only —
|
|
# the plugin declares android support level "none", which is why the Android client
|
|
# gets a server-served update path instead (Scribe note 2725).
|
|
tauri-plugin-updater = "2"
|