
Vercel Labs Emulate
Run Vercel, GitHub, and Google API flows in CI or offline sandboxes with stateful local servers instead of brittle mocks.
Install
npx skills add https://github.com/aradotso/trending-skills --skill vercel-labs-emulateWhat is this skill?
- Stateful local servers for Vercel, GitHub, and Google—not shallow mocks—with pagination, OAuth, webhooks, and cascading
- CLI: npx emulate, per-service flags, custom base port with auto-increment, seed via emulate.config.yaml, emulate init an
- Default ports: Vercel 4000, GitHub 4001, Google 4002
- Designed for CI pipelines and no-network sandboxes with production-fidelity in-memory state
Adoption & trust: 819 installs on skills.sh; 31 GitHub stars; 2/3 security scanners passed (skills.sh audits).
Recommended Skills
Journey fit
Emulation is introduced when you need reliable automated verification before release—the canonical shelf is Ship/testing even though Validate prototypes and Build integrations benefit too. Stateful HTTP stand-ins for production APIs are primarily a test and CI concern: pagination, OAuth, webhooks, and deletes must behave like prod under Vitest or no-network runners.
Common Questions / FAQ
Is Vercel Labs Emulate safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Vercel Labs Emulate
# vercel-labs/emulate > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. `emulate` provides fully stateful, production-fidelity local HTTP servers that replace Vercel, GitHub, and Google APIs. Designed for CI pipelines and no-network sandboxes — not mocks, real in-memory state with proper pagination, OAuth, webhooks, and cascading deletes. ## Installation ```bash # CLI (no install needed) npx emulate # Or install as a dev dependency npm install --save-dev emulate ``` ## CLI Usage ```bash # Start all services with defaults npx emulate # Start specific services npx emulate --service vercel,github # Custom base port (auto-increments per service) npx emulate --port 3000 # Start with seed data npx emulate --seed emulate.config.yaml # Generate a starter config npx emulate init # Generate config for a specific service npx emulate init --service github # List available services npx emulate list ``` Default ports: - **Vercel** → `http://localhost:4000` - **GitHub** → `http://localhost:4001` - **Google** → `http://localhost:4002` Port can also be set via `EMULATE_PORT` or `PORT` environment variables. ## Programmatic API ```typescript import { createEmulator, type Emulator } from 'emulate' // Start a single service const github = await createEmulator({ service: 'github', port: 4001 }) const vercel = await createEmulator({ service: 'vercel', port: 4002 }) console.log(github.url) // 'http://localhost:4001' console.log(vercel.url) // 'http://localhost:4002' // Reset state (replays seed data) github.reset() // Shutdown await github.close() await vercel.close() ``` ### Options | Option | Default | Description | |--------|---------|-------------| | `service` | *(required)* | `'github'`, `'vercel'`, or `'google'` | | `port` | `4000` | Port for the HTTP server | | `seed` | none | Inline seed data object (same shape as YAML config) | ### Instance Methods | Method | Description | |--------|-------------| | `url` | Base URL of the running server | | `reset()` | Wipe in-memory store and replay seed data | | `close()` | Shut down the server (returns Promise) | ## Vitest / Jest Setup ```typescript // vitest.setup.ts import { createEmulator, type Emulator } from 'emulate' let github: Emulator let vercel: Emulator beforeAll(async () => { ;[github, vercel] = await Promise.all([ createEmulator({ service: 'github', port: 4001 }), createEmulator({ service: 'vercel', port: 4002 }), ]) process.env.GITHUB_URL = github.url process.env.VERCEL_URL = vercel.url }) afterEach(() => { github.reset() vercel.reset() }) afterAll(() => Promise.all([github.close(), vercel.close()])) ``` ```typescript // vitest.config.ts import { defineConfig } from 'vitest/config' export default defineConfig({ test: { setupFiles: ['./vitest.setup.ts'], environment: 'node', }, }) ``` ## Seed Configuration Create `emulate.config.yaml` in your project root (auto-detected): ```yaml # Auth tokens tokens: my_token: login: admin scopes: [repo, user] vercel: users: - username: developer name: Developer email: dev@example.com teams: - slug: my-team name: My Team projects: - name: my-app team: my-team framework: nextjs github: users: - login: octocat name: The Octocat email: octocat@github.com orgs: - login: my-org name: My Organization repos: - owner: octocat name: hello-world language: JavaScript auto_init: true google: users: - email: testuser@example.com name: Test