NBER-CLI Desktop is the desktop shell for NBER-CLI V1. It uses Tauri v2, React, TypeScript, a local FastAPI sidecar, and the existing SQLite database at ~/.nber-cli/nber.db.
From the repository root:
uv sync --dev --extra server
cd desktop
npm install
npm run tauri devIn development, the Tauri shell starts the Python sidecar through:
uv run nber-sidecar --port 31527uv run nber-sidecar --host 127.0.0.1 --port 31527Useful endpoints:
GET /api/v1/healthGET /api/v1/feedPOST /api/v1/feed/refreshGET /api/v1/papers/{paper_id}POST /api/v1/papers/{paper_id}/mark-readGET /api/v1/settingsPATCH /api/v1/settings
uv sync --extra server --group desktop-build
uv run python scripts/build-sidecar.py --cleanThe script writes the platform-specific sidecar to desktop/src-tauri/binaries/ using Tauri's expected target triple naming.
cd desktop
npm run build
npm run tauri buildCode signing requires the Apple Developer ID and Windows code signing secrets listed in the Release section below.
Run the repository gates before preparing a desktop build:
uv run ruff check .
uv run pytest
cd desktop
npm run lint
npm run test
npm run build
cd src-tauri
cargo checkAfter building a macOS package, verify size and install/start behavior from the DMG:
uv run python scripts/check-desktop-release.py --platform macos --max-mb 80
uv run python scripts/smoke-desktop-app.py --install-from-package --exercise-live-refreshOn Windows CI or a Windows machine, use the same release checker and smoke script with --platform windows.
GitHub Actions builds Desktop artifacts from the same v* tag used by the Python package release, or when the Desktop workflow is manually dispatched. Pushing a tag such as v0.8.0 runs the full checks and creates one draft GitHub Release containing the macOS and Windows installers. Publishing that same Release triggers the PyPI workflow, so the CLI and Desktop ship under one version and one Release.
Desktop releases are unsigned by default. To require signed Windows artifacts plus signed and notarized macOS artifacts in the future, set the repository variable DESKTOP_REQUIRE_SIGNING to true and configure the signing secrets below.
Before tagging, keep these versions aligned:
pyproject.tomldesktop/package.jsonanddesktop/package-lock.jsondesktop/src-tauri/tauri.conf.json,Cargo.toml, andCargo.lock- Claude and Codex plugin manifests
Required release signing inputs:
- macOS:
APPLE_CERTIFICATE,APPLE_CERTIFICATE_PASSWORD,KEYCHAIN_PASSWORD,APPLE_ID,APPLE_PASSWORD,APPLE_TEAM_ID - Windows:
WINDOWS_CERTIFICATE,WINDOWS_CERTIFICATE_PASSWORD
Optional signing inputs:
- macOS:
APPLE_PROVIDER_SHORT_NAME - Windows:
WINDOWS_DIGEST_ALGORITHM,WINDOWS_TIMESTAMP_URL