Batch Download & Sync GitHub Repositories at Scale
A modern, high-performance Python CLI tool for cloning or archiving GitHub repositories concurrently with advanced language, star, and recency filtering.
$ uv run main.py --username tiangolo --max-workers 5 --min-stars 100 --language Python
🚀 PyScript-GitHubRepo v0.2.0
User: tiangolo | Token: *** | Mode: zip
🔍 Fetching repositories for: tiangolo...
✅ Found 12 repositories matching criteria.
📥 Starting download to: D:\Code\PyScript-GitHubRepo\repos
Concurrency: 5 threads
✅ Completed fastapi [====================] 100%
✅ Completed sqlmodel [====================] 100%
⏭️ Skipped tyro (No update) [====================] 100%
============================================================
✨ Sync Completed!
Engineered for Velocity & Flexibility
Designed to handle high concurrency while keeping rate limits and bandwidth footprint minimal.
High Concurrency
Parallel downloads using configurable thread pools. Synchronizes hundreds of repositories in seconds.
Dual-Mode Download
Support for git clone (retains commit history) or lightweight zip
archiving (fastest download, low disk usage).
Metadata Filtering
Filter target repositories locally by primary programming language, star threshold, and last updated timestamps.
Automated Reports
Generates unified summary logs and formatted reports in Markdown, CSV, or structured JSON configurations automatically.
Incremental Sync
Smart state checks query local metadata sync logs to skip redundant downloads of unmodified repositories.
Agent & CLI-First
Supports standardized --json mode pipelines and reliable exit codes suited for
orchestration engines.
Get Started in Seconds
PyScript-GitHubRepo requires Python 3.11+. The easiest way to get started is using Astral's
uv runner, which automates environment creation and fetches dependencies instantly.
Cloning the repository
git clone https://github.com/NotSleeply/PyScript-GitHubRepo.git cd PyScript-GitHubRepo
Installing dependencies
uv pip install -e .
Running a query
uv run main.py --username tiangolo --max-repos 5
⚙️ Config File Example (config.yaml)
github: username: "octocat" token: "ghp_yourpersonalaccesstoken" download: mode: "zip" # "git" or "zip" save_path: "./repos" target_ref: "main" # target branch/tag filter: language: "Python" min_stars: 100 max_repos: 50 concurrency: max_workers: 5 # thread limit
Pass config location to CLI via --config config.yaml. Any command line
arguments take priority over YAML keys.