{"id":46553869,"url":"https://github.com/saravenpi/miam","last_synced_at":"2026-03-07T04:01:25.249Z","repository":{"id":326273855,"uuid":"1103517793","full_name":"saravenpi/miam","owner":"saravenpi","description":"A minimalist RSS feed reader TUI","archived":false,"fork":false,"pushed_at":"2025-11-26T19:44:27.000Z","size":130,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-11-29T15:57:33.859Z","etag":null,"topics":["cli","feed-reader","ratatui","rss","rust","terminal","tui"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/saravenpi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2025-11-25T01:21:43.000Z","updated_at":"2025-11-26T19:44:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/saravenpi/miam","commit_stats":null,"previous_names":["saravenpi/miam"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/saravenpi/miam","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saravenpi%2Fmiam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saravenpi%2Fmiam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saravenpi%2Fmiam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saravenpi%2Fmiam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saravenpi","download_url":"https://codeload.github.com/saravenpi/miam/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saravenpi%2Fmiam/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30207390,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T03:24:23.086Z","status":"ssl_error","status_checked_at":"2026-03-07T03:23:11.444Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cli","feed-reader","ratatui","rss","rust","terminal","tui"],"created_at":"2026-03-07T04:01:17.157Z","updated_at":"2026-03-07T04:01:25.223Z","avatar_url":"https://github.com/saravenpi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# miam\n\nA minimalist RSS feed reader TUI (Terminal User Interface) built with Rust.\n\n## Features\n\n- **Clean Terminal Interface** - Navigate RSS feeds with vim-like keybindings\n- **Multi-Source Support** - Manage multiple RSS/Atom feeds from one place\n- **Smart Caching** - Offline access to previously loaded articles\n- **Enhanced Built-in Reader** - Read full articles with beautiful formatting (headers, bold, italic, lists)\n- **Paywall Remover** - Bypass paywalls using multiple strategies (12ft.io, archive.is, Googlebot)\n- **YouTube Support** - RSS feeds for YouTube channels with optional Invidious integration\n- **Filter \u0026 Search** - Quickly filter feeds and articles in real-time\n- **Tag System** - Organize feeds with custom tags\n- **Dual-Line Display** - Clear two-line layout for better readability\n\n## Installation\n\n### Quick Install (Recommended)\n\nInstall with a single command:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/saravenpi/miam/master/install.sh | bash\n```\n\nThe installer will:\n- Detect your platform automatically (Linux/macOS, x86_64/aarch64)\n- Build from source using cargo (requires Rust and Git installed)\n- Install to `~/.local/bin/miam`\n- Provide instructions for adding to PATH if needed\n\n**Prerequisites:**\n```bash\n# Install Rust\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Install Git (if not already installed)\n# On macOS: git is included with Xcode Command Line Tools\n# On Linux: sudo apt install git (Debian/Ubuntu) or sudo yum install git (RHEL/Fedora)\n```\n\n### Manual Installation from Source\n\n```bash\ngit clone https://github.com/saravenpi/miam.git\ncd miam\ncargo build --release\ncp target/release/miam ~/.local/bin/\n```\n\nMake sure `~/.local/bin` is in your PATH.\n\n### Adding to PATH\n\nIf `~/.local/bin` is not in your PATH, add this to your shell config:\n\n**Bash** (`~/.bashrc` or `~/.bash_profile`):\n```bash\nexport PATH=\"$PATH:$HOME/.local/bin\"\n```\n\n**Zsh** (`~/.zshrc`):\n```bash\nexport PATH=\"$PATH:$HOME/.local/bin\"\n```\n\n**Fish** (`~/.config/fish/config.fish`):\n```fish\nset -gx PATH $PATH $HOME/.local/bin\n```\n\n### Uninstalling\n\nTo uninstall miam:\n\n```bash\nrm ~/.local/bin/miam\nrm -rf ~/.miam      # Remove cache (optional)\nrm ~/.miam.yml      # Remove config (optional)\n```\n\n## Quick Start\n\n1. Launch miam:\n```bash\nmiam\n```\n\n2. Press `a` to add your first RSS feed\n3. Enter the feed URL and press Enter\n4. Press `r` to refresh and load the feed\n5. Use `Tab` to switch between feeds and articles\n6. Press `o` to open an article\n\n## Commands\n\n### Check Version\n\n```bash\nmiam --version\n```\n\n### Upgrade to Latest Version\n\nMiam includes a built-in self-update mechanism that rebuilds from the latest source:\n\n```bash\nmiam upgrade\n```\n\nThis will:\n- Clone the latest version from GitHub\n- Build from source using cargo\n- Replace the current binary with the new version\n- Clean up temporary build files\n\n**Note:** Requires Rust and Git to be installed.\n\n## Configuration\n\nmiam uses a YAML configuration file located at `~/.miam.yml`.\n\nA comprehensive example configuration file is available at [`example-config.yml`](example-config.yml) with detailed comments explaining all options.\n\n### Example Configuration\n\n```yaml\nfeeds:\n  Hacker News: https://news.ycombinator.com/rss\n  Rust Blog: https://blog.rust-lang.org/feed.xml\n  The Verge: https://www.theverge.com/rss/index.xml\n  Tech Crunch:\n    url: https://techcrunch.com/feed/\n    tags:\n      - tech\n      - news\n  Ars Technica:\n    url: https://feeds.arstechnica.com/arstechnica/index\n    tags:\n      - tech\n      - science\n\ninvidious: false\ninvidious_instance: yewtu.be\nshow_tooltips: true\npaywall_remover: true\nbrowser_command: calm\nhide_shorts: false\n```\n\n### Configuration Options\n\n#### Feeds Section\n\nThe `feeds` section supports two formats:\n\n**Simple format** (feed URL only):\n```yaml\nFeed Name: https://feed.url/rss\n```\n\n**Extended format** (with tags):\n```yaml\nFeed Name:\n  url: https://feed.url/rss\n  tags:\n    - tag1\n    - tag2\n```\n\nTags allow you to organize feeds into categories. You can filter by tags in the UI by selecting them from the Tags panel (use Tab to switch to it).\n\n#### Settings\n\nAll settings are defined at the root level of the config file, alongside the `feeds` section:\n\n- **`invidious`** (boolean, default: `false`)\n  - When enabled, YouTube links open through an Invidious instance instead of YouTube.com\n  - Useful for privacy-conscious users\n\n- **`invidious_instance`** (string, default: `yewtu.be`)\n  - Specifies which Invidious instance to use\n  - Available instances: `yewtu.be`, `vid.puffyan.us`, `invidious.flokinet.to`, `invidious.privacydev.net`, `iv.melmac.space`\n\n- **`show_tooltips`** (boolean, default: `true`)\n  - Show helpful keyboard shortcuts and tips in the UI\n  - Set to `false` for a cleaner interface\n\n- **`paywall_remover`** (boolean, default: `true`)\n  - Enable paywall bypass when reading articles in the integrated reader\n  - Uses multiple strategies: 12ft.io proxy, archive.is, and Googlebot user-agent\n  - Falls back to direct fetch if all methods fail\n  - **Note:** Only works with soft paywalls; hard paywalls cannot be bypassed\n\n- **`browser_command`** (string, optional)\n  - Custom command to use for opening links in browser\n  - If not set, the system default browser will be used (`open` on macOS, `xdg-open` on Linux, `start` on Windows)\n  - The URL will be passed as an argument to the specified command\n  - Example: `calm`, `firefox`, `chromium`, etc.\n\n- **`hide_shorts`** (boolean, default: `false`)\n  - Filter out YouTube Shorts from feed results\n  - When enabled, Shorts will not appear in the feed item list\n  - Useful if you prefer to only see full-length YouTube videos\n\n## Keybindings\n\n### Global\n\n| Key | Action |\n|-----|--------|\n| `Tab` / `Shift+Tab` | Switch focus between Feeds and Items panels |\n| `q` | Quit the application |\n| `Ctrl+C` | Force quit |\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `j` / `↓` | Move down |\n| `k` / `↑` | Move up |\n| `g g` | Go to top (press `g` twice) |\n| `G` | Go to bottom |\n\n### Feed Management\n\n| Key | Action |\n|-----|--------|\n| `a` | Add new feed |\n| `d` | Delete selected feed |\n| `t` | Edit tags for selected feed |\n| `r` | Refresh all feeds |\n| `Enter` | Load selected feed (when in Feeds panel) |\n\n### Article Actions\n\n| Key | Action |\n|-----|--------|\n| `Enter` / `o` | Open article in browser |\n| `o` | Open article in reader (non-YouTube articles) |\n| `/` | Filter articles by title |\n\n### Filter Mode\n\n| Key | Action |\n|-----|--------|\n| `/` | Activate filter (in Feeds or Items panel) |\n| `Type` | Filter results in real-time |\n| `Backspace` | Remove characters from filter |\n| `Enter` / `Esc` | Exit filter mode |\n\n### Reader Mode\n\nThe integrated reader displays articles with beautiful formatting:\n- **Headers** are syntax-highlighted (H1, H2, H3)\n- **Bold** and *italic* text are styled\n- **Lists** are rendered with bullet points\n- **Blockquotes** are indented\n\n| Key | Action |\n|-----|--------|\n| `j` / `↓` | Scroll down |\n| `k` / `↑` | Scroll up |\n| `Space` / `Page Down` | Scroll down one page |\n| `b` / `Page Up` | Scroll up one page |\n| `g` | Jump to top |\n| `G` | Jump to bottom |\n| `o` | Open article in browser |\n| `Esc` / `q` | Exit reader mode |\n\n**Paywall Bypass:** If `paywall_remover` is enabled in settings, the reader will automatically attempt to bypass paywalls using multiple strategies.\n\n## Usage Examples\n\n### Adding RSS Feeds\n\n1. **From the UI:**\n   - Press `a`\n   - Enter the feed URL\n   - Press `Enter`\n   - The feed is automatically saved to `~/.miam.yml`\n\n2. **Manually editing config:**\n   - Edit `~/.miam.yml`\n   - Add feeds in the format: `Feed Name: https://feed.url/rss`\n   - Save and restart miam\n\n### YouTube RSS Feeds\n\nYouTube channels have RSS feeds! Format:\n```\nhttps://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID\n```\n\nExample:\n```yaml\nfeeds:\n  Fireship: https://www.youtube.com/feeds/videos.xml?channel_id=UCsBjURrPoezykLs9EqgamOA\n```\n\n### Filtering\n\nPress `/` to filter feeds or articles:\n- In **Feeds panel**: Filters by feed name\n- In **Items panel**: Filters by article title\n- Case-insensitive substring matching\n- Real-time results as you type\n\nExample: Type \"rust\" to see all Rust-related articles\n\n## Cache\n\nmiam caches feed articles in `~/.miam/` for offline access.\n\n- Each feed has its own cache file\n- Cache loads instantly on startup\n- Updates in background when refreshing\n- Deduplicates articles automatically\n\nCache files are named based on the feed name (sanitized):\n```\n~/.miam/Hacker_News.yml\n~/.miam/Rust_Blog.yml\n```\n\n## Feed Limit Notes\n\n- **YouTube feeds**: Limited to 15 most recent videos (YouTube RSS limitation)\n- **Regular feeds**: Depends on the feed provider (typically 10-50 items)\n\nA note appears in the status bar when YouTube feeds are present.\n\n## Tips \u0026 Tricks\n\n1. **Quick Refresh**: Press `r` from any panel to refresh all feeds\n\n2. **Focus Management**: The focused panel has a colored border (blue/purple)\n\n3. **\"All Feeds\" View**: Select the `★ All` option to see articles from all feeds combined\n\n4. **Reading Articles**:\n   - YouTube videos automatically open in browser\n   - Regular articles can be read in the integrated reader (press `o`)\n   - Reader supports formatted text with headers, bold, italic, and lists\n   - Enable `paywall_remover` in settings to bypass soft paywalls\n\n5. **Organizing with Tags**:\n   - Press `t` on a feed to edit its tags\n   - Navigate to the Tags panel to filter by tag\n   - Tags help organize large feed collections\n\n6. **Filter Performance**: Filtering is case-insensitive and works on substrings\n\n7. **Background Updates**: When feeds refresh, you'll see a spinner. The UI remains responsive.\n\n## Troubleshooting\n\n### Feed won't load\n- Check the URL is valid RSS/Atom feed\n- Some feeds require specific User-Agent headers (not currently supported)\n- Try the feed URL in a browser first\n\n### Articles not showing\n- Press `r` to refresh\n- Check internet connection\n- Some feeds may be temporarily unavailable\n\n### Cache issues\n- Clear cache: `rm -rf ~/.miam/`\n- Restart miam and press `r`\n\n## Building from Source\n\nRequirements:\n- Rust 1.70 or higher\n- Cargo\n\n```bash\ngit clone https://github.com/saravenpi/miam.git\ncd miam\ncargo build --release\n```\n\nThe binary will be in `target/release/miam`.\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Credits\n\nBuilt by [saravenpi](https://github.com/saravenpi)\n\nPowered by:\n- [ratatui](https://github.com/ratatui-org/ratatui) - Terminal UI framework\n- [crossterm](https://github.com/crossterm-rs/crossterm) - Terminal manipulation\n- [reqwest](https://github.com/seanmonstar/reqwest) - HTTP client\n- [rss](https://github.com/rust-syndication/rss) - RSS parser\n- [atom_syndication](https://github.com/rust-syndication/atom) - Atom parser\n- [readability](https://github.com/kumabook/readability) - Article extraction\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaravenpi%2Fmiam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaravenpi%2Fmiam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaravenpi%2Fmiam/lists"}