Step 3 of milestone 481 (Scribe note 5071: a full rename).
- crates thoughtsync-{core,desktop,ffi,uniffi-bindgen} → inkwell-*, the
Cargo.lock entries moved to match (checked with `cargo metadata --locked`)
- Tauri: productName "Inkwell", identifier com.fabledsword.inkwell, binary
`inkwell`, updater feed on bvandeusen/inkwell, store file inkwell.db
- client agent inkwell-desktop, headers X-Inkwell-Client/-Protocol (the server
reads neither), capture event inkwell://captured, display-version env
- .deb: conflicts + replaces thought-sync, so the updater's install retires the
old package instead of colliding on it. kebab-case("Inkwell") is `inkwell`, so
the package name finally matches the command and verify.sh now asserts it
- pacman: inkwell, conflicting with and replacing thoughtsync and
thoughtsync-desktop
- AppImage ~/Applications/Inkwell.AppImage, menu entry inkwell.desktop,
installer, release titles, desktop asset names in fetch-clients.sh
The one shim, chosen by the operator because it is the only copy of a
local-first user's notes: crossover.rs moves the old
com.fabledsword.thoughtsync app-data dir's contents into the new one on startup,
before the store opens, renaming thoughtsync.db and its -wal/-shm with it. It
skips when the new dir already has a store, and anything already in the new dir
wins (the installer writes its channel marker there first). Tested.
Android's Kotlin side (package, applicationId, uniffi class) is step 4. Its
release asset names stay thoughtsync.* until then.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
72 lines
3.4 KiB
TOML
72 lines
3.4 KiB
TOML
[package]
|
|
name = "inkwell-desktop"
|
|
# NOT THE SHIPPED VERSION, and bumping it has no effect on anything a user sees.
|
|
#
|
|
# Cargo requires a version here, and Tauri reads one from `tauri.conf.json` — both
|
|
# are overridden per build by `cargo tauri build --config '{"version": ...}'` with
|
|
# the value `packaging/version.sh key desktop` derives. See #3144.
|
|
#
|
|
# It used to matter: the old scheme took its base from this line and appended the CI
|
|
# run number on dev, so `0.2.<run>` on dev sat against a bare `0.2.0` on main and
|
|
# every dev build outranked every stable one. The remedy was "remember to bump the
|
|
# minor before tagging" — documented in a comment, enforced nowhere, and #2183 is
|
|
# what that looked like in the field. A scheme needing a human to remember something
|
|
# before each release has not removed the decision, only hidden it.
|
|
version = "0.2.0"
|
|
description = "Inkwell 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 `inkwell-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 `inkwell-core` instead
|
|
# (Scribe note 2730), and the .so it loads is built from that crate, not this one.
|
|
[lib]
|
|
name = "inkwell_desktop_lib"
|
|
crate-type = ["rlib"]
|
|
|
|
# The shipped command is `inkwell` 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 is `inkwell-desktop`, so
|
|
# the executable is named here rather than inferred. `inkwell` is also fixed under
|
|
# kebab-casing, which the AppImage bundler applies to the binary name on its way in.
|
|
[[bin]]
|
|
name = "inkwell"
|
|
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).
|
|
inkwell-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"
|
|
|
|
# The system-wide quick-capture hotkey. Desktop only by nature — Android has no
|
|
# concept of a global shortcut, and its half of this feature is a share-sheet
|
|
# intent filter instead.
|
|
tauri-plugin-global-shortcut = "2"
|