All widgets
Next Meeting
Comes with Chopstick
Your next meeting from your calendars, with a button to join its video call. Shows up 10 minutes before it starts and in its first minutes.
Already installed? It's in your widget library.


Type it in the notch's search
- Show next meeting
- Join my meeting
What it runs
A widget is a folder of plain files. Here is all of its code.
widget.json
{
"id": "next-meeting",
"name": "Next Meeting",
"icon": "icon.png",
"description": "Your next meeting from your calendars, with a button to join its video call. Shows up 10 minutes before it starts and in its first minutes.",
"show_when": { "meeting.soon": true },
"watch": [ { "calendar": "next", "as": "meeting" } ],
"initial": "glance",
"anytime": true,
"states": {
"glance": {
"compact": {
"leading": { "symbol": "calendar", "tint": "{{meeting.color | white}}" },
"trailing": { "text": "{{meeting.starts_in | No meetings}}" }
},
"expanded": {
"size": "compact",
"header": { "symbol": "calendar", "tint": "{{meeting.color | white}}", "title": "{{meeting.starts_in | Calendar}}" },
"blocks": [
{ "text": "{{meeting.title | Nothing coming up today}}", "style": "title", "lines": 2 },
{ "note": "{{meeting.at}} – {{meeting.ends}}" },
{ "note": "{{meeting.location | }}" },
{ "note": "{{meeting.note | }}" },
{ "row": [
{ "button": { "symbol": "video.fill", "label": "Join", "style": "filled", "do": [ { "open_url": "{{meeting.join}}" } ] } },
"spacer"
] }
]
}
}
},
"commands": {
"show": { "description": "Show the next meeting.", "phrase": "Show next meeting", "preview": { "state": "glance" }, "do": [ { "go": "glance" } ] },
"join": { "description": "Open the next meeting's video call link.", "phrase": "Join my meeting", "do": [ { "open_url": "{{meeting.join}}" } ] }
},
"preview": {
"states": ["glance"],
"data": { "meeting": { "title": "Design review", "starts_in": "in 5 min", "minutes": 5, "at": "14:30", "ends": "15:00",
"soon": true, "join": "https://meet.google.com/abc-defg-hij", "color": "#3B82F6" } }
}
}