{"id":50316045,"url":"https://github.com/allisonhere/tidemail","last_synced_at":"2026-05-29T00:02:33.607Z","repository":{"id":360311729,"uuid":"1244837821","full_name":"allisonhere/tidemail","owner":"allisonhere","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-25T21:28:16.000Z","size":53909,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T23:23:13.894Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/allisonhere.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-20T16:41:00.000Z","updated_at":"2026-05-25T21:28:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/allisonhere/tidemail","commit_stats":null,"previous_names":["allisonhere/tidemail"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/allisonhere/tidemail","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allisonhere%2Ftidemail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allisonhere%2Ftidemail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allisonhere%2Ftidemail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allisonhere%2Ftidemail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/allisonhere","download_url":"https://codeload.github.com/allisonhere/tidemail/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allisonhere%2Ftidemail/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33630999,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-28T02:00:06.440Z","response_time":99,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-29T00:02:29.560Z","updated_at":"2026-05-29T00:02:33.599Z","avatar_url":"https://github.com/allisonhere.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TideMail\n\n![TideMail screenshot](screen.png)\n\nA keyboard-first terminal mail client built with [Bubble Tea](https://github.com/charmbracelet/bubbletea) and [Lipgloss](https://github.com/charmbracelet/lipgloss).\n\n## Install\n\n**Quick install** (Linux/macOS, amd64/arm64):\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/allisonhere/tidemail/main/install.sh | sh\n```\n\nOr download a binary from the [latest release](https://github.com/allisonhere/tidemail/releases/latest).\n\n**From source:**\n\n```bash\ngit clone https://github.com/allisonhere/tidemail\ncd tidemail\ngo build -o tidemail .\n./tidemail\n```\n\n## Features\n\n- Three-pane mail layout: accounts, messages, content\n- Unified Inbox across all configured accounts\n- IMAP/SMTP accounts using passwords or app passwords\n- Account manager for adding, editing, deleting, and discovering mailboxes\n- Server-backed sync, read/unread, archive, delete, compose, and reply\n- Archive auto-detection via `\\Archive`, `Archive`, `Archives`, or `All Mail`\n- Command palette for common mail actions\n- Search and unread-only filtering\n- Optional actionable links in the message content pane\n- AI summaries with copy and save-to-Markdown actions\n- Theme-aware dialogs, overlays, and terminal background sync\n\n## Usage\n\n```bash\ngo build -o tidemail .\n./tidemail\n```\n\nConfig is stored in `~/.config/tidemail/config.toml`. The local SQLite cache is stored in `~/.local/share/tidemail/mail.db` unless `XDG_DATA_HOME` changes that path.\n\nOpen account management with `m`, add an IMAP/SMTP account, then sync the selected mailbox with `f`. Press `f` on the Unified Inbox to sync every account's inbox at once. Use `F` to sync all mailboxes. Configure a per-account `sync_minutes` interval for automatic background refresh.\n\n## Credential safety\n\nTideMail currently stores IMAP/SMTP passwords and AI API keys in the local config file. Treat `~/.config/tidemail/config.toml` like a secret.\n\nRecommended setup:\n\n```bash\nchmod 700 ~/.config/tidemail\nchmod 600 ~/.config/tidemail/config.toml\n```\n\nTideMail now writes the config directory as `0700` and the config file as `0600` when it saves settings. On startup it warns if an existing config file is readable by other users. Passwords and AI API keys are redacted from startup errors, runtime status messages, and account-manager test/save failures.\n\nFor hosted providers, use provider-specific app passwords rather than your primary account password:\n\n- Gmail: Google Account → Security → App passwords\n- Yahoo: Account Security → Generate app password\n- iCloud: Apple ID → Sign-In and Security → App-Specific Passwords\n\nIf you paste or accidentally expose an app password, revoke it and create a new one.\n\nExample account config:\n\n```toml\ntheme = \"catppuccin-mocha\"\n\n[[account]]\nname = \"Personal\"\nimap_host = \"imap.example.com\"\nimap_port = 993\nimap_tls = true\nsmtp_host = \"smtp.example.com\"\nsmtp_port = 587\nsmtp_tls = true\nuser = \"alice@example.com\"\npassword = \"app-password\"\nfrom = \"Alice \u003calice@example.com\u003e\"\nsync_minutes = 5  # auto-sync every 5 min (0 = off)\n```\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| `p` or `:` | Command palette |\n| `m` | Account manager |\n| `f` | Sync current mailbox (Unified Inbox: syncs all inboxes) |\n| `F` | Sync all mailboxes |\n| `c` | Compose |\n| `r` | Toggle read/unread in message list, reply from content |\n| `a` | Archive selected message |\n| `d` | Delete selected message |\n| `R` | Mark selected mailbox/account read |\n| `/` | Search messages |\n| `u` | Toggle unread-only view |\n| `o` | Open selected content link |\n| `Ctrl+N` / `Alt+N` | Next content link |\n| `Ctrl+P` / `Alt+P` | Previous content link |\n| `s` | AI summary |\n| `S` | Settings |\n| `T` | Theme picker |\n| `Ctrl+D` | Save attachments to folder |\n| `?` | Help |\n| `q` | Quit |\n\n## Settings\n\nSettings are opened with `S`.\n\n- Display: icons, date format, mark-read behavior, focus line, actionable links, reading width, browser command, density, and quit confirmation\n- Accounts: edit account details and set a per-account `sync_minutes` interval for automatic background refresh\n- Updates: check, install, restart, or copy a manual install command\n- AI: OpenAI, Claude, Gemini, or Ollama summary settings\n- About: repository and issue links\n\n## Development\n\nRun the full suite:\n\n```bash\ngo test ./...\n```\n\nThe mail refactor intentionally removes RSS/GReader/OPML behavior. Any remaining RSS-era naming in internal style names is compatibility debt, not product direction.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallisonhere%2Ftidemail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallisonhere%2Ftidemail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallisonhere%2Ftidemail/lists"}