II.
Page JSON
Structured · livepage:docs-research-emulate-dev
Emulate — emulate third-party APIs json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "page:docs-research-emulate-dev",
"_kind": "Page",
"_file": "wiki/docs/research/emulate-dev.md",
"_cluster": "wiki",
"attributes": {
"nodeKind": "Page",
"sourcePath": "docs/research/emulate-dev.md",
"sourceKind": "repo-docs",
"title": "Emulate — emulate third-party APIs",
"displayName": "Emulate — emulate third-party APIs",
"slug": "docs/research/emulate-dev",
"articlePath": "wiki/docs/research/emulate-dev.md",
"article": "\n# Emulate — emulate third-party APIs\n\n> **Status:** Assimilation research note (no code change beyond the atlas record).\n> **Date:** 2026-06-23.\n> **Tagline (requester):** \"Emulate third-party APIs.\"\n> **Method:** vendor homepage <https://emulate.dev> + npm/GitHub corroboration. Behavioral claims are vendor-stated and not independently exercised.\n> **Provenance (verified 2026-06-23):** open source, **Apache-2.0**, by **Vercel Labs** — `github.com/vercel-labs/emulate`, npm `emulate` (v0.7.0) + `@emulators/*` adapters. npm tagline: \"Local drop-in replacement services for CI and no-network sandboxes.\"\n> **Atlas record:** `tool:emulate-dev` — `packages/atlas/graph/domain/tools/emulate-dev.yaml` (evidence `evidence:emulate-dev-homepage-2026-06`, `evidence:emulate-dev-npm-2026-06`).\n\n---\n\n## 0. Bottom line\n\nA CLI that runs **offline, stateful local replicas of ~11 popular third-party services** (Stripe, GitHub, Google, AWS, Slack, …) speaking their **real protocols** — no network, API keys, or real accounts. Built for local dev and CI: deterministic, zero-config, state persists across requests.\n\n## 1. What it does\n\nStand-in services you can develop and test against without touching production APIs: create repos and push commits, charge cards, exchange OAuth tokens — and the emulated state sticks across requests within a run.\n\n## 2. How it works\n\n- Emulates **authentic protocols**: OAuth with **RS256** tokens, **AWS XML** responses, etc. — not just static stubs.\n- **Stateful**: operations mutate persistent in-emulator state.\n- **Offline & CI-ready**: deterministic results across environments, no secrets.\n- Services bind to HTTPS localhost endpoints (e.g. `https://stripe.emulate.localhost`); integrates with **Portless** for the named-host routing.\n- SDKs are pointed at the local host/port (e.g. `localhost:4010`) via host/port/protocol config.\n\n## 3. Install & usage\n\n```bash\nnpx emulate --portless # run with Portless routing\nnpx emulate --service github,stripe # select services\n```\n\nProgrammatic + framework integration:\n\n```js\nimport { createEmulator } from \"emulate\"\n// Next.js adapter:\n// npm install @emulators/adapter-next @emulators/github\n```\n\n## 4. Relevance to babysitter / agent workflows\n\n- **Deterministic, offline integration tests** are exactly what the live-stack / E2E lanes need to avoid flaky external dependencies and secret management — cf. the published live-stack work where real third-party installs/auth were a recurring blocker.\n- An orchestrated agent could target emulated Stripe/GitHub/AWS to exercise tool-service-integration flows hermetically.\n- Recorded as catalog awareness (`used_for: skill-area:tool-service-integration-agents`); not wired into babysitter test infra.\n\n## 5. Comparison (atlas edges)\n\n`alternative_to`: `tool:wiremock` (generic HTTP stub server vs. stateful, protocol-accurate named-service emulation), `tool:pact` (consumer-driven contract testing vs. runnable stateful service replicas).\n\n## 6. Caveats / open questions\n\n- License/OSS/repo **verified** (Apache-2.0, Vercel Labs) via npm + GitHub; the Next.js adapter (`@emulators/adapter-next`) explicitly targets the Vercel preview-deploy OAuth-callback problem. Early version (0.7.x).\n- The exact 11 services, per-service fidelity, and the `localhost:4010` vs. `*.emulate.localhost` addressing modes are vendor claims, not independently exercised here.\n",
"documents": []
},
"outgoingEdges": [],
"incomingEdges": [
{
"from": "page:docs",
"to": "page:docs-research-emulate-dev",
"kind": "contains_page"
}
]
}