Files
AstrBot/desktop
エイカク 1addd5b2ab perf: 稳定源码与 Electron 打包环境下的 pip 安装行为,并修复非 Electron 环境下点击 WebUI 更新按钮时出现跳转对话框的问题 (#4996)
* fix: handle pip install execution in frozen runtime

* fix: harden pip subprocess fallback handling

* fix: scope global data root to packaged electron runtime

* refactor: inline frozen runtime check for electron guard

* fix: prefer current interpreter for source pip installs

* fix: avoid resolving venv python symlink for pip

* refactor: share runtime environment detection utilities

* fix: improve error message when pip module is unavailable

* fix: raise ImportError when pip module is unavailable

* fix: preserve ImportError semantics for missing pip

* fix: 修复非electron app环境更新时仍然显示electron更新对话框的问题

---------

Co-authored-by: Soulter <905617992@qq.com>
2026-02-09 23:12:18 +08:00
..
2026-02-08 21:49:54 +08:00
2026-02-08 21:49:54 +08:00
2026-02-08 21:49:54 +08:00

AstrBot Desktop (Electron)

This document describes how to build the Electron desktop app from source.

What This Package Contains

  • Electron desktop shell (desktop/main.js)
  • Bundled WebUI static files (desktop/resources/webui)
  • App assets (desktop/assets)

Current behavior:

  • Backend executable is bundled in the installer/package.
  • App startup checks backend availability and auto-starts bundled backend when needed.
  • Runtime data is stored under ~/.astrbot by default, not as a full AstrBot source project.

Prerequisites

  • Python environment ready in repository root (uv available)
  • Node.js available
  • pnpm available

Desktop dependency management uses pnpm with a lockfile:

  • desktop/pnpm-lock.yaml
  • pnpm --dir desktop install --frozen-lockfile

Build From Scratch

Run commands from repository root:

uv sync
pnpm --dir dashboard install
pnpm --dir dashboard build
pnpm --dir desktop install --frozen-lockfile
pnpm --dir desktop run dist:full

Output files are generated under:

  • desktop/dist/

Local Run (Development)

Start backend first:

uv run main.py

Start Electron shell:

pnpm --dir desktop run dev

Notes

  • dist:full runs WebUI build + backend build + Electron packaging.
  • In packaged app mode, backend data root defaults to ~/.astrbot (can be overridden by ASTRBOT_ROOT).
  • Backend build uses uv run --with pyinstaller ..., so no manual PyInstaller install is required.

Runtime Directory Layout

By default (ASTRBOT_ROOT not set), packaged desktop app uses this layout:

~/.astrbot/
  data/
    config/         # Main configuration
    plugins/        # Installed plugins
    plugin_data/    # Plugin persistent data
    site-packages/  # Plugin dependency installation target in packaged mode
    temp/           # Runtime temp files
    skills/         # Skill-related runtime data
    knowledge_base/ # Knowledge base files
    backups/        # Backup data

The app does not store a full AstrBot source tree in home directory.

Troubleshooting

Startup behavior:

  • Packaged app shows a local startup page first, then switches to dashboard after backend is reachable.
  • If startup page never switches, check logs and timeout settings below.

Runtime logs:

  • Electron shell log: ~/.astrbot/logs/electron.log
  • Backend stdout/stderr log: ~/.astrbot/logs/backend.log
  • On backend startup failure, the app dialog also shows the backend reason and backend log path.

Timeout and loading controls:

  • ASTRBOT_BACKEND_TIMEOUT_MS controls how long Electron waits for backend reachability.
  • In packaged mode, default is 0 (auto mode with a 5-minute safety cap).
  • In development mode, default is 20000.
  • If backend startup times out, app shows startup failure dialog and exits.
  • ASTRBOT_DASHBOARD_TIMEOUT_MS controls dashboard page load wait time after backend is ready (default 20000).
  • If you see Unable to load the AstrBot dashboard., increase ASTRBOT_DASHBOARD_TIMEOUT_MS.

Startup page locale:

  • Startup page language follows cached dashboard locale in ~/.astrbot/data/desktop_state.json.
  • Supported startup locales are zh-CN and en-US.
  • Remove that file to reset locale fallback behavior.

Backend auto-start:

  • ASTRBOT_BACKEND_AUTO_START=0 disables Electron-managed backend startup.
  • When disabled, backend must already be running at ASTRBOT_BACKEND_URL before launching app.

If Electron download times out on restricted networks, configure mirrors before install:

export ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
export ELECTRON_BUILDER_BINARIES_MIRROR="https://npmmirror.com/mirrors/electron-builder-binaries/"
pnpm --dir desktop install --frozen-lockfile