Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Upcoming icon

Upcoming

A menu bar companion for Apple Calendar.
Your month and your agenda, one click (or one hotkey) away — styled to feel like Calendar, fed by the calendars you already have.


Upcoming lives in your menu bar and pops up a month grid with an agenda list underneath. It reads everything Calendar.app already syncs — iCloud, Microsoft 365 / Exchange, Google, subscriptions — through Apple's EventKit. That means no account setup, no OAuth, no third-party sync: if it shows in Calendar, it shows in Upcoming.

It's a companion, not a replacement. Creating and editing events stays in Calendar (click any event to jump straight to it); Upcoming is for the hundred times a day you just need to see what's coming.

What you get

  • Month grid with week numbers, per-calendar colour dots, and a red today marker — Calendar's visual language, including its exact pill colours (measured per pixel, light and dark mode).
  • Agenda list that starts at today and scrolls endlessly in both directions. The grid follows along as you scroll, paging into other months.
  • Hover previews: hover any event for an Apple-Calendar-style detail popover — attendees and their replies, notes, recurrence, and a map of the location with the local temperature. Hover a grid day to preview its agenda without leaving the grid.
  • Join calls fast: video-call links (Teams, Zoom, Meet, …) get a join icon that swells into a "Join · N min" button when the call is about to start. A global shortcut (default ⌘⇧J) and the icon's right-click menu join the ongoing or next call from anywhere, an optional notification before each call carries a Join button, and the popover copies the meeting link for sharing. Teams links open in the Teams app.
  • Search across years of events, past and future, with a TODAY divider keeping the results oriented.
  • Invitation status at a glance: unanswered invitations get Calendar's grey hatching, "maybe" replies the tinted variant, declined meetings are filtered out entirely.
  • Keyboard navigation: arrows step a day, ⌘-arrows a week, Escape closes. Global hotkey (default ⌘⇧C) from anywhere.
  • All-day pills that wrap instead of truncate, with optional combining of busy days ("Team · 4"), recurrence markers, and birthdays as a gift-icon row.
  • Per-calendar toggles, launch at login, light/dark with the system, auto-updates via Sparkle.

What it deliberately doesn't do

  • No event editor. Each day's + button starts a new event and hands you straight to Calendar to fill it in; editing existing events is one click away in Calendar too.
  • No own calendar accounts. macOS Internet Accounts does the syncing; Upcoming never talks to a calendar provider and never sees your credentials.
  • No analytics. Network use is limited to Apple's map/weather services for the hover popover and the GitHub update check.

Install

Grab the notarized build from Releases, unzip, drop Upcoming.app in Applications, and grant Calendar access on first launch.

Requires macOS 14 or later.

Build from source

./build.sh

Builds, tests, signs, and installs to ~/Applications/Upcoming.app. Requires the Xcode Command Line Tools (no Xcode needed).

Status

Young but used daily by its author, and it keeps itself up to date via Sparkle. The visual polish runs deep (Calendar's pill colours are matched to the pixel); the feature set is intentionally small. See docs/spec.md for decisions and CLAUDE.md for the roadmap.

License

MIT

About

A menu bar companion for Apple Calendar — month grid + agenda, fed by EventKit

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages