Fetchtastic
A simple, cross-platform utility for downloading and managing Meshtastic firmware and client app releases.
Fetchtastic automatically downloads the latest Meshtastic firmware and selected client app assets from GitHub, with support for notifications, scheduling, and repository browsing.
Requires Python 3.10+; Python 3.9 and earlier are unsupported.
✨ Features
- 🔄 Automatic Downloads: Latest firmware and Meshtastic client app assets
- ⚡ Async Download Engine:
aiohttp-based downloads with connection pooling and retry/backoff - 📱 Cross-Platform: Linux, macOS, Windows, and Android (Termux)
- 🗂️ Repository Browser: Browse and download files from meshtastic.github.io
- 🔔 Notifications: Push notifications via NTFY
- ⏰ Scheduling: Automatic downloads via cron/startup scripts
- 🎯 Smart Selection: Choose specific devices, APKs, and desktop installers
- 📦 Auto-extraction: Extract firmware files from zip archives
- ✅ Stronger Integrity Checks: Hash-based verification and ZIP integrity validation
- 🚦 GitHub API Resilience: Centralized release fetching, defensive parsing, caching, and rate-limit-aware behavior
- 🧵 Parallel Validation: Release completeness checks run in parallel for faster scans
- 🔧 Easy Setup: One-command installation with guided setup
🚀 Quick Start
One-Line Installation
Requires Python 3.10+.
Linux/MacOS/Android (Termux):
curl -sSL https://raw.githubusercontent.com/jeremiah-k/fetchtastic/main/src/fetchtastic/tools/setup_fetchtastic.sh | bash
Security Note: For security-conscious users, you can inspect the script before running it.
Windows (PowerShell):
irm https://raw.githubusercontent.com/jeremiah-k/fetchtastic/main/src/fetchtastic/tools/setup_fetchtastic.ps1 | iex
Security Note: For security-conscious users, you can inspect the script before running it.
Basic Usage
# Run setup (first time)
fetchtastic setup
# Download latest releases
fetchtastic download
# Browse repository files
fetchtastic repo browse
📖 Documentation
Installation Guides
- Linux Installation - Complete installation guide for Linux distributions
- macOS Installation - Installation guide for macOS with Homebrew
- Windows Installation - Windows installation with integration features
- Termux Installation - Android installation using Termux
Usage
- Usage Guide - Complete guide to using Fetchtastic
- Configuration Reference - YAML settings, advanced options, and latest symlink behavior
🔧 Commands
fetchtastic setup # Run the setup process
fetchtastic download # Download firmware and client app assets
fetchtastic cache clear # Clear cached API data
fetchtastic repo browse # Browse repository files
fetchtastic repo clean # Clean repository downloads
fetchtastic topic # Show NTFY topic
fetchtastic version # Show version
fetchtastic clean # Remove all configuration
🏗️ Architecture Highlights
- Shared GitHub release source: Release parsing and validation are centralized for consistency across firmware and client app assets.
- Async + sync compatibility: Async download paths are first-class, with sync fallbacks when async libraries are unavailable.
- Defensive verification flow: Size checks, hash baselines, and ZIP integrity checks are combined to reduce false positives.
- Better retry semantics: Retryable vs non-retryable errors are preserved to improve behavior and diagnostics.
📁 File Organization
Downloads are organized in a clean structure:
~/Downloads/Meshtastic/
├── app/
│ ├── v2.7.14/
│ │ ├── app-fdroid-universal-release.apk
│ │ ├── Meshtastic-2.7.14.dmg
│ │ └── release_notes-v2.7.14.md
│ ├── prerelease/ # Prerelease client app builds (optional)
│ └── snapshots/ # Rolling snapshot debug builds (opt-in)
├── firmware/
│ ├── v2.3.2/
│ ├── v2.3.1/
│ ├── repo-dls/ # Repository browser downloads
│ ├── prerelease/ # Prerelease firmware (optional)
│ └── nightlies/ # Rolling experimental firmware nightlies (opt-in)
APKs and desktop installers intentionally share app/<version>/ because they are treated as client app assets from the same release pipeline.
🔔 Notifications
Get notified when new releases are downloaded:
- Enable NTFY during setup
- Install the ntfy app or use the web interface
- Subscribe to your unique topic
- Receive push notifications for new downloads
⏰ Scheduling
Set up automatic downloads:
- Linux/macOS: Cron jobs (daily at 3 AM)
- Windows: Startup folder shortcuts
- Termux: Boot scripts and cron jobs
🆙 Upgrading
Automatic (recommended):
- Windows: Use Start Menu → Fetchtastic → "Check for Updates"
- Linux/macOS/Termux: Re-run the installation script
Manual:
pipx upgrade fetchtastic
🤝 Contributing
Contributions are welcome! Please feel free to:
- Report bugs and issues
- Suggest new features
- Submit pull requests
- Improve documentation
Visit the GitHub repository to get started.
🧪 Development & Testing
# create and activate environment
python3 -m venv .venv
. .venv/bin/activate
# install dependencies
pip install -e ".[test]"
# run tests
python -m pytest tests/
Test suite organization uses markers such as unit, integration, core_downloads, user_interface, configuration, and infrastructure.
📄 License
MIT License - see LICENSE for details.
Metadata
Release files for fetchtastic 0.11.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fetchtastic-0.11.4.tar.gz | 635.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fetchtastic-0.11.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 957.7 kB
Release files / fetchtastic-0.11.4.tar.gz
| Download URL | fetchtastic-0.11.4.tar.gz |
|---|---|
| Size | 635.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
12da059e22faf031b653cd683d856257afa8c50b87537aee609a7eae228e18f7
|
|
BLAKE2b-256 checksum How to use checksums |
4d2a9a99ef298ced32543c41147321f3536bac3a4daabfddc2aa1fcb3d908fe5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency logRelease files / fetchtastic-0.11.4-py3-none-any.whl
| Download URL | fetchtastic-0.11.4-py3-none-any.whl |
|---|---|
| Size | 321.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
271a0918f3b01cad94b4f384cdb589b435490b459eb018b8b37ec7e18719b039
|
|
BLAKE2b-256 checksum How to use checksums |
a74523e4038fa7dc18334b8a65222e89b03828100c7ae87d9ad6b36124d5f441
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.
Transparency log