Check domainname availability on CLI using RDAP (with WHOIS fallback)
A fast, robust CLI tool for checking domain availability using RDAP protocol with automatic WHOIS fallback and detailed domain information.
- β RDAP Protocol Support - Uses the modern Registration Data Access Protocol
- π IANA Bootstrap Registry - Dynamically discovers RDAP endpoints for any TLD
- π Automatic WHOIS Fallback - Gracefully falls back to WHOIS when RDAP isn't available
- π Detailed Information - Shows registrar, creation dates, expiration, and status
- π― Multiple TLD Support - Check domains across various TLDs in one command
- π Bulk Domain Checking - Process hundreds of domains from a text file
- π Optimized Concurrency - Lightning-fast parallel processing with intelligent rate limiting and TLD-based optimization
- π» Interactive Terminal UI - Navigate and explore domains in a beautiful terminal interface
- π JSON Output - Machine-readable output for integration with other tools
- π¨ Color-coded Results - Clear visual indicators for domain status
- π Debug Mode - Detailed logging for troubleshooting
- β‘ Lightweight & Fast
- After: https://github.com/saidutt46/domain-check
wget https://github.com/pepa65/domaincheck/releases/download/0.4.7/domaincheck
sudo mv domaincheck /usr/local/bin
sudo chown root:root /usr/local/bin/domaincheck
sudo chmod +x /usr/local/bin/domaincheck
If not installed yet, install a Rust toolchain, see https://www.rust-lang.org/tools/install
cargo install domaincheck
cargo install --git https://github.com/pepa65/domaincheck
git clone https://github.com/pepa65/domaincheck
cd domaincheck
rustup target add x86_64-unknown-linux-musl
cargo rel # Alias defined in .cargo/config.toml
The binary will be at target/x86_64-unknown-linux-musl/release/domaincheck
Even without a full Rust toolchain, rust binaries can be installed with the static binary cargo-binstall:
# Install cargo-binstall for Linux x86_64
# (Other versions are available at https://crates.io/crates/cargo-binstall)
wget github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
tar xf cargo-binstall-x86_64-unknown-linux-musl.tgz
sudo chown root:root cargo-binstall
sudo mv cargo-binstall /usr/local/bin/
Only a linux-x86_64 (musl) binary available: cargo-binstall domaincheck
It will be installed in ~/.cargo/bin/ which will need to be added to PATH!
Check domainname availability (TLD defaults to .com):
domaincheck example
Check a domain across multiple TLDs:
domaincheck example -t com org net io app
Get more detailed information about a domain:
domaincheck example.com -i
Check multiple domains from a file:
domaincheck --file domains.txt
domaincheck 0.4.109
Check domainname availability on CLI using RDAP (with WHOIS fallback)
Usage:
domaincheck [OPTIONS] [DOMAIN]
Arguments:
[DOMAIN] Domainname to check (without TLD for multiple TLD checking)
Options:
-t, --tld <TLD>... Check availability with these TLDs (space separated)
-f, --file <FILE> Input file with domains to check (one per line)
-j, --json Output results in JSON format
-u, --ui Launch interactive terminal UI dashboard
-c, --concurrency <CONCURRENCY> Max concurrent domain checks (max: 100) [default: 10]
-n, --no-whois Disable automatic WHOIS fallback
-v, --verbose Be extra verbose
-d, --debug Show detailed debug information and error messages
-h, --help Print help
-V, --version Print version
domaincheck example
Output:
π΄ example.com TAKEN
domaincheck myawesome -t com net org io
Output:
π΄ myawesome.com TAKEN
π’ myawesome.net AVAILABLE
π’ myawesome.org AVAILABLE
π΄ myawesome.io TAKEN
domaincheck google.com -i -p
Output:
π Checking: google with TLDs: com
π΄ google.com TAKEN 1997-09-15T04:00:00Z..2028-09-14T04:00:00Z @"MarkMonitor Inc." serverDeleteProhibited, serverTransferProhibited, serverUpdateProhibited
File domains.txt contains:
example.com
xyz123domain
startup.io
# This is a comment
test-site.org
domaincheck --file domains.txt
Output:
Starting bulk domain check with concurrency: 10
Results will stream as they complete:
π’ xyz123domain.com AVAILABLE (No info available for unregistered domains)
π΄ example.com TAKEN 1995-08-14T04:00:00Z..2025-08-13T04:00:00Z @"RESERVED-Internet Assigned Numbers Authority" client delete prohibited, client transfer prohibited, client update prohibited
π΄ test-site.org TAKEN (No info available)
π΄ startup.io TAKEN (No info available)
β
4 domains processed: π’ 1 available, π΄ 3 taken, β οΈ 0 unknown
domaincheck --file many-domains.txt --concurrency 50
domaincheck --file base-domains.txt --tld com org io
domaincheck startup -t com io xyz dev -u
domaincheck example.pizza -d
Output:
π Checking: example with TLDs: pizza
π No known RDAP endpoint for .pizza, trying bootstrap registry...
π’ example.pizza still AVAILABLE (No info available for unregistered domains)
domaincheck example -j
Output:
[
{
"domain": "example.com",
"available": false,
"info": {
"registrar": "RESERVED-Internet Assigned Numbers Authority",
"creation_date": "1995-08-14T04:00:00Z",
"expiration_date": "2025-08-13T04:00:00Z",
"status": [
"client delete prohibited",
"client transfer prohibited",
"client update prohibited"
]
}
}
]
domaincheck mydomain -t com net org -j |jq '.[] | select(.available==true) | .domain'
domaincheck example.com -ji |jq '.[] | .info.expiration_date'
The JSON output can be easily integrated with other tools:
# Find all available domains and save to a file
domaincheck business -t com net org io xyz -j |jq '.[] | select(.available==true) | .domain' -r > available_domains.txt
# Find all available domains in a file and save to a file
domaincheck --file domains.txt -j | jq '.[] | select(.available==true) | .domain' -r > available_domains.txt
- Attempts to check domain via RDAP using known registry endpoints
- If TLD isn't in the known list, uses IANA bootstrap to discover the endpoint
- Automatically falls back to WHOIS lookup if RDAP is unavailable or unsuccessful
- Extracts detailed information when requested and possible
- Uses intelligent concurrency control with rate limiting to prevent overloading servers
- Concurrent processing of multiple domains (up to 5 at once by default)
- Rate limiting to prevent overloading RDAP endpoints
- Automatic timeout handling to prevent hanging requests
- Small binary size for fast startup and low resource usage
domaincheck includes built-in support for many popular TLDs including:
com, net, org, io, app, dev, ai, co, xyz, me, info, biz, us, uk, eu, tech, blog, page, zone, shop, de, ca, au, fr, es, it, nl, jp, tv, cc, and others.
Additional TLDs can be checked using the bootstrap (-b) option.
| Feature | domain-check | whois-cli | dns-lookup |
|---|---|---|---|
| RDAP Protocol | β | β | β |
| Bootstrap Registry | β | β | β |
| Auto WHOIS Fallback | β | β | β |
| Detailed Info | β | β | β |
| Multiple TLDs | β | β | β |
| Bulk File Checking | β | β | β |
| Configurable Concurrency | β | β | β |
| Interactive UI | β | β | β |
| JSON Output | β | β | β |
| Concurrency Control | β | β | β |
| Speed | Fast β‘ | Medium | Medium |
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository.
- Create your feature branch (
git checkout -b feature/amazing-feature). - Commit your changes (
git commit -m 'Add some amazing feature'). - Push to the branch (
git push origin feature/amazing-feature). - Open a Pull Request.
This project is licensed under either of:
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.