The open-source sailing display for Signal K. A clear, real-time 3D picture of the boat, the sea and the traffic around it — sail trim, rules of the road, man overboard, anchor watch, bathymetry and weather — in a calm interface inspired by Tesla's driving visualisation. It runs as a Signal K webapp on the boat's server (a Raspberry Pi is enough) and in any browser on board: chart-table screen, cockpit tablet or phone.
Every image on this page is a screenshot of the app, fed with real data for La Rochelle on 4 October 2026: wind from Open-Meteo, tides, the SHOM 20 m bathymetry and scripted AIS traffic.
▶ Video tour (2:33): in English · en français — leaving La Rochelle, the rules of the road, man overboard, bathymetry, weather, engine and logbook.
- Highlights
- The 3D view
- Traffic and the rules of the road
- Safety: man overboard and anchor watch
- Instruments and boat systems
- Offline at sea
- On board
- Installation
- Configuration
- Development
- Data sources and credits
- Contributing · Licence · Disclaimer
- A boat you can trim from the screen. Main, headsails and asymmetric spinnaker drawn from the wind (camber, twist, reefs, sail changes), with draft stripes, telltales and the traveller and jib cars where they should be.
- The sea around you, five ways. A realistic sea built from the true wind, the live chart with buoyage, the seabed in 3D, the wind forecast, or a clean FSD-style ground for racing.
- Traffic you can read at a glance. AIS targets drawn as real ship types and sizes, moving smoothly between reports, coloured by who must give way under COLREG — with the manoeuvre to make.
- Tactics. Laylines to the waypoint, isochrones from your polars (where you will be in 5, 10 and 15 minutes), VMG advice and a polar-speed ghost boat.
- Safety first. Man-overboard marker with drift prediction, anchor watch with the real swing track, shallow-water warnings against your draft.
- Everything else on board. Dashboard, engine and maintenance, energy, tanks, logbook with voyage replay, autopilot, media and documents — in 12 languages, metric, imperial or nautical units, day, dark and red night themes.
- Built for the boat. Works offline once the area is downloaded, adapts to a Raspberry Pi, reads standard Signal K paths only.
The heart of Ocearo is a live 3D scene centred on your boat. A button cycles between five representations of the world around it.
The sea itself is generated from the true wind: wave height, length and direction of a coastal wind sea plus a swell, whitecaps from about 7 knots, the sky's reflection and the sun where it really is, and your own wake following the track you actually sailed. The sails are drawn from the apparent wind with their trim: draft stripes with the depth and position of maximum camber, telltales on the luff and leech, and the sheet cars on their tracks.
Boats: a 10.8 m racer (default), a 14 m catamaran and simpler models, chosen in the settings.
The rules Ocearo applies, from the AIS status and ship type of each target and from our own (a yacht with its engine running is power-driven):
| Rule | Situation | Who keeps clear |
|---|---|---|
| 13 | Overtaking — coming up from more than 22.5° abaft the beam | The overtaking vessel |
| 18 | Different kinds of vessel | Power ⟶ sail ⟶ fishing ⟶ restricted in her ability to manoeuvre |
| 12 | Two sailing vessels | Port tack keeps clear of starboard tack; on the same tack, the windward boat |
| 14 | Head-on between power-driven vessels | Both alter to starboard |
| 15 | Crossing between power-driven vessels | The one with the other on her starboard side, passing astern |
| 17 | We are the stand-on vessel | Hold course and speed; may act when the other does not, must act when the give-way vessel alone can no longer avoid collision |
Narrow channels and traffic separation schemes (rules 9–10) are not modelled: the advice is an aid to the watch, never a decision. With ocearo-core on the server, the same rules are also spoken — “Collision danger: LE PERTUIS at 0.5 miles, CPA 0.1 miles in 6 minutes. Vessel engaged in fishing, we keep clear, rule 18. Pass astern of her, bearing away or slowing down.” — including rule 19 in restricted visibility, and the AIS layer button switches the banner and advice off with the targets.
Colours mean the same thing everywhere: red — risk of collision and it is our move; violet — risk of collision and it is theirs; orange — close but no collision course; grey — nothing to report. CPA and TCPA come from both vessels' course and speed; thresholds are set in the settings. AIS targets are drawn by type and length (sailing yachts, catamarans, ferries, cargo ships, tugs, fishing vessels, lifeboats…) and dead-reckoned between reports, so they glide instead of jumping.
![]() |
![]() |
| Man overboard. One button (or any Signal K MOB notification) raises the alarm: drop point, the person's estimated position now from current and leeway, the drift line and the bearing and distance to steer. | Anchor watch. Alarm radius and 80 % watch ring centred on the anchor, the rode, and the track the boat has actually described around it: a veer or a dragging anchor shows in its shape long before the alarm. Kept by ocearo-core, so it survives a reload. |
Parking assist. Choose the berth (bow-in, stern-in, alongside, mooring buoy) and follow the predicted track with wind and current.
Night theme. Red and red-orange only, so the screen keeps your night vision, with values brighter than labels so it stays easy to read. The theme can switch itself with the sun.
At sea there is rarely internet. Whenever there is (marina Wi-Fi, 4G), Ocearo keeps what it will need:
- Chart tiles you have viewed, wind forecasts and bathymetry are cached in the display's browser; Settings → Offline data downloads the bathymetry and forecast for 5, 10 or 20 NM around the boat in one go.
- With ocearo-core on the server, the SHOM surveys (5–20 m digital elevation models of the French coast, open data) are downloaded by the server itself and shared with every screen on board.
- OpenStreetMap's tile servers do not allow bulk downloads: for complete offline charts, add MBTiles charts to the Signal K server, which Ocearo then uses automatically.
The installation Ocearo is developed on: behind a panel of the chart table, a Raspberry Pi with a MacArthur HAT (NMEA 0183 and NMEA 2000 interface) runs Signal K, and a touchscreen set into the panel above the switchboard shows the 3D view. Tablets and phones connect to the same server over the boat's Wi-Fi.
Photos taken with an earlier version of Ocearo.
Ocearo UI is a Signal K webapp.
- On your Signal K server (≥ 2.x), open Appstore → Available, search for ocearo-ui and install it (or
npm install ocearo-uiin~/.signalk). - Restart the server and open
http://<signalk-server>:3000/ocearo-ui/on any screen on board. - Recommended: install ocearo-core for the logbook, anchor watch, SHOM bathymetry, system metrics and the AI copilot.
Website: https://laborima.github.io/ocearo-ui/ · live demo with simulated data: https://laborima.github.io/ocearo-ui/demo/
Ocearo reads standard Signal K paths; when a path is missing, its display is empty rather than wrong. On a typical NMEA 2000 boat these plugins publish what it needs:
| Plugin | Provides | Used by |
|---|---|---|
signalk-derived-data |
True wind and true heading (enable heading, angleTrueWater, directionTrue) |
Wind, sail trim, polars, compass |
@meri-imperiumi/signalk-autostate |
navigation.state |
Sail visibility, alert priorities |
@signalk/set-system-time |
System clock from GPS | Tides, day/night, logbook |
@signalk/signalk-autopilot |
Signal K v2 autopilot API | Autopilot view |
ocearo-core |
Logbook, anchor, bathymetry, system metrics, AI copilot | Logbook, anchor watch, bathymetry, Raspberry Pi tab |
Hardware: a Raspberry Pi 4 or 5 runs the server and a display comfortably; select the Raspberry Pi 3D quality on the Pi's own screen. Any recent browser works as a remote display.
Everything is set in the app (Settings): Signal K server address and authentication, boat model, draft and polars, units, language, theme (manual or following the sun), 3D quality, AIS scale and collision thresholds (CPA, TCPA), and offline data. Settings are stored per display.
To install the app on a tablet or phone as a full-screen app (PWA), serve Signal K over HTTPS on the boat's network: see docs/ssl.md.
git clone https://github.com/laborima/ocearo-ui.git
cd ocearo-ui
npm install
npm run dev # http://localhost:3000 — point it at your Signal K server in Settings
npm run lint
npm run build # static export in out/To try a build on a Signal K server, link it as a webapp: npm run link (symlinks out/ into ~/.signalk/node_modules/ocearo-ui), then restart the server.
Stack: Next.js 16 (static export), React 19, Three.js with React Three Fiber, Tailwind CSS 4, i18next. The 3D boats, sails and AIS fleet are procedural (no model files to download); see AGENTS.md for the project conventions.
Tide tables for offline use live in public/tides/<harbour>/<MM>_<yyyy>.json.
- Charts © OpenStreetMap contributors (ODbL); buoyage © OpenSeaMap (CC BY-SA).
- Bathymetry: SHOM digital elevation models (Licence Ouverte Etalab 2.0), served by ocearo-core; global relief from the Terrarium tiles on AWS Open Data (GEBCO, ETOPO, SRTM and others).
- Wind forecast: Open-Meteo (CC BY 4.0).
- Sun position: NOAA solar calculator equations.
Bug reports, ideas and pull requests are welcome — see the issues. Changes are listed in the CHANGELOG.
How Ocearo is built. In the interest of transparency: most of the code was written with AI coding assistants ("vibe coding"). I'm a developer and a sailor; I decide what the app does, review the changes and test it on my own boat, but it is not hand-written line by line. Code reviews are especially welcome.
Ocearo UI improves situational awareness; it is not a certified navigation or safety system and must not be the only source of navigational information. Always cross-check with official charts and instruments, keep a proper lookout and follow the rules of the road. The authors accept no liability for incidents arising from its use.






















0 comments
log in to comment.