CalFlow is a Google Calendar extension for Raycast with a fast Schedule view, a persistent menu-bar calendar, natural-language Quick Add, event editing, calendar routing, and account-aware setup.
Beta: CalFlow is under active testing and is not yet published in the Raycast Store.
Official website: DayCal is the new public website and product name. The repository and extension identifiers are unchanged. See website maintenance and domain setup.
Privacy & security: Privacy Policy · Security Policy
- Schedule — browse upcoming Google Calendar events without Apple Calendar.
- Menu Bar — keep current and upcoming events one click away.
- Quick Add — create Personal, Work, and Shared / Partner events with compact natural-language input.
- Event management — edit, move, copy, delete, join meetings, and open locations when permissions allow.
- True all-day events — create and edit Google all-day events without converting them into fake midnight events.
- Independent calendar sets — choose different calendars for Schedule and the Menu Bar.
- Guided setup — map Personal, Work, Shared / Partner, and Family roles after signing in.
- Multiple Google accounts — role mappings and calendar selections stay scoped to the connected account.
- Native Google sign-in — no downloaded client-secret file or Terminal OAuth helper is required.
- Smart Status — the menu-bar headline describes the events CalFlow is currently showing without claiming visibility into calendars you excluded.
CalFlow reads and writes Google Calendar directly. Apple Calendar is not used.
- macOS
- Raycast
- Node.js / npm
- a Google account with Google Calendar
git clone https://github.com/JonahTweed/CalFlow.git
cd CalFlow
npm install
npm run devRaycast will load the local extension.
Open Schedule or explicitly launch Calendar Menu Bar. On first use:
- sign in to Google through Raycast;
- CalFlow opens Set Up Calendars for the connected account if setup is incomplete;
- complete the three-step setup, including choosing independent calendar sets for Schedule and the Menu Bar.
Automatic/background Menu Bar launches stay quiet when setup is incomplete. The dropdown keeps a Set Up Calendars action so you can finish when ready; background refreshes do not open the setup wizard.
If Google sign-in is blocked during the beta, please report it through GitHub Issues. OAuth tester access may be limited while the public OAuth configuration is being finalised.
| Command | Purpose |
|---|---|
| Schedule | View and manage upcoming events |
| Calendar Menu Bar | Show current/upcoming events in the macOS menu bar |
| Enabled Calendars | Choose independent Schedule and Menu Bar calendar sets |
| Calendar Settings | Configure filtering, event count, date format, and row layout |
| Set up Calendars | Assign Personal, Work, Shared / Partner, and Family roles |
| Add Personal Event | Quick Add to the Personal role |
| Add Work Event | Quick Add to the Work role |
| Add Shared Event | Quick Add to the Shared / Partner role |
| Check Google Calendar Connection | Verify Google Calendar access |
| Disconnect Google Calendar | Sign out locally while preserving CalFlow settings |
Development builds also include non-destructive diagnostics and parsing/setup replay commands to help beta testing.
These are optional Raycast hotkeys:
| Command | Suggested hotkey |
|---|---|
| Schedule | ⌃⌥S |
| Add Personal Event | ⌃⌥P |
| Add Work Event | ⌃⌥W |
| Add Shared Event | ⌃⌥J |
Configure them in Raycast Settings → Extensions → CalFlow.
tomorrow 7pm
Friday 12pm
next Friday
15/09 7pm
45m @ Home
Friday 3d
Zoom
https://example.com/meeting
CalFlow supports UK (DD/MM/YYYY) and US (MM/DD/YYYY) date modes from Calendar Settings.
Open Event / Open in Google Calendar opens the exact event in your default browser for the connected Google account, including secondary accounts, from Schedule, Next Up, Edit Event, Event Actions, and the menu bar. Sign in to that account in your browser if prompted. If Google supplies no event link, the existing fallback opens the event day rather than a specific event.
Open Calendar in the menu bar also uses your default browser, opening the calendar view for the currently connected Google account. It resolves the account when clicked, even if no events are visible.
CalFlow deliberately treats owned events and invitations differently.
Owned events can expose actions such as Edit, Move, and Delete. Guest/invited events use safer actions such as Copy to Calendar and do not receive destructive owner-style actions where Google does not indicate ownership.
In the Menu Bar event submenu, ordinary writable one-off events keep Move to Calendar… where supported. Ordinary writable recurring events offer Copy to Calendar… in that slot instead. Existing Join Meeting and Open Location shortcuts take precedence when present. When Copy is promoted, it is omitted from that submenu’s More Actions… view; other entry points retain it. Read-only, guest, and special events expose only their supported actions.
See the full Privacy Policy and Security Policy.
CalFlow uses Raycast's native Google OAuth support and requests:
calendar.events— read and manage calendar events;calendar.calendarlist.readonly— read the user's calendar list, colours, and access roles.
OAuth tokens are managed by Raycast. The repository contains the OAuth client ID, which is public by design, but contains no client secret, refresh token, or access token.
CalFlow stores extension preferences and account-scoped calendar configuration locally through Raycast. The persistent Menu Bar also uses a local Raycast cache of upcoming event data so it can render quickly without contacting Google on every click. CalFlow does not operate a backend server that receives this calendar data.
CalFlow does not use calendar data for advertising, tracking, analytics, data brokerage, or training generalized AI/ML models.
- Raycast's native DatePicker free-text suggestion parser can reject or inconsistently interpret some abbreviated phrases. CalFlow validates Start/End relationships and preserves event duration when Start moves past End, but does not replace Raycast's DatePicker parser.
- Timed events and all-day events can both be edited in Raycast, but CalFlow intentionally does not convert timed events into all-day events or vice versa yet.
- Moving recurring events is not supported; use Copy to Calendar… where offered.
- The public Google OAuth configuration may still require additional verification before a completely open release.
- CalFlow is currently macOS-only.
The Raycast manifest name and some local-storage/cache namespaces still use the legacy calendar-shortcuts identifier. That is intentional for this beta so existing tested installations keep their local state while the public-facing product is branded CalFlow.
npm test
npx tsc --noEmitThe npm test suite covers parsing, calendar routing, refresh wiring, onboarding and setup persistence, Smart Status, menu-row compaction/truncation, and event-opening regressions. Onboarding coverage distinguishes explicit and background Menu Bar launches, completed setup, stale snapshots, and failed redirects. Menu submenu coverage checks Move/Copy placement, recurring and restricted events, existing meeting/location shortcuts, and duplicate Copy suppression. Event-opening coverage checks account-aware event and calendar-view URLs, default-browser routing, and account lookup failures.
These checks include source contracts and executed UI logic with mocked Raycast boundaries; they do not replace local Raycast runtime verification.
A Refresh Diagnostics — Development command also performs a non-destructive live check of the real Raycast menu-bar refresh pipeline.
Please use GitHub Issues.
Useful bug reports include:
- what you expected;
- what happened instead;
- which CalFlow command you were using;
- whether the event was timed or all-day;
- whether the calendar was owned, shared, or read-only;
- screenshots or a short screen recording where helpful.
Do not post OAuth tokens, client-secret files, private calendar links, or other credentials in an issue.
The project currently follows a deliberately conservative workflow:
- one logical change at a time;
- runtime-test the affected Raycast surface;
- run
npm test; - run
npx tsc --noEmit; - checkpoint known-good builds before the next change.
This is intentional: calendar data and long-running menu-bar workers deserve cautious changes.
MIT