Which features each client supports. Product, design, and engineering use this table as the reference. When adding a feature, decide which platform it belongs to first, then decide whether packages/core needs a new abstraction.Legend: ✅ full support · ◐ partial support (see notes) · — not supported (by design)
| Feature | Web | Desktop | Mobile (planned) |
|---|---|---|---|
| General | |||
| Server address configuration | — (same origin / build time) | ✅ First launch: local or a remote server | ✅ First-launch setup screen |
| Standalone local run (bundled server) | — | ✅ SQLite + local files, no account | — |
| Multiple servers in tabs | — | ✅ One webview per tab, isolated sessions | — |
| Sign in / sign up / password reset | ✅ | ✅ | ✅ |
| Two-factor authentication (TOTP / email) | ✅ | ✅ | ✅ |
| OAuth / OIDC third-party sign-in | ✅ Redirect | ✅ Loopback (RFC 8252) | ✅ System browser |
| Persistent sign-in (refresh rotation) | ✅ HttpOnly cookie | ✅ OS keychain | ✅ SecureStore |
| Session sync across tabs/windows | ✅ BroadcastChannel | — Tabs are isolated | — |
| Language and theme | ✅ | ✅ | ✅ |
Custom branding (branding.*) | ✅ | ✅ | ✅ |
| Chat | |||
| Conversation list and chat | ✅ | ✅ | ✅ |
| Streaming replies (SSE) | ✅ | ✅ | ✅ |
| Markdown / code highlight / math | ✅ | ✅ | ◐ Simplified rendering |
| Mermaid diagrams | ✅ | ✅ | — |
| Message attachments and file upload | ✅ | ✅ | ✅ Camera and gallery |
| Voice input | ◐ Browser support | ◐ Browser support | ✅ Native |
| Share conversation links | ✅ | ✅ | ✅ |
| Conversation export (screenshot / document) | ✅ | ✅ | ◐ System share |
| Content management | |||
| File library | ✅ | ✅ | ◐ View and upload only |
| Knowledge bases | ✅ | ✅ | — |
| Prompt presets | ✅ | ✅ | ◐ Use only, no editing |
| MCP / Skill configuration | ✅ | ✅ | — |
| Account | |||
| Profile and security settings | ✅ | ✅ | ✅ |
| Session management (view / revoke devices) | ✅ | ✅ | ✅ |
| Billing and subscription | ✅ | ✅ | ✅ |
| Account deletion | ✅ | ✅ | ✅ |
| Admin console | |||
| All Admin features | ✅ | ✅ | — Explicitly out of scope |
| Announcements and statistics | ✅ | ✅ | ◐ Announcements only |
| Desktop-only capabilities | |||
| Tray / resident | — | ✅ | — |
| Auto-update | — | ✅ Signed updater (stable and beta channels) | ◐ App store |
| System notifications | ◐ PWA notifications | ◐ Depends on the OS notification center | ✅ Push |
Rules#
- A platform that is not in the table does not support the feature. Do not add something like Admin to mobile because it is easy. Vague scope leads to two divergent implementations.
- A new row must answer two questions: does the logic need a new
packages/coreabstraction, and does the UI need to be written twice? If the logic is written twice, that is an architecture violation. - A ◐ entry must state the limitation. "Partially supported" alone says nothing.
- Desktop does not get new business-feature rows. Desktop = web + system integration. Any business feature that desktop can do but web cannot means the abstraction is at the wrong layer.
For how the boundaries and shared code are enforced, see Architecture and the Desktop App.