Desktop tray and WebUI
The Windows tray and macOS menu-bar app provide a quick view of the local Memories daemon. They share an embedded status dashboard and restricted ordinary-card editor with no external fonts, scripts or analytics. The dashboard supports English, Chinese, Japanese, German and French and adapts to narrow windows.
The status projection remains read-only. When unlocked, the card editor accepts
a vault ID and provides a type picker, typed fields, renaming/removal and drag
reordering, plus reusable template creation. Its authenticated, origin-checked
POST /api/cards forwards only an deliberate card/type allowlist through the sibling
CLI. It cannot unlock, elevate, run programs or reveal sensitive values. Native
mobile/CLI verification is required for sensitive operations; there is no browser
biometric/PIN enrollment. See card types.
Start
- Windows: extract the release ZIP and double-click
memories-tray.exe. Keep it besidememories.exe. The launcher does not open a console window. - macOS: open
Memories.appfrom the macOS package. It appears in the menu bar, without a Dock window. The application bundle includes its companion CLI. - From a terminal:
memories trayopens the native tray and dashboard;memories webuiopens only the browser dashboard and stays in the foreground. Linux can usewebui; native tray support is limited to Windows and macOS.
memories --home /path/to/development-home tray
memories --home /path/to/development-home webui --no-open --port 0
memories-tray --home /path/to/development-home --no-open
--home / MEMORIES_HOME uses the same store as the CLI. Without an override,
the launcher uses storage_dir from the selected configuration or the normal
per-user Memories home. --config PATH / MEMORIES_CONFIG selects a TOML file;
see configuration. --port 0 (the default)
chooses a free loopback port; a specified port must also be free. The foreground
webui command prints its local capability URL, including a fragment token.
--no-open suppresses automatic browser opening. The tray's Open status
dashboard menu item can open it later, including when desktop.open_browser =
false in the configuration; --open deliberately overrides that setting.
--lang selects the tray language;
the browser initially follows its own locale and has a language selector.
Status and service lifecycle
The tray menu reports offline, setup-required, locked or unlocked. Start daemon
launches the companion CLI daemon when it is unavailable. It does not initialize
storage, unlock it, or request elevation. Use memories init, memories unlock
and memories sudo in a terminal as usual.
The page refreshes every two seconds. When unlocked it shows library, active proxy and remote-session counts; configured cloud provider kinds; pending upload and download counts; applied/rejected transfers; and libraries awaiting sync. The status projection does not show memory text, library names, credentials, account identities, file paths or tokens. Library/sync details are cleared when the daemon locks or becomes unavailable. Status polling does not keep the vault unlocked.
Recent changes are observations made while the current browser page is open, not the persistent security audit log. An offline status can mean the daemon is stopped, busy for more than the probe deadline, or incompatible. Upgrade the CLI and daemon together, then restart the daemon after upgrading.
Quit tray removes the icon and stops that dashboard listener. It leaves the daemon running, including a daemon started from the menu. For foreground WebUI, Ctrl+C closes its listener. No automatic login-start registration is installed. Separate launches use separate ports and tokens. To reopen a dashboard after a restart, use the tray menu instead of an old bookmarked URL.
Browser access boundary
The dashboard is bound to 127.0.0.1 only and is intended for the same computer.
Each launch uses a new random access token. The browser strips it from the
address bar and stores it only for the tab session. Status requests need that
token and pass Host/Origin checks. The ordinary-card editor uses the same checks
and a closed operation allowlist; there are no HTTP unlock, elevation, credential
delivery, command-execution or generic IPC endpoints. The launch JSON reports
read_only: false, status_read_only: true and card_editor: true to distinguish
card writes from the read-only status projection. See security.
Build and package
cargo build --workspace --release --locked builds memories-tray alongside the
CLI, relay and FFI. Windows packages are created from a clean committed checkout:
pwsh -File scripts/package-windows.ps1
On a macOS host with Rust, Xcode Command Line Tools and Python 3:
bash scripts/package-macos.sh
The macOS script builds the host architecture (Apple Silicon or Intel), packages
Memories.app, CLI/relay/FFI files, all tracked docs/, font licenses, a per-file
build manifest and archive checksum. It does not sign or notarize the app for
distribution. Windows builds do not validate macOS runtime behavior. Consult
validation for what was actually exercised for each release.
On a Linux GNU host, bash scripts/build-linux.sh builds the release workspace;
bash scripts/package-linux.sh creates a CLI/relay/FFI .tar.gz from a clean
committed checkout. See the Linux prerequisites.
Use memories webui for the dashboard; the Linux package omits the unsupported
native tray launcher.