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 mise — mise 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>