A professional name availability checker that validates package/username availability across NPM and GitHub ecosystems with advanced rate limiting, retry logic, and comprehensive reporting.
NPM-GitNameCheck is a sophisticated CLI tool designed for developers, brand managers, and organizations who need to:
- Find available names across multiple platforms simultaneously
- Validate brand consistency before launching new projects
- Audit namespace availability for package ecosystems
- Generate comprehensive reports for decision-making
β¨ Multi-Platform Checking
- NPM package registry
- GitHub username/organization
- GitHub repository availability
- Direct GitHub URL validation
π Enterprise-Grade Performance
- Configurable concurrency (default: 10 parallel checks)
- Intelligent retry mechanism with exponential backoff
- Jittered delays to prevent rate limiting
- Timeout protection for network calls
π Professional Reporting
- JSON output for programmatic processing
- Plain text for quick reference
- CSV with detailed status per service
- Timestamped results with error tracking
π Production Ready
- DNS-safe name validation
- GitHub token support for higher rate limits
- Proxy support for restricted environments
- Graceful error handling
npm install -g npm-gitnamechecknpm install npm-gitnamecheckCreate wordlist.txt with names to check (one per line):
myawesomeapp
cooltoolkit
devutils
brandname
npx npm-gitnamecheck wordlist.txtThe tool generates three files in your current directory:
free-names.txt- Simple list of fully available namesfree-names.json- Structured data with timestampsnames-report.csv- Detailed report with per-service status
npm-gitnamecheck wordlist.txtnpm-gitnamecheck wordlist.txt \
--concurrency 20 \
--retries 5 \
--github-token ghp_yourtoken \
--out ./results| Option | Description | Default |
|---|---|---|
--concurrency N |
Number of parallel checks | 10 |
--retries N |
Retry attempts for failed requests | 3 |
--github-token TOKEN |
GitHub personal access token | null |
--proxy PROXY |
HTTP(S) proxy URL | null |
--out DIR |
Output directory for results | Current directory |
For higher rate limits (5,000 req/hour vs 60 req/hour), use a GitHub token:
Visit GitHub Settings β Developer Settings β Personal Access Tokens
Required permissions: No special scopes needed (public access only)
npm-gitnamecheck wordlist.txt --github-token ghp_yourtokenEnvironment Variable (Alternative):
export GITHUB_TOKEN=ghp_yourtoken
npm-gitnamecheck wordlist.txtPlain text list of fully available names:
myawesomeapp
devutils
Structured data with metadata:
[
{
"name": "myawesomeapp",
"when": "2025-11-08T12:34:56.789Z"
}
]Comprehensive report with all checks:
name,ok,start,end,services,raw_results
myawesomeapp,true,2025-11-08T12:34:56Z,2025-11-08T12:34:58Z,"npm:free|github:user:free|github:repo:free|github:web:free","[...]"
brandname,false,2025-11-08T12:34:56Z,2025-11-08T12:34:59Z,"npm:taken|github:user:free|github:repo:free|github:web:free","[...]"
graph TD
A[Read Wordlist] --> B[Normalize Names]
B --> C{DNS-Safe?}
C -->|No| D[Mark Invalid]
C -->|Yes| E[Parallel Checks]
E --> F[NPM Registry]
E --> G[GitHub User API]
E --> H[GitHub Repo API]
E --> I[GitHub Web Check]
F --> J[Aggregate Results]
G --> J
H --> J
I --> J
J --> K{All Free?}
K -->|Yes| L[Add to Free List]
K -->|No| M[Mark as Taken]
L --> N[Generate Reports]
M --> N
- Exponential backoff:
200ms Γ 2^attemptfor NPM,300ms Γ 2^attemptfor GitHub - Jitter: Random variance to prevent thundering herd
- Configurable: Adjust retry count based on network conditions
- Concurrency control: Limits parallel requests
- Jittered delays: 100-600ms between batches
- Request spacing: 150-350ms between individual checks
- Timeout protection: 8-9 second timeouts per request
import { checkName, checkNpm, checkGitHubUser } from 'npm-gitnamecheck';
// Check single name across all services
const result = await checkName('mypackage');
console.log(result);
// {
// name: 'mypackage',
// ok: true,
// results: [
// { service: 'npm', status: 'free', code: 404 },
// { service: 'github:user', status: 'free', code: 404 },
// ...
// ]
// }
// Check specific service
const npmStatus = await checkNpm('mypackage');
console.log(npmStatus); // { service: 'npm', status: 'free', code: 404 }# Check if your brand name is available
echo "mybrand" > brand.txt
npm-gitnamecheck brand.txt# Audit 1000 potential names with high concurrency
npm-gitnamecheck candidates.txt --concurrency 30 --retries 5# Validate names before release
npm-gitnamecheck names.txt --out ./build/reports# Check variations of your brand
npm-gitnamecheck variations.txt --github-token $GITHUB_TOKENnpm-gitnamecheck wordlist.txt \
--concurrency 50 \
--retries 2 \
--github-token $GITHUB_TOKENnpm-gitnamecheck wordlist.txt \
--concurrency 5 \
--retries 10npm-gitnamecheck wordlist.txt \
--proxy http://proxy.company.com:8080 \
--github-token $GITHUB_TOKENSymptom: Many status: 'error' results
Solutions:
- Reduce
--concurrency(try5) - Add GitHub token with
--github-token - Increase
--retriesto5or10
Symptom: error: AbortError or timeout messages
Solutions:
- Check network connectivity
- Increase timeout in code (modify
fetchWithTimeout) - Use
--proxyif behind firewall
Symptom: status: 'invalid' for valid-looking names
Validation rules:
- Must be lowercase
- Only
a-z,0-9,-,_allowed - No spaces or special characters
- Use GitHub Token: Always use a token for serious checking
- Start Conservative: Begin with low concurrency (10), increase if stable
- Batch Processing: For >1000 names, split into multiple runs
- Monitor Output: Watch console for errors during execution
- Validate Input: Ensure wordlist has one name per line, no empty lines
Contributions welcome! Areas for improvement:
- Additional services (PyPI, Docker Hub, etc.)
- Progress bar for long-running checks
- Resume functionality for interrupted runs
- Domain availability checking
- Social media handle checking
MIT License - see LICENSE file for details
Farbod Akvan
Published by FireXCore
- Website: firexcore.com
- GitHub: @FireXCore
Built with modern Node.js APIs and designed for real-world production use. Special thanks to the open-source community for inspiration and feedback.
- Issues: GitHub Issues
- Questions: Open a discussion or contact via firexcore.com
- Security: Report vulnerabilities privately via GitHub Security Advisory
Made with β€οΈ by FireXCore