Getting Started
Install and run the emulate CLI — local drop-in replacements for Kakao, Naver, Toss Payments, Firebase, Supabase, and more.
Local drop-in replacement for Kakao, Naver, Toss Payments, Firebase, Supabase, Asana, Linear, Autumn, GitLab, PostHog, Spotify, WorkOS, and X APIs. Built for CI and no-network sandboxes. Fully stateful, production-fidelity API emulation. Not mocks.
Quick start
Section titled “Quick start”npx @pleaseai/emulateAll services start with sensible defaults — no config file needed:
| Service | Port | Emulated surface |
|---|---|---|
| Kakao | 4000 | OAuth 2.0 (kauth), user API, KakaoTalk self-memo send (kapi) |
| Naver | 4001 | Naver Login OAuth (issue/refresh/delete), profile API (/v1/nid/me) |
| Toss Payments | 4002 | Payment confirm/lookup/cancel, order lookup, checkout simulation, webhooks |
| Firebase | 4003 | Auth (Identity Toolkit REST), Secure Token, FCM v1 |
| Supabase | 4004 | GoTrue Auth (signup/token/user), PostgREST table CRUD + filters |
| Asana | 4005 | Workspaces, teams, projects, sections, tasks, tags, stories, webhooks |
| Linear | 4006 | Linear GraphQL API (read-only) with Relay pagination |
| Autumn | 4007 | Billing: customers, balances, plans, attach, hosted checkout |
| GitLab | 4008 | GitLab GraphQL endpoint with real-schema introspection |
| PostHog | 4009 | Event capture, read API, OAuth 2.0 with dynamic client registration |
| Spotify | 4010 | OAuth client credentials, catalog search, artists, albums, tracks |
| WorkOS | 4011 | User Management, organizations, OAuth/OIDC, Vault KV |
| X | 4012 | X API v2: OAuth 2.0 PKCE, tweets, users, timelines |
# Start all services (zero-config)npx @pleaseai/emulate
# Start specific servicesnpx @pleaseai/emulate --service kakao,tosspayments
# Custom base portnpx @pleaseai/emulate --port 3000
# Use a seed config filenpx @pleaseai/emulate --seed emulate.config.yaml
# Generate a starter confignpx @pleaseai/emulate init
# Generate config for a specific servicenpx @pleaseai/emulate init --service kakao
# List available servicesnpx @pleaseai/emulate listOptions
Section titled “Options”| Flag | Default | Description |
|---|---|---|
-p, --port <port> | 4000 | Base port (auto-increments per service) |
-s, --service <services> | all | Comma-separated services to enable |
--seed <file> | auto-detect | Path to seed config (YAML or JSON) |
--base-url <url> | — | Override base URL (supports {service} interpolation) |
--portless | off | Serve over HTTPS via portless (auto-registers aliases) |
When a single service is started with --service, it runs on the base port.
When multiple services run together, ports are assigned sequentially from the
base port in registry order.
Running from source
Section titled “Running from source”Tool versions are pinned with mise — mise install
provisions bun and node. (Without mise, any recent bun works.)
mise installbun installbun run build
# Start every servicebun packages/emulate/dist/index.js
# Start specific services onlybun packages/emulate/dist/index.js --service kakao,tosspaymentsPointing your app at the emulator
Section titled “Pointing your app at the emulator”To use an emulator, only the base URL your SDK talks to needs to change:
- Firebase:
FIREBASE_AUTH_EMULATOR_HOST=localhost:4003 - Supabase:
createClient("http://localhost:4004", anonKey) - Everything else: set the service base URL to
http://localhost:<port>
Next steps
Section titled “Next steps”- Configuration — seed apps, users, and table data from YAML
- Programmatic API — embed emulators in your test suite
- Authentication — how tokens and OAuth flows work
- HTTPS with portless — trusted
https://<service>.emulate.localhostURLs