⛴️
Will It Sail?
CalMac Sailing Predictor
Fetching weather data…

CalMac Sailing Predictor

Unofficial weather-based predictions for all CalMac routes across Scotland's west coast and islands.

Loading weather forecasts…
⚠️ Unofficial tool — not affiliated with CalMac. Predictions use wind, wave height, swell, visibility, snow, tidal restrictions and seasonal factors. Timetables are approximate. Always check CalMac's official service status before travelling.

Will It Sail? 🚢

An unofficial sailing predictor for CalMac's west coast ferry network. It combines live weather forecasts, real CalMac cancellation history, live service status, and AIS vessel tracking to estimate how likely each sailing is to run — route by route, departure by departure.

Database

Months of
real data
Routes
calibrated
🟢
Live CalMac
status API

Historical cancellation data comes from official CalMac monthly reliability PDFs at corporate.calmac.co.uk. Routes without PDF data use research-based estimates from Transport Scotland reports and FOI releases. The 📊 Calibrated badge means a route's prediction is anchored to real cancellation history.

How the prediction works

Every route gets a Sailing Chance % calculated in three stages:

1
Weather risk score (0–100)

Live data fetched from Open-Meteo every 30 minutes. Four conditions scored and summed:

💨
Wind gusts
Compared against each route's specific cancellation threshold — 40 mph for the exposed Stornoway crossing, 65 mph for the sheltered Gourock–Dunoon run. The score scales smoothly from 3 pts at 45% of threshold up to 40 pts when gusts exceed 120% of threshold.
0–40 pts
🌊
Wave height & swell
Significant wave height combined with swell period — long-period Atlantic swells are weighted more heavily than short wind chop at the same height. Threshold varies by route exposure (1 = sheltered, 4 = open ocean).
0–30 pts
🌫
Visibility / fog
CalMac can suspend sailings in fog independently of wind. 0 pts above 5 km, scaling to 15 pts in dense fog below 500 m.
0–15 pts
🌧
Precipitation & snow
Heavy rain adds 2 pts, heavy snow adds 5 pts, and blizzard conditions (WMO code ≥ 71) add the full 10 pts. Accounts for port access and loading difficulties.
0–10 pts

The overall route score is the average of the three worst hours in the next 12 — so one gusty hour doesn't tank a mostly calm day. Each individual sailing row shows that departure's specific hour score.

2
Season & route adjustments
  • Season factor — cancellation thresholds are 15% stricter in winter (Nov–Feb), 7% stricter in shoulder months (Mar, Sep, Oct), and standard in summer (Apr–Aug). This reflects CalMac's real-world higher cancellation rates in winter.
  • Route exposure profile — each of the 22 routes has a wind threshold (mph), wave threshold, and exposure rating built from route geography and historical cancellation data.
  • Tidal penalty — a small fixed penalty for routes with known tidal constraints (Uig triangle, Small Isles) that can cause cancellations independently of weather.
3
Historical calibration blend

For routes with a 📊 Calibrated badge, the weather score is blended with real CalMac reliability data — seasonal figures from official monthly performance PDFs:

final = (weather × 0.7) + (history × 0.3)

The result is capped at that route's historical reliability + 10% — so even in perfect weather, a structurally unreliable route can't show an unrealistically high score. Routes without PDF data use weather-only predictions.

Features

🚨 Live CalMac service status

A disruption banner appears at the top of the Routes tab whenever CalMac is reporting active cancellations or delays on any route, pulled automatically from CalMac's internal service status API. Affected route cards are flagged with a status pill. If the CalMac API is unavailable, a fallback link to their official status page is shown instead.

🔗 Share links

Every route card and modal has a Share button. Tap it, enter your name, and a unique link is generated. On iOS and Android it opens the native share sheet; on desktop it copies the link to clipboard. When the recipient opens the link it shows your name at the top — "Ross shared Ardrossan – Brodick with you 🚢" — and opens directly to that route.

🔔 Route notifications

Star a route (⭐) to save it to Favourites. On the route card, tap Alert me to subscribe to push notifications for that route. If the sailing chance drops below 70%, you'll receive a notification — even with the app closed. Notifications are checked every 10 minutes with a 2-hour cooldown per route to avoid spam. Tap Alerts on to unsubscribe.

Requires browser notification permission. Notifications work on Chrome, Edge and Firefox. Safari on iOS 16.4+ when the app is added to your home screen.

🚢 Live vessel identification

Tapping a route card opens the detail view, which shows the vessel currently operating that route. This is fetched live from AIS (Automatic Identification System) position data via aisstream.io — if a vessel is detected within the route's geographic bounding box, it's shown with a green live indicator. If AIS data is unavailable, the scheduled vessel for that route is shown instead.

ℹ️ Route info cards

The detail modal for each route includes a Route details section showing crossing time, service type, scheduled vessel, and a contextual note — for example flagging that Kennacraig–Islay serves two different ports, or that Claonaig–Lochranza is a seasonal summer-only service.

📱 Offline & installable (PWA)

The app registers a service worker that caches the shell, so if you load it in a ferry terminal with no signal, the last-loaded UI remains available. Add it to your home screen on iOS or Android for a full-screen experience and to enable push notifications on iOS. Feedback reports submitted while offline are queued and sent automatically when signal returns.

Individual sailing predictions

Tapping a route card expands a timetable showing each departure time with its own sailing chance. Each sailing re-runs the weather score for that specific hour — a route might show 90% overall but flag a 15:00 departure at 65% if a squall is forecast to arrive that afternoon.

Timetables are based on the CalMac Summer 2026 schedule (27 March – 18 October 2026), verified from official CalMac PDFs. A timetable-verified indicator on a sailing means its times came directly from a published PDF rather than being estimated.

Data sources

🌤
Open-Meteo
Free, open-source weather API. Provides hourly wind, gusts, wave height, swell, visibility and precipitation forecasts at each route's midpoint coordinates. Auto-refreshed every 30 minutes.
🚨
CalMac service status API
CalMac's own internal service status JSON endpoints, probed automatically on load. Provides real-time disruption data that catches mechanical and crewing cancellations that weather models can't predict. Falls back to a link to their official status page if unavailable.
🛳
AIS vessel tracking (aisstream.io)
Live vessel position data from AIS receivers via aisstream.io. Used to identify which vessel is currently operating each route, updated when you open a route's detail view.
📋
CalMac Reliability PDFs
Official monthly performance reports from CalMac's corporate site. Each PDF contains month-by-month operated and cancelled sailing counts for one route. Six routes are currently fully calibrated (72 months of verified data).
🗂
Transport Scotland / FOI data
For routes where CalMac PDFs aren't yet in the database, estimates come from Transport Scotland annual reports and published FOI responses.
🙋
CalMac historical PDFs
Official monthly performance reports from CalMac's corporate site. Each PDF contains month-by-month operated and cancelled sailing counts. Six routes are currently fully calibrated (72 months of verified data).

Limitations & honest caveats

  • Not all cancellations are weather-related. Mechanical breakdowns, crewing issues and port problems cause a significant proportion of cancellations. The live CalMac status API catches many of these — but only when CalMac has already published an alert. Surprise failures won't appear until CalMac posts them.
  • The forecast grid may miss local conditions. The Minch, Sound of Mull and Firth of Lorn can have sea states that differ significantly from the nearest Open-Meteo grid point.
  • CalMac masters have the final say. Internal safety thresholds aren't published — our thresholds are reverse-engineered from cancellation history and will never be perfectly calibrated.
  • Tidal routes are especially uncertain. Operational constraints at some piers go beyond weather alone and aren't fully captured in the model.
  • AIS coverage has gaps. Some areas have limited AIS receiver coverage. The vessel shown may be delayed or missing if the vessel is out of range of a receiver.
  • Historical data quality varies. Six routes have full verified PDF data; the rest use estimates which are less precise — particularly in winter months where disruption patterns are harder to model.

⚠️ Disclaimer

This is an unofficial community tool with no affiliation to Caledonian MacBrayne. Predictions are estimates only — always check CalMac's official service status before travelling. Never rely solely on this app for travel decisions.

Developer

Built by Ross Mackenzie

Inverness, Scotland 🏴󠁧󠁢󠁳󠁣󠁴󠁿

Timetables valid for summer 2026 (27 Mar – 18 Oct 2026). Always verify at calmac.co.uk.

✅ Link copied!