Skip to content

v1.5.0 — Google Docs sync

Choose a tag to compare

@ptheofan ptheofan released this 20 Aug 17:13
· 24 commits to main since this release

Google Docs sync, in both directions, with your comments left where you put them.

Sync, either way (#41, #44, #47)

  • Pull as well as push. A button for each direction, so the app never picks one for you. Both answer even when there is nothing to carry — "nothing to push" is a result, not silence.
  • Review before it applies. A three-pane screen lists every changed block — your file, the Doc, and the result — and lets you settle them one at a time. It only appears when something of yours is at stake.
  • One panel for the linked document. Pull, push and "choose the document" as a single control, with one spinner for the whole thing. The target can be changed at any time, not just before the first link.
  • Comments survive. Paragraphs are matched and edited in place, character by character where they changed. Tables pair by their header row, diagrams by their mermaid.live link, and rows by their cell content — so deleting one table no longer drags every comment below it onto the wrong text.

Linking (#39)

Linking goes through Google's own file picker. Picking a document is what grants access to it, so the app asks only for per-file drive.file access instead of the sensitive "see, edit, create and delete all your Google Docs documents" scope.

Fixes from testing (#51 – #63)

Everything below was found by driving a real 90,000-character document:

  • Sign-in works in the App Store build. The sandbox was refusing to open the loopback port Google's desktop flow redirects to — the app carried network.client but not network.server.
  • A wholesale rewrite no longer shreds the document. Google applies a batch in order, each request seeing what the last one left. The batch was reversed rather than ordered back-to-front, so an insert ran ahead of the deletes it shared a position with and every later delete landed thousands of characters off.
  • A wrapped line no longer costs a document its formatting. A soft break became a real newline, which Docs reads as the end of a paragraph. One paragraph became two, nothing after it matched, and an entire document came out rendered as headings.
  • Text stops inheriting the style above it, and blank lines no longer pile up in front of tables — including the one the old code tried and silently failed to remove on every sync.
  • Deletes that spanned a table, a table written under a list item arriving as literal pipes, diagrams exported in dark mode, progress stalling at 70%, and linking a document starting a sync you did not ask for.

Preferences (#49)

Experimental Features sits at the bottom where it belongs, Reset to Defaults is pinned to the panel instead of floating up the list, and sections that exist only because an experimental feature is on are marked exp.


Google Docs sync is experimental and off by default — Preferences → Experimental Features. Keep a copy of anything you care about before pointing it at a document.

Verified on this tag: 1046 unit tests, 27 e2e, lint and typecheck clean.