{"id":17771821,"url":"https://github.com/jeremiah-k/fetchtastic","last_synced_at":"2026-04-30T00:13:20.784Z","repository":{"id":252336554,"uuid":"839122583","full_name":"jeremiah-k/fetchtastic","owner":"jeremiah-k","description":"Fetchtastic is a utility for downloading and managing the latest Meshtastic Android app and Firmware releases on your PC and/or phone (using Termux). It also provides optional notifications via NTFY.","archived":false,"fork":false,"pushed_at":"2026-01-11T20:23:30.000Z","size":11851,"stargazers_count":11,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-11T20:29:02.151Z","etag":null,"topics":["android","downloader","firmware","lora","macos","meshtastic","termux","windows"],"latest_commit_sha":null,"homepage":"","language":"Python","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/jeremiah-k.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2024-08-07T02:41:42.000Z","updated_at":"2026-01-11T12:49:11.000Z","dependencies_parsed_at":"2024-08-16T17:16:03.848Z","dependency_job_id":"e67f2b1a-0e95-441b-94f6-222ee6e8d0f1","html_url":"https://github.com/jeremiah-k/fetchtastic","commit_stats":{"total_commits":89,"total_committers":1,"mean_commits":89.0,"dds":0.0,"last_synced_commit":"b5d29305c617ee1ec0201a6784a29670e1778372"},"previous_names":["jeremiah-k/fetchtastic"],"tags_count":57,"template":false,"template_full_name":null,"purl":"pkg:github/jeremiah-k/fetchtastic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremiah-k%2Ffetchtastic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremiah-k%2Ffetchtastic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremiah-k%2Ffetchtastic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremiah-k%2Ffetchtastic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeremiah-k","download_url":"https://codeload.github.com/jeremiah-k/fetchtastic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeremiah-k%2Ffetchtastic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"last_error":"SSL_read: 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":["android","downloader","firmware","lora","macos","meshtastic","termux","windows"],"created_at":"2024-10-26T21:36:59.604Z","updated_at":"2026-04-30T00:13:20.777Z","avatar_url":"https://github.com/jeremiah-k.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fetchtastic\n\n**A simple, cross-platform utility for downloading and managing Meshtastic firmware and client app releases.**\n\nFetchtastic automatically downloads the latest Meshtastic firmware and selected client app assets from GitHub, with support for notifications, scheduling, and repository browsing.\n\nRequires Python 3.10+; Python 3.9 and earlier are unsupported.\n\n## ✨ Features\n\n- 🔄 **Automatic Downloads**: Latest firmware and Meshtastic client app assets\n- ⚡ **Async Download Engine**: `aiohttp`-based downloads with connection pooling and retry/backoff\n- 📱 **Cross-Platform**: Linux, macOS, Windows, and Android (Termux)\n- 🗂️ **Repository Browser**: Browse and download files from meshtastic.github.io\n- 🔔 **Notifications**: Push notifications via NTFY\n- ⏰ **Scheduling**: Automatic downloads via cron/startup scripts\n- 🎯 **Smart Selection**: Choose specific devices, APKs, and desktop installers\n- 📦 **Auto-extraction**: Extract firmware files from zip archives\n- ✅ **Stronger Integrity Checks**: Hash-based verification and ZIP integrity validation\n- 🚦 **GitHub API Resilience**: Centralized release fetching, defensive parsing, caching, and rate-limit-aware behavior\n- 🧵 **Parallel Validation**: Release completeness checks run in parallel for faster scans\n- 🔧 **Easy Setup**: One-command installation with guided setup\n\n## 🚀 Quick Start\n\n### One-Line Installation\n\nRequires Python 3.10+.\n\n**Linux/MacOS/Android (Termux):**\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/jeremiah-k/fetchtastic/main/src/fetchtastic/tools/setup_fetchtastic.sh | bash\n```\n\n\u003e **Security Note:** For security-conscious users, you can [inspect the script](https://raw.githubusercontent.com/jeremiah-k/fetchtastic/main/src/fetchtastic/tools/setup_fetchtastic.sh) before running it.\n\n**Windows (PowerShell):**\n\n```powershell\nirm https://raw.githubusercontent.com/jeremiah-k/fetchtastic/main/src/fetchtastic/tools/setup_fetchtastic.ps1 | iex\n```\n\n\u003e **Security Note:** For security-conscious users, you can [inspect the script](https://raw.githubusercontent.com/jeremiah-k/fetchtastic/main/src/fetchtastic/tools/setup_fetchtastic.ps1) before running it.\n\n### Basic Usage\n\n```bash\n# Run setup (first time)\nfetchtastic setup\n\n# Download latest releases\nfetchtastic download\n\n# Browse repository files\nfetchtastic repo browse\n```\n\n## 📖 Documentation\n\n### Installation Guides\n\n- **[Linux Installation](docs/linux-installation.md)** - Complete installation guide for Linux distributions\n- **[macOS Installation](docs/macos-installation.md)** - Installation guide for macOS with Homebrew\n- **[Windows Installation](docs/windows-installation.md)** - Windows installation with integration features\n- **[Termux Installation](docs/termux-installation.md)** - Android installation using Termux\n\n### Usage\n\n- **[Usage Guide](docs/usage-guide.md)** - Complete guide to using Fetchtastic\n\n## 🔧 Commands\n\n```bash\nfetchtastic setup         # Run the setup process\nfetchtastic download      # Download firmware and client app assets\nfetchtastic cache clear   # Clear cached API data\nfetchtastic repo browse   # Browse repository files\nfetchtastic repo clean    # Clean repository downloads\nfetchtastic topic         # Show NTFY topic\nfetchtastic version       # Show version\nfetchtastic clean         # Remove all configuration\n```\n\n## 🏗️ Architecture Highlights\n\n- **Shared GitHub release source**: Release parsing and validation are centralized for consistency across firmware and client app assets.\n- **Async + sync compatibility**: Async download paths are first-class, with sync fallbacks when async libraries are unavailable.\n- **Defensive verification flow**: Size checks, hash baselines, and ZIP integrity checks are combined to reduce false positives.\n- **Better retry semantics**: Retryable vs non-retryable errors are preserved to improve behavior and diagnostics.\n\n## 📁 File Organization\n\nDownloads are organized in a clean structure:\n\n```text\n~/Downloads/Meshtastic/\n├── app/\n│   ├── v2.7.14/\n│   │   ├── app-fdroid-universal-release.apk\n│   │   ├── Meshtastic-2.7.14.dmg\n│   │   └── release_notes-v2.7.14.md\n│   └── prerelease/   # Pre-release client app builds (optional)\n├── firmware/\n│   ├── v2.3.2/\n│   ├── v2.3.1/\n│   ├── repo-dls/      # Repository browser downloads\n│   └── prerelease/    # Pre-release firmware (optional)\n```\n\nAPKs and desktop installers intentionally share `app/\u003cversion\u003e/` because they are treated as client app assets from the same release pipeline.\n\n## 🔔 Notifications\n\nGet notified when new releases are downloaded:\n\n1. Enable NTFY during setup\n2. Install the [ntfy app](https://ntfy.sh/app/) or use the web interface\n3. Subscribe to your unique topic\n4. Receive push notifications for new downloads\n\n## ⏰ Scheduling\n\nSet up automatic downloads:\n\n- **Linux/macOS**: Cron jobs (daily at 3 AM)\n- **Windows**: Startup folder shortcuts\n- **Termux**: Boot scripts and cron jobs\n\n## 🆙 Upgrading\n\n**Automatic (recommended):**\n\n- **Windows**: Use Start Menu → Fetchtastic → \"Check for Updates\"\n- **Linux/macOS/Termux**: Re-run the installation script\n\n**Manual:**\n\n```bash\npipx upgrade fetchtastic\n```\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to:\n\n- Report bugs and issues\n- Suggest new features\n- Submit pull requests\n- Improve documentation\n\nVisit the [GitHub repository](https://github.com/jeremiah-k/fetchtastic) to get started.\n\n## 🧪 Development \u0026 Testing\n\n```bash\n# create and activate environment\npython3 -m venv .venv\n. .venv/bin/activate\n\n# install dependencies\npip install -r requirements.txt\npip install -r requirements-dev.txt\n\n# run tests\npython -m pytest tests/\n```\n\nTest suite organization uses markers such as `unit`, `integration`, `core_downloads`, `user_interface`, `configuration`, and `infrastructure`.\n\n## 📄 License\n\nMIT License - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremiah-k%2Ffetchtastic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeremiah-k%2Ffetchtastic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeremiah-k%2Ffetchtastic/lists"}