Pane types / weather
weather
Conditions where the user is, now and for the next few hours.
A weather forecast card with conditions, UV, wind, and hourly data.



Variants
Set data.variant to one of: hero, data-brick, hourly. Picking the wrong one is the most common way a card comes out looking foreign.
- Pick the variant by what you have:
"hero"for one big temperature,"data-brick"when UV/wind/rain are the story,"hourly"when the next few hours matter. - For the
"hourly"variant send 6–12 entries and mark the current one withisCurrent: true.
Fields in data
The envelope around data (publisher, label, expiresAt…) is the same on every type: see the envelope.
| Field | Type | Notes | |
|---|---|---|---|
variant | "hero" | "data-brick" | "hourly" | optional | Design variant to render. |
temp | number | required | |
tempUnit | string | optional | |
tempLabel | string | optional | |
condition | string | required | |
description | string | optional | |
rainChancePct | number | optional | |
uvIndex | number | optional | |
uvLabel | string | optional | |
wind | string | optional | |
hourly | array of objects | optional | 2–24 items |
hourly[].time | string | required | |
hourly[].temp | number | required | |
hourly[].icon | string | required | |
hourly[].isCurrent | boolean | optional |
Craft
- Pick the variant by what you have:
"hero"for one big temperature,"data-brick"when UV/wind/rain are the story,"hourly"when the next few hours matter. tempis a number andtempUnitis the symbol ("°C", "°F") — send both, or the card can't say which scale it means.conditionis two or three words ("Partly cloudy");descriptionis the one-line human read ("Cooler than yesterday, showers clearing by 4pm").- For the
"hourly"variant send 6–12 entries and mark the current one withisCurrent: true. uvLabeltranslates the number for people who don't read UV indices: 8 → "Very high".windis pre-formatted with direction and unit ("18 km/h SSE").- Weather expires faster than anything else here — set
expiresAta few hours out.
Avoid
- Don't send a 7-day forecast — this card is about now; a week of data doesn't fit any variant.
- Don't send
tempas a string ("26°C"); the number and the unit are separate fields. - Don't use the
hourlyvariant with two entries — it's built for a run of hours.
Examples
Complete payloads for POST /api/v1/feed/items or the MCP publish_pane tool.
The morning look-out-the-window card
{
"type": "weather",
"publisher": "Weather",
"publisherInit": "W",
"publisherColor": "#1A4FCC",
"label": "Sydney · now",
"data": {
"variant": "hero",
"temp": 26,
"tempUnit": "°C",
"tempLabel": "Feels like 28°",
"condition": "Partly cloudy",
"description": "Warm and humid, showers clearing by mid-afternoon.",
"rainChancePct": 30,
"uvIndex": 8,
"uvLabel": "Very high",
"wind": "18 km/h SSE"
}
}A heads-up where UV and wind are the actionable part
{
"type": "weather",
"publisher": "Weather",
"publisherInit": "W",
"publisherColor": "#F2C94C",
"label": "Before you head out",
"data": {
"variant": "data-brick",
"temp": 31,
"tempUnit": "°C",
"condition": "Sunny",
"description": "UV peaks between 11am and 2pm — hat weather.",
"rainChancePct": 5,
"uvIndex": 11,
"uvLabel": "Extreme",
"wind": "9 km/h NE"
}
}The next few hours, for someone deciding when to go
{
"type": "weather",
"publisher": "Weather",
"publisherInit": "W",
"publisherColor": "#5C544A",
"label": "Next 6 hours",
"data": {
"variant": "hourly",
"temp": 19,
"tempUnit": "°C",
"condition": "Showers easing",
"rainChancePct": 65,
"wind": "24 km/h SW",
"hourly": [
{
"time": "1pm",
"temp": 19,
"icon": "rain",
"isCurrent": true
},
{
"time": "2pm",
"temp": 19,
"icon": "rain"
},
{
"time": "3pm",
"temp": 20,
"icon": "showers"
},
{
"time": "4pm",
"temp": 21,
"icon": "partly-cloudy"
},
{
"time": "5pm",
"temp": 20,
"icon": "partly-cloudy"
},
{
"time": "6pm",
"temp": 18,
"icon": "clear"
}
]
}
}