Skip to content

ADR-008: Tab Storage for Data, User Storage for Preferences

Status: Accepted Date: 2026-02-18

Context

NiceGUI offers app.storage.tab (per-tab) and app.storage.user (per-user, cross-tab) for session state. Upload data and user preferences need different scoping.

Decision

Use app.storage.tab for upload data (DataFrame, project name) and app.storage.user for preferences (dark mode).

Rationale

  • Multiple browser tabs should maintain independent upload sessions
  • Dark mode preference should persist across tabs and page navigations
  • DataFrames are serialized as list[dict] via .to_dict(orient="records")

Consequences

  • Each tab has its own upload data — no cross-tab data sharing
  • Dark mode setting applies globally per user
  • DataFrame serialization adds overhead but ensures JSON compatibility