{"id":35452938,"url":"https://github.com/forattini-dev/recker","last_synced_at":"2026-04-06T23:05:09.780Z","repository":{"id":327833896,"uuid":"1105355780","full_name":"forattini-dev/recker","owner":"forattini-dev","description":"Fast as infrastructure demands. AI-ready from the first byte. Observable down to the millisecond. Resilient when everything else fails.","archived":false,"fork":false,"pushed_at":"2026-01-16T23:55:00.000Z","size":7492,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T06:44:19.807Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://forattini-dev.github.io/recker/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/forattini-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2025-11-27T13:44:01.000Z","updated_at":"2026-01-16T23:54:23.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/forattini-dev/recker","commit_stats":null,"previous_names":["forattini-dev/recker"],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/forattini-dev/recker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forattini-dev%2Frecker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forattini-dev%2Frecker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forattini-dev%2Frecker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forattini-dev%2Frecker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/forattini-dev","download_url":"https://codeload.github.com/forattini-dev/recker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forattini-dev%2Frecker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28609121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T16:10:39.856Z","status":"ssl_error","status_checked_at":"2026-01-20T16:10:39.493Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-03T04:13:22.487Z","updated_at":"2026-04-06T23:05:09.771Z","avatar_url":"https://github.com/forattini-dev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# ⚡ Recker\n\n### Multi-Protocol SDK for the AI Era\n\nTen protocols unified: HTTP, WebSocket, DNS, WHOIS, RDAP, FTP, SFTP, Telnet, HLS, Raffel.\n\u003cbr\u003e\nAI-native: OpenAI, Anthropic, Google, Ollama + MCP server with 70 tools.\n\u003cbr\u003e\n48 service presets built-in. Zero config.\n\n**One SDK to connect your app to everything.**\n\n[![npm version](https://img.shields.io/npm/v/recker.svg?style=flat-square\u0026color=F5A623)](https://www.npmjs.com/package/recker)\n[![npm downloads](https://img.shields.io/npm/dm/recker.svg?style=flat-square\u0026color=34C759)](https://www.npmjs.com/package/recker)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-3178C6?style=flat-square\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Node.js](https://img.shields.io/badge/Node.js-18+-339933?style=flat-square\u0026logo=node.js\u0026logoColor=white)](https://nodejs.org/)\n[![License](https://img.shields.io/npm/l/recker.svg?style=flat-square\u0026color=007AFF)](https://github.com/forattini-dev/recker/blob/main/LICENSE)\n\n[📖 Documentation](https://forattini-dev.github.io/recker) · [🚀 Quick Start](#quick-start) · [🔧 CLI](#cli-rek)\n\n\u003c/div\u003e\n\n---\n\n## Quick Start\n\n```bash\nnpm install recker\n```\n\n```typescript\nimport { get, post, whois, dns } from 'recker';\n\n// HTTP - just works\nconst users = await get('https://api.example.com/users').json();\nawait post('https://api.example.com/users', { json: { name: 'John' } });\n\n// DNS \u0026 WHOIS\nconst ips = await dns('google.com');\nconst info = await whois('github.com');\n```\n\n### Browser\n\nRecker provides two browser builds: **Full** and **Mini**.\n\n| Build | Size | Includes |\n|:------|:-----|:---------|\n| **Full** | ~1.1 MB | HTTP, WebSocket, SSE, AI, SEO, Scrape, portable plugins |\n| **Mini** | ~480 KB | HTTP, WebSocket, SSE, core plugins only |\n\n```typescript\n// Full build - includes everything\nimport { recker, get, post } from 'recker/browser';\n\n// Mini build - 57% smaller, no AI/SEO/scrape\n// Presets and auth helpers are Node-only\nimport { recker, get, post } from 'recker/browser-mini';\n```\n\n#### CDN Usage\n\n```html\n\u003c!-- Full build (UMD) --\u003e\n\u003cscript src=\"https://unpkg.com/recker/dist/browser/index.umd.min.js\"\u003e\u003c/script\u003e\n\n\u003c!-- Mini build (UMD) - recommended for most projects --\u003e\n\u003cscript src=\"https://unpkg.com/recker/dist/browser/index.mini.umd.min.js\"\u003e\u003c/script\u003e\n\n\u003cscript\u003e\n  const { recker, get, post } = Recker;\n  const data = await get('https://api.example.com/data').json();\n\u003c/script\u003e\n```\n\n```html\n\u003c!-- ES Module --\u003e\n\u003cscript type=\"module\"\u003e\n  // Full\n  import { get } from 'https://unpkg.com/recker/dist/browser/index.min.js';\n  // Mini\n  import { get } from 'https://unpkg.com/recker/dist/browser/index.mini.min.js';\n\u003c/script\u003e\n```\n\n#### Which Build to Choose?\n\n| Use Case | Recommended Build |\n|:---------|:------------------|\n| Simple HTTP requests | `recker/browser-mini` |\n| Need AI streaming (OpenAI, etc.) | `recker/browser` |\n| Need SEO analysis | `recker/browser` |\n| Need web scraping | `recker/browser` |\n| Need API presets (GitHub, Stripe) | Use Node build (`recker`) |\n| Bundle size is critical | `recker/browser-mini` |\n\n[→ Browser Documentation](https://forattini-dev.github.io/recker/#/browser/01-quickstart)\n\n### Unified Namespace\n\n```typescript\nimport { recker } from 'recker';\n\nawait recker.get('/users').json();     // HTTP\nawait recker.whois('github.com');      // WHOIS\nawait recker.dns('google.com');        // DNS\nawait recker.ai.chat('Hello!');        // AI\nrecker.ws('wss://example.com/socket'); // WebSocket\nrecker.raffel('ws://game:9999');       // Raffel\n```\n\n## What's Inside\n\n| Category | Features |\n|:---------|:---------|\n| **Protocols** | HTTP/2, WebSocket, DNS, WHOIS, RDAP, FTP, SFTP, Telnet, HLS, Raffel |\n| **AI** | OpenAI, Anthropic, Google, Ollama, Groq, Mistral + streaming |\n| **Resilience** | Retry, circuit breaker, rate limiting, request deduplication |\n| **Auth** | Basic, Bearer, OAuth2, AWS SigV4, Digest, API Key + 15 providers |\n| **SEO** | 400+ rules, 19 categories, site-wide spider crawler |\n| **Testing** | 10 mock servers (HTTP, Proxy, WebSocket, DNS, FTP, HLS, SSE...) |\n| **CLI** | `rek` - curl replacement with superpowers |\n| **MCP** | 70 tools for AI assistants (Claude, Cursor, Windsurf) |\n\n## Highlights\n\n### AI Streaming\n\n```typescript\nfor await (const chunk of recker.ai.stream({\n  model: 'gpt-4',\n  messages: [{ role: 'user', content: 'Hello!' }]\n})) {\n  process.stdout.write(chunk.choices[0]?.delta?.content || '');\n}\n```\n\n### Retry \u0026 Circuit Breaker\n\n```typescript\nimport { createClient, circuitBreaker } from 'recker';\n\nconst api = createClient({\n  baseUrl: 'https://api.example.com',\n  retry: { maxAttempts: 3, backoff: 'exponential' },\n  plugins: [circuitBreaker({ threshold: 5, resetTimeout: 30000 })]\n});\n```\n\n### Request Timing\n\n```typescript\nconst res = await get('https://api.example.com/data');\nconsole.log(res.timings);\n// { dns: 12, tcp: 8, tls: 45, firstByte: 23, total: 156 }\n```\n\n### SEO Analysis\n\n```typescript\nimport { analyzeSeo } from 'recker/seo';\n\nconst report = await analyzeSeo(html, { baseUrl: 'https://example.com' });\nconsole.log(`Score: ${report.score}/100 (Grade: ${report.grade})`);\n// 400+ checks across 19 categories\n```\n\n### Web Scraping\n\n```typescript\nimport { Spider } from 'recker/scrape';\n\n// Simple scraping\nconst doc = await client.scrape('https://news.ycombinator.com');\nconst headlines = doc.selectAll('.titleline \u003e a').map(el =\u003e el.text());\n\n// Full site crawling\nconst spider = new Spider({ maxPages: 100 });\nconst results = await spider.crawl('https://example.com');\n```\n\n#### Scraping Protected Sites\n\nSome sites use bot protection (Cloudflare, Akamai). Recker handles this automatically:\n\n```bash\n# One-time setup (downloads curl-impersonate)\nnpx recker setup\n```\n\n```typescript\nconst spider = new Spider({ maxPages: 50 });\nawait spider.crawl('https://protected-site.com');\n// Automatically retries with curl-impersonate if blocked\n```\n\n[📖 Anti-blocking docs](https://forattini-dev.github.io/recker/#/scraping/06-anti-blocking)\n\n### Raffel Protocol\n\n```typescript\nimport { createRaffelClient } from 'recker';\n\nconst client = createRaffelClient('ws://api:3000', { reconnect: true });\nawait client.connect();\n\nconst user = await client.call\u003cUser\u003e('users.get', { id: 42 });\nclient.subscribe('notifications', (event, data) =\u003e console.log(event, data));\nclient.notify('analytics.track', { event: 'page_view' });\n```\n\nRecker connects. Raffel serves. One protocol, zero glue.\n\n[→ Raffel Documentation](https://forattini-dev.github.io/recker/#/protocols/10-raffel)\n\n### 48 API Presets\n\nPre-configured clients for popular services:\n\n```typescript\nimport { presets } from 'recker';\n\nconst github = presets.github({ token: '...' });\nconst stripe = presets.stripe({ apiKey: '...' });\nconst openai = presets.openai({ apiKey: '...' });\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eAll 48 presets\u003c/summary\u003e\n\n`anthropic` `aws` `azure` `azure-openai` `chaturbate` `cloudflare` `cohere` `deepseek` `digitalocean` `discord` `elevenlabs` `fireworks` `gcp` `gemini` `github` `gitlab` `groq` `hubspot` `huggingface` `linear` `mailgun` `meta` `mistral` `notion` `openai` `oracle` `perplexity` `pinecone` `pornhub` `replicate` `sendgrid` `sentry` `sinch` `slack` `square` `stripe` `supabase` `tiktok` `together` `twilio` `vercel` `vultr` `xai` `xvideos` `youtube` `android` `ios`\n\n\u003c/details\u003e\n\n## CLI (`rek`)\n\nA curl replacement with better DX:\n\n```bash\n# Install\nnpm install -g recker\n\n# HTTP requests\nrek httpbin.org/json\nrek POST api.com/users name=\"John\" age:=30\n\n# Pipe to bash (like curl)\nrek -q https://get.docker.com | bash\n\n# SEO analysis\nrek seo https://example.com\n\n# DNS toolkit\nrek dns google.com\nrek dns propagate example.com\nrek dns spf github.com\n\n# Mock servers for testing\nrek serve http     # HTTP on :3000\nrek serve ws       # WebSocket on :8080\nrek serve hls      # HLS streaming on :8082\nrek serve dns      # DNS on :5353\n\n# Interactive shell\nrek shell\n```\n\n[→ CLI Documentation](https://forattini-dev.github.io/recker/#/cli/01-overview)\n\n## MCP Server\n\n70 tools for AI assistants like Claude Code, Cursor, and Windsurf:\n\n```bash\n# One-liner for Claude Code (uses minimal category by default)\nclaude mcp add recker npx recker@latest mcp\n\n# Add more categories as needed\nclaude mcp add recker npx recker@latest mcp --category=minimal,video,seo\n\n# Enable all 70 tools\nclaude mcp add recker npx recker@latest mcp --category=full\n```\n\n**Categories:** `minimal` (default) `docs` `network` `dns` `security` `seo` `scrape` `video` `ai` `protocols` `parsing` `streaming` `template` `full`\n\n[→ MCP Documentation](https://forattini-dev.github.io/recker/#/getting-started/mcp)\n\n## Documentation\n\n| Topic | Link |\n|:------|:-----|\n| Quick Start | [→ Getting Started](https://forattini-dev.github.io/recker/#/http/01-quickstart) |\n| HTTP Client | [→ HTTP Guide](https://forattini-dev.github.io/recker/#/http/02-fundamentals) |\n| Plugins | [→ 30+ Plugins](https://forattini-dev.github.io/recker/#/http/10-plugins) |\n| Authentication | [→ 15 Auth Methods](https://forattini-dev.github.io/recker/#/http/06-authentication) |\n| AI Integration | [→ AI Providers](https://forattini-dev.github.io/recker/#/ai/01-overview) |\n| CLI | [→ Terminal Client](https://forattini-dev.github.io/recker/#/cli/01-overview) |\n| MCP Server | [→ AI Tools](https://forattini-dev.github.io/recker/#/getting-started/mcp) |\n| SEO Analysis | [→ 400+ Rules](https://forattini-dev.github.io/recker/#/http/19-seo) |\n| Mock Servers | [→ Testing](https://forattini-dev.github.io/recker/#/cli/08-mock-servers) |\n| API Reference | [→ Full API](https://forattini-dev.github.io/recker/#/reference/01-api) |\n\n## License\n\nMIT © [Forattini](https://github.com/forattini-dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforattini-dev%2Frecker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforattini-dev%2Frecker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforattini-dev%2Frecker/lists"}