Releases: gausejakub/vimail
Releases · gausejakub/vimail
Release list
v0.12.1
Bug Fix
- Vim motions in the mailbox pane — counted
j/k(e.g.5j),gg,G, and counted line jumps now work in the account/folder sidebar, the cursor stays visible while moving through long lists, and quickly typed commands such as5jare no longer swallowed when the terminal coalesces input. Help overlay updated. (#44)
Full Changelog: v0.12.0...v0.12.1
v0.12.0
What's Changed
MCP server — complete mailbox operations
restore_messages— move one or many messages back from Trash to Inbox (or another folder). Server-first: the cache is only reconciled once the server confirms, with the new destination UIDs; offline restores are queued and retried.mark_all_read— mark a folder, an account, or every account read in one call. Uses a whole-folder IMAP operation, so uncached messages are covered without enumerating UIDs; Spam and Trash are included by default.list_operations— check whether queued mark-read, delete, restore, and send operations were delivered, are retrying, or failed (the MCP counterpart of the TUI's:opsview).syncwithfull: true— rebuild cached headers authoritatively after server-side moves or deletes, keeping already-downloaded bodies.
Together with v0.11.0 this makes review, bulk mark-read/delete, delivery verification, restore-from-Trash, and cache reconciliation all possible directly from an MCP client — no helper scripts or per-UID orchestration.
TUI
- Select-all +
rin visual mode now issues one whole-folder mark-read operation instead of one queued op per message.
(#43)
Full Changelog: v0.11.0...v0.12.0
v0.11.0
What's Changed
MCP server — use vimail from AI clients
vimail mcp— a Model Context Protocol server on stdio for Claude Code, Claude Desktop, and other local AI clients. Reads (list_accounts,list_folders,list_messages,read_message,search_messages) are served from the local cache and never open IMAP connections. (#31)- Write tools —
save_draft,delete_draft,mark_read,delete_message(Trash only) and an explicitsynctool; writes go through the same offline queue as the TUI.mark_read/delete_messagetake auidsbatch. (#32, #39) - Mail review in two calls —
list_recent_messagesscans a time window across every account;read_messagesreads the selected bodies as a batch without marking them read. (#41) - Sending is opt-in —
send_emailexists only with[mcp] allow_send = true; otherwise it is not registered at all. (#33) - Safe next to the TUI — queued operations run exactly once across processes, account syncs take a cross-process lock, and the TUI refreshes itself when the MCP process changes the cache. (#30, #37, #40)
Themes
cliamp(Winamp-style black/green) andomarchy(follows the current Omarchy palette, ANSI fallback). Every theme now passes a WCAG contrast gate. (#26)
Compose editor (Vim)
- Operators follow real Vim motion classes (
dw,cw,d0,dF, …);c{motion}+ typing undoes in one step. (#21) V+ddeletes whole lines and pastes linewise. (#42)- Count prefixes on editing commands:
2dd,3x,3J,2p,>>,<<. (#23) /?wrap correctly on the cursor line;n/Nkeep the search direction. (#24)
Reliability fixes
- Failed offline operations stay retryable, with exponential backoff; mark-read failures are no longer reported as success. (#28, #37)
- One recovery sync per folder on stale-UID bursts instead of one per message. (#29)
- Search deduplicates by
Message-ID, keeps real folder/UID handles for label copies, and searches encrypted bodies correctly. (#38) - MCP deletes use the server's real Trash mailbox; stale IMAP connections are replaced before batched writes; large deletes get per-chunk deadlines. (#40)
- Log rotation and 3-day retention are enforced during long sessions; the async logger is race-free. (#19, #20)
Security
- Go 1.26.6 and
golang.org/x/netv0.58.0 in both modules — govulncheck clean. (#17)
Project
CHANGELOG.mdintroduced; CI now enforces the standalonepkg/vimteasuite. (#18, #25)- The editor module is tagged separately as
pkg/vimtea/v0.2.0.
Full Changelog: v0.10.4...v0.11.0
v0.10.4
What's Changed
IMAP Connection Stability
- Connection reuse — Reuse existing healthy IMAP connections instead of tearing down and reconnecting every sync cycle. Avoids exhausting server connection limits.
- Operation timeouts — Per-operation deadlines (45s for commands, 3min for full folder sync, 60s for body fetch) with force-close timers that unblock stuck
cmd.Wait()calls when the network is unresponsive. - Non-blocking disconnect —
Disconnect()now uses tryLock with force-close fallback instead of blocking indefinitely onopMu, preventing TUI freezes when the network is down.
Full Changelog: v0.10.3...v0.10.4
v0.10.3
Bug Fix
- Fix TUI freeze: Resolved a deadlock where the UI would freeze after ~5 minutes. The coordinator mutex was being held synchronously in the Update handler while periodic sync blocked on IMAP disconnect, deadlocking the entire event loop.
v0.10.2
Security & Dependencies
- Go 1.26.1 — upgraded from 1.24.2, resolves 16 stdlib vulnerabilities (crypto/tls, crypto/x509, net/url, net/http, database/sql)
- golang.org/x/net v0.52.0 — upgraded from v0.6.0, resolves 4 HTML parsing vulnerabilities (infinite loop, quadratic complexity, XSS)
- IPv6 support — IMAP/SMTP address formatting now uses
net.JoinHostPortfor correct IPv6 handling - 0 known vulnerabilities — verified with
govulncheck ./...
v0.10.1
Fixes
- Cross-folder delete — deleting a message now removes it from all folders (Inbox, Sent, etc.) by correlating via RFC 5322 Message-ID header
- Skip stale body fetches — rapidly scrolling through messages no longer queues redundant fetch operations
v0.10.0
What's New
Security Hardening
- AES-256-GCM encryption at rest for email bodies in SQLite cache (key stored in OS keyring)
- Signal handling — graceful shutdown on SIGTERM/SIGINT with cleanup
- IMAP body size limit (50MB) to prevent OOM on oversized messages
- SMTP hardening — reject unknown TLS modes instead of silent plaintext fallback
- Dangerous attachment warnings — detect
.exe,.bat,.docm, double-extension tricks - Temp file cleanup on exit
- Config file permissions enforced to 0600
- TCP keepalive (30s) on IMAP and SMTP connections
- Dial timeouts (30s) on both IMAP and SMTP
- Credentials safety —
String()method omits secrets from accidental logging - govulncheck — 0 known vulnerabilities
Features
- Soft line wrapping in compose editor and horizontal scroll
- Gmail label deduplication and cross-folder cache sync
Fixes
- Show To instead of From in Sent/Drafts message list
- Preserve quoted context when AI generates reply
- Dedicated IMAP connection for body fetches, stale UID recovery
v0.9.0
What's new
- Global search — press
/to search across all accounts and folders with deduplication of Gmail labels - Export to ZIP — press
Eto export messages (single or batch) with text, HTML, metadata, and attachments - Restore from Trash — press
uto move messages back to Inbox (single or visual mode batch) - Search commands —
:search <query>/:s <query>as alternative to/
v0.8.0
What's new
- Global search — press
/to search across all accounts and folders- SQLite-backed LIKE queries on subject, from, to, and body
- Results display inline with
[account/folder]context :search <query>command alias- Press
Escto clear search and return to folder view