Skip to content
OmaCal

Open source · Linux and macOS

OmaCal

The calendar that closes your last browser tab.

OmaCal is a native desktop calendar for Google Calendar, iCloud and any CalDAV server. It was born on Omarchy Linux, for people who wanted an app instead of a tab and were juggling more accounts than one. It now runs on any Linux and on macOS, so it goes wherever you do.

curl -fsSL https://omacal.app/install.sh | sh

Linux x86_64 and macOS on Apple Silicon, one line for both. The installer verifies checksums and signatures; from then on the app updates itself with one click on its own notice. Prefer a package or a download? See every option.

hlstep back and forwardttodaynnew event/search
OmaCal's Week view: a dark, minimalist grid of one work week with colour-coded events from several calendars

Runs where you work

Made for the Omarchy community. Built so nobody has to leave theirs.

Omarchy is an opinionated Arch and Hyprland setup with a fast-growing community, and most of it arrived from somewhere else: another distro, a Mac, a pinned Google Calendar tab. OmaCal is one build for all of those, so the calendar is the same wherever you sit down.

Born on Omarchy

On a desktop where every tool is fast, themed and native, the calendar was the holdout.

New to Omarchy? It is the Arch and Hyprland Linux setup by DHH and 37signals. Get it at omarchy.org. OmaCal was built to close the one tab it left open.

Themed by your desktop

Colour comes from your Omarchy theme and follows omarchy-theme-set live: change theme, and OmaCal repaints with the rest of your desktop. No restart.

Native, not a browser tab

Built with Tauri, Rust and Svelte. It starts fast, sips memory, and behaves like a desktop program, because it is one.

A proper desktop citizen

Tray icon, start on login, reminders as real notifications. Closing the window hides it instead of quitting: a closed window that stopped firing reminders would be a bug.

What it does

A full client, not a viewer.

Everything you do in the web calendar, at desktop speed, across every account you have.

Five views, one keystroke apart

Day, Week, Month, Year, and Big Year, a 14-row ribbon of the whole year for scanning twelve months at once. Keys 1 to 5 switch between them instantly.

List mode

Draw Day, Week and Month as a list of days instead of a grid. Days with nothing on them are left out: a quiet month is four rows, not thirty-one headers.

Every account you have

Connect several Google accounts, plus iCloud and any CalDAV server, with per-calendar control over what is displayed and what is fetched: two separate switches, deliberately.

iCloud without the drama

Sign in with an app-specific password from your Apple ID page: a scoped credential you can revoke any time, stored only in your keyring. Full editing, guarded so a change made on your phone is never silently overwritten.

Task lists

CalDAV task lists sync alongside your calendars: complete, add and delete from the app, and anything overdue or due soon shows up in the Omarchy bar widget.

Full create, edit, delete

Real writes against your real calendar, including recurring events at three scopes: this occurrence, this and following, or all events.

Guests, emailed only on purpose

Add guests, mark them optional, RSVP from the event popover. Saving asks who to notify, so fixing a typo in an address no longer emails the whole room.

Invitations that cannot slip past

A new invitation notifies you and stays on screen until you deal with it: one click accepts. The header tray backs it up with Yes, Maybe and No on anything unanswered, plus who declined your meetings and what was rescheduled or cancelled.

Drag like you mean it

Drag an event to move it, resize it by an edge, or sweep empty grid to start a new one pre-filled with the span. Pinch or Ctrl-scroll to zoom the hours. A drag never emails anybody by itself.

Search that lands near today

Press / and type. Results appear as you type, nearest to today first in either direction, and a recurring event is one result, not one per occurrence.

Reminders that match your phone

Notifications come from each event's own reminders, falling back to the calendar's defaults, so what fires on your desktop matches what your phone does.

Sync you never think about

Every five minutes, on window focus, and after every write. Its state is a small dot in the header, quiet when everything is current.

Views

This month, or the whole year.

Month keeps the near term readable. Big Year, a view most calendars do not have, lays the entire year out as a 14-row ribbon, where long trips and multi-week plans become visible shapes instead of tooltip surprises.

OmaCal's Month view: a dark month grid with per-day event lists and multi-day spans drawn as bars across the weeks
Month: the near term at a glance. Key 3
OmaCal's Big Year view: the whole year as a continuous 14-row ribbon with multi-week events drawn as long bars
Big Year: the year as one ribbon. Key 5

Keyboard

Hands on the home row.

The whole app is reachable without a mouse, on any keyboard layout. These are the real bindings, not a marketing metaphor.

Switch view: Day, Week, Month, Year, Big Year15
Step back and forward in timehl
Jump back to todayt
Create a new eventn
Search your calendars/
Flip between grid and listf
Close whatever is openEsc

The CLI · Agent ready

Your terminal is a client too.

The same binary answers from a shell: your agenda, offline, across every connected account. It writes as well, with every write carried out by the running app through the same guards its own form has.

 omacal agenda --days 1
Fri, Sep 5
  09:00–09:30  Daily standup  · Zoom
  11:00–12:30  Deep work

 omacal events create --title "Coffee with Ana" \
      --date 2026-09-05 --start 15:00 --end 15:45
Created: Coffee with Ana

 omacal events respond 41 yes
Answered: Design review

Wire your agent in one command

The binary carries its own agent skill. One command installs it and links it for Claude Code, and every OmaCal update refreshes it, so your agent never reads instructions for a binary that no longer matches. Any other framework: omacal skill prints the same document.

omacal skill install

Safe to point an agent at

Reads come straight from the local database: offline, instant, read-only. Writes travel a local socket into the running app, so an agent inherits the conflict guard, the recurrence scopes, and one refusal the form never needed: an event with guests requires --notify all|none said out loud. Whether people get emailed is your call, never a default's, and never an agent's.

Built for scripts, honest with agents

Everything speaks --json with a stable envelope and stable exit codes, and never prompts. With no app running, a write refuses rather than launching one.

Your data

Your calendar stays on your machine.

OmaCal talks directly to Google, iCloud or your CalDAV server on your behalf and keeps what it fetches in a local database on your device. Your sign-in credentials live in your operating system's keychain. There are no Extreme Labs servers behind it, no accounts with us, no analytics, and no telemetry. We never see your calendar.

OmaCal's use of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements. The full privacy policy says exactly what is accessed and where it goes.

Open source

Read it, build it, fix it, fork it.

Rust, Svelte and Tauri, with a test suite that runs the interface in two browser engines on every push. Bug reports get answered, and most days they get fixed.