← Back to Projects

Why SeaSync?

A native macOS solution for Seafile sync

The Problem

The official Seafile desktop client crashes on macOS 15 Sequoia and macOS 26 Tahoe due to compatibility issues with the Qt UI framework.

The crash occurs before the app even fully launches:

Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Signal: Segmentation fault: 11
Crashed Thread: 0

Application Specific Information:
QWidget::ensurePolished() → MainWindow::showWindow()

This is a known issue reported on the Seafile Community Forum with no fix available as of late 2024.

Why Qt Fails

The Qt framework has compatibility issues with modern macOS versions. Each macOS update can break Qt applications in unexpected ways.

The Seafile team hasn't released a fix, leaving users on newer macOS versions unable to sync their files.

The Solution

SeaSync bypasses the problematic Qt UI entirely by implementing a pure Swift/SwiftUI sync client that:

  • Uses native macOS APIs (no Qt dependencies)
  • Runs as a lightweight menu bar app
  • Connects directly to the Seafile REST API
  • Provides bidirectional sync with your self-hosted server

No external dependencies. Just pure Apple frameworks: SwiftUI, Foundation, and Security (for Keychain).

┌─────────────────────────────────────────┐ │ SeaSync App │ ├─────────────────────────────────────────┤ │ MenuBarExtra (SwiftUI) │ │ ↓ │ │ AppState → SyncEngine → FileService │ │ ↓ ↓ │ │ FileWatcher REST API │ │ (FSEvents) │ │ ↓ │ │ SyncDatabase │ │ (SQLite) │ └─────────────────────────────────────────┘

Features

📍

Menu Bar Integration

Unobtrusive menu bar icon showing sync status. Click to see details, configure settings, or trigger manual sync.

🔄

Bidirectional Sync

Upload local changes, download server changes. Automatic conflict resolution using last-modified-wins strategy.

🔐

Encrypted Libraries

Full support for password-protected Seafile libraries. Passwords stored securely in macOS Keychain.

👁️

FSEvents Watching

Real-time detection of local file changes using macOS FSEvents API. No polling, instant sync triggers.

🗑️

Deletion Sync

Optionally sync file deletions both ways. SQLite database tracks file states to detect removed files.

🔑

Secure Credentials

API tokens stored in macOS Keychain. No plain text passwords, no config files with secrets.

How It Works

Authentication

POST to /api2/auth-token/ with your credentials. The API token is stored in Keychain for future sessions.

List Libraries

GET /api2/repos/ to fetch all your repositories. Each library becomes a local folder.

Compare Files

Recursively list remote files and compare against local files and last sync state stored in SQLite.

Sync Changes

Download new/modified remote files. Upload new/modified local files. Optionally sync deletions both ways.

Watch for Changes

FSEvents monitors your sync folder. When files change, sync triggers automatically.

Requirements

  • macOS 14.0 (Sonoma) or later
  • Swift 5.9+ (for building from source)
  • A self-hosted Seafile server (or seafile.com account)
Get Started on GitHub →