Replace imperative theme toggling logic with declarative THEME_CONFIG object for cleaner, more maintainable code. Add type safety with Theme type and isTheme type guard.
rdap
A modern RDAP query client built with Next.js and React. Query domains, IP addresses, ASNs, and more. Now with dark mode.
Tip
Try the live demo at rdap.xevion.dev to query domains, IPs, ASNs, and more in real-time.
What is RDAP?
RDAP (Registration Data Access Protocol) is the modern successor to WHOIS, providing structured, machine-readable access to domain registration and network resource data. Instead of parsing inconsistent text output, RDAP delivers standardized JSON responses with richer metadata.
Why?
The tool hosted by rdap.org is fantastic, but it's too simple, and isn't as overly-complicated and annoying as I want it to be. So, I built my own. Mine has dark mode.
Inspired by the rdap.org client, this project adds several features I wanted:
- 🌙 Dark Mode: Because the blistering white of other RDAP clients is painful to look at
- 🔗 Shareable Links: Every query generates a unique URL you can bookmark or share
- 🎨 Modern Interface: Intuitive type detection, status badges, and responsive design
- 📊 Rich Data Display: Comprehensive support for all RDAP entity types, DNSSEC, JSContact, vCard, and more
- ⚡ Advanced Features: Follow referrals to registrars, modern JSContact format support, export/copy JSON responses
- 🏠 Self-Hostable: Static site that you can deploy anywhere for complete control
Features
Query Capabilities
- Multiple Input Types: IPv4/IPv6 (with CIDR notation), domain names, TLDs, ASNs, entity handles, or raw RDAP URLs
- Smart Auto-Detection: Automatically identifies query types with visual feedback
- Manual Override: Lock query type when auto-detection isn't enough
- Follow Referrals: Automatically follows redirects to registrar RDAP servers for complete data
- JSContact Support: Modern JSContact (RFC 9553) format alongside traditional vCard
Supported Entity Types
Full rendering support for all RDAP object classes:
- Domains: Name, status, nameservers, DNSSEC, registrar info, creation/expiry dates
- IP Networks: IPv4/IPv6 ranges, allocation dates, network types, parent/child relationships
- Autonomous Systems: AS numbers, names, registration details
- Entities: Contacts, registrars, registrants with role information and public IDs
- Nameservers: Hostnames with IPv4/IPv6 address mappings
Contact Information
- Dual Format Support: Both legacy vCard (jCard) and modern JSContact (RFC 9553)
- Rich Contact Data: Names, organizations, emails, phone numbers, addresses, URLs, titles, and roles
- Structured Display: Clean presentation of hierarchical contact information
DNS Security (DNSSEC)
- Zone signing and delegation status indicators
- DS (Delegation Signer) records with key tags, algorithms, digest types
- DNSKEY records with flags, protocols, and public keys
- Maximum signature lifetime display
User Experience
- 🎨 Theme Toggle: Full dark mode and light mode support with persistence
- 📋 Data Export: Copy individual values, entire JSON responses, or download as files
- 🔍 Raw View Toggle: Switch between formatted display and raw JSON
- 📊 Status Badges: Interactive badges for 28+ RDAP status types with hover definitions
- ⏱️ Relative Timestamps: Human-readable event times with precise date fallback
- 📱 Responsive Design: Mobile-first layout that adapts from phone to desktop
Error Handling & Validation
- Comprehensive HTTP Error Messages: Clear explanations for 302, 400, 403, 404, 500 responses
- Input Validation: Type checking with helpful warnings when manual type doesn't match input
- Schema Validation: Zod-based validation with readable error messages
- Bootstrap Integration: Automatic IANA registry bootstrap for URL resolution
Technical Details
- Registry Bootstrap: Automatic fetching from IANA bootstrap files (DNS, IPv4, IPv6, ASN, object tags)
- CIDR Matching: Proper network range matching for IP lookups
- Internationalization: Full Unicode domain name support
- Type Safety: Comprehensive TypeScript types inferred from Zod schemas
- Static Site: No backend required for basic usage, fully client-side queries
Installation & Usage
This project uses pnpm as its package manager. Make sure you have Node.js installed, then run:
# Install dependencies
pnpm install
# Run development server
pnpm dev
# Build for production
pnpm build
# Start production server
pnpm start
The development server will be available at http://localhost:3000.
Additional Commands
# Run tests
pnpm test
# Run tests with UI
pnpm test:ui
# Type checking
pnpm type-check
# Linting
pnpm lint
pnpm lint:fix
# Code formatting
pnpm format
pnpm format:check
Tech Stack
- Next.js 15: React framework with static site generation (SSG only)
- React 19: UI library with modern hooks
- TypeScript 5.9: Type-safe development
- Radix UI Themes: Accessible component primitives and design system
- Tailwind CSS 4: Utility-first styling
- Zod 4: Runtime schema validation
- Vitest: Fast unit testing framework
- next-themes: Theme management
Self-Hosting
This is a fully static site with no backend required for basic usage. It generates all HTML at build time and queries RDAP servers directly from your browser.
Key characteristics:
- ✅ All RDAP queries made directly from your browser to source servers
- ✅ No intermediary servers logging your lookups
- ✅ Minimal local storage (theme preference only)
- ✅ Fully self-hostable for complete control
Note on CORS: Some RDAP servers don't enable CORS headers, preventing direct browser access. For these servers, you'll see an error. Future versions may include an optional proxy for these cases.
To self-host:
# Build the static site
pnpm build
Contributing
Issues and pull requests are welcome! This project uses:
- ESLint for linting
- Prettier for code formatting
- Husky for git hooks
- Conventional Commits for commit messages
License
MIT License © 2025 Ryan Walters

