Database
real data
calibrated
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:
Live data fetched from Open-Meteo every 30 minutes. Four conditions scored and summed:
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.
- 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.
For routes with a 📊 Calibrated badge, the weather score is blended with real CalMac reliability data — seasonal figures from official monthly performance PDFs:
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. The 📊 Calibrated badge only appears when the historical data shifts the final score by more than 3%, so it's a genuine signal rather than a label on every route. Routes without PDF data use weather-only predictions.
Features
Pulled automatically from CalMac's internal service status API every 10 minutes. Affected route cards are flagged with a status pill — 🚨 Cancelled, ⚠️ Disrupted, or ⚠️ Be Aware — and individual sailing rows show the disruption reason (Weather, Technical, Operational). When all sailings on a route are cancelled, the card shows ❌ and "Cancelled" instead of a percentage. Routes with an upcoming status change show an ⏰ pill even before the disruption starts.
The Map tab shows all 22 CalMac routes as coloured lines on a live OpenStreetMap — green for likely sailing, amber for caution, red for at risk or cancelled. Tap any route line to see its current forecast and open the full detail view. Line colours update automatically as weather and CalMac status data refreshes.
The Tomorrow button in the toolbar switches every route card to show the next day's sailing chances, gust and wave figures, and a full timetable with per-sailing risk scores for tomorrow. Tap it again to return to today's view.
Tap Alert me on any route to subscribe to push notifications. A slider lets you set your own alert threshold per route — anywhere from 30% to 90% — so you can choose exactly how sensitive the alert is. The notification fires when the sailing chance drops below your threshold, with a 2-hour cooldown per route to avoid spam. Works on Chrome, Edge, Firefox, and Safari on iOS 16.4+ when added to your home screen.
Each route card now shows the dominant wind direction alongside gust speed — for example "47 mph SW". Direction is averaged over the next 12 hours and shown as a compass bearing (N, NE, E, SE, S, SW, W, NW).
Early departures that are scheduled before sunrise are flagged with "🌙 Pre-dawn · Next" on the Next sailing pill. Sunrise and sunset are calculated from each route's latitude and longitude, accounting for the season and UK timezone offset.
Every route card 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.
The route detail modal shows the vessel currently operating that route, fetched live from AIS 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.
The detail modal shows crossing time, service type, scheduled vessel, and a contextual note per route. On the card itself, the next upcoming departure is highlighted with a blue border and "Next sailing" label (or "🌙 Pre-dawn · Next" for early departures). Past sailings are faded. Routes without a published timetable show a link to calmac.co.uk instead.
The Status tab gives a live health check of every data source: Weather API, Marine/Wave API, CalMac Status API (including when disruption data was last fetched), Push Notifications, Service Worker, and Historical Calibration. Each shows a green/amber/red indicator with a detail line. Tap "Check now" to re-run all checks.
A service worker caches the app shell so it remains usable in areas with no signal — useful in remote ferry terminals. When offline, a banner shows the time data was last loaded. On supported browsers (Chrome, Edge on Android) a prompt offers to install the app to your home screen for faster access. On iOS, add it via Safari's Share → Add to Home Screen.
Individual sailing predictions
Each route card shows a timetable where every departure has its own sailing chance, re-calculated for that specific hour. A route might show 90% overall but flag a 15:00 departure at 65% if a squall is forecast that afternoon.
The next upcoming sailing is highlighted with a blue border. Cancelled sailings show in red with a strikethrough direction; disrupted sailings show in amber with the disruption reason (e.g. 🔧 Technical, 🌊 Weather). Use the Tomorrow button in the toolbar to switch all cards to the following day's timetable and risk scores.
Timetables are based on the CalMac Summer 2026 schedule (27 March – 18 October 2026), verified from official CalMac PDFs.
Data sources
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.
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
real data
calibrated
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:
Live data fetched from Open-Meteo every 30 minutes. Four conditions scored and summed:
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.
- 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.
For routes with a 📊 Calibrated badge, the weather score is blended with real CalMac reliability data — seasonal figures from official monthly performance PDFs:
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. The 📊 Calibrated badge only appears when the historical data shifts the final score by more than 3%, so it's a genuine signal rather than a label on every route. Routes without PDF data use weather-only predictions.
Features
Pulled automatically from CalMac's internal service status API every 10 minutes. Affected route cards are flagged with a status pill — 🚨 Cancelled, ⚠️ Disrupted, or ⚠️ Be Aware — and individual sailing rows show the disruption reason (Weather, Technical, Operational). When all sailings on a route are cancelled, the card shows ❌ and "Cancelled" instead of a percentage. Routes with an upcoming status change show an ⏰ pill even before the disruption starts.
The Map tab shows all 22 CalMac routes as coloured lines on a live OpenStreetMap — green for likely sailing, amber for caution, red for at risk or cancelled. Tap any route line to see its current forecast and open the full detail view. Line colours update automatically as weather and CalMac status data refreshes.
The Tomorrow button in the toolbar switches every route card to show the next day's sailing chances, gust and wave figures, and a full timetable with per-sailing risk scores for tomorrow. Tap it again to return to today's view.
Tap Alert me on any route to subscribe to push notifications. A slider lets you set your own alert threshold per route — anywhere from 30% to 90% — so you can choose exactly how sensitive the alert is. The notification fires when the sailing chance drops below your threshold, with a 2-hour cooldown per route to avoid spam. Works on Chrome, Edge, Firefox, and Safari on iOS 16.4+ when added to your home screen.
Each route card now shows the dominant wind direction alongside gust speed — for example "47 mph SW". Direction is averaged over the next 12 hours and shown as a compass bearing (N, NE, E, SE, S, SW, W, NW).
Early departures that are scheduled before sunrise are flagged with "🌙 Pre-dawn · Next" on the Next sailing pill. Sunrise and sunset are calculated from each route's latitude and longitude, accounting for the season and UK timezone offset.
Every route card 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.
The route detail modal shows the vessel currently operating that route, fetched live from AIS 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.
The detail modal shows crossing time, service type, scheduled vessel, and a contextual note per route. On the card itself, the next upcoming departure is highlighted with a blue border and "Next sailing" label (or "🌙 Pre-dawn · Next" for early departures). Past sailings are faded. Routes without a published timetable show a link to calmac.co.uk instead.
The Status tab gives a live health check of every data source: Weather API, Marine/Wave API, CalMac Status API (including when disruption data was last fetched), Push Notifications, Service Worker, and Historical Calibration. Each shows a green/amber/red indicator with a detail line. Tap "Check now" to re-run all checks.
A service worker caches the app shell so it remains usable in areas with no signal — useful in remote ferry terminals. When offline, a banner shows the time data was last loaded. On supported browsers (Chrome, Edge on Android) a prompt offers to install the app to your home screen for faster access. On iOS, add it via Safari's Share → Add to Home Screen.
Individual sailing predictions
Each route card shows a timetable where every departure has its own sailing chance, re-calculated for that specific hour. A route might show 90% overall but flag a 15:00 departure at 65% if a squall is forecast that afternoon.
The next upcoming sailing is highlighted with a blue border. Cancelled sailings show in red with a strikethrough direction; disrupted sailings show in amber with the disruption reason (e.g. 🔧 Technical, 🌊 Weather). Use the Tomorrow button in the toolbar to switch all cards to the following day's timetable and risk scores.
Timetables are based on the CalMac Summer 2026 schedule (27 March – 18 October 2026), verified from official CalMac PDFs.
Data sources
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.