https://github.com/saidutt46/domain-check
High-performance Rust library & CLI for domain availability checks using RDAP & WHOIS, with async concurrency, bulk processing, and robust error handling.
https://github.com/saidutt46/domain-check
async cli concurrency domain-check domain-check-lib domains library rdap rust rust-crate whois
Last synced: about 1 month ago
JSON representation
High-performance Rust library & CLI for domain availability checks using RDAP & WHOIS, with async concurrency, bulk processing, and robust error handling.
- Host: GitHub
- URL: https://github.com/saidutt46/domain-check
- Owner: saidutt46
- License: other
- Created: 2025-04-12T08:51:26.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-07-15T03:25:10.000Z (3 months ago)
- Last Synced: 2025-08-04T04:51:59.980Z (2 months ago)
- Topics: async, cli, concurrency, domain-check, domain-check-lib, domains, library, rdap, rust, rust-crate, whois
- Language: Rust
- Homepage: https://crates.io/crates/domain-check
- Size: 237 KB
- Stars: 128
- Watchers: 3
- Forks: 6
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starts - saidutt46/domain-check - High-performance Rust library & CLI for domain availability checks using RDAP & WHOIS, with async concurrency, bulk processing, and robust error handling. (rust)
README
# domain-check
**Fast, powerful CLI tool for checking domain availability using RDAP and WHOIS protocols.**
[](https://github.com/saidutt46/homebrew-domain-check)
[](https://crates.io/crates/domain-check)
[](https://crates.io/crates/domain-check-lib)
[](https://crates.io/crates/domain-check)
[](https://opensource.org/licenses/Apache-2.0)
![]()
---
## Why domain-check?
Tired of switching between browser tabs and WHOIS websites to check if domains are available? **domain-check** brings fast, accurate domain availability checking directly to your terminal. Built in Rust for speed, with **configuration files**, **environment variables**, **custom presets**, and bulk processing for when you need to check hundreds of domains at once.
Perfect for developers, domain investors, startups, and anyone who works with domains regularly.
---
## 📦 Installation
### Homebrew (macOS)
```bash
brew install domain-check
```### Cargo (All Platforms)
```bash
cargo install domain-check
```### Download Binaries
Pre-built binaries available for macOS, Linux, and Windows: [GitHub Releases](https://github.com/saidutt46/domain-check/releases)---
## 🚀 Quick Start
### Check a single domain
```bash
domain-check example.com
# 🔴 example.com is TAKEN
```### Check multiple TLD variations
```bash
domain-check mystartup -t com,io,ai,dev
# 🔍 Checking 4 domains...
# 🔴 mystartup.com is TAKEN
# 🟢 mystartup.io is AVAILABLE
# 🟢 mystartup.ai is AVAILABLE
# 🟢 mystartup.dev is AVAILABLE
```### Check ALL TLDs at once
```bash
# Check against ALL 35+ known TLDs in seconds
domain-check myapp --all
# 🔍 Checking 35+ domains across all TLDs...
# 🟢 myapp.com is AVAILABLE
# 🔴 myapp.io is TAKEN
# 🟢 myapp.ai is AVAILABLE
# 🟢 myapp.dev is AVAILABLE
# ... (38 more results in ~2 seconds)
```### Use smart presets
```bash
# Check against startup-focused TLDs (8 TLDs)
domain-check myapp --preset startup# Enterprise-focused TLDs (6 TLDs)
domain-check mybrand --preset enterprise
```### Bulk check from file
```bash
echo -e "myapp\nmystartup\ncoolproject" > domains.txt
domain-check --file domains.txt -t com,org --json > results.json
```---
## ⚙️ Configuration & Customization
### Configuration Files
Create persistent settings with configuration files:
```toml
# .domain-check.toml
[defaults]
concurrency = 25
preset = "startup"
pretty = true
timeout = "8s"
bootstrap = true[custom_presets]
my_startup = ["com", "io", "ai", "dev", "app"]
my_enterprise = ["com", "org", "net", "biz", "info"]
my_crypto = ["com", "org", "crypto", "blockchain"][output]
default_format = "pretty"
csv_headers = true
```**Configuration file locations (checked in order):**
- `./domain-check.toml` (project-specific)
- `~/.domain-check.toml` (user global)
- `~/.config/domain-check/config.toml` (XDG standard)### Environment Variables
Perfect for CI/CD and automation:
```bash
# Basic settings
export DC_CONCURRENCY=50
export DC_PRESET=startup
export DC_PRETTY=true
export DC_BOOTSTRAP=true# File locations
export DC_CONFIG=/path/to/config.toml
export DC_FILE=/path/to/domains.txt# Use in commands
DC_TIMEOUT=30s domain-check mystartup
```### Custom Presets
Define your own TLD combinations:
```bash
# Use custom preset from config file
domain-check mystartup --preset my_crypto# Via environment variable
DC_PRESET=my_startup domain-check mystartup
```---
## 📖 Command Reference
### Usage
```
domain-check [OPTIONS] [DOMAINS]...
```### Arguments
- `...` - Domain names to check (supports both base names and FQDNs)### Core Options
| Option | Description | Example |
|--------|-------------|---------|
| `-t, --tld ` | Specify TLDs for base names | `-t com,org,io` |
| `--all` | Check against all 42+ known TLDs | `--all` |
| `--preset ` | Use TLD preset (startup/enterprise/country) | `--preset startup` |
| `-f, --file ` | Read domains from file | `-f domains.txt` |
| `--config ` | Use specific config file | `--config my-config.toml` |### Performance Options
| Option | Description | Default |
|--------|-------------|---------|
| `-c, --concurrency ` | Max concurrent checks (1-100) | `20` |
| `--force` | Override safety limits | |
| `--streaming` | Show results as they complete | |
| `--batch` | Collect all results before showing | |### Output Options
| Option | Description | Example |
|--------|-------------|---------|
| `-p, --pretty` | Colorful output with emojis | `--pretty` |
| `-j, --json` | Output in JSON format | `--json` |
| `--csv` | Output in CSV format | `--csv` |
| `-i, --info` | Show detailed domain information | `--info` |### Protocol Options
| Option | Description | Default |
|--------|-------------|---------|
| `-b, --bootstrap` | Use IANA bootstrap for unknown TLDs | `false` |
| `--no-whois` | Disable WHOIS fallback | `false` |### Debugging
| Option | Description |
|--------|-------------|
| `-d, --debug` | Show detailed debug information |
| `-v, --verbose` | Enable verbose logging |
| `-h, --help` | Show help information |
| `-V, --version` | Show version |### Environment Variables
| Variable | Description | Example |
|----------|-------------|---------|
| `DC_CONCURRENCY` | Default concurrency | `DC_CONCURRENCY=50` |
| `DC_PRESET` | Default preset | `DC_PRESET=startup` |
| `DC_TLD` | Default TLD list | `DC_TLD=com,io,dev` |
| `DC_PRETTY` | Enable pretty output | `DC_PRETTY=true` |
| `DC_TIMEOUT` | Request timeout | `DC_TIMEOUT=10s` |
| `DC_BOOTSTRAP` | Enable bootstrap | `DC_BOOTSTRAP=true` |
| `DC_CONFIG` | Config file path | `DC_CONFIG=my-config.toml` |
| `DC_FILE` | Domains file path | `DC_FILE=domains.txt` |---
## 🎯 Choose Your Path
**Just need CLI?** You're all set! Check out our [CLI Examples](./docs/CLI.md) for advanced usage patterns.
**Building a Rust app?** Use our library:
```toml
[dependencies]
domain-check-lib = "0.6.0"
```
See the [Library Documentation](https://docs.rs/domain-check-lib) for integration examples.**Need bulk domain processing?** See [Advanced Examples](./docs/EXAMPLES.md) for enterprise workflows.
---
## ✨ Key Features
🌐 **Universal Coverage** - Check against ALL 35+ TLDs with `--all` or use smart presets
⚡ **Lightning Fast** - Concurrent processing up to 100 domains simultaneously
📊 **Rich Output Options** - Beautiful terminal display, JSON/CSV for automation, detailed info mode
📁 **Bulk Processing** - Process thousands of domains from files with real-time streaming results
⚙️ **Configuration Files** - Persistent settings with TOML configuration files
🔧 **Environment Variables** - Full DC_* environment variable support for automation
🎯 **Custom Presets** - Define your own TLD combinations for repeated use---
## 📋 Examples
### Basic Usage
```bash
# Single domain
domain-check example.com# Multiple domains with pretty output
domain-check example.com google.com --pretty# Check startup-focused TLDs
domain-check mystartup --preset startup# Check all available TLDs
domain-check myapp --all --streaming
```### Configuration-Driven Workflow
```bash
# One-time setup
cat > .domain-check.toml << 'EOF'
[defaults]
concurrency = 25
preset = "startup"
pretty = true[custom_presets]
my_stack = ["com", "io", "dev", "app"]
EOF# Now simple commands use your preferences
domain-check mystartup # Uses startup preset, pretty output, 25 concurrency
domain-check --preset my_stack myproject # Uses custom preset
```### Automation & CI/CD
```bash
# Environment-driven configuration
DC_CONCURRENCY=50 DC_PRESET=enterprise domain-check --file domains.txt --json# Docker usage
docker run -e DC_PRESET=startup domain-check:latest myapp# GitHub Actions
- name: Check domains
run: |
export DC_CONCURRENCY=30
domain-check --file required-domains.txt --json
```### Advanced Workflows
```bash
# Domain research pipeline
domain-check --file ideas.txt --preset startup --csv > research.csv# Brand protection monitoring
domain-check --file brand-variations.txt --all --json > monitoring.json# Performance testing with high concurrency
domain-check --file large-list.txt --concurrency 75 --streaming
```---
## 🔗 Resources
- **CLI Documentation**: [Command Reference & Examples](./docs/CLI.md)
- **Library Documentation**: [docs.rs/domain-check-lib](https://docs.rs/domain-check-lib)
- **Advanced Examples**: [Enterprise Workflows](./docs/EXAMPLES.md)
- **Changelog**: [CHANGELOG.md](./CHANGELOG.md)
- **Contributing**: [CONTRIBUTING.md](./CONTRIBUTING.md)### Crates
- **CLI Tool**: [crates.io/crates/domain-check](https://crates.io/crates/domain-check)
- **Library**: [crates.io/crates/domain-check-lib](https://crates.io/crates/domain-check-lib)---
## 📝 License
Licensed under the Apache License, Version 2.0 - see the [LICENSE](LICENSE) file for details.
---
*Built with ❤️ in Rust*