Files
AstrBot/desktop
エイカク e61b29ec6a fix: harden plugin dependency loading in frozen app runtime (#5015)
* fix: compare plugin versions semantically in market updates

* fix: prioritize plugin site-packages for in-process pip

* fix: reload starlette from plugin target site-packages

* fix: harden plugin dependency import precedence in frozen runtime

* fix: improve plugin dependency conflict handling

* refactor: simplify plugin conflict checks and version utils

* fix: expand transitive plugin dependencies for conflict checks

* fix: recover conflicting plugin dependencies during module prefer

* fix: reuse renderer restart flow for tray backend restart

* fix: add recoverable plugin dependency conflict handling

* revert: remove plugin version comparison changes

* fix: add missing tray restart backend labels
2026-02-11 13:01:44 +09: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