Skip to content

MailFerry v2.0.0-rc.3 — IMAP Migration & Sync

Pre-release
Pre-release

Choose a tag to compare

@ajsap ajsap released this 18 Jul 12:33

MailFerry v2.0.0-rc.3 — Release Candidate

High-Performance Native IMAP Migration Engine.

This is the final planned Release Candidate of MailFerry v2.0.0 —
the complete rewrite of MailFerry from Python to Go. It exists to gather
real-world testing before v2.0.0 is declared production-ready.

This is a pre-release, not the latest stable version. v1.0.0
(Python) remains the last stable release. Test carefully and keep your
source mailboxes until you have verified results. MailFerry never
expunges or deletes mail on either server, in any mode.

Highlights of the Go rewrite

  • Native standalone binaries — one static executable per platform;
    no Python, no Perl, no imapsync, no external runtime. macOS
    (Apple Silicon + Intel), Linux (amd64 + arm64), Windows (amd64 + arm64).
  • Native IMAP engine — pipelined streaming FETCH→APPEND with bounded
    memory, LITERAL+, STARTTLS/SSL, COMPRESS=DEFLATE, watchdogs, per-host
    connection budgets.
  • Bubble Tea + Lip Gloss TUI — live dashboard plus nine more views on
    F1–F10 (digit aliases for SSH/tmux), detail popups, search, follow-mode
    logs, pause/retry controls, graceful-shutdown dialog; automatic TTY
    detection with a --no-tui headless mode driving the same engine.
  • SQLite state management — per-message commit protocol (pure Go, no
    CGO); resumable and duplicate-free; ack-lost APPEND reconciliation.
  • Self-healing — stall detection, connection recovery, Recovery Mode
    with progressive failed-message isolation, persistent Failed Message
    Registry
    , COMPLETED WITH WARNINGS semantics.
  • Multi-instance clustering — shared State Database, atomic mailbox
    claiming, automatic takeover from offline workers.

New in rc.3 — multi-instance hardening

  • Concurrent multi-process operation is first-class: several
    MailFerry processes safely share the canonical mailferry.db
    (unique run/worker identities, WAL, busy timeouts, atomic claiming,
    leases, heartbeats). Held mailboxes are reported plainly —
    Mailbox already active: … owned by worker … (run …) — never
    processed twice, and taken over automatically when released or when
    their owner dies (verified with real OS-process tests, including
    kill‑9 reclaim and exactly-once delivery under contention).
  • No silent exits: runs that copy nothing say why; headless runs
    stream coordination events; every exit path restores the terminal
    (second-Ctrl+C and engine-panic paths fixed).
  • Canonical src/dst CSV formatsrchost,…,dstpassword; the v1
    old*/new* header is rejected with a clear rename hint.

Carried from rc.2

  • Native OS-standard application paths, resolved centrally and
    created lazily:
    macOS ~/Library/Application Support/MailFerry/ · Linux XDG
    ($XDG_CONFIG_HOME, $XDG_STATE_HOME, $XDG_CACHE_HOME) · Windows
    %APPDATA%/%LOCALAPPDATA%. Precedence: CLI flags → mailferry.toml →
    native default.
  • mailferry.db is the canonical per-user State Database (replacing
    the ./migration.db working-directory default). An old development
    ./migration.db is detected and reported with explicit choices —
    never silently adopted or duplicated.
  • Zero-side-effect informational commands: --help, version,
    about, changelog, roadmap, config paths create nothing — no
    configuration, directories, logs or database. Configuration is
    generated on the first operational run or explicitly via
    mailferry config (regression-tested).
  • Correct canonical slogan: High-Performance Native IMAP Migration
    Engine
    — enforced by an automated identity test.
  • Restrictive file permissions (0700 directories, 0600 config/DB/logs
    where the platform supports POSIX permissions).
  • Go-native documentation: rewritten README and CONTRIBUTING, new
    end-user macOS installation guide
    (docs/INSTALLATION-MACOS.md).

Known limitations (please test and report)

  • Not implemented yet (planned for final v2.0.0): deduplication
    mode, date-range migration (--from/--to), mailferry attach,
    --portable mode.
  • macOS binaries are not Developer-ID signed and not notarised
    Gatekeeper will ask for a one-time Open Anyway approval on
    downloaded binaries. Expected for this RC; see the
    macOS installation guide.
    Never disable Gatekeeper.
  • Clustering and COMPRESS=DEFLATE are automated-suite-tested and still
    under real-world validation (--compress off is the conservative
    fallback while diagnosing).
  • Windows console support is cross-compiled with limited interactive
    testing.

Install & verify

Download the binary for your platform, verify its checksum against
SHA256SUMS, make it executable, and run mailferry version — it must
report MailFerry v2.0.0-rc.3.

shasum -a 256 -c SHA256SUMS      # sha256sum -c on Linux

Issues and feedback: https://github.com/ajsap/mailferry/issues
Author: Andy Saputra andy@saputra.org · Licence: GNU AGPL v3.0