Skip to content

Releases: mcuste/obsidian-gcal-sync

0.5.0

Choose a tag to compare

@github-actions github-actions released this 21 Aug 13:25

Added

  • Clicking the icon on a declaration opens a panel to pick its date, time, length, and repeat, rather
    than typing the directive. It works on a chip in Live Preview and Reading view, on a gcal chip in
    the properties widget, and on the marker beside a declaration shown as written, which is how a
    declaration with a typo is fixed. The panel shows what it will write, in words and as text, before
    you apply it.

    Applying rewrites that one declaration and nothing else in the note. In Live Preview it goes through
    the editor, so one undo takes it back. It leaves alone what it cannot own: a start that is not
    written stays unwritten, a repeat that belongs to a whole line or note stays where it is, a UTC
    offset is kept, and a rule it cannot phrase stays a text field. A code span holding two events, two
    repeats, or an unknown directive gets no panel at all.

    This is the only thing in the plugin that writes to a note. Sync itself still never does. The new
    Pick dates from a declaration setting, on by default, removes the panel when turned off.

Fixed

  • Changing a declaration from an all-day event to a timed one, or back, no longer breaks the sync.
    Google merges an update into the event it already holds, so the old date stayed next to the new
    dateTime and every sync from then on failed with "Invalid start time". Nothing synced at all
    while that lasted, which left any extra copy of an event on the calendar and every declaration
    showing the grey "not synced yet" marker.

0.4.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 15:08

Added

  • A declaration you are not editing now becomes a chip with the date, the time, and the repeat in
    words, led by the sync icon, instead of the text with an icon after it. Click a chip to get the
    text back and edit it. The text still shows while the cursor is inside it, and when the
    declaration could not be read.
  • The gcal note property gets the same chips: over the YAML with Properties in document on
    Source, and over Obsidian's gcal field on Visible, when it holds one value or a list of maps.
  • Render declarations, a new setting, on by default. Turn it off to always see the text.

0.3.4

Choose a tag to compare

@github-actions github-actions released this 20 Aug 14:14

Fixed

  • A note whose only declaration is a repeat on its own, such as `gcal-repeat:daily`, now
    syncs. The note was skipped before it was ever parsed, because the check for whether a note is
    worth parsing looked for gcal: only.
  • Reading view now marks a declaration written as a repeat on its own, such as
    `gcal-repeat:daily`, and no longer drops the markers on every declaration in a section after
    the first one.

0.3.3

Choose a tag to compare

@github-actions github-actions released this 20 Aug 13:58

Fixed

  • Two devices syncing the same vault no longer duplicate events. Each declaration now reserves the
    Google event ID it is created under, so a second device asking for that ID at the same moment
    writes the existing event instead of adding a copy.
  • The vault ID is now always the hash of the vault name, rather than a stored one taking precedence,
    so two devices holding the same vault agree on it and stop duplicating each other's events. Events
    stamped with a random ID kept by an earlier release are no longer recognized, and have to be
    deleted in Google Calendar.
  • Extra copies of an event are removed without waiting for approval and without being held back
    while a note cannot be read, since one copy always survives. The copy Google created first is the
    one kept, and the sync notice counts the copies removed.

0.3.2

Choose a tag to compare

@github-actions github-actions released this 20 Aug 11:18

Changed

  • The README leads with how sync works and the event syntax, with labeled diagrams for a
    declaration and the sync flow, and no longer carries an install section.
  • The docs are shorter and use plainer wording. Settings and troubleshooting are now reference
    tables. No behavior changed.

0.3.1

Choose a tag to compare

@github-actions github-actions released this 20 Aug 10:08

Fixed

  • A vault opened without the plugin's data.json, such as on a second machine, now takes its vault
    ID from the vault name instead of a random one, so it finds its events instead of duplicating
    them. A stored vault ID is left alone.

0.3.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 09:22

Added

  • Standalone inline recurrence declarations, such as `gcal-repeat:daily`, create an all-day
    event beginning today. everyday is accepted as an alias for daily.

0.2.0

Choose a tag to compare

@github-actions github-actions released this 20 Aug 08:31

Changed

  • The settings tab is built with Obsidian's declarative settings API, so its settings are found by
    Obsidian's settings search. The event syntax and trust model text is split into named rows.
  • An unrecognized event time zone, or an interval or change limit below 1, is rejected with a
    message under the setting instead of being ignored.
  • minAppVersion is now 1.13.0, the first Obsidian version with the declarative settings API.
  • OAuth authorization deadlines use the active window's timers, so sign-in also works from a
    popout window.
  • Status markers and destructive actions use Obsidian's current UI helpers and button styling.

0.1.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 20:30

Added

  • One-way sync from vault notes to Google Calendar. Notes are the source of truth, each sync makes
    the calendar match them, nothing is written back into a note, and only events the plugin created
    for this vault are ever touched.
  • Inline declarations in backticks, `gcal:2026-08-18T14:00/PT1H`, titled by the text in front
    of them. Only a code span holding nothing but directives counts, so a note can describe the
    syntax without declaring events.
  • Note-property declarations, as a single value or a list of when, title, and repeat maps,
    with a note-level gcal-repeat that every entry inherits.
  • Starts as a date for an all-day event, a local timestamp read in the event time zone, a bare time
    meaning today, or an exact instant carrying Z or a UTC offset. A bare time is pinned to the
    date its event already has on Google, so it does not walk forward day after day.
  • Recurrence by name (daily, weekdays, quarterly), weekday lists and ranges,
    every-N-day/week/month/year intervals, or a raw RRULE.
  • Status markers on each declaration in Live Preview and Reading view: synced, pending, blocked by
    a sibling, and error with the reason on hover.
  • Event identity from a declaration's position, hashed with the vault ID before upload so note and
    folder names stay on the device. A declaration that only moved is rekeyed in place rather than
    deleted and recreated, so guest replies and reminders survive.
  • Guard rails against a note changing the calendar unintentionally: approval for large or
    destructive plans, a per-sync change limit, deletions held back while any note is unreadable, and
    a synced-folder allowlist.
  • Google sign-in with the authorization code flow and PKCE over a loopback callback, storing the
    client credentials and refresh token in Obsidian's secret storage. Calendar selection and
    creation from the settings tab, and a disconnect action that revokes the refresh token with
    Google.
  • Setup, event syntax, settings, sync, security, troubleshooting, and development documentation
    under docs/.

First public release. The plugin ships no Google credentials, so each user supplies their own
Google Cloud OAuth client.