What is Apple WeatherKit?

WeatherKit is the successor to the Dark Sky API, which Apple acquired in March 2020. When Apple bought Dark Sky, it eventually shut down the third-party API and replaced it with WeatherKit - a first-party framework integrated into Apple's own infrastructure, announced at WWDC 2022 and available from iOS 16 and macOS 13 onwards.

The acquisition of Dark Sky was significant because Dark Sky was widely regarded as the most accurate hyperlocal weather service available to developers - the same engine behind the Dark Sky app's reputation for precise, street-level precipitation forecasts. Apple folded this capability into WeatherKit along with data from multiple national and international meteorological services, producing a weather data source that now powers Apple's own Weather app on iPhone, iPad, and Mac.

WeatherKit is available in two forms. The WeatherKit Swift framework is available for native Apple platform apps and integrates directly via Xcode. The WeatherKit REST API allows server-side and cross-platform access. Both draw from the same underlying data pipeline. Solace uses the native Swift framework, which means the WeatherKit integration is as tightly coupled to the Apple platform as possible - no third-party intermediaries, no alternative server infrastructure.

Access to WeatherKit requires membership in the Apple Developer Program. This is deliberate: Apple uses developer attribution to enforce reasonable usage limits and prevent the service from being scraped at scale. It also means that every app using WeatherKit has been through Apple's notarisation process and is a known, identified developer entity.

What data does WeatherKit provide?

WeatherKit provides a comprehensive set of weather data at a given latitude and longitude. The full dataset includes:

For Solace's weather-aware dark mode, only one piece of this data matters: the condition code from the current conditions response. The condition code is a structured enum that classifies the current sky state into one of a defined set of values. The codes that are relevant to appearance switching fall into two broad categories:

Condition WeatherKit code examples Appearance in Solace
Clear sky Clear, MostlyClear Light mode
Partial cloud PartlyCloudy Light mode
Heavy cloud cover MostlyCloudy, Cloudy, Overcast Dark mode
Precipitation Drizzle, Rain, HeavyRain, Freezing Rain Dark mode
Storms Thunderstorms, TropicalStorm, Hurricane Dark mode
Snow and ice Snow, HeavySnow, Sleet, Hail, Blizzard Dark mode
Reduced visibility Foggy, Haze, Smoke, Dust Dark mode

The condition code is categorical rather than numeric. This matters because it means the threshold for switching does not require calibration or tuning against a continuous scale. The question is simply: is the condition code one that describes a meaningfully bright sky, or one that describes a dim, obscured, or precipitating sky? The condition codes make this a binary classification rather than an ambiguous interpolation.

How Solace uses WeatherKit

When you enable weather-based switching in Solace, the app begins a polling loop that requests current conditions from WeatherKit at regular intervals. The interval is designed to be frequent enough to respond to meaningful weather changes within a reasonable time - you should not have to wait an hour for your Mac to catch up with a weather shift - but infrequent enough to avoid unnecessary battery and data consumption.

Each time Solace receives a condition code from WeatherKit, it evaluates the code against the threshold described above. If the condition has changed since the last check and crosses the threshold in either direction, Solace applies the corresponding appearance change to macOS. If the condition is the same as on the previous check, nothing changes and the next interval begins.

The decision logic lives entirely on the device. Solace does not send the condition code to a server for evaluation. It does not log which conditions triggered which switches. The entire processing chain - receive condition, evaluate against threshold, apply appearance - happens locally on your Mac.

Data flow summary

Your Mac sends your location to Apple's WeatherKit servers. Apple returns a condition code. Solace reads the condition code locally and decides whether to switch appearance. Nothing passes through Solace's infrastructure at any point.

Privacy considerations for weather-aware dark mode

The privacy story for WeatherKit-based weather-aware switching is meaningfully different from a weather API that routes through a third-party server.

When Solace requests current conditions from WeatherKit, the request goes from your Mac directly to Apple's weather infrastructure. Apple processes the location to retrieve relevant conditions and returns the response. Apple's WeatherKit privacy documentation states that requests are not associated with your Apple ID and that Apple does not build a profile from weather requests.

This is the same data flow as using Apple's own Weather app. If you check the weather in the native macOS Weather app, your location is sent to Apple's servers, conditions are returned, and Apple processes the request under the same terms. Weather-aware dark mode in Solace adds no additional data exposure beyond what you accept when you use any system weather feature.

Solace itself receives no location data, no condition data, and no usage data from the WeatherKit integration. The app processes everything locally. If you grant Solace location permission and it uses that to check weather, the permission enables communication between your device and Apple's servers only - Solace's servers are not part of that communication.

Location permission is required because WeatherKit needs a position to retrieve relevant conditions. This is equivalent to the permission any weather app requests. If you are already granting location access to a weather widget, a weather app, or Apple's own Weather app, the marginal privacy change of adding Solace's weather switching is zero.

Is WeatherKit accurate enough for appearance switching?

The accuracy question is worth addressing directly because some users wonder whether a weather API is precise enough to drive a UI decision.

For the purpose of distinguishing "the sky is delivering meaningful light" from "the sky is substantially obscured," WeatherKit's accuracy is more than sufficient. The threshold for appearance switching is not granular - it does not distinguish between 65% and 70% cloud cover. It distinguishes between conditions that are broadly clear and conditions that are broadly overcast. This is exactly the kind of classification that modern weather services handle reliably.

WeatherKit draws on data from national meteorological agencies, proprietary modelling, and the Dark Sky pipeline Apple inherited with the acquisition. The current-conditions endpoint is updated frequently - typically every few minutes for current conditions at a given location. By the time WeatherKit classifies conditions as overcast, the cloud cover causing the classification has been present for a meaningful period. The risk of false positives - brief cloud passing classified as overcast and triggering an unnecessary switch - is low at the threshold Solace uses.

Put simply: WeatherKit is at least as accurate as looking at the weather yourself before deciding whether to manually switch. The difference is that Solace automates the decision you would make by looking out the window.

What happens when there is no internet connection?

When your Mac has no internet access, WeatherKit cannot complete a request and Solace cannot receive updated conditions. In this case, Solace maintains the current appearance state - whatever the Mac was displaying when connectivity was last available. It does not reset to a default or switch randomly.

If you have a dark mode schedule configured alongside weather switching in Solace, the schedule continues to operate normally. Schedules are calculated locally using the system clock and require no network access. So if you are on an aircraft in airplane mode and your schedule says dark mode should be active, it will be - regardless of whether WeatherKit is reachable.

When connectivity resumes, Solace's next polling interval will request fresh conditions from WeatherKit and update the appearance if needed. There is no manual step required to re-enable weather switching after a period offline.

Solace - $4.99, yours forever

Automate your Mac's appearance with weather-aware switching, custom scheduling, and colour temperature control. One-time purchase, zero data collection.

One-time purchase. No subscription.