* feat(plugin): pass theme through plugin page asset URLs and initial context
Add theme query parameter propagation through the plugin page asset pipeline
so that the bridge SDK initial context includes isDark.
* feat(plugin): inject data-theme and color-scheme into plugin page HTML
Set data-theme on <html> and add color-scheme meta tag server-side
to prevent flash when entering plugin pages in dark mode.
* feat(webui): add isDark getter to customizer store
* feat(webui): sync theme to plugin iframe via URL param and postMessage
Append theme query parameter to iframe src URL and include isDark
in the postMessage context. Watch uiTheme changes to re-send context.
* feat(bridge): auto-apply data-theme from context in plugin bridge SDK
Set data-theme attribute on document.documentElement when context
includes isDark, enabling live theme switching via postMessage.
* docs: add light/dark theme adaptation guide for plugin pages
Add theme adaptation section to existing plugin-pages docs in both
Chinese and English, covering CSS variables and onContext() usage.
* test: add theme sync tests for plugin page bridge and content
Verify isDark in bridge SDK initial context with various theme params,
and verify data-theme and color-scheme injection in rewritten HTML.
* fix(plugin): use case-insensitive regex for head tag in HTML rewrite
Replace string match for <head> with case-insensitive regex to handle
uppercase tags and tags with attributes, preventing duplicate injection
of color-scheme meta tag.
* refactor(webui): generalize isDark getter to support any dark theme
Replace hardcoded PurpleThemeDark check with suffix-based detection
so all dark theme variants are recognized automatically.
* refactor(plugin): extract theme helpers for HTML rewriting
Extract _get_request_theme and _apply_theme_to_html to eliminate
duplicate theme-parsing logic and isolate HTML mutation. Use case-
insensitive regex for head tag detection to prevent duplicate
injection when tags use mixed casing.
* style: apply ruff formatting to plugin page tests
Wrap long function call lines for consistency with project style.
* fix(plugin): handle existing data-theme and case-sensitive fallback in HTML rewrite
Strip any existing data-theme attribute before adding the new one to
prevent duplicate attributes. Use case-insensitive regex for the
<head> fallback insertion to avoid corrupting <html> tag attributes.
* fix(webui): add null guard to isDark getter
Guard against undefined uiTheme to prevent TypeError when the
theme config has not been initialized.
* fix(webui): centralize theme mapping and preserve hash in plugin page URL
Extract themeParam computed to avoid drift between URL and context.
Include hash fragment in iframe URL to support SPA hash routing.
* fix(webui): address CR feedback - deduplicate color-scheme meta, harden isDark getter, consolidate theme source
- _apply_theme_to_html: strip existing color-scheme meta before injecting to
avoid duplicates; merge data-theme strip+add into single-pass regex callback
- customizer.ts: replace brittle endsWith('Dark') with explicit theme name check
- _rewrite_plugin_page_html: use _get_request_theme() directly instead of
reading theme from extra_query_params
* fix(webui): 简化 isDark 推导、优化查询参数构建、使用暗色主题集合
- isDark 推导简化为 theme == "dark"(None == "dark" 为 False,去掉多余三元表达式)
- _prepare_plugin_page_query_params 改为线性构建,先计算再构建字典
- isDark getter 改用显式 DARK_THEMES Set,替代硬编码单值比较
---------
Co-authored-by: lxfight <lxfight@192.168.5.50>
简体中文 | 繁體中文 | 日本語 | Français | Русский
Documentation | Blog | Roadmap | Issue Tracker | Email Support
AstrBot is an open-source all-in-one Agent chatbot platform that integrates with mainstream instant messaging apps. It provides reliable and scalable conversational AI infrastructure for individuals, developers, and teams. Whether you're building a personal AI companion, intelligent customer service, automation assistant, or enterprise knowledge base, AstrBot enables you to quickly build production-ready AI applications within your IM platform workflows.
Key Features
- 💯 Free & Open Source.
- ✨ AI LLM Conversations, Multimodal, Agent, MCP, Skills, Knowledge Base, Persona Settings, Auto Context Compression.
- 🤖 Supports integration with Dify, Alibaba Cloud Bailian, Coze, and other agent platforms.
- 🌐 Multi-Platform: QQ, WeChat Work, Feishu, DingTalk, WeChat Official Accounts, Telegram, Slack, and more.
- 📦 Plugin Extensions with 1000+ plugins available for one-click installation.
- 🛡️ Agent Sandbox for isolated, safe execution of code, shell calls, and session-level resource reuse.
- 💻 WebUI Support.
- 🌈 Web ChatUI Support with built-in agent sandbox and web search.
- 🌐 Internationalization (i18n) Support.
| 💙 Role-playing & Emotional Companionship | ✨ Proactive Agent | 🚀 General Agentic Capabilities | 🧩 1000+ Community Plugins |
|---|---|---|---|
Quick Start
One-Click Deployment
For users who want to quickly experience AstrBot, are familiar with command-line usage, and can install a uv environment on their own, we recommend the uv one-click deployment method ⚡️:
uv tool install astrbot --python 3.12
astrbot init # Only execute this command for the first time to initialize the environment
astrbot run
Requires uv to be installed. AstrBot requires Python 3.12 or later. The
--python 3.12option ensures thatuvcreates the tool environment with Python 3.12.
Note
For macOS users: due to macOS security checks, the first run of the
astrbotcommand may take longer (about 10-20s).
Update astrbot:
uv tool upgrade astrbot --python 3.12
Warning
AstrBot deployed via
uvdoes not support upgrading through the WebUI. To update, please run the command above from the command line.
Docker Deployment
For users familiar with containers and looking for a more stable, production-ready deployment method, we recommend deploying AstrBot with Docker / Docker Compose.
Please refer to the official documentation: Deploy AstrBot with Docker.
Deploy on RainYun
For users who want one-click deployment and do not want to manage servers themselves, we recommend RainYun's one-click cloud deployment service ☁️:
Desktop Application Deployment
For users who want to use AstrBot on desktop and mainly use ChatUI, we recommend AstrBot App.
Visit AstrBot-desktop to download and install; this method is designed for desktop usage and is not recommended for server scenarios.
Launcher Deployment
For desktop users who also want fast deployment and isolated multi-instance usage, we recommend AstrBot Launcher.
Visit AstrBot Launcher to download and install.
Deploy on Replit
Replit deployment is maintained by the community and is suitable for online demos and lightweight trials.
AUR
AUR deployment targets Arch Linux users who prefer installing AstrBot through the system package workflow.
Run the command below to install astrbot-git, then start AstrBot in your local environment.
yay -S astrbot-git
More deployment methods
If you need panel-based management or deeper customization, see BT-Panel Deployment for BT Panel app-store setup, 1Panel Deployment for 1Panel app-market deployment, CasaOS Deployment for NAS/home-server visual deployment, and Manual Deployment for fully custom source-based installation with uv.
Supported Messaging Platforms
Connect AstrBot to your favorite chat platform.
| Platform | Maintainer |
|---|---|
| Official | |
| OneBot v11 protocol implementation | Official |
| Telegram | Official |
| Wecom & Wecom AI Bot | Official |
| WeChat Official Accounts | Official |
| Feishu (Lark) | Official |
| DingTalk | Official |
| Slack | Official |
| Discord | Official |
| LINE | Official |
| Satori | Official |
| KOOK | Official |
| Misskey | Official |
| Mattermost | Official |
| WhatsApp (Coming Soon) | Official |
| Matrix | Community |
| Rocket.Chat | Community |
| VoceChat | Community |
Supported Model Services
| Service | Type |
|---|---|
| OpenAI and Compatible Services | LLM Services |
| Anthropic | LLM Services |
| Google Gemini | LLM Services |
| Moonshot AI | LLM Services |
| Zhipu AI | LLM Services |
| DeepSeek | LLM Services |
| Ollama (Self-hosted) | LLM Services |
| LM Studio (Self-hosted) | LLM Services |
| AIHubMix | LLM Services (API Gateway, supports all models) |
| CompShare | LLM Services |
| 302.AI | LLM Services |
| TokenPony | LLM Services |
| SiliconFlow | LLM Services |
| PPIO Cloud | LLM Services |
| ModelScope | LLM Services |
| OneAPI | LLM Services |
| Dify | LLMOps Platforms |
| Alibaba Cloud Bailian Applications | LLMOps Platforms |
| Coze | LLMOps Platforms |
| OpenAI Whisper | Speech-to-Text Services |
| SenseVoice | Speech-to-Text Services |
| Xiaomi MiMo Omni | Speech-to-Text Services |
| OpenAI TTS | Text-to-Speech Services |
| Gemini TTS | Text-to-Speech Services |
| GPT-Sovits-Inference | Text-to-Speech Services |
| GPT-Sovits | Text-to-Speech Services |
| FishAudio | Text-to-Speech Services |
| Edge TTS | Text-to-Speech Services |
| Alibaba Cloud Bailian TTS | Text-to-Speech Services |
| Azure TTS | Text-to-Speech Services |
| Minimax TTS | Text-to-Speech Services |
| Xiaomi MiMo TTS | Text-to-Speech Services |
| Volcano Engine TTS | Text-to-Speech Services |
❤️ Sponsors
❤️ Contributing
Issues and Pull Requests are always welcome! Feel free to submit your changes to this project :)
How to Contribute
You can contribute by reviewing issues or helping with pull request reviews. Any issues or PRs are welcome to encourage community participation. Of course, these are just suggestions—you can contribute in any way you like. For adding new features, please discuss through an Issue first.
Development Environment
AstrBot uses ruff for code formatting and linting.
git clone https://github.com/AstrBotDevs/AstrBot
pip install pre-commit
pre-commit install
🌍 Community
QQ Groups
-
Group 12: 916228568 (New)
-
Group 9: 1076659624 (Full)
-
Group 10: 1078079676 (Full)
-
Group 11: 704659519 (Full)
-
Group 1: 322154837 (Full)
-
Group 3: 630166526 (Full)
-
Group 4: 1077826412 (Full)
-
Group 5: 822130018 (Full)
-
Group 6: 753075035 (Full)
-
Group 7: 743746109 (Full)
-
Group 8: 1030353265 (Full)
-
Developer Group(Chit-chat): 975206796
-
Developer Group(Formal): 1039761811
Discord Server
❤️ Special Thanks
Special thanks to all Contributors and plugin developers for their contributions to AstrBot ❤️
Additionally, the birth of this project would not have been possible without the help of the following open-source projects:
- NapNeko/NapCatQQ - The amazing cat framework
⭐ Star History
Tip
If this project has helped you in your life or work, or if you're interested in its future development, please give the project a Star. It's the driving force behind maintaining this open-source project <3
