2.3 KiB
Desktop performance baseline
The desktop app must remain a local-first application. Remote network latency must not be part of the critical path for opening or editing a note.
Acceptance targets
| Operation | Target |
|---|---|
| Sidecar ready after process spawn | < 500 ms |
| Local SQLite health request | < 20 ms |
| Existing local memo list query | < 50 ms |
| Existing local memo detail query | < 20 ms |
| Create/edit local memo acknowledgement | < 50 ms |
| Cloud sync | Background only |
The Web/PWA build keeps Mermaid, diagram renderer, code-highlighting, and
editor-only Tiptap/ProseMirror chunks out of both the service-worker precache
and the initial HTML modulepreload list. They load and cache on first use
instead, so ordinary note-list startup does not pay for optional editor/diagram
support. The initial modulepreload list is also capped at 700 KiB uncompressed;
the build verifier reports the measured bytes and fails if this critical-path
budget regresses.
Remote resource blobs use a separate 90-day, 500-entry cache-first runtime cache. When the browser is offline, newly attached files are written to the same Cache Storage namespace under a local resource URL, added to the local resource mirror, and queued for upload. The sync worker uploads the bytes, rewrites memo JSON/Markdown references, and only then removes the local blob.
Repeatable checks
Build and benchmark the sidecar:
cargo build --manifest-path crates/desktop-sidecar/Cargo.toml --release
EDGE_EVER_SIDECAR_PATH="$PWD/crates/desktop-sidecar/target/release/edgeever-sidecar" \
bun run benchmark:desktop:sidecar
Build an unsigned local desktop bundle and inspect that the bundle contains the Web renderer, migrations, and sidecar:
bun run build:web
cargo build --manifest-path crates/desktop-sidecar/Cargo.toml --release
CSC_IDENTITY_AUTO_DISCOVERY=false \
bun --cwd apps/desktop run dist -- --dir
The benchmark exercises the same local domain RPCs used by the desktop
renderer: notebook discovery, memo creation, memo list, and memo detail. Its
thresholds object is suitable for CI gating; remote sync is deliberately not
included in the interactive critical path.
Verify that optional editor and diagram chunks stay out of the initial PWA precache and HTML modulepreload list:
bun run build:web
bun run verify:web-performance