Open-source replacement for Neato's discontinued cloud and mobile app. An ESP32 bridge communicates with Botvac robots (D3-D7) over UART and exposes a local web UI over WiFi — no cloud, no app, no account required.
Note
This is an early beta - things may break, rough edges are expected, and the API may change. If you run into problems, a Discussion or issue is always welcome.
Important
Now in development: Guided Clean - zone cleaning, no-go lines, and map-based navigation.
Select zones on a previously recorded map, draw no-go lines, and let the robot clean exactly where you want. Follow the issue for progress updates and sub-task tracking.
| Dashboard | Manual Drive | Cleaning History |
|---|---|---|
![]() |
![]() |
![]() |
| Clean Map | Schedule | Settings |
|---|---|---|
![]() |
![]() |
![]() |
Neato shut down their cloud services and mobile app, leaving perfectly functional robot vacuums without remote control or scheduling. OpenNeato brings them back to life with a small ESP32 board wired to the robot's debug port, giving you a local web interface that works without any external dependencies.
- Dashboard with live robot status, battery level, cleaning state, WiFi signal, and storage usage
- House and spot cleaning with pause/resume/stop/dock controls that adapt to the current state
- Manual driving mode with a virtual joystick, live LIDAR map visualization, motor toggles (brush, vacuum, side brush), bumper/wheel-lift/stall safety warnings
- Live cleaning map — watch the robot's path during an active cleaning session in the History view, rendered on a canvas with coverage overlay
- 7-day cleaning scheduler with two slots per day, managed entirely on the ESP32 (doesn't use the robot's built-in schedule commands)
- Cleaning history with recorded robot paths rendered as coverage maps, session stats like duration, distance, area covered, and battery usage; individual session import/export for backup and restore
- Push notifications via ntfy.sh; get notified when cleaning is done, an error occurs, a maintenance alert triggers, or the robot docks; fully optional, configurable per event
- OTA firmware updates from the browser with SHA-256 download verification (against published
checksums.txt), MD5 transfer integrity, dual-partition layout with auto-rollback, and automatic new version notifications when a release is available on GitHub - Settings page for hostname, timezone, motor presets, notification topics, UART pins, theme (dark/light/auto), and more
- Event logging with configurable log levels (off/info/debug), compressed JSONL files on SPIFFS, browsable and downloadable from the UI; optional remote syslog (UDP) for long-running diagnostics without flash wear; logging is off by default
- Factory reset via 5-second button hold on the ESP32 or from the settings page
- Robot clock sync — pushes NTP time to the robot automatically, re-syncs every 4 hours
- Flash tool — standalone CLI that auto-detects the USB port, downloads the correct firmware from GitHub Releases, and flashes with zero prerequisites
- Safety watchdog — auto-stops wheels in manual mode if the browser disconnects; task and heap watchdogs restart the ESP32 on hangs
- Crash recovery — orphaned cleaning sessions after unexpected reboots are automatically recovered with full stats
The frontend is a lightweight SPA that gets gzipped and embedded directly into the firmware binary, so a single OTA update covers both firmware and UI. Mobile-friendly, dark theme by default.
Neato Botvac D3 through D7. D8/D9/D10 are NOT supported (different board, password-locked serial port).
- ESP32-C3, ESP32-S3, or original ESP32 board with 4 MB flash (any dev board with USB and exposed GPIOs)
- Download the latest release from the Releases page
- Flash the ESP32 using the flash tool (auto-detects your chip type):
openneato-flash
- Configure your home WiFi via the serial menu (opens automatically after flashing)
- Wire the ESP32 to your robot's debug port
- Open the web UI at
http://neato.localor the IP shown in the serial monitor
For detailed instructions and troubleshooting, see the User Guide.
Requires Node.js 22+, PlatformIO CLI, and Go 1.26+.
git clone https://github.com/renjfk/OpenNeato.git
cd OpenNeato
# Build frontend (generates web_assets.h)
cd frontend && npm ci && npm run build && cd ..
# Build firmware
pio run -e c3-release
# Build flash tool
cd flash && go build -o openneato-flash . && cd ..OpenNeato is open to contributions and ideas! Whether you're a developer wanting to add features or a user with suggestions, your input is valuable.
Tip
Before opening an issue, consider starting a Discussion first — many questions, setup troubles, and ideas are easier to resolve through conversation.
When creating issues, please follow our simple naming convention:
Format: type: brief description
feat:- New features or functionalityfix:- Bug fixesenhance:- Improvements to existing featureschore:- Maintenance tasks, dependencies, cleanupdocs:- Documentation updatesbuild:- Build system, CI/CD changes
feat: add CSV export functionalityfix: app crashes when importing large filesenhance: improve data loading performancechore: update dependencies to latest versionsdocs: update README with installation instructionsbuild: update Xcode project settings
- Use lowercase for the description
- Be specific and actionable
- Keep under 60 characters
- No period at the end
Manual releases via opencode; see RELEASE_PROCESS.md.
Prereleases can be triggered from any PR by commenting /prerelease (collaborators only).
This project is licensed under the MIT License.





