English | 简体中文 | 繁體中文 | 日本語 | Русский
Run ErisPulse on Android, Windows, Linux and macOS — multiple instances, native UI, always-on.
An official multi-platform client for ErisPulse — the event-driven multi-platform bot framework. Create, run, and manage bot instances with a fully native UI. No PC, terminal, or setup steps required.
| Desktop · Windows | Mobile · Android |
|---|---|
![]() |
![]() |
|
Android, Windows, Linux and macOS installers are all published on Releases. A single Flutter codebase across every platform. |
Each instance is an independent bot with its own port, working directory and token — create, start, stop and delete as many as you need. |
A fully native interface built on the Dashboard REST/WebSocket API — real-time monitoring, streaming logs, adapter and module management. |
|
On Android a foreground service keeps every instance alive in the background; crashes are detected and restarted automatically. On desktop, instances run as direct processes managed by the app. |
On Android, proot, busybox and an Ubuntu image with Python + ErisPulse are bundled (offline build) or downloaded on first launch (online build). On desktop, a portable Python is bundled and the ErisPulse SDK is installed from PyPI with your choice of version — latest by default. |
GitHub releases can be slow or unreachable in some regions — switch the download source to a mirror (ghfast / gh-proxy) right from the settings page. |
┌────────────────────────────────────────────────────┐
│ ErisPulse-App (Flutter) │
│ │
│ Native UI ── Dashboard REST / WS API │
│ │ │
│ └── Foreground Service (background isolate) │
│ │ │
│ ▼ │
│ proot (user-space chroot) │
│ │ │
│ ▼ │
│ Ubuntu rootfs + Python + ErisPulse instances │
└────────────────────────────────────────────────────┘
- The Foreground Service owns every instance process, so bots keep running even when the UI is closed.
- The UI talks to each instance through
127.0.0.1:<port>/Dashboard/*— the same REST and WebSocket API the web Dashboard uses. - Each instance runs the SDK in its own working directory under the shared rootfs, with its own port and token.
┌────────────────────────────────────────────────────┐
│ ErisPulse-App (Flutter) │
│ │
│ Native UI ── Dashboard REST / WS API │
│ │ │
│ ▼ │
│ bundled Python ── ErisPulse instances (processes) │
└────────────────────────────────────────────────────┘
- The app bundles a portable Python. On first launch you pick an ErisPulse SDK version to install (latest by default).
- Instances run as direct child processes of the app and stop when the app exits.
For the internal design, see Architecture.
Two builds are published on Releases:
| Build | Runtime image |
|---|---|
erispulse-app-online-*.apk |
downloaded on first launch |
erispulse-app-offline-*.apk |
bundled inside the APK |
Both install the same way:
- Install and launch. Allow the notification permission — it keeps the background service alive.
- The home screen shows a banner until the runtime is ready. Tap it to run the first-launch initialization (progress and log view included).
- Create an instance and start it.
- Configure adapters and your model API keys from the in-app dashboard.
The offline build is self-contained — no network access needed after installation. If the first-launch download is slow or unreliable, switch the download source in Settings to a mirror.
Pick the build for your platform from Releases: Windows
setup.exe(or portablezip), Linuxtar.gz, macOSzip.
Note
Linux: the tar.gz does not bundle system libraries — install GTK3 first or you'll get libgtk-3.so.0: cannot open shared object file:
sudo apt install -y libgtk-3-0 libayatana-appindicator3-1 libwebkit2gtk-4.1-0Newer archives ship install-deps.sh which does this for you (detects apt / dnf / pacman / zypper). WSL2 users need WSLg for the GUI (enabled by default on Windows 11).
- Install and launch.
- Choose an ErisPulse SDK version on the welcome screen (latest is preselected) and install it.
- Create an instance and start it.
- Flutter ≥ 3.22 (stable channel)
- Android SDK (API 36+) for Android builds
flutter pub get
# Android
# online: runtime downloaded on first launch
flutter build apk --release --dart-define=FLAVOR=online
# offline: rootfs bundled into the APK (needs assets/rootfs present)
flutter build apk --release --dart-define=FLAVOR=offline
# Desktop
flutter build windows
flutter build linuxThe Android rootfs image is built by a separate workflow (.github/workflows/build-rootfs.yml) which bakes Ubuntu arm64 + Python + ErisPulse; the Android build then embeds it. See scripts/ for details.
lib/
├── main.dart # Entry point + Provider wiring
├── models/ # Instance / log / system / adapter DTOs
├── pages/ # Native UI pages
│ ├── home_page.dart # Instance list
│ ├── instance_detail_page.dart# Overview / logs / adapters / modules / config
│ ├── onboarding_page.dart # First-launch runtime provisioning
│ └── ...
├── services/
│ ├── instance_manager.dart # Instance metadata CRUD + persistence
│ ├── dashboard_api.dart # Dashboard REST client
│ └── runtime/ # proot / rootfs / foreground service (Android)
│ # desktop runtime / SDK manager (Windows/Linux)
└── widgets/
| Project | Description |
|---|---|
| ErisPulse | The async multi-platform bot framework this app embeds |
| ErisPulse-Dashboard | Web management panel; the API this app's native UI is built on |
The Android container approach builds on user-space chroot (proot) and static busybox, following the ecosystem established by Termux. The product shape and mobile deployment approach draw on AstrBot-Android-App.

