A powerful CLI for mass archiving GitHub repositories with parallel processing and comprehensive error handling.
- β¨ Mass Archive - Archive multiple repositories in parallel
- π Secure Auth - Token stored locally at
~/.github-archiver/config.json - β‘ Parallel Processing - Configurable concurrency (1-50)
- π Flexible Input - Load repos from editor, file, or stdin
- π Validation - Dry-run mode to validate without archiving
- π Progress Tracking - Real-time progress bars and ETA
- π‘οΈ Error Recovery - Comprehensive error handling with helpful guidance
- π Detailed Logging - Structured logging to files and console
npm install -g github-archiveror with Bun:
bun install -g github-archivergit clone https://github.com/mynameistito/github-archiver.git
cd github-archiver
bun install && bun run build
bun install -g .bun install
bun run dev -- <command>Note: This project is optimized for Bun. While it works with Node.js (v22+), Bun provides faster installation, execution, and development experience.
# Authenticate
github-archiver auth login
# Archive (opens editor to input repos)
github-archiver archiveManage GitHub authentication.
| Command | Description |
|---|---|
auth login |
Authenticate with Personal Access Token |
auth logout |
Remove stored token |
auth status |
Check authentication status |
Archive multiple repositories.
github-archiver archive [options]| Option | Default | Description |
|---|---|---|
--file <path> |
- | Read repository URLs from file |
--stdin |
- | Read from stdin |
--dry-run |
false | Validate without archiving |
--concurrency <n> |
3 | Parallel operations (1-50) |
--timeout <n> |
300 | API timeout in seconds (10-3600) |
--verbose |
false | Enable verbose logging |
--force |
false | Skip confirmation prompts |
Examples:
# Interactive (opens editor)
github-archiver archive
# From file
github-archiver archive --file repos.txt
# From stdin
cat repos.txt | github-archiver archive --stdin
# Dry-run
github-archiver archive --file repos.txt --dry-run
# High concurrency
github-archiver archive --file repos.txt --concurrency 10
# Force without confirmation
github-archiver archive --file repos.txt --forceSupported formats:
- HTTPS:
https://github.com/owner/repoorhttps://github.com/owner/repo.git - SSH:
git@github.com:owner/repo.gitorgit@github.com:owner/repo - Shorthand:
owner/repo
File Example:
# Repositories to archive
https://github.com/facebook/react
torvalds/linux
owner/private-repo
# Comments ignored
https://github.com/nodejs/node
- Scope:
repo(Full control of private repositories) - Minimum Permissions: Push access to target repositories
Generate token: https://github.com/settings/tokens/new β Create with repo scope β Run github-archiver auth login
π Checking authentication...
β
Authenticated as: username
π Getting repositories...
π Will archive 5 repositories:
1. facebook/react
2. torvalds/linux
3. owner/repo-1
4. owner/repo-2
5. owner/repo-3
Are you sure you want to archive these repositories? [y/N]: y
Starting to archive repositories... (concurrency: 3)
[======================= ] 4/5 (80%) - owner/repo-3
ββββββββββββββββββββββββββββββββββββββ
β Archive Operation Summary β
ββββββββββββββββββββββββββββββββββββββ€
β Successful: 5 β
β Skipped: 0 β
β Failed: 0 β
ββββββββββββββββββββββββββββββββββββββ€
β Total: 5 β
β Duration: 2m 45s β
ββββββββββββββββββββββββββββββββββββββ
β
All repositories processed successfully!
No token found: Run github-archiver auth login
Invalid/expired token: Generate new token at https://github.com/settings/tokens β auth logout β auth login
Permission denied: Verify repo ownership/push access, check repo scope, ensure repo isn't already archived
Rate limit exceeded: Wait (resets hourly), lower --concurrency 1, increase --timeout 600
Network error/timeout: Check connection, GitHub API may be unavailable, retry with --timeout 600
Repository not found: Verify URL, check if deleted, confirm GitHub access
Config: ~/.github-archiver/config.json (Linux/macOS) or %USERPROFILE%\.github-archiver\config.json (Windows)
Logs: ~/.github-archiver/logs/ (Linux/macOS) or %USERPROFILE%\.github-archiver\logs\ (Windows)
src/
βββ commands/ # CLI commands (auth, archive)
βββ services/ # GitHub API, archiving, auth management
βββ utils/ # Parsing, formatting, logging
βββ types/ # TypeScript definitions
βββ constants/ # Configuration constants
tests/
βββ unit/ # Unit tests
Core Services:
- GitHubService: GitHub API interactions with retry logic
- Archiver: Parallel archiving with p-queue
- AuthManager: Secure token storage
- InputHandler: Input from editor, file, or stdin
- ProgressDisplay: Progress bar and summary output
bun install
# Development commands
bun run typecheck # Check TypeScript
bun run test # Run unit tests
bun run test:coverage # Run tests with coverage
bun run build # Build production bundle
bun run lint # Check code style
bun run format # Auto-format code
bun run dev -- auth login # Run dev modeUsing npm instead?
npm install
npm run typecheck # Equivalent commands
npm run test
npm run build
npm run lint
npm run formatThis project uses Ultracite (Biome) for:
- Strict TypeScript (no implicit
any) - Accessibility, performance, security best practices
- Consistent formatting
- Comprehensive error handling
Run code quality checks:
# Check for issues
bun run lint
# Auto-fix and format code
bun run formatSee AGENTS.md for detailed code standards and best practices.
This project uses semantic-release for automated versioning and publishing.
Commit format (Conventional Commits):
feat:β minor bumpfix:β patch bumpBREAKING CHANGE:β major bumpchore:,docs:,test:β no bump
Pushing to main triggers automatic release. See docs/RELEASE.md for detailed setup and workflow.
- Install dependencies:
bun install - Follow code standards:
bun run format - Add tests for new features
- Ensure
bun run typecheckandbun run testpass - Create pull request with clear description
Before committing:
bun run format # Auto-fix code style
bun run lint # Check for issues
bun run typecheck # Verify TypeScript
bun run test # Run test suite
bun run build # Build production bundleMIT - See LICENSE file for details.
Check the Troubleshooting section or open an issue on GitHub.
- Runtime: Bun (primary) or Node.js 22+
- Package Manager: Bun (recommended) or npm
- Language: TypeScript
- CLI Framework: Commander.js
- GitHub API: Octokit
- Logging: Winston
- Code Quality: Biome (via Ultracite preset)
- Task Queue: p-queue
- Release Management: Changesets
Built with TypeScript, Commander.js, Octokit, Winston, Biome, and optimized for Bun runtime.