Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions FEATURES.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ Everything below ships in the first usable release. The MVP is deliberately narr
| Voice UI | Satellite selector, participant list, mute/deafen, per-user volume, push-to-talk, grid/speaker layouts | [04-clients/01-desktop](spec/04-clients/01-desktop.md) |
| Message outbox | Messages held during disconnection, sent on reconnect, cleared after server ack | [04-clients/01-desktop](spec/04-clients/01-desktop.md) |
| Memory discipline | Paginated chat (200 msgs/channel in DOM), image resizing via Rust, debounced resizes | [04-clients/01-desktop](spec/04-clients/01-desktop.md) |
| Local history cache | On-device persistent cache (IndexedDB on web, SQLite on desktop); cache-first prefill, progressive rendering, sliding window; offloads `chathistory` from Uplink | [04-clients/04-local-cache](spec/04-clients/04-local-cache.md) |
| Storage management | Settings -> Storage: per-buffer stats, eviction, JSON export, configurable per-buffer cap | [04-clients/04-local-cache](spec/04-clients/04-local-cache.md) |
| `orbit://` + `satellite://` URI schemes | Deep links to server/channel/voice; standalone Satellite links | [04-clients/01-desktop](spec/04-clients/01-desktop.md) |
| Screen sharing | Share screen in voice sessions | [02-satellite](spec/02-components/02-satellite.md) |
| Multi-server client | Connect to multiple Orbit servers simultaneously | - |
Expand Down Expand Up @@ -245,6 +247,8 @@ Federation requires server-to-server linking that is absent from stock Ergo. It
| E2E encrypted file uploads | Client-side encryption before Depot upload | [03-depot](spec/02-components/03-depot.md) |
| Richer presence | Presence history (last online), structured status states, server-managed avatars | [01-uplink/04-presence](spec/02-components/01-uplink/04-presence.md) |
| Channel renaming | Optional, capability-gated (`draft/channel-rename`); blocked on registered channels, so `display-name` metadata is the rename path for established channels | [01-uplink/01-overview](spec/02-components/01-uplink/01-overview.md#channel-renaming) |
| Client-side search index | Local inverted index / SQLite FTS5 over the on-device cache; answers most searches offline and offloads the server's history backend | [04-clients/04-local-cache](spec/04-clients/04-local-cache.md#evaluation-performance-and-limits) |
| Chat list virtualization | Mount only the visible message range to push effective DOM cost below the live-window cap for very large buffers | [04-clients/04-local-cache](spec/04-clients/04-local-cache.md#evaluation-performance-and-limits) |

## Research

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ The `spec/` directory contains the full design spec:
| [Architecture](spec/01-architecture/) | System overview, design philosophy, component glossary, platform comparison |
| [Components](spec/02-components/) | Uplink (incl. tag namespace and trust model), Satellite, Depot, Transponder |
| [Identity and Auth](spec/03-identity/) | Authentication, permissions |
| [Clients](spec/04-clients/) | Desktop, web app, widget |
| [Clients](spec/04-clients/) | Desktop, web app, widget, local history cache |
| [Infrastructure](spec/05-infrastructure/) | DNS discovery, deployment, monorepo |
| [Next](spec/06-next/) | Mobile, bot API, push delivery, E2E encryption, server discovery, Satellite gateway |
| [Decisions](spec/0A-decisions/) | ADRs, open questions, out-of-scope |
Expand Down
2 changes: 1 addition & 1 deletion spec/04-clients/01-desktop.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ DNS SRV resolution is handled by the desktop client's Rust resolver. For the ful

| Concern | Strategy |
|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------|
| Chat history | Paginated loading. Keep at most 200 messages per channel in the DOM. Older messages are evicted and re-fetched on scroll-up via `chathistory`. |
| Chat history | Paginated loading. Keep at most 200 messages per channel in the DOM (the *live window*). Older messages are evicted from the DOM and served from the on-device [local cache](04-local-cache.md), which falls back to `chathistory` only when the cache is exhausted. |
| Image rendering | Images are proxied and resized by the Rust backend (or server-side) before display. No raw multi-MB images loaded into the WebView. |
| Large IPC payloads | File downloads and bulk history loads are served via Tauri's custom protocol handler (`tauri://`). |
| Layout thrashing | Resize events are debounced aggressively (200ms minimum). This works around a known WebKitGTK memory leak on Linux triggered by rapid resize cycles. |
Expand Down
2 changes: 2 additions & 0 deletions spec/04-clients/02-web-app.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ export interface Platform {
deepLinks: DeepLinkPort | null // null in the browser
fileTransfer: FileTransferPort
dns: DnsPort | null // null in the browser; resolver endpoint used instead
historyCache: HistoryCachePort | null // IndexedDB on web, SQLite on desktop; null when storage is blocked
}
```

Expand Down Expand Up @@ -91,6 +92,7 @@ The complete capability comparison across all three surfaces:
|------------------------------------------|--------------------------------|---------------------------------------------|----------------------------------------|
| Text chat (full) | Yes | Yes | Yes |
| Message history / scrollback | Yes | Yes | Yes (limited to recent on load) |
| Persistent local history cache | Yes (SQLite, disk-bounded) | Yes (IndexedDB, quota-bounded, best-effort) | Ephemeral (in-memory; cache may be `null`) |
| Message retractions | MVP (via `draft/message-redaction`) | MVP (via `draft/message-redaction`) | MVP (via `draft/message-redaction`) |
| Message editing | Post-Uplink | Post-Uplink | Post-Uplink |
| Rich rendering (links, images, Markdown) | Yes | Yes | Yes |
Expand Down
Loading