Skip to content

Stashium v0.8.0

Choose a tag to compare

@Mombuyish Mombuyish released this 22 May 08:22

Stashium v0.8.0 — macOS universal build (Apple Silicon + Intel).

  • Signed with Apple Developer ID
  • Notarized by Apple
  • Requires macOS 11 (Big Sur) or later

What's new

0.8.0 ships the headline feature: cloud sync via any folder you already trust — iCloud Drive, Google Drive, Dropbox, OneDrive, Syncthing. No new account, no Stashium-hosted server, no Apple App Store entitlement. The OS-level sync engine you already use does the upload; Stashium just reads and writes a folder.

Cloud sync — your stash, on every Mac

Settings → Sync turns it on. Pick a folder, point your other Macs at the same folder, and clips, folders, file blobs, and og:image previews flow between them.

  • Multi-cloud by design — works with iCloud Drive, Google Drive, Dropbox, OneDrive, Syncthing, any provider that mounts as a folder on disk
  • Snapshot + per-row LWW merge — two Macs with different clip histories actually converge (not just "last writer wipes everyone"); per-row last-write-wins on updated_at
  • Stable cross-device identity — every clip and folder gets a 128-bit sync_id that never reuses, so AUTOINCREMENT id collisions across devices stop being a problem
  • Fresh-install restore — install Stashium on a new Mac, point at your sync folder, your stash materializes from the newest peer snapshot
  • Conflict log — when two Macs edit the same clip during the same interval, the losing version is appended to sync_folder/conflicts/{device}-{ts}.jsonl. Nothing is silently lost
  • Blob sync, transparently — file clips (screenshots, dropped PDFs, EPUBs, etc.) and URL clips' og:image previews are SHA-256-hashed and copied into sync_folder/blobs/. Peer devices' file_path and og_image are auto-rewritten to point at the blob folder, so opening a clip on Mac B Just Works the moment your cloud sync engine has materialized the file
  • Garbage collection — when you permanently delete a clip, its blob gets swept from the sync folder on a later cycle (kept for trashed-but-recoverable clips)
  • Folder deletes propagate too (with the v0.8 caveat that v1.1 snapshot mode can't replicate every edge case yet — see "Known limitations")
  • No encryption in v1, by design — your cloud provider can read clip content. Trade-off chosen to keep onboarding to two clicks. v2 may add E2E

Sync settings UI

Settings → Sync gives you:

  • One-click toggle, status banner showing next sync ETA + last sync result
  • Native folder picker with suggested paths for iCloud / Google Drive / Dropbox
  • Sync interval picker — 1 / 5 / 15 / 30 / 60 minutes (default 5)
  • Editable device name (shown to peers)
  • Manual "Sync now" button
  • Other devices list — every Mac that's ever written into the sync folder shows up with its name + last seen
  • Per-clip diagnostic (advanced): sync_diagnose command surfaces every clip's sync-readiness so "why isn't my PDF syncing" has a concrete answer

Sync performance optimizations

So the 5-minute heartbeat doesn't quietly thrash your cloud quota:

  • Skip snapshot when DB unchanged — idle devices with no edits since last cycle don't re-upload the same DB
  • Single-flight cycle — spamming "Sync now" or scheduler-coinciding-with-manual-fire can no longer stack concurrent SQLite backup + zstd + upload passes
  • Throttled blob GC — orphan-blob sweep runs every ~hour instead of every cycle (deletion is eventually-consistent regardless)
  • Hash cachingcontent_hash and og_image_hash cached on first compute, never re-hashed
  • Atomic snapshot writes — staging .tmp rename, peer scanners ignore in-flight writes
  • Bounded by MAX_CONCURRENT_FETCHES = 3 — already in place from Discover, also caps any concurrent peer-snapshot merges

Other fixes

  • Stale detail pane when current view is empty — opening the app on All (now = unfiled only) used to render the previously-selected clip in the right pane even though the list was empty. The detail pane now strictly derives its clip from the currently-visible list, so anything that's filtered out of the middle pane is also gone from the right pane
  • AI Summary / Smart Folder / Generate ToC race — clicking AI on clip A, then switching to clip B before the stream finished, used to: (a) show A's streaming content on B, AND (b) silently save A's result into B's DB. Fixed with per-request clip-id capture and full local-state reset on clip switch
  • Jump to existing — toast → Jump now correctly navigates to the clip's folder (or Archive) instead of leaving you on All; race in loadClips that was clobbering selected clip via stale closure also fixed
  • unminimize permission — was missing from capabilities, made toast's Jump fail silently
  • Folder browser + button — now creates a new folder even when the list is empty
  • Folders → Discover navigation — switching between sidebar sections no longer gets stuck on the folder pane
  • Archive ↔ folder drag — archived clips can now be dragged to folders (archive is a state, not a category); dragging an archived clip to All un-archives it
  • All view = unfiled inbox — once a clip lives in a folder, it stops showing in All. Stops accidental bulk-delete of curated content
  • Sidebar feed groups — collapsible with persisted state
  • Feed article font — Discover feed article body now respects the same typography settings as clips (font family, size, line height, content width)

Known limitations

  • Folder deletions don't propagate across devices in v1.0 — a deleted folder may resurrect after syncing with a peer that still has it. Fixed properly in Phase 2 (event log)
  • Article inline images embedded in URL clips' article body don't sync yet — only the og:image preview does. v1.2
  • No encryption — cloud provider can read clip content. v2

Install

  1. Download Stashium.dmg
  2. Open the DMG and drag Stashium.app into Applications
  3. Launch from Launchpad or Spotlight

Existing 0.4.0+ installs will auto-update on next launch.

Issues

Email mombuartworks@gmail.com.