Skip to content

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.

Terminal window
npx @pleaseai/emulate

All services start with sensible defaults — no config file needed:

ServicePortEmulated surface
Kakao4000OAuth 2.0 (kauth), user API, KakaoTalk self-memo send (kapi)
Naver4001Naver Login OAuth (issue/refresh/delete), profile API (/v1/nid/me)
Toss Payments4002Payment confirm/lookup/cancel, order lookup, checkout simulation, webhooks
Firebase4003Auth (Identity Toolkit REST), Secure Token, FCM v1
Supabase4004GoTrue Auth (signup/token/user), PostgREST table CRUD + filters
Asana4005Workspaces, teams, projects, sections, tasks, tags, stories, webhooks
Linear4006Linear GraphQL API (read-only) with Relay pagination
Autumn4007Billing: customers, balances, plans, attach, hosted checkout
GitLab4008GitLab GraphQL endpoint with real-schema introspection
PostHog4009Event capture, read API, OAuth 2.0 with dynamic client registration
Spotify4010OAuth client credentials, catalog search, artists, albums, tracks
WorkOS4011User Management, organizations, OAuth/OIDC, Vault KV
X4012X API v2: OAuth 2.0 PKCE, tweets, users, timelines
Terminal window
# Start all services (zero-config)
npx @pleaseai/emulate
# Start specific services
npx @pleaseai/emulate --service kakao,tosspayments
# Custom base port
npx @pleaseai/emulate --port 3000
# Use a seed config file
npx @pleaseai/emulate --seed emulate.config.yaml
# Generate a starter config
npx @pleaseai/emulate init
# Generate config for a specific service
npx @pleaseai/emulate init --service kakao
# List available services
npx @pleaseai/emulate list
FlagDefaultDescription
-p, --port <port>4000Base port (auto-increments per service)
-s, --service <services>allComma-separated services to enable
--seed <file>auto-detectPath to seed config (YAML or JSON)
--base-url <url>Override base URL (supports {service} interpolation)
--portlessoffServe 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.

Tool versions are pinned with misemise install provisions bun and node. (Without mise, any recent bun works.)

Terminal window
mise install
bun install
bun run build
# Start every service
bun packages/emulate/dist/index.js
# Start specific services only
bun packages/emulate/dist/index.js --service kakao,tosspayments

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>