https://github.com/gentpan/whoga
Self-hosted RDAP & WHOIS lookup — web UI + JSON API. Powers who.ga. TanStack Start + React 19.
https://github.com/gentpan/whoga
dns domain-lookup icann json-api nitro open-source rdap react self-hosted tanstack typescript vite who-ga whois
Last synced: 9 days ago
JSON representation
Self-hosted RDAP & WHOIS lookup — web UI + JSON API. Powers who.ga. TanStack Start + React 19.
- Host: GitHub
- URL: https://github.com/gentpan/whoga
- Owner: gentpan
- License: mit
- Created: 2026-04-05T11:28:34.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-07-06T20:58:07.000Z (20 days ago)
- Last Synced: 2026-07-18T02:40:08.065Z (9 days ago)
- Topics: dns, domain-lookup, icann, json-api, nitro, open-source, rdap, react, self-hosted, tanstack, typescript, vite, who-ga, whois
- Language: TypeScript
- Homepage: https://who.ga
- Size: 1.45 MB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.en.md
- License: LICENSE
Awesome Lists containing this project
README

# Whoga
**Self-hosted RDAP & WHOIS lookup**
Web UI + JSON API · Domain · TLD · IP · ASN
English
·
中文
who.ga
·
Guides
·
api.who.ga
·
Issues



## Features
- RDAP lookup for domains, TLDs, IPs, and ASN
- WHOIS port43 fallback when RDAP is unavailable
- Local data index with scheduled refresh
- Optional Redis caching
## Quick Start
```bash
git clone https://github.com/gentpan/whoga.git
cd whoga
pnpm install
pnpm dev
```
Open localhost:3410
Production:
```bash
pnpm build && pnpm start
```
## API
```bash
curl "http://localhost:3410/api/whois?query=google.com"
curl "http://localhost:3410/api/whois?query=8.8.8.8"
curl "http://localhost:3410/api/whois?query=AS15169"
```
Live demo: api.who.ga/google.com
## Tech stack
**In short: a single-repo Node full-stack app** — web UI and JSON API run in one process, one build, one deploy.
| Part | What we use |
|------|-------------|
| **Runtime** | Node.js 20+ · pnpm |
| **Frontend** | React 19 · TypeScript · Vite |
| **Routing** | TanStack Router / Start |
| **UI** | [Base UI](https://base-ui.com) (menus, tooltips, etc.; styled with project CSS) |
| **Styling** | Plain CSS · Sora font · Lucide icons |
| **API** | `api/` in the same repo, served by the same process |
| **Cache** | Redis (optional) |
Under the hood: Nitro for the server layer, TanStack Start for full-stack wiring. Day to day you only need:
```bash
pnpm install # install deps
pnpm dev # development
pnpm build && pnpm start # production
```
## Configuration
```bash
cp .env.example .env
```
| Variable | Description |
|----------|-------------|
| `CRON_SECRET` | Bearer token for refresh endpoint (recommended in production) |
| `REDIS_URL` | Redis cache connection |
| `WHOIS_CACHE_TTL_SECONDS` | Cache TTL in seconds, default `900` |
## Data Refresh
With the server running:
```bash
pnpm refresh:data
```
Or `curl -X POST http://localhost:3410/api/admin/refresh`
Data paths: `data/` (seed) → `runtime/data/` (runtime, preferred)
## Project layout
```
whoga/
├── web/ # Pages and UI components
├── api/ # HTTP API (/api/whois, /api/stats, etc.)
├── public/ # Static assets (logo, favicons, robots.txt)
├── lib/ # Shared logic (RDAP/WHOIS, data index)
├── data/ # Seed data
├── runtime/ # Runtime data (gitignore, preferred at runtime)
├── scripts/ # Data refresh and ops scripts
└── deploy/ # Deployment scripts
```
## Deploy
```bash
./deploy/deploy-caddy.sh ~/.ssh/your-key.pem
```
See deploy/README.md for details.
---