AstrBot Desktop packages the bot and its backend into one Tauri app
The desktop edition of AstrBot, designed for fast local installation and convenient access to ChatUI and plugins.
At a glance
- What is it?
- AstrBot Desktop is a packaged local distribution of the AstrBot chatbot, bundling the WebUI, the CPython backend and a Tauri shell into a single installer. It suits a desktop user who wants ChatUI, plugins and a knowledge base locally, and the project itself says a server deployment should use upstream instead.
- Who is it for?
- AstrBot Desktop suits someone who wants a chat assistant with plugins and a knowledge base running on their own machine, with data in a directory they can back up, and who does not want to assemble a Python environment first. It is the wrong tool for a long-running service on a server, and the project says so directly, pointing at the upstream source, Docker or a panel deployment instead.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 4 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A packaged distribution, not a new bot
AstrBot Desktop is described as a packaged desktop distribution of AstrBot for local use. It bundles the WebUI, the backend runtime and the desktop shell into a single app, which the project says makes it a good fit for users who want a quick local setup with ChatUI, plugins and knowledge base features.
That framing matters, because the same paragraph closes with a warning. If you plan to run AstrBot on a server for long-term use, the upstream AstrBot source, Docker or panel-based deployment is still the better choice. The desktop build is a distribution form, not a different product, and the repository makes that boundary explicit rather than pretending the two are equivalent.
The technical shape is legible from the badges and the manifest. The shell is Tauri 2.10.0, the runtime is CPython 3.12, and the package description calls it an AstrBot desktop shell powered by Tauri. The primary language of the repository is Rust, and the top-level layout has a src-tauri directory for the Rust side, a ui directory for the front end, and a scripts directory for the packaging work.
So the arrangement is: a Tauri application that owns a window, spawns a Python backend, and serves the AstrBot WebUI inside it. The upstream AstrBot project remains the source of the bot, and this repository is the shell around it.
The install is a download, and the data lands in one directory
If you only want to use the app and do not need to build it locally, the instruction is to download the installer for your platform from the releases page. There are two channels. The stable channel is recommended for most users, and the nightly channel is automatically built from newer upstream changes for early access to fixes and features. You choose the package that matches your operating system and CPU architecture.
The platform specifics are spelled out. On macOS you download the .dmg, open it and drag AstrBot into Applications. On Linux the AppImage is the one that gives in-app self-updates, while deb and rpm remain system-package installs with manual update prompts. On Windows, macOS and Linux AppImage builds the desktop updater usually works directly in the app, though some Linux installation methods may still require a manual download and install.
What makes the desktop build pleasant to live with is the data layout. AstrBot Desktop stores the AstrBot root directory under the user home directory as .astrbot by default, which is ~/.astrbot on macOS and Linux and C:\Users\<username>\.astrbot on Windows. Inside it the common directories are named clearly:
| Path | Description | | --- | --- | | `data/config/` | Configuration files | | `data/plugins/` | Plugins | | `data/plugin_data/` | Plugin data | | `data/knowledge_base/` | Knowledge base data | | `data/webchat/` | WebChat-related data | | `logs/` | Desktop and backend logs |
One directory means one thing to back up, one thing to copy when moving machines, and one thing to delete when you want a clean start.
The WebUI listens on localhost unless you deliberately change it
The FAQ section contains the most operationally useful content in the repository, and it starts with a question about LAN access.
AstrBot Desktop listens on 127.0.0.1:6185 by default, so only the local machine can reach the WebUI. If you explicitly want LAN access, the instruction is to set the dashboard host to 0.0.0.0 in AstrBot's command config, which lives at ~/.astrbot/data/cmd_config.json, or C:\Users\<username>\.astrbot\data\cmd_config.json on Windows. The content to write is a dashboard object with the host and the port:
{
"dashboard": {
"host": "0.0.0.0",
"port": 6185
}
}Then you fully quit and restart the app and visit http://<LAN IP of the machine running AstrBot Desktop>:6185/ from the other device. To restore local-only access you set dashboard.host back to 127.0.0.1 and restart.
Environment variables still work as advanced overrides and take precedence over the config file:
ASTRBOT_DASHBOARD_HOST=0.0.0.0
ASTRBOT_DASHBOARD_PORT=6185The default is the right default. The documentation is explicit that you should make sure the system firewall allows port 6185 before enabling LAN access, and that you should not expose the port on untrusted networks or on the public internet. An assistant with a plugin system and a knowledge base is a thing you would rather not put on a network you do not control.
It is also worth noting the reason LAN access is not simply a setting in the UI: the WebUI in this build is a local application surface, not a hosted service, and the localhost binding is what makes the one-click install work without a reverse proxy or a TLS certificate.
Two rough edges: the macOS quarantine flag and the unbundled MCP tools
Two practical problems have their own FAQ entries, and both are the kind of thing that costs an hour if you have not seen it before.
The first is macOS saying the app is damaged or cannot be opened. If you downloaded the installer from the internet, macOS may attach a quarantine flag, and the documented fix is a single command:
xattr -dr com.apple.quarantine /Applications/AstrBot.appThen restart the app, and if the app is not in /Applications, replace the path with the actual one. This is standard macOS behaviour for a downloaded unsigned or unnotarised application, and the README documents it rather than leaving users to search for it.
The second is that some MCP tools report node, npx or uvx as missing. The cause is not a bug in the app but a scope decision: some MCP tools depend on node, npx or uvx from the system environment, and those dependencies are not bundled with the desktop installer, so you install them separately. The project links the Node.js installation documentation and the uv installation documentation, and gives the verification commands:
node -v
npm -v
npx -v
uvx --versionThat is a reasonable line to draw. Bundling a Node runtime and a Python package manager into a desktop installer would make the download large and the updates harder to reason about. The cost is that the one-click install is not entirely one click if you intend to use MCP tools.
Building it yourself pulls in the upstream source
The build side is where the relationship with upstream AstrBot becomes concrete, and the Makefile at the root of the repository is where you can see it.
The variables at the top of the Makefile describe the whole arrangement. ASTRBOT_SOURCE_GIT_URL defaults to the AstrBot GitHub repository, ASTRBOT_SOURCE_GIT_REF defaults to master, and there is a separate ASTRBOT_LOCAL_DIR pointing at vendor/AstrBot-local, with a desktop subdirectory under it. The build directory names, VENDOR_DIR, RUNTIME_DIR and RESOURCES_DIR, are also overridable.
So the desktop build vendors the upstream bot, prepares resources for it, and produces a Tauri application. The package scripts confirm the flow. prepare:webui runs the resource preparation script for the WebUI, prepare:backend does the same for the backend, prepare:resources does both with the all argument, and sync:version runs the same script with the version argument. The dev script is tauri dev and the build script is tauri build.
There is a housekeeping mechanism worth noticing, because it is the kind of detail that reflects real maintenance. The Makefile keeps a single source of env keys managed by make clean-env, with ASTRBOT_SOURCE_DIR, ASTRBOT_SOURCE_GIT_URL, ASTRBOT_SOURCE_GIT_REF, ASTRBOT_DESKTOP_VERSION and ASTRBOT_BUILD_SOURCE_DIR. A hash of those keys is computed, and the reset script .astrbot-reset-env.sh is regenerated when the hash changes, so the environment reset stays in step with the variables the build actually consumes. The comment above the list says that if build or resource scripts start consuming a new persistent environment variable, it should be added there.
That is a small piece of engineering that saves a category of confusing failures, and it is unusual enough to be worth an adopter's attention.
AGPL-3.0, a fast release line, and a stated ceiling on use
The licence is AGPL-3.0, which is the strongest copyleft in common use and the one to read carefully. Unlike the LGPL, the AGPL's network clause extends the copyleft obligation to software that users interact with over a network, which is exactly the situation a chat assistant with a web interface creates. Nothing here is legal advice, but a team deploying this for other people should read the licence text rather than assume it behaves like MIT.
Release activity is high. The recent versions are v4.29.1 on 2026-10-19, v4.28.2 on 2026-09-27 and v4.28.1 on 2026-09-14, the version in the package manifest is 4.29.1, and the last push was on 2026-10-19. The releases are tagged as AstrBot Desktop versions, and the repository is not archived. A patch release every couple of weeks matches a project that tracks an upstream bot and repackages it.
The two channels exist because of that upstream relationship. Stable is recommended for everyday use, while nightly is closer to the latest upstream commits and is meant for testing new features or fixes. Picking nightly means your local build can change behaviour under you without a version bump, which is fine for someone watching upstream and wrong for someone who needs their assistant to behave the same way tomorrow.
The stated ceiling is the most useful thing to carry away. This build is for local desktop usage and personal workflows, and for anything long-running the project points back at the upstream source, Docker or a panel deployment. The repository also documents migration in both directions, and the data-migration document is the file to read before moving a data directory between the desktop app and a source-based deployment. The further documentation is noted as being written in Chinese, which is worth knowing if your team reads English documentation.
The honest summary is that this is a well-organised packaging project with a clear scope, a fast release line and a licence that reflects the copyleft preferences of a community project.
Editorial conclusion
AstrBot Desktop suits someone who wants a chat assistant with plugins and a knowledge base running on their own machine, with data in a directory they can back up, and who does not want to assemble a Python environment first. It is the wrong tool for a long-running service on a server, and the project says so directly, pointing at the upstream source, Docker or a panel deployment instead. Before you adopt it, decide whether you want the stable or the nightly channel, check the plugin marketplace and knowledge base features you need are the ones the desktop build ships, and note that the AGPL-3.0 licence covers the project itself while the AstrBot data in your .astrbot directory stays under your own control.
Frequently asked questions
Where does AstrBot Desktop store its data?
In the .astrbot directory under the user home directory, which is ~/.astrbot on macOS and Linux and C:\Users\<username>\.astrbot on Windows. Inside it are data/config for configuration files, data/plugins, data/plugin_data, data/knowledge_base, data/webchat and a logs directory for the desktop and backend logs.
Can I access the AstrBot Desktop WebUI from another device on my LAN?
Yes, but not by default, since it listens on 127.0.0.1:6185. Set dashboard.host to 0.0.0.0 in the cmd_config.json file under data/config, or use the ASTRBOT_DASHBOARD_HOST environment variable, then restart the app. The documentation warns to allow port 6185 in the firewall and not to expose it on untrusted networks.
Is AstrBot Desktop suitable for server deployment?
Not really, according to the project. It is intended for local desktop usage and personal workflows, and for long-running server deployment the documentation points to the upstream AstrBot source, Docker or a panel-based deployment instead.
What is the difference between the stable and nightly channels?
Stable is recommended for everyday use. Nightly is built automatically from newer upstream changes and is meant for testing new features or fixes, which means the build can change without a version bump.
Why do some MCP tools complain that node, npx or uvx is missing?
Some MCP tools depend on node, npx or uvx from the system environment, and these are not bundled with the desktop installer, so they have to be installed separately. The documentation links the Node.js and uv installation pages and suggests verifying with node -v, npm -v, npx -v and uvx --version.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/astrbotdevs-astrbot-desktop)Was this useful?