| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Modern Marine Navigation System — Open Source, Touch-Optimized, Offline-First
A complete marine navigation system for inland waterways and coastal navigation. Built for Raspberry Pi with touchscreen, runs completely offline, no subscriptions, no cloud lock-in.
See the simulation in action: tilted head-up look-ahead perspective with real 3D navigation marks (buoys, beacons, topmarks) — rendered from official Inland ENC data.
Currently in the v1.9 development branch.
balenaEtcher or Raspberry Pi Imager → select custom image → Flash → done
No Linux, no terminal, no config files needed.
The BoatOS MBTiles Creator is a standalone Windows app that downloads, converts, and uploads offline map tiles directly to your BoatOS Pi — one click per region.
What it does:
Supported regions include: Germany (all 16 states), Netherlands, Belgium, France, Switzerland, Austria, Norway, Sweden, Denmark, Great Britain, Ireland, USA (state-level), Canada, and more.
→ Source & instructions: tools/mbtiles-creator/
→ Detailed docs: docs/tileserver.md
If you like this project: the books are the most direct way to support me — and an honest review on Amazon helps enormously to help others discover it. I appreciate every piece of feedback! 🙏
PCBWay sponsors the PCB manufacturing for BoatOpenIO, the sensor gateway of this ecosystem — thank you!
👉 Order the boards directly: PCBWay shared project
No touchscreen required. BoatOS runs fully through Deck, the browser-based web frontend — accessible from any phone, tablet, or laptop on the same network. The touchscreen with Helm is optional and turns the setup into a full helm station.
Demos: Check Instagram @bigbrainlabs
┌──────────────────────────────────────────────────────────────────┐ │ Raspberry Pi 4 │ │ │ │ ┌──────────────────────┐ ┌──────────────────────────────┐ │ │ │ Deck Web Frontend │ │ Helm Flutter App (flutter-pi) │ │ │ │ (Nginx + HTTPS) │ │ Native Kiosk, lightdm │ │ │ └──────────┬───────────┘ └──────────────┬───────────────┘ │ │ │ HTTP/WS │ HTTP/WS │ │ └─────────────┬─────────────────┘ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ BoatOS Backend │ FastAPI, Port 8000 │ │ │ (main.py) │ WebSocket, REST API │ │ └────┬──────┬─────┘ │ │ │ │ │ │ ┌────────────┘ └──────────────┐ │ │ ▼ ▼ │ │ ┌─────────────┐ ┌─────────────────┐ │ │ │ Mosquitto │◄── ESP32/Sensors │ SignalK │ │ │ │ MQTT │ (boot/+) │ Port 3000 │ │ │ │ Port 1883 │ │ GPS + NMEA │ │ │ └─────────────┘ └────────┬────────┘ │ │ │ │ │ ┌────────▼────────┐ │ │ │ GPS Receiver │ │ │ │ /dev/ttyUSB0 │ │ │ └─────────────────┘ │ │ │ │ ┌────────────────────────────┐ │ │ │ Martin Tile Server │ Port 8081, local vector maps │ │ │ OSRM Routing Server │ Port 5000, inland waterways │ │ └────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────┘
| Deck — Web Frontend | Helm — Flutter App | |
|---|---|---|
| Base | Vanilla JS, MapLibre GL | Flutter 3.x, flutter-pi |
| Kiosk | cog (WPE WebKit) | flutter-pi + lightdm |
| Maps | MapLibre GL JS v4.7.1 | flutter_map + vector_map_tiles |
| Status | ✅ Production, active | ✅ Production, in development |
| Strengths | Full feature set, visual editor | Native performance, animated gauges |
Both UIs share the same backend and REST/WebSocket API.
The fastest setup — just flash and go:
Minimum 32 GB SD card or USB SSD. Partition is automatically expanded to full size on first boot.
git clone https://github.com/bigbrainlabs/BoatOS.git
cd BoatOS
chmod +x install.sh
./install.shhttps://<pi-ip>/
# On the development PC (Flutter SDK + flutterpi_tool required):
cd flutter_app
flutterpi_tool build --arch=arm64 --cpu=pi4 --release
# Deploy to Pi:
scp build/flutter-pi/aarch64-generic/app.so boatos@<pi-ip>:/home/boatos/BoatOS/flutter_app/app.so
ssh boatos@<pi-ip> "sudo systemctl restart lightdm"Full instructions: docs/installation.md
BoatOS/ ├── backend/ # FastAPI backend │ ├── app/ │ │ ├── main.py # Main API, WebSocket, MQTT │ │ ├── gps_service.py # GPS via SignalK │ │ ├── logbook_storage.py # Logbook & tracks │ │ ├── locks_storage.py # Lock database │ │ ├── crew_management.py # Crew CRUD │ │ ├── pegelonline.py # Water level data │ │ ├── ais_service.py # AIS via AISStream │ │ └── ... │ └── requirements.txt ├── frontend/ # Deck web frontend │ ├── index.html │ ├── js/ │ │ ├── main.js # ES module entry │ │ ├── map.js # Map, markers, GPS smoothing │ │ ├── navigation.js # Routing & simulation │ │ ├── logbook.js # Logbook & crew │ │ ├── sensors.js # GPS fallbacks │ │ ├── ais.js # AIS vessels │ │ └── ... │ ├── css/ │ └── sw.js # Service worker (offline caching) ├── flutter_app/ # Helm native Flutter app │ ├── lib/ │ │ ├── main.dart │ │ ├── screens/ │ │ │ ├── map_screen.dart # Map, GPS, routing, simulation │ │ │ ├── dashboard_screen.dart # DSL dashboard, gauges │ │ │ ├── logbook_screen.dart # Logbook, crew, archive │ │ │ └── settings_screen.dart │ │ ├── widgets/ │ │ │ ├── gauge_widget.dart # Animated gauges │ │ │ └── route_planner.dart # Waypoints, route panel │ │ └── services/ │ │ ├── websocket_service.dart │ │ ├── settings_service.dart │ │ └── logbook_service.dart │ ├── assets/fonts/NotoColorEmoji.ttf │ └── pubspec.yaml ├── data/ # Runtime data (not in repo) │ ├── settings.json │ ├── known_topics.json │ └── crew.json ├── docs/ ├── scripts/ ├── DASHBOARD_DSL.md └── README.md
BoatOS uses its own Domain Specific Language for dashboards:
GRID 4 ROW main GAUGE boot/sensoren/motor/drehzahl MAX 6000 UNIT "RPM" DECIMALS 0 GAUGE boot/sensoren/motor/oeldruck MAX 7 UNIT "Bar" STYLE bar DECIMALS 2 SENSOR boot/sensoren/batterie STYLE hero SENSOR boot/sensoren/lage SIZE 2 STYLE hero SENSOR boot/sensoren/tank/diesel SIZE 2
Gauge styles: arc180, arc270 (default), arc360, bar
Sensor styles: card (default), hero, compact
Documentation: DASHBOARD_DSL.md
Full documentation: http://<pi-ip>:8000/docs
| Endpoint | Description |
|---|---|
| WS /ws | WebSocket — GPS, sensors, real-time |
| GET /api/sensors/list | All MQTT sensors with status & values |
| GET /api/mqtt/topics | Raw MQTT topics with timestamps |
| POST /api/route | Calculate route (OSRM) |
| GET /api/locks/bounds | Locks in bounding box |
| GET /api/gauges | Water level gauges in bounding box |
| GET /api/ais/vessels | AIS vessels in bounding box |
| GET /api/logbook/trips | All trips |
| GET /api/logbook/trips/{id} | Trip detail with track & entries |
| POST /api/logbook/start | Start trip |
| POST /api/logbook/stop | End trip |
| GET /api/crew | Crew members |
| GET /api/settings | System settings |
| GET /api/saved-routes | Saved routes |
cd backend
source venv/bin/activate
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000# No build needed — edit files directly
# Browser: https://localhost/ (kiosk) or https://<pi-ip>/cd flutter_app
# Build for Pi 4 (ARM64)
flutterpi_tool build --arch=arm64 --cpu=pi4 --release
# Deploy
scp build/flutter-pi/aarch64-generic/app.so boatos@<pi-ip>:/home/boatos/BoatOS/flutter_app/app.so
ssh boatos@<pi-ip> "sudo systemctl restart lightdm"# Follow all topics live
mosquitto_sub -h localhost -t '#' -v
# Send test data
mosquitto_pub -h <pi-ip> -t 'boot/sensoren/motor/drehzahl' -m '2500'Pull requests are welcome!
sudo systemctl status boatos
sudo journalctl -u boatos -fls -la /dev/ttyUSB* /dev/ttyACM*
curl http://localhost:3000/signalk/v1/api/vessels/self/navigation/position
sudo systemctl status signalksudo systemctl status mosquitto
mosquitto_sub -h localhost -t '#' -v
# Backend status:
curl http://localhost:8000/api/mqtt/topicssudo systemctl status lightdm
# Logs:
sudo journalctl -u lightdm -fMore: docs/installation.md
BoatOS is open source and licensed under the GNU General Public License v3.0.
This means: you can freely use, study, and modify the code. Derivatives must also be released under GPL v3.
If you want to support the project: read the book, leave a review — that helps more than you'd think and motivates me to keep going. I appreciate every piece of feedback! 🙏
| Back | FazBrowse Home | New Git URL |