Skip to content

Calendar

Calendar is Herald’s schedule workspace. It uses the same terminal-native chrome as Timeline: top tabs, a left rail, a dense main view, a right inspector or command panel, bottom status, and context-sensitive hints.

Press 3 or click the 3 Calendar tab to open Calendar when a calendar source is configured or when Herald is running in demo mode. Calendar can show a week time-grid, a focused day agenda, a 3-day command view, agenda/search lists, and event detail. The left rail groups enabled calendars by source, uses colored swatches for each calendar, and lets you filter visible events without exposing provider IDs.

Calendar week time-grid with source rail and inspector

AreaWhat it shows
Calendar railMini month, source groups, colored calendar swatches, enabled/disabled state, visible counts, and filter scope.
Week Time-GridSeven days of timed events with half-hour guide rows, selected event focus, RSVP markers, and source colors.
Day AgendaOne selected day with full-width timed event rows and a persistent detail drawer.
3-Day CommandToday, tomorrow, and the next day with a command panel for selected event, next-up, open slots, and conflicts.
Agenda/Search listCompact cached event rows with source labels, RSVP markers, and a detail panel.
Event detailTime, local/event timezone, location, attendees, RSVP state, recurrence, attachments, notes, and available actions.

Week view is the spatial planning view. Use it to spot dense days, open blocks, conflicts, and events requiring a response.

Calendar week time-grid with source rail and inspector

Day view narrows the schedule to one day while keeping the selected event drawer visible.

Calendar day agenda with detail drawer

The 3-day command view bridges today, tomorrow, and the following day. Its side panel summarizes next-up context, open slots, and conflicts for the current enabled calendar scope.

Calendar 3-day command view with open slots

Calendar search is cache-backed and searches event titles, notes, locations, organizers, attendees, recurrence, attachments, and source labels while keeping provider internals hidden.

Calendar search results with selected event detail

KeyContextPreconditionsResult
3Main UICalendar is available.Opens Calendar.
tab / shift+tabCalendarMultiple panels are visible.Cycles focus between rail, main view, and detail/command panel.
j / downCalendar main panelEvents are visible.Moves to the next visible event, crossing day boundaries where useful.
k / upCalendar main panelEvents are visible.Moves to the previous visible event.
left / rightCalendar main panelA date-ranged view is active.Moves to the previous or next day, week, or 3-day range. h/l remain aliases.
wCalendarAny calendar view.Switches to Week Time-Grid.
dCalendarAny calendar view.Switches to Day Agenda.
tCalendarAny calendar view.Switches to 3-Day Command.
aCalendarAny calendar view.Switches to Agenda List.
/CalendarCalendar search is closed.Opens Calendar Search.
xCalendarCross-source search is available.Opens blended mail-and-calendar search.
enterCalendar eventAn event is selected.Opens full event detail.
ctrl+n / nCalendar default profileA writable calendar source exists.Opens Event Create, using the selected writable calendar or a safe writable fallback.
nCalendar Emacs profileA writable calendar source exists.Opens Event Create; ctrl+n keeps its Emacs movement meaning.
eCalendar eventThe selected source supports editing.Opens Event Edit.
delete / DCalendar eventThe selected source supports deletion.Opens Event Delete confirmation.
y / m / nRSVP action pickerSelected event supports RSVP.Accepts, tentatively accepts, or declines.
spaceCalendar railRail has focus.Shows or hides the highlighted calendar.
pAgendaHidden past events exist.Shows or hides past agenda rows.
escCalendar detail, search, or editA transient state is active.Returns to the prior Calendar view without losing range and selection.
mCalendarMouse capture is active.Releases or restores Herald mouse capture so terminal-native text selection can be used.

Calendar is designed to be usable with keyboard or mouse. Click the Calendar tab, click mini-month days to move the active range, click events to select them, double-click a selected event to open detail, click calendar checkboxes/swatches in the rail to show or hide calendars, and scroll list-style calendar surfaces with the mouse wheel.

  1. Press 3.
  2. Press w for Week Time-Grid.
  3. Use left/right arrows to move week ranges; h/l still work.
  4. Use j/k to move through events.
  5. Read the inspector for timezone, RSVP, location, and notes context.
  1. Press d.
  2. Use left/right arrows to move between days; h/l still work.
  3. Move through the day’s rows with j/k.
  4. Press enter when the drawer is not enough and you need full event detail.
  1. Press t.
  2. Review the command panel’s selected-event, next-up, open-slot, and conflict sections.
  3. Use left/right arrows to slide the 3-day window; h/l still work.
  4. Press w, d, or a to jump into another Calendar view with the same event context.
  1. Press /.
  2. Type a query such as design.
  3. Press enter.
  4. Move through results with j/k.
  5. Read the detail panel, or press enter for the full event reader.
  1. In the default profile, press ctrl+n or n to create a new event. In the Emacs profile, press n because ctrl+n remains movement. Select an event and press e to edit.
  2. Move through fields with tab and edit title, time, timezone, attendees, reminders, recurrence, and notes.
  3. Use picker fields for dates, timezones, attendees, recurrence, and reminders when they open.
  4. Save the form to write through the provider first; failed provider writes keep the unsaved edit visible.
  1. Open Timeline and preview an email with text/calendar or .ics invitation data.
  2. Press i.
  3. Choose a writable calendar when Herald shows the picker.
  4. Press enter to create or update the event, s to skip a duplicate, or esc to cancel.
StateWhat happens
Calendar unavailableMail-only sessions do not advertise the Calendar tab. Add a calendar source from Settings or use demo mode to explore it.
LoadingCalendar shows cached data when available while the provider refresh continues.
Rail filteringDisabled calendars immediately disappear from the visible event set while date range and selection are preserved when possible.
Read-only sourceEvents remain readable, but mutation and RSVP actions are hidden or disabled with a clear reason.
Provider-backed editEvent edits write through Google Calendar or CalDAV first, then update the cache only after provider success.
Provider-backed create/deleteEvent create and delete write through Google Calendar or CalDAV before adding or removing cached rows.
Conflict or unsupported recurrenceHerald keeps the edit/error visible and does not rewrite cached event rows on failed provider writes.
Narrow terminalCalendar collapses to a compact layout or the global minimum-size guard instead of clipping columns.

Calendar reads cached event metadata, notes, attendees, reminders, recurrence, attachments, and source labels from configured calendar sources. Provider IDs, CalDAV URLs, Google event IDs, sync tokens, and internal scoped refs stay out of the TUI. Event edits, RSVP changes, and invitation imports can write to the selected provider-backed calendar source.

If Calendar is missing, open Settings > Accounts and choose Add calendar only, or run ./bin/herald --demo to see the deterministic demo calendar.

If a view looks empty, check the mini month, range header, enabled calendars in the rail, and whether Agenda has hidden past rows. Search still looks across cached events even when the current date range has no visible rows.