Open-source macOS desktop widget that lists upcoming rows from a Notion database. Supported columns are Name (title), optional Date (date), and optional Status (select). The widget refreshes from Notion every 30 minutes.
This project is distributed as source only. There is no prebuilt .app.
The widget is configured before build time through a bundled JSON file, so it does not depend on App Groups or runtime settings sharing between the app and widget.
The Xcode project is already configured to use local ad hoc signing, shown by Xcode as Sign to Run Locally. You do not need to add an Apple Developer team for the default local build flow.
git clone https://github.com/kingtochan/NotionistWidget
cd NotionistWidget- macOS 13 or later
- Xcode 15 or later
- Create an integration and copy its secret token.
- Open your Notion database, click … → Connections, and share it with your integration.
- Find the database ID in the URL. It is the string between the last
/and the?.
Open Config/widget-config.json and fill in your values before building:
{
"notion": {
"token": "YOUR_NOTION_TOKEN_HERE",
"databaseId": "YOUR_DATABASE_ID_HERE",
"apiVersion": "2022-06-28"
},
"widget": {
"title": "Notionist Widget",
"backgroundColor": "darkGray",
"textColor": "white",
"maxItemsMedium": 4,
"maxItemsLarge": 8,
"listStyle": "bullet"
}
}- Open
NotionistWidget.xcodeprojin Xcode. - Leave the signing settings as they are. The project is already set up for local Sign to Run Locally signing.
- Select the NotionistWidgetApp scheme and My Mac as the destination.
- Product → Build once from Xcode.
- In Xcode, choose Product → Show Build Folder in Finder.
- Move
NotionistWidgetApp.appto/Applications. - Launch the app once from
/Applications. - Right-click your desktop → Edit Widgets → search Notionist → add the widget.
If you change widget-config.json, rebuild the app so the updated config is bundled into the widget.
xcodebuild \
-project NotionistWidget.xcodeproj \
-scheme NotionistWidgetApp \
-configuration Release \
-destination 'platform=macOS' \
CODE_SIGNING_ALLOWED=NO \
buildThis command is mainly useful to verify that the project compiles. For actual widget installation and discovery in Edit Widgets, use the Xcode-built app from the steps above.
NotionistWidgetAppis a lightweight container app for the widget.WidgetExtensionreads settings from the bundledConfig/widget-config.jsonfile.- To change credentials or display options, edit the JSON file and rebuild.
| Key | Description |
|---|---|
notion.token |
Your Notion integration secret, usually starting with ntn_ |
notion.databaseId |
Database ID from the Notion URL |
notion.apiVersion |
Notion API version header, for example 2022-06-28 |
widget.title |
Any text shown as the widget header |
widget.backgroundColor |
A supported color name or a hex code |
widget.textColor |
A supported color name or a hex code |
widget.maxItemsMedium |
Whole number of rows to show on a medium widget |
widget.maxItemsLarge |
Whole number of rows to show on a large widget |
widget.listStyle |
bullet or numbered |
- Use your Notion integration secret.
- Example:
ntn_xxxxxxxxxxxx
- Use the database ID from your Notion database URL.
- Example format:
0123456789abcdef0123456789abcdef
- Use a Notion API version string.
- Default in this project:
2022-06-28
- Any plain text is allowed.
- Example:
My Tasks,Project Timeline,Sprint Board
- Use one of the supported names:
black,white,red,green,blue,orange,yellow,pink,purple,cyan,mint,teal,indigo,brown,gray,darkGray,lightGray - Or use a hex color like
#1C1C1Eor#FFFFFF
- Use the same options as
widget.backgroundColor - Examples:
white,black,#F5F5F5
- Use any whole number greater than or equal to
1 - Recommended range:
1to10
- Use any whole number greater than or equal to
1 - Recommended range:
1to20
- Allowed values:
bulletnumbered
Use either a color name or a hex code like #RRGGBB.
Supported names:
black · white · red · green · blue · orange · yellow · pink · purple · cyan · mint · teal · indigo · brown · gray · darkGray · lightGray
- If the widget shows an error, double-check
widget-config.jsonand confirm the Notion integration can access the target database. - This setup avoids App Groups, which makes the project easier to build without paid Apple Developer capabilities.
- The project is intended to build locally without an Apple Developer team. The default signing identity is local ad hoc signing.
- If the widget does not appear in Edit Widgets, rebuild from Xcode, launch the app once from
/Applications, and make sure the app bundle containsContents/PlugIns/NotionistWidgetExtension.appex. - If you use a custom Derived Data location, avoid building into a synced or metadata-heavy folder. A clean local build location works best for signing.
This project is intended to be a small, modular tool for the Notion community. Feedback is welcome. To suggest changes, please submit a push request.