Skip to content

v0.0.15

Choose a tag to compare

@github-actions github-actions released this 27 Oct 06:56
62120f0

Key takeaways

  • [Feature] Search inside attachments: On the Messages page, free-text search now also finds words inside PDF, Word, Excel, PowerPoint and text attachments, and shows a hit as "In budget.csv" under the subject.
  • [Fix] Imported messages starting with 0 now appear in search: On the Messages page, imported (mbox) messages whose ID begins with 0, about 1 in 16, now show up when you search their subject, sender, labels or body.
  • [Security] Removed people are signed out of Cloudflare Access at once: In Admin ▸ People, when you remove someone, their Cloudflare session now ends immediately, so their next request goes back to sign-in, where they are no longer allowed.
  • [Fix] Sizes, times and counts read the same everywhere: On the Overview page, the Senders page and the status bar, sizes use one decimal format, times follow your time zone preference, and the Senders tile shows the real count instead of stopping at 1,000.
  • [Fix] [Performance] Messages with many attachments open reliably: When you open a message in the mailbox, a message with dozens of attachments now loads its attachment previews without errors.

App

  • Sizes, times and counts now use one format on every page, so the same bytes no longer read 12.2 GB on one page and 13.07 GB on another.
  • Sizes use decimal units (MB, KB), as storage is billed and macOS shows them.
  • Times follow the time zone preference instead of the device's zone or a fixed Pacific time.
  • The Senders tile counts all senders and domains instead of the length of a list capped at 1,000.
  • Overview tiles show a dash until they have loaded, never a false 0.
  • The status bar now says "Mail · Up to date", or "Copying 42%" while copying. It no longer says "Copying · Live" beside a page saying "Not copying".
  • The app's JavaScript download shrank from 776 KB to 418 KB gzipped. The edit dialog, charts, What's new and markdown now load only when opened.
  • Account pages make one trip to the database instead of three, which cuts typical load times. A just-added account is found at once.

Gmail

  • Archive views no longer read the Gmail sign-in first. Only Gmail's own pages (labels, filters, subscriptions) do.
  • Gmail message IDs were never affected by the search ID bug.

Search

  • Free text now matches the envelope, the body or attachment text. This applies on the Messages page, the old archive view, the message count and MCP search_messages.
  • Attachment search covers PDF, Word, Excel, PowerPoint, OpenDocument and txt/csv/md/html files. Images and calendar files are skipped.
  • Files over 10 MB are skipped. At most 6 files per message and 32 KB of text per file are indexed.
  • The attachment text is an index only. The files stay in your raw files.
  • Search no longer misses imported messages whose ID starts with 0. The index itself was always correct, so no data change or migration is needed.

Sync

  • Each sync and each finished mbox import now starts an attachment pass for new mail. It stays within Free-tier CPU, request and daily write limits, then continues.
  • Searching attachments in older mail is a one-time pass that does not start on its own. It waits for the owner's go-ahead.
  • Opening a message and previewing its attachments now happens in the mailbox, which keeps the last parsed message. A burst of previews for one message parses it once instead of re-reading it each time.
  • Workflow telemetry no longer breaks sync runs. Imports run to completion.

Storage

  • Sender, domain and label totals now move by each message's share whenever mail is added or removed, through sync, copy, import, spam removal or month un-indexing.
  • The index no longer recounts every message after each month. It recounts once per mailbox when the rollup version changes, then never again.
  • This stops the heavy row reads that used up much of the Free tier's 5M/day (one hour read 1.16M rows).
  • The mailbox keeps the senders and domains count until the message count changes.

Infra

  • Every request, Durable Object call and sync step now writes one data point to Analytics Engine, covering time taken, rows read and written, file operations and Gmail calls. The point is to show which call costs what.
  • Removing someone in Admin ▸ People now also revokes their Cloudflare Access session. If a revoke fails, the sync status names who could not be signed out.
  • CF_ACCESS_TOKEN now also needs the Access: Organizations, Identity Providers, and Groups Edit permission.
  • Attachment text extraction uses a new Workers AI binding, which needs no secret.
  • Lumen packages moved from 0.1.87 to 0.1.89, pinned together.

Pull requests (10)

  • #154 fix: one way to write sizes and times; counts never capped or zero while loading (@bchoor)
  • #153 perf: an account's page takes one trip to the database, not three (@bchoor)
  • #152 fix: open messages and their attachments in the mailbox, parsed once (@bchoor)
  • #151 perf: sender, domain and label totals move by shares; no recount after each sync (@bchoor)
  • #150 fix: telemetry calls Workflow steps as methods (sync would fail) (@bchoor)
  • #147 feat: search inside attachments (PDF, Word, Excel, PowerPoint, text) (@bchoor)
  • #149 perf: Lumen 0.1.89, app JS 776 → 418 KB gz (@bchoor)
  • #148 fix: search finds imported messages whose ID starts with 0 (@bchoor)
  • #145 infra: per-call telemetry in Analytics Engine (@bchoor)
  • #146 feat: sign people out of Cloudflare Access when they are removed (@bchoor)

Full changelog: v0.0.14...v0.0.15