{"id":49901166,"url":"https://github.com/bigbrainlabs/boatos","last_synced_at":"2026-06-28T09:01:06.110Z","repository":{"id":320073826,"uuid":"1072679355","full_name":"bigbrainlabs/BoatOS","owner":"bigbrainlabs","description":"Open source marine operating system for Raspberry Pi. Offline navigation, AIS, engine monitoring, logbook and weather.","archived":false,"fork":false,"pushed_at":"2026-06-27T04:10:30.000Z","size":41812,"stargazers_count":15,"open_issues_count":5,"forks_count":1,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-06-27T06:12:38.145Z","etag":null,"topics":["ais","boat","dashboard","esp32","fastapi","flutter","logbook","marine","mqtt","navigation","offline","open-source","openstreetmap","python","raspberry-pi","signalk"],"latest_commit_sha":null,"homepage":"https://bigbrainlabs.github.io/BoatOS/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bigbrainlabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-09T04:18:02.000Z","updated_at":"2026-06-27T04:10:33.000Z","dependencies_parsed_at":"2025-10-21T20:41:33.058Z","dependency_job_id":null,"html_url":"https://github.com/bigbrainlabs/BoatOS","commit_stats":null,"previous_names":["bigbrainlabs/boatos"],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/bigbrainlabs/BoatOS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbrainlabs%2FBoatOS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbrainlabs%2FBoatOS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbrainlabs%2FBoatOS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbrainlabs%2FBoatOS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bigbrainlabs","download_url":"https://codeload.github.com/bigbrainlabs/BoatOS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigbrainlabs%2FBoatOS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34882751,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ais","boat","dashboard","esp32","fastapi","flutter","logbook","marine","mqtt","navigation","offline","open-source","openstreetmap","python","raspberry-pi","signalk"],"created_at":"2026-05-16T06:27:40.382Z","updated_at":"2026-06-28T09:01:06.103Z","avatar_url":"https://github.com/bigbrainlabs.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ⚓ BoatOS\n\n\u003e **Modern Marine Navigation System — Open Source, Touch-Optimized, Offline-First**\n\nA 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.\n\n\u003cdiv align=\"center\"\u003e\n\n### 💾 Ready-to-Flash Image — flash it, start sailing\n\n**[⬇️ Download v1.6.2 (~7.5 GB)](https://archive.org/download/boatos-distri-image/boatos_v1.6.2.img.gz)**\n\n*balenaEtcher or Raspberry Pi Imager → select custom image → Flash → done*\n\n\u003c/div\u003e\n\n---\n\n## 🗺️ Offline Maps — Windows Tool for Non-Linux Users\n\n\u003e **No Linux, no terminal, no config files needed.**\n\nThe **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.\n\n\u003cdiv align=\"center\"\u003e\n\n**[⬇️ Download BoatOS-MBTiles-Creator.exe](https://github.com/bigbrainlabs/BoatOS/releases/latest)**\n\n\u003c/div\u003e\n\n**What it does:**\n- Downloads OSM map data for any region (60+ countries and states pre-configured)\n- Converts to `.mbtiles` using tilemaker (downloaded automatically on first run)\n- Uploads the finished file directly to your Pi via WiFi — no USB stick, no SSH\n\n**Supported regions include:** Germany (all 16 states), Netherlands, Belgium, France, Switzerland, Austria, Norway, Sweden, Denmark, Great Britain, Ireland, USA (state-level), Canada, and more.\n\n→ Source \u0026 instructions: [`tools/mbtiles-creator/`](tools/mbtiles-creator/)  \n→ Detailed docs: [docs/tileserver.md](docs/tileserver.md)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n## 📚 Book Series\n\n[![Amazon DE](https://img.shields.io/badge/Book_🇩🇪-Amazon-FF9900?style=for-the-badge\u0026logo=amazon)](https://www.amazon.de/dp/B0GLXGD8LB?binding=kindle_edition\u0026ref_=saga_dp_ss_dsk_sdp)\n\u0026nbsp;\n[![Amazon EN](https://img.shields.io/badge/Book_🇬🇧-Amazon-FF9900?style=for-the-badge\u0026logo=amazon)](https://www.amazon.de/dp/B0GMD5JH28?binding=kindle_edition\u0026ref_=saga_dp_ss_dsk_sdp)\n\u0026nbsp;\n[![Facebook](https://img.shields.io/badge/Stay_Updated-Facebook-1877F2?style=for-the-badge\u0026logo=facebook)](https://www.facebook.com/profile.php?id=61590360750363)\n\n\u003e 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! 🙏\n\n\u003c/div\u003e\n\n---\n\n![License](https://img.shields.io/badge/license-GPL%20v3-blue.svg)\n![Platform](https://img.shields.io/badge/platform-Raspberry%20Pi-red.svg)\n![Python](https://img.shields.io/badge/python-3.9+-blue.svg)\n![Flutter](https://img.shields.io/badge/flutter-3.x-blue.svg)\n![Status](https://img.shields.io/badge/status-active-green.svg)\n\n---\n\n## 🌟 Highlights\n\n\u003e **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.\n\n- 🗺️ **Two UIs** — Deck (browser-based web frontend) + Helm (native Flutter app, flutter-pi)\n- 🧭 **Inland waterway routing** — OSRM-optimized for rivers, canals \u0026 locks\n- 📡 **Live AIS** — Real-time vessel traffic (Europe) via AISStream.io\n- ⚠️ **Weather \u0026 alerts** — DWD API with severe weather warnings\n- 📖 **Digital logbook** — GPS tracks, crew, water levels, export\n- 🔌 **Sensor dashboard** — MQTT integration, DSL-configurable layout, animated gauges\n- 🛰️ **Satellite maps** — ESRI World Imagery with offline caching\n- 👆 **Touch-optimized** — Large targets, no 300ms delay, perfect for on-the-water use\n\n---\n\n## 📸 Screenshots\n\n\u003c!-- TODO: Add screenshots --\u003e\n```\nDemos: Check Instagram @bigbrainlabs\n```\n\n---\n\n## 🏗️ Architecture\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│                        Raspberry Pi 4                            │\n│                                                                  │\n│   ┌──────────────────────┐   ┌──────────────────────────────┐   │\n│   │   Deck Web Frontend  │   │  Helm Flutter App (flutter-pi) │  │\n│   │   (Nginx + HTTPS)    │   │  Native Kiosk, lightdm       │   │\n│   └──────────┬───────────┘   └──────────────┬───────────────┘   │\n│              │  HTTP/WS                      │  HTTP/WS          │\n│              └─────────────┬─────────────────┘                  │\n│                            ▼                                     │\n│                  ┌─────────────────┐                            │\n│                  │  BoatOS Backend │  FastAPI, Port 8000         │\n│                  │   (main.py)     │  WebSocket, REST API        │\n│                  └────┬──────┬─────┘                            │\n│                       │      │                                   │\n│          ┌────────────┘      └──────────────┐                   │\n│          ▼                                  ▼                    │\n│   ┌─────────────┐                  ┌─────────────────┐          │\n│   │  Mosquitto  │◄── ESP32/Sensors │   SignalK       │          │\n│   │   MQTT      │    (boot/+)      │   Port 3000     │          │\n│   │  Port 1883  │                  │   GPS + NMEA    │          │\n│   └─────────────┘                  └────────┬────────┘          │\n│                                             │                    │\n│                                    ┌────────▼────────┐          │\n│                                    │   GPS Receiver  │          │\n│                                    │  /dev/ttyUSB0   │          │\n│                                    └─────────────────┘          │\n│                                                                  │\n│   ┌────────────────────────────┐                                │\n│   │  Martin Tile Server        │  Port 8081, local vector maps  │\n│   │  OSRM Routing Server       │  Port 5000, inland waterways   │\n│   └────────────────────────────┘                                │\n└──────────────────────────────────────────────────────────────────┘\n```\n\n---\n\n## ✨ Features in Detail\n\n### 🗺️ Map \u0026 Navigation\n- **Vector nautical charts** — OpenMapTiles via Martin (local, offline), Deck Light style\n- **Sea marks** — OpenSeaMap overlay\n- **Satellite maps** — ESRI World Imagery with passive + active offline caching (SW/Cache API)\n- **AIS** — Live vessel traffic via AISStream.io, filtered to Europe bounding box\n- **Lock database** — OSM-based, 300m deduplication, VHF/hours/dimensions\n- **Water level data** — PEGELONLINE API, live water levels on the map\n- **Auto-follow** — EMA-filtered GPS, smooth marker animation (α=0.35, ~4s ease-out)\n- **Routing** — OSRM waterway routing, drag-and-drop waypoints, save/load routes\n- **Route simulation** — ×1–×1000 speed, speed slider, GPS blocked during simulation\n- **Navigation** — Bearing \u0026 distance to next waypoint, automatic advance\n\n### 📊 Dashboard\n- **DSL layout** — Text-based configuration (GRID, GAUGE, SENSOR, ROW)\n- **Gauge styles** — arc180, arc270, arc360, bar — all with animated needle (500ms ease-out)\n- **SensorCards** — card, hero, compact — with SHOW/HIDE filter, status LED\n- **MQTT data** — all sensor topics auto-discovered, string values correctly parsed\n- **Visual Editor** (Deck) — Drag \u0026 drop, undo/redo, bi-directional DSL sync\n\n### 📖 Logbook\n- **GPS track recording** — Start/stop, pause, water levels per track point\n- **Crew management** — Emoji avatars, roles (Skipper/Crew/Guest), contact details\n- **Archive** — All trips with detail view: stats, track on map, weather, water levels, sensors\n- **Water level tracking** — Nearby stations recorded every 15 min\n- **Logbook entries** — Manual \u0026 automatic (trip start/end with weather snapshot)\n\n### 🔌 Sensors \u0026 MQTT\n- **Auto-discovery** — All MQTT topics automatically detected and stored\n- **Persistent topics** — `known_topics.json` — sensor data survives restarts\n- **MQTT auto-reconnect** — loop_forever() thread with 5s retry — survives broker restarts\n- **GPS synthetic sensors** — Altitude, HDOP, satellites as dashboard sensors\n- **SignalK bridge** — GPS \u0026 navigation data via SignalK, configurable in settings\n\n### 🌦️ Weather \u0026 Environment\n- **DWD integration** — German Weather Service, automatically follows boat position\n- **Severe weather alerts** — Live alerts with severity level, displayed on map\n- **Water level data** — PEGELONLINE, tracked during trips for shallow-water analysis\n\n---\n\n## 📱 Deck vs Helm\n\n| | Deck — Web Frontend | Helm — Flutter App |\n|---|---|---|\n| **Base** | Vanilla JS, MapLibre GL | Flutter 3.x, flutter-pi |\n| **Kiosk** | cog (WPE WebKit) | flutter-pi + lightdm |\n| **Maps** | MapLibre GL JS v4.7.1 | flutter_map + vector_map_tiles |\n| **Status** | ✅ Production, active | ✅ Production, in development |\n| **Strengths** | Full feature set, visual editor | Native performance, animated gauges |\n\nBoth UIs share the same backend and REST/WebSocket API.\n\n---\n\n## 🚀 Tech Stack\n\n### Backend\n- **FastAPI** — High-performance Python API\n- **paho-mqtt** — MQTT client with auto-reconnect\n- **SignalK** — Marine data server (GPS)\n- **uvicorn** — ASGI server\n\n### Deck Frontend\n- **Vanilla JavaScript** — ES Modules, no framework bloat\n- **MapLibre GL JS** v4.7.1 — Vector maps (local)\n- **WebSocket** — Real-time GPS \u0026 sensor data\n- **Service Worker** — Offline caching (maps, satellite tiles)\n\n### Helm Flutter App\n- **Flutter** 3.x + **flutter-pi** — Native ARM64 AOT build\n- **flutter_map** — Interactive maps\n- **vector_map_tiles** — Vector tiles from local Martin\n- **provider** — State management\n- **web_socket_channel** — WebSocket connection to backend\n\n### Infrastructure\n- **Nginx** — Reverse proxy \u0026 SSL (Deck)\n- **Martin** — Vector tile server (Port 8081)\n- **OSRM** — Routing engine (Port 5000, IPv4-only)\n- **Mosquitto** — MQTT broker (Port 1883)\n- **Raspberry Pi 4** — Hardware platform\n\n### Data Sources\n- **OpenSeaMap** — Sea marks overlay\n- **OpenStreetMap / OMT** — Vector maps \u0026 routing\n- **ESRI World Imagery** — Satellite maps\n- **DWD API** — German Weather Service\n- **PEGELONLINE** — Water level data\n- **AISStream.io** — Live AIS vessel data\n- **SignalK** — Marine data standard\n\n---\n\n## 📋 System Requirements\n\n### Hardware\n- **Raspberry Pi 4** (min. 2 GB RAM, 4 GB recommended)\n- **GPS receiver** — USB, e.g. BU-353N5 (`/dev/ttyUSB0`, 4800 baud)\n- **Touchscreen** — e.g. QDtech MPI1001 10.1\" (1280×800)\n- **SD card** — Min. 32 GB\n- **Optional** — ESP32/Arduino sensor board via MQTT\n\n### Software\n- **Raspberry Pi OS** Bookworm (64-bit)\n- **Python** 3.9+\n- **Node.js** (for SignalK)\n- **Flutter SDK** + flutter-pi (only needed for Helm build)\n\n---\n\n## 💾 Ready-to-Flash Image (recommended)\n\nThe fastest setup — just flash and go:\n\n1. **Download image** (v1.6.2): [boatos_v1.6.2.img.gz](https://archive.org/download/boatos-distri-image/boatos_v1.6.2.img.gz) (~7.5 GB)\n2. Open **balenaEtcher** or **Raspberry Pi Imager** → select custom image\n3. Flash → boot Pi → Helm starts automatically\n\n\u003e Minimum 32 GB SD card or USB SSD. Partition is automatically expanded to full size on first boot.\n\n---\n\n## ⚡ Quick Start (manual installation)\n\n### 1. Clone \u0026 install\n\n```bash\ngit clone https://github.com/bigbrainlabs/BoatOS.git\ncd BoatOS\nchmod +x install.sh\n./install.sh\n```\n\n### 2. Open Deck\n\n```\nhttps://\u003cpi-ip\u003e/\n```\n\n### 3. Build \u0026 deploy Helm\n\n```bash\n# On the development PC (Flutter SDK + flutterpi_tool required):\ncd flutter_app\nflutterpi_tool build --arch=arm64 --cpu=pi4 --release\n\n# Deploy to Pi:\nscp build/flutter-pi/aarch64-generic/app.so boatos@\u003cpi-ip\u003e:/home/boatos/BoatOS/flutter_app/app.so\nssh boatos@\u003cpi-ip\u003e \"sudo systemctl restart lightdm\"\n```\n\nFull instructions: [docs/installation.md](docs/installation.md)\n\n---\n\n## 📁 Directory Structure\n\n```\nBoatOS/\n├── backend/                    # FastAPI backend\n│   ├── app/\n│   │   ├── main.py             # Main API, WebSocket, MQTT\n│   │   ├── gps_service.py      # GPS via SignalK\n│   │   ├── logbook_storage.py  # Logbook \u0026 tracks\n│   │   ├── locks_storage.py    # Lock database\n│   │   ├── crew_management.py  # Crew CRUD\n│   │   ├── pegelonline.py      # Water level data\n│   │   ├── ais_service.py      # AIS via AISStream\n│   │   └── ...\n│   └── requirements.txt\n├── frontend/                   # Deck web frontend\n│   ├── index.html\n│   ├── js/\n│   │   ├── main.js             # ES module entry\n│   │   ├── map.js              # Map, markers, GPS smoothing\n│   │   ├── navigation.js       # Routing \u0026 simulation\n│   │   ├── logbook.js          # Logbook \u0026 crew\n│   │   ├── sensors.js          # GPS fallbacks\n│   │   ├── ais.js              # AIS vessels\n│   │   └── ...\n│   ├── css/\n│   └── sw.js                   # Service worker (offline caching)\n├── flutter_app/                # Helm native Flutter app\n│   ├── lib/\n│   │   ├── main.dart\n│   │   ├── screens/\n│   │   │   ├── map_screen.dart       # Map, GPS, routing, simulation\n│   │   │   ├── dashboard_screen.dart # DSL dashboard, gauges\n│   │   │   ├── logbook_screen.dart   # Logbook, crew, archive\n│   │   │   └── settings_screen.dart\n│   │   ├── widgets/\n│   │   │   ├── gauge_widget.dart     # Animated gauges\n│   │   │   └── route_planner.dart    # Waypoints, route panel\n│   │   └── services/\n│   │       ├── websocket_service.dart\n│   │       ├── settings_service.dart\n│   │       └── logbook_service.dart\n│   ├── assets/fonts/NotoColorEmoji.ttf\n│   └── pubspec.yaml\n├── data/                       # Runtime data (not in repo)\n│   ├── settings.json\n│   ├── known_topics.json\n│   └── crew.json\n├── docs/\n├── scripts/\n├── DASHBOARD_DSL.md\n└── README.md\n```\n\n---\n\n## 🎯 Dashboard DSL\n\nBoatOS uses its own **Domain Specific Language** for dashboards:\n\n```\nGRID 4\n\nROW main\nGAUGE boot/sensoren/motor/drehzahl MAX 6000 UNIT \"RPM\" DECIMALS 0\nGAUGE boot/sensoren/motor/oeldruck MAX 7 UNIT \"Bar\" STYLE bar DECIMALS 2\nSENSOR boot/sensoren/batterie STYLE hero\nSENSOR boot/sensoren/lage SIZE 2 STYLE hero\nSENSOR boot/sensoren/tank/diesel SIZE 2\n```\n\nGauge styles: `arc180`, `arc270` (default), `arc360`, `bar`  \nSensor styles: `card` (default), `hero`, `compact`\n\nDocumentation: [DASHBOARD_DSL.md](DASHBOARD_DSL.md)\n\n---\n\n## 📡 API (selection)\n\nFull documentation: `http://\u003cpi-ip\u003e:8000/docs`\n\n| Endpoint | Description |\n|---|---|\n| `WS /ws` | WebSocket — GPS, sensors, real-time |\n| `GET /api/sensors/list` | All MQTT sensors with status \u0026 values |\n| `GET /api/mqtt/topics` | Raw MQTT topics with timestamps |\n| `POST /api/route` | Calculate route (OSRM) |\n| `GET /api/locks/bounds` | Locks in bounding box |\n| `GET /api/gauges` | Water level gauges in bounding box |\n| `GET /api/ais/vessels` | AIS vessels in bounding box |\n| `GET /api/logbook/trips` | All trips |\n| `GET /api/logbook/trips/{id}` | Trip detail with track \u0026 entries |\n| `POST /api/logbook/start` | Start trip |\n| `POST /api/logbook/stop` | End trip |\n| `GET /api/crew` | Crew members |\n| `GET /api/settings` | System settings |\n| `GET /api/saved-routes` | Saved routes |\n\n---\n\n## 🛠️ Development\n\n### Backend (on Pi or locally)\n\n```bash\ncd backend\nsource venv/bin/activate\nuvicorn app.main:app --reload --host 0.0.0.0 --port 8000\n```\n\n### Deck Frontend\n\n```bash\n# No build needed — edit files directly\n# Browser: https://localhost/ (kiosk) or https://\u003cpi-ip\u003e/\n```\n\n### Helm (build on development PC)\n\n```bash\ncd flutter_app\n# Build for Pi 4 (ARM64)\nflutterpi_tool build --arch=arm64 --cpu=pi4 --release\n\n# Deploy\nscp build/flutter-pi/aarch64-generic/app.so boatos@\u003cpi-ip\u003e:/home/boatos/BoatOS/flutter_app/app.so\nssh boatos@\u003cpi-ip\u003e \"sudo systemctl restart lightdm\"\n```\n\n### MQTT Debugging\n\n```bash\n# Follow all topics live\nmosquitto_sub -h localhost -t '#' -v\n\n# Send test data\nmosquitto_pub -h \u003cpi-ip\u003e -t 'boot/sensoren/motor/drehzahl' -m '2500'\n```\n\n---\n\n## 🗺️ Roadmap\n\n### ✅ Done\n- GPS integration (SignalK, USB, phone fallback)\n- Interactive vector maps (MapLibre / flutter_map, local)\n- Waterway routing (OSRM)\n- AIS live vessel traffic\n- Weather alerts (DWD)\n- Digital logbook with crew \u0026 water level tracking\n- Dashboard DSL + visual editor (Deck)\n- Animated gauge widgets (Helm)\n- Lock database (OSM)\n- Satellite maps + offline caching\n- Route simulation\n- Smooth GPS marker (EMA + interpolation)\n- MQTT auto-reconnect\n\n### 🚧 In Progress\n- Helm feature parity with Deck\n- ~~Distributable Pi image~~ ✅ [Ready-to-flash image available](https://archive.org/download/boatos-distri-image/boatos_v1.6.2.img.gz)\n\n### 🔮 Planned\n- Anchor alarm with geofencing\n- Tide predictions (BSH API)\n- GPX import/export\n- AIS target CPA calculation\n- MOB (Man Over Board) alert\n\n---\n\n## 🤝 Contributing\n\nPull requests are welcome!\n\n1. Fork → branch → commit → PR\n2. Code style: PEP8 (Python), standard JS / Dart\n3. Commit messages: Conventional Commits\n4. Please test on real Pi hardware\n\n---\n\n## 🐛 Troubleshooting\n\n### Backend won't start\n```bash\nsudo systemctl status boatos\nsudo journalctl -u boatos -f\n```\n\n### GPS no data\n```bash\nls -la /dev/ttyUSB* /dev/ttyACM*\ncurl http://localhost:3000/signalk/v1/api/vessels/self/navigation/position\nsudo systemctl status signalk\n```\n\n### MQTT sensors not appearing\n```bash\nsudo systemctl status mosquitto\nmosquitto_sub -h localhost -t '#' -v\n# Backend status:\ncurl http://localhost:8000/api/mqtt/topics\n```\n\n### Flutter app won't start\n```bash\nsudo systemctl status lightdm\n# Logs:\nsudo journalctl -u lightdm -f\n```\n\nMore: [docs/installation.md](docs/installation.md)\n\n---\n\n## 📜 License\n\nBoatOS is open source and licensed under the **[GNU General Public License v3.0](LICENSE)**.\n\nThis means: you can freely use, study, and modify the code. Derivatives must also be released under GPL v3.\n\n---\n\n## 📚 Book Series\n\n- 📖 **Book on Amazon** (🇩🇪): [Logbuch ohne Pose — Deutsch](https://www.amazon.de/dp/B0GLXGD8LB?binding=kindle_edition\u0026ref_=saga_dp_ss_dsk_sdp)\n- 📖 **Book on Amazon** (🇬🇧): [Logbuch ohne Pose — English](https://www.amazon.de/dp/B0GMD5JH28?binding=kindle_edition\u0026ref_=saga_dp_ss_dsk_sdp)\n\n\u003e 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! 🙏\n\n---\n\n## 👏 Credits\n\n- **Development**: bigbrainlabs\n- **AI pair programming**: Claude Code (Anthropic)\n- **Maps**: OpenSeaMap, OpenStreetMap, ESRI\n- **Data**: DWD, PEGELONLINE, AISStream.io\n- **Libraries**: FastAPI, flutter_map, MapLibre GL, SignalK, OSRM\n\n---\n\n## 🔗 Links\n\n- 🌐 **Open Boat Projects**: [open-boat-projects.org/de/boatos](https://open-boat-projects.org/de/boatos/)\n- 📦 **GitHub**: [github.com/bigbrainlabs/BoatOS](https://github.com/bigbrainlabs/BoatOS)\n- 📖 **Book (🇩🇪)**: [Logbuch ohne Pose — Deutsch](https://www.amazon.de/dp/B0GLXGD8LB?binding=kindle_edition\u0026ref_=saga_dp_ss_dsk_sdp)\n- 📖 **Book (🇬🇧)**: [Logbuch ohne Pose — English](https://www.amazon.de/dp/B0GMD5JH28?binding=kindle_edition\u0026ref_=saga_dp_ss_dsk_sdp)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Built with ❤️ for the water**\n\n*By sailors, for sailors*\n\n[⬆ Back to top](#-boatos)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigbrainlabs%2Fboatos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbigbrainlabs%2Fboatos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigbrainlabs%2Fboatos/lists"}