Package Exports
- recker
- recker/ai
- recker/bare
- recker/browser
- recker/client
- recker/dns
- recker/mini
- recker/node
- recker/package.json
- recker/plugins
- recker/plugins/auth
- recker/plugins/auth/api-key
- recker/plugins/auth/auth0
- recker/plugins/auth/aws-sigv4
- recker/plugins/auth/azure-ad
- recker/plugins/auth/basic
- recker/plugins/auth/bearer
- recker/plugins/auth/cognito
- recker/plugins/auth/digest
- recker/plugins/auth/firebase
- recker/plugins/auth/github-app
- recker/plugins/auth/google-service-account
- recker/plugins/auth/index
- recker/plugins/auth/mtls
- recker/plugins/auth/oauth2
- recker/plugins/auth/oidc
- recker/plugins/auth/okta
- recker/plugins/cache
- recker/plugins/certificate-pinning
- recker/plugins/circuit-breaker
- recker/plugins/compression
- recker/plugins/cookie-jar
- recker/plugins/dedup
- recker/plugins/graphql
- recker/plugins/grpc-web
- recker/plugins/har-player
- recker/plugins/har-recorder
- recker/plugins/hls
- recker/plugins/http2-push
- recker/plugins/http3
- recker/plugins/index
- recker/plugins/interface-rotator
- recker/plugins/jsonrpc
- recker/plugins/logger
- recker/plugins/odata
- recker/plugins/pagination
- recker/plugins/proxy-rotator
- recker/plugins/rate-limit
- recker/plugins/retry
- recker/plugins/scrape
- recker/plugins/server-timing
- recker/plugins/soap
- recker/plugins/user-agent
- recker/plugins/xml
- recker/plugins/xsrf
- recker/presets
- recker/presets/anthropic
- recker/presets/aws
- recker/presets/azure
- recker/presets/azure-openai
- recker/presets/cloudflare
- recker/presets/cohere
- recker/presets/deepseek
- recker/presets/digitalocean
- recker/presets/discord
- recker/presets/fireworks
- recker/presets/gcp
- recker/presets/gemini
- recker/presets/github
- recker/presets/gitlab
- recker/presets/groq
- recker/presets/huggingface
- recker/presets/index
- recker/presets/linear
- recker/presets/mailgun
- recker/presets/meta
- recker/presets/mistral
- recker/presets/notion
- recker/presets/openai
- recker/presets/oracle
- recker/presets/perplexity
- recker/presets/registry
- recker/presets/replicate
- recker/presets/sinch
- recker/presets/slack
- recker/presets/stripe
- recker/presets/supabase
- recker/presets/tiktok
- recker/presets/together
- recker/presets/twilio
- recker/presets/vercel
- recker/presets/vultr
- recker/presets/xai
- recker/presets/youtube
- recker/scrape
- recker/testing
- recker/udp
- recker/utils/agent-manager
- recker/utils/body
- recker/utils/cert
- recker/utils/charset
- recker/utils/chart
- recker/utils/client-pool
- recker/utils/colors
- recker/utils/columns
- recker/utils/concurrency
- recker/utils/dns
- recker/utils/dns-toolkit
- recker/utils/doh
- recker/utils/download
- recker/utils/env-proxy
- recker/utils/header-parser
- recker/utils/html-cleaner
- recker/utils/link-header
- recker/utils/optional-require
- recker/utils/progress
- recker/utils/rdap
- recker/utils/request-pool
- recker/utils/security-grader
- recker/utils/sparkline
- recker/utils/sse
- recker/utils/streaming
- recker/utils/system-metrics
- recker/utils/tls-inspector
- recker/utils/try-fn
- recker/utils/upload
- recker/utils/user-agent
- recker/utils/whois
- recker/webrtc
Readme
⚡ Recker
The Network SDK for the AI Era
Zero-config HTTP. Multi-protocol support. AI-native streaming. Observable to the millisecond.
Install
npm install reckerQuick Start
import { get, post, whois, dns } from 'recker';
import { rdap, supportsRDAP } from 'recker/utils/rdap';
// HTTP - zero config
const users = await get('https://api.example.com/users').json();
await post('https://api.example.com/users', { json: { name: 'John' } });
// WHOIS
const info = await whois('github.com');
// RDAP (modern WHOIS)
if (supportsRDAP('com')) {
const data = await rdap(client, 'google.com');
console.log(data.status, data.events);
}
// DNS
const ips = await dns('google.com');Unified Namespace
import { recker } from 'recker';
// Everything in one place
await recker.get('https://api.example.com/users').json();
await recker.whois('github.com');
await recker.dns('google.com');
await recker.ai.chat('Hello!');
const socket = recker.ws('wss://api.example.com/ws');With Configuration
import { createClient } from 'recker';
const api = createClient({
baseUrl: 'https://api.example.com',
headers: { 'Authorization': 'Bearer token' },
timeout: 10000,
retry: { maxAttempts: 3 }
});
const user = await api.get('/users/:id', { params: { id: '123' } }).json();Mini Client (Maximum Performance)
Need raw speed? Use recker-mini for ~2% overhead vs raw undici:
import { createMiniClient, miniGet } from 'recker/mini';
// Client instance
const fast = createMiniClient({ baseUrl: 'https://api.example.com' });
const data = await fast.get('/users').then(r => r.json());
// Or direct function (even faster)
const users = await miniGet('https://api.example.com/users').then(r => r.json());| Mode | Speed | Features |
|---|---|---|
recker-mini |
~146µs (2% overhead) | Base URL, headers, JSON |
recker |
~265µs (86% overhead) | Retry, cache, auth, hooks, plugins |
See Mini Client documentation for more.
Features
| Feature | Description |
|---|---|
| Zero Config | Direct functions work out of the box. No setup required. |
| Multi-Protocol | HTTP, WebSocket, DNS, WHOIS, RDAP, FTP, SFTP, Telnet in one SDK. |
| AI-Native | SSE streaming, token counting, provider abstraction. |
| Type-Safe | Full TypeScript with Zod schema validation. |
| Observable | DNS/TCP/TLS/TTFB timing breakdown per request. |
| Resilient | Retry, circuit breaker, rate limiting, deduplication. |
| GeoIP (Offline) | MaxMind GeoLite2 database with bogon detection. |
| RDAP Support | Modern WHOIS with IANA Bootstrap and TLD detection. |
Highlights
AI Streaming
for await (const event of recker.ai.stream({
model: 'gpt-4',
messages: [{ role: 'user', content: 'Hello!' }]
})) {
process.stdout.write(event.choices[0]?.delta?.content || '');
}Request Timing
const response = await get('https://api.example.com/data');
console.log(response.timings);
// { dns: 12, tcp: 8, tls: 45, firstByte: 23, total: 156 }Scraping
const doc = await client.scrape('https://example.com');
const titles = doc.selectAll('h1').map(el => el.text());Circuit Breaker
import { createClient, circuitBreaker } from 'recker';
const client = createClient({
baseUrl: 'https://api.example.com',
plugins: [
circuitBreaker({ threshold: 5, resetTimeout: 30000 })
]
});CLI (rek)
A powerful terminal client that replaces curl:
# Install globally
npm install -g recker
# Simple requests
rek httpbin.org/json
rek POST api.com/users name="John" age:=30
# Pipe to bash (like curl)
rek -q https://get.docker.com | bash
# Save to file
rek -o data.json api.com/export
# Interactive shell
rek shell
# Mock servers for testing
rek serve http # HTTP on :3000
rek serve ws # WebSocket on :8080
rek serve hls # HLS streaming on :8082See CLI Documentation for more.
Documentation
- Quick Start - Get running in 2 minutes
- Mini Client - Maximum performance mode
- CLI Guide - Terminal client documentation
- API Reference - Complete API documentation
- Configuration - Client options
- Plugins - Extend functionality
- AI Integration - OpenAI, Anthropic, and more
- Protocols - WebSocket, DNS, WHOIS
- Mock Servers - Built-in test servers
- Benchmarks - Performance comparisons
License
MIT © Forattini