Android / Build, or is the channel already serving this? (push) Successful in 3s
CI & Build / Build now, or wait for Android? (push) Successful in 2s
CI & Build / Python lint (push) Successful in 3s
CI & Build / TypeScript typecheck (push) Successful in 16s
Desktop (Tauri) / Build, or is the channel already serving this? (push) Successful in 4s
CI & Build / Python tests (push) Successful in 17s
CI & Build / integration (push) Successful in 50s
CI & Build / Build & push image (push) Skipped
Desktop (Tauri) / Windows installer (cross-compiled) (push) Successful in 3m14s
Desktop (Tauri) / Tauri desktop (Linux) (push) Successful in 6m2s
Desktop (Tauri) / Update manifest (push) Successful in 4s
Android / Kotlin + Rust (APK) (push) Successful in 8m36s
Step 6 of milestone 481. README, docs/*, ci-requirements.md, the desktop and Arch READMEs, alembic.ini, .gitignore, the frontend package name, the service worker's cache name (its activate handler deletes any cache by another name, so the old one is cleaned up), and the Android names in the release body. What still says thoughtsync does so on purpose (Scribe note 5071): - the desktop data crossover (crossover.rs) and its startup log - the old-export import marker - the "Upgrading from ThoughtSync" block in .env.example, and compose's pointer to it - the packages being retired: deb conflicts/replaces thought-sync, pacman thoughtsync and thoughtsync-desktop - the Android signing keyAlias, which names a key in the existing keystore - history: shipped alembic migrations, and the test-binary hashes that ci-requirements.md records from 2026-08-18 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
63 lines
2.3 KiB
Markdown
63 lines
2.3 KiB
Markdown
# Inkwell desktop (Tauri v2)
|
|
|
|
Local-first desktop client. The window loads the shared **Vue 3 frontend** from
|
|
`../frontend`; the Rust core (`src-tauri`) owns the on-device store and the opt-in
|
|
sync engine (built out across the M10 milestone). Works fully offline; optionally
|
|
syncs to a self-hosted Inkwell server.
|
|
|
|
## Layout
|
|
|
|
```
|
|
desktop/
|
|
src-tauri/
|
|
Cargo.toml
|
|
build.rs
|
|
tauri.conf.json # frontendDist -> ../../frontend/dist, devUrl :5173
|
|
capabilities/default.json
|
|
src/
|
|
main.rs # thin shim -> lib::run()
|
|
lib.rs # tauri::Builder entry point
|
|
```
|
|
|
|
The Vue frontend is the sibling `../frontend` package, **shared with the web
|
|
build**. On desktop it is backed by a local data source via
|
|
`frontend/src/adapters/` (M10.3) instead of the server REST API. `frontend` and
|
|
`src-tauri` are **siblings, not nested**, so the `beforeDev`/`beforeBuild`
|
|
commands `cd "$(git rev-parse --show-toplevel)/frontend"` to resolve regardless of
|
|
the CLI's working directory.
|
|
|
|
## Prerequisites
|
|
|
|
The toolchain (Rust + Node + WebKitGTK 4.1 + `tauri-cli`) is provided by the
|
|
`ci-tauri` CI image. For local dev: install Rust + Node, `cargo install tauri-cli`,
|
|
and the Tauri v2 Linux system deps — see `CI-tauri/Dockerfile` in the CI-runner
|
|
repo for the exact apt list (libwebkit2gtk-4.1-dev, libgtk-3-dev, librsvg2-dev,
|
|
libayatana-appindicator3-dev, libxdo-dev, patchelf, ...).
|
|
|
|
## Dev
|
|
|
|
```sh
|
|
cd desktop/src-tauri && cargo tauri dev
|
|
```
|
|
|
|
`beforeDevCommand` starts the Vite dev server (port 5173) in `../frontend`.
|
|
|
|
## Build (Linux)
|
|
|
|
```sh
|
|
cd desktop/src-tauri && cargo tauri build # -> .deb + .AppImage
|
|
```
|
|
|
|
App icons are **generated and committed**: `python3 packaging/icons.py` draws the
|
|
inkwell mark once and renders every web, desktop and Android icon from it,
|
|
including `app-icon.png` and `icons/*.png` here. The Windows lane derives its
|
|
`.ico` from `app-icon.png` with `cargo tauri icon` at build time. Bundle targets:
|
|
`deb`, `appimage` (Linux-first; Windows/macOS later, no code changes expected).
|
|
|
|
## Status
|
|
|
|
Scaffold (M10.2): boots the shared Vue UI in a native window. Until the local data
|
|
adapter lands (M10.3 + M10.5) the app has no server configured, so it shows the
|
|
login screen without a working backend — full offline functionality arrives with
|
|
the local SQLite store (M10.4) + `adapters/local.ts` (M10.5).
|