A web-based RDAP client for querying domains, IP addresses, and ASNs. Has dark mode.
Tip
Try the live demo at rdap.xevion.dev to query domains, IPs, ASNs, and more in real-time.
RDAP (Registration Data Access Protocol) is the successor to WHOIS. It returns structured JSON instead of inconsistent plaintext, making it easier to parse and use programmatically.
The rdap.org client works fine, but I wanted something with dark mode and shareable URLs. Plus it was a good excuse to learn Next.js 16.
Main additions:
- Dark mode (actually important when you stare at this stuff all day)
- Every query gets a shareable URL
- Better type detection for inputs
- Cleaner UI with status badges and collapsible sections
- JSContact support alongside vCard
- Static export, no backend needed
Query types: domains, IPv4/IPv6 (with CIDR), ASNs, entity handles, nameservers, or raw RDAP URLs. Type detection is automatic but can be overridden.
Supported objects: domains, IP networks, autonomous systems, entities (contacts/registrars), and nameservers. Shows all the standard RDAP fields plus DNSSEC info when available.
Contacts: Displays both vCard (jCard) and JSContact (RFC 9553) formats. Shows names, organizations, emails, phones, addresses, etc.
UI stuff: Dark/light mode, copy buttons everywhere, collapsible sections, status badges with hover tooltips, relative timestamps ("2 days ago"), responsive layout.
Technical: Uses IANA bootstrap files to resolve RDAP server URLs. All queries happen client-side from your browser. Zod schemas for validation. Fully static build.
Uses pnpm:
pnpm install
pnpm dev # localhost:3000
pnpm build # static export
pnpm test # vitest
pnpm check # tsc + eslintFully static. Queries go directly from your browser to RDAP servers (no backend). Just run pnpm build and host the output anywhere.
CORS issue: Some RDAP servers don't set CORS headers, so those queries will fail in the browser. Might add an optional proxy later.
The demo at rdap.xevion.dev has telemetry (PostHog) to track what breaks. Query targets aren't logged for successful queries, only type/timing. Failed queries might include the target for debugging. Self-hosted builds have no telemetry.
PRs welcome. Uses ESLint, Prettier, Husky git hooks, and conventional commits.
MIT License © 2025 Ryan Walters

