One binary. Seven protocols. Zero dependencies.
Mock HTTP, gRPC, GraphQL, WebSocket, MQTT, SSE, and SOAP from a single CLI tool.
Import OpenAPI specs. Build digital twins. Let AI agents create mocks for you.
Website ·
Docs ·
Samples ·
Contributing
---
## Quick Start
```bash
# Install
curl -sSL https://get.mockd.io | sh
# Start + create a stateful CRUD API in one command
mockd start
mockd add http --path /api/users --stateful users
# It works immediately
curl -X POST localhost:4280/api/users -d '{"name":"Alice","email":"alice@test.com"}'
# → {"id":"a1b2c3","name":"Alice","email":"alice@test.com"}
curl localhost:4280/api/users
# → {"data":[{"id":"a1b2c3","name":"Alice","email":"alice@test.com"}],"meta":{"total":1}}
```
More install options
```bash
brew install getmockd/tap/mockd # Homebrew
docker run -p 4280:4280 -p 4290:4290 ghcr.io/getmockd/mockd:latest # Docker
go install github.com/getmockd/mockd/cmd/mockd@latest # Go
```
Pre-built binaries for Linux, macOS, and Windows on the [Releases](https://github.com/getmockd/mockd/releases) page.
## Why mockd?
Every other mock tool makes you choose: pick one protocol, install a runtime, bolt on extensions. mockd doesn't.
| | mockd | WireMock | Mockoon | Prism | MockServer | Beeceptor | json-server |
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| **Single binary, no runtime** | ✅ | ❌ JVM | ❌ Electron | ✅ | ❌ JVM | ❌ SaaS | ❌ Node |
| **All 9 protocols built-in** | ✅ | 🔌 Ext | Partial | HTTP only | HTTP only | Partial | REST only |
| **Chaos profiles + circuit breakers** | ✅ | ⚠️ Cloud | ❌ | ❌ | ❌ | ❌ | ❌ |
| **MCP server** | ✅ local | ⚠️ Cloud | ❌ | ❌ | ❌ | ⚠️ Cloud, Team+ | ❌ |
| **Free + self-hostable, unlimited** | ✅ | ✅ | ✅ | ✅ | ✅ | 50 req/day | ✅ |
> 🔌 **Ext** = requires separate extension JAR • ⚠️ **Cloud** = only in paid/hosted tier
Full capability matrix (deployment, protocols, capabilities, imports/exports, pricing)
### Deployment
| | mockd | WireMock | Mockoon | Prism | MockServer | Beeceptor | json-server |
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| Native single binary | ✅ Go | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Runtime required | none | JVM | Electron/Node | optional Node | JVM | n/a (SaaS) | Node |
| Docker image | ✅ | ✅ | ✅ CLI | ✅ | ✅ | ⚠️ Enterprise | ❌ |
| Managed SaaS offering | roadmap | WireMock Cloud | Mockoon Cloud | Stoplight | ❌ | ✅ | ❌ |
### Protocol support
| | mockd | WireMock OSS | Mockoon | Prism | MockServer | Beeceptor | json-server |
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| REST / HTTP | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| gRPC | ✅ | 🔌 Ext | ❌ | ❌ | ❌ | ✅ | ❌ |
| GraphQL | ✅ | 🔌 Ext | ❌ | ❌ | ❌ | ✅ | ❌ |
| WebSocket | ✅ | 🔌 Ext (beta) | ✅ | ❌ | ❌ | ❌ | ❌ |
| MQTT | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| SSE | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| SOAP (WSDL) | ✅ | ❌ | Partial | ❌ | Partial | ✅ | ❌ |
| mTLS | ✅ | ✅ | Partial | ❌ | ✅ | ✅ | ❌ |
| OAuth flows | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
### Capabilities
| | mockd | WireMock OSS | Mockoon | Prism | MockServer | Beeceptor | json-server |
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| Stateful CRUD | ✅ | ❌ | ✅ | Partial | ❌ | ✅ | ✅ |
| Multi-step stateful flows | ✅ | ✅ Scenarios | Partial | ❌ | Partial | ✅ | ❌ |
| Fault injection (delay, errors) | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ |
| Chaos profiles | ✅ | ⚠️ Cloud | ❌ | ❌ | ❌ | ❌ | ❌ |
| Circuit breakers | ✅ | ⚠️ Cloud | ❌ | ❌ | ❌ | ❌ | ❌ |
| Bandwidth throttling | ✅ | ❌ | ❌ | ❌ | ❌ | roadmap | ❌ |
| Admin REST API | ✅ | ✅ | CLI only | ❌ | ✅ | ✅ | Partial |
| Built-in web dashboard | ✅ | ⚠️ Cloud | ⚠️ Cloud | ❌ | ✅ read-only | ✅ | ❌ |
| Native desktop GUI | ❌ | ❌ | ✅ Electron | ❌ | ❌ | ❌ | ❌ |
| MCP server | ✅ local | ⚠️ Cloud | ❌ | ❌ | ❌ | ⚠️ Cloud Team+ | ❌ |
| Cloud tunnel sharing | ✅ | ❌ | ⚠️ Cloud | ❌ | ❌ | ✅ | ❌ |
### Import / export
| | mockd | WireMock OSS | Mockoon | Prism | MockServer | Beeceptor | json-server |
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
| OpenAPI import | ✅ | ⚠️ Cloud | ✅ | ✅ | ✅ | ✅ | ❌ |
| Postman import | ✅ | ⚠️ Cloud | ❌ | ✅ | ❌ | ❌ | ❌ |
| HAR import | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| WSDL import | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ |
| cURL import | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| WireMock format import | ✅ | native | ❌ | ❌ | ❌ | ❌ | ❌ |
| Mockoon format import | ✅ | ❌ | native | ❌ | ❌ | ❌ | ❌ |
| HAR export | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ |
### Free tier limits
| | Requests | Mock rules | Cost |
|---|---|---|---|
| mockd | unlimited | unlimited | free (Apache 2.0) |
| WireMock OSS | unlimited | unlimited | free (Apache 2.0) |
| Mockoon desktop / CLI | unlimited | unlimited | free (MIT) |
| Prism | unlimited | unlimited | free (Apache 2.0) |
| MockServer | unlimited | unlimited | free (Apache 2.0) |
| Beeceptor free tier | 50 / day / endpoint | 3 | $10/mo+ for more |
| json-server | unlimited | unlimited | free (MIT) |
**Legend**: ✅ built-in • 🔌 Ext = separate OSS extension • ⚠️ Cloud = only in paid / hosted tier • Partial = limited implementation • roadmap = on the project's stated roadmap, not yet shipped
> **Note on WireMock imports.** The `⚠️ Cloud` marks on OpenAPI and Postman import reflect first-party WireMock features. Community converters exist (e.g. `openapi-to-wiremock`, OpenAPI Generator targets) but are not bundled with the OSS standalone JAR.
## Digital Twins
Import a real API spec, bind it to stateful tables, and get a mock that passes the real SDK:
```yaml
# mockd.yaml — Stripe digital twin
version: "1.0"
imports:
- path: stripe-openapi.yaml
as: stripe
tables:
- name: customers
idStrategy: prefix
idPrefix: "cus_"
seedData:
- { id: "cus_1", name: "Acme Corp", email: "billing@acme.com" }
extend:
- { mock: stripe.GetCustomers, table: customers, action: list }
- { mock: stripe.PostCustomers, table: customers, action: create }
- { mock: stripe.GetCustomersCustomer, table: customers, action: get }
- { mock: stripe.PostCustomersCustomer, table: customers, action: update }
- { mock: stripe.DeleteCustomersCustomer, table: customers, action: delete }
```
```bash
mockd start -c mockd.yaml --no-auth
curl -X POST localhost:4280/v1/customers -d "name=Test&email=test@corp.com"
# → {"id":"cus_a1b2c3","object":"customer","name":"Test","email":"test@corp.com"}
```
**Validated with real SDKs:**
- Stripe: **49/49** `stripe-go` SDK tests pass
- Twilio: **13/13** `twilio-go` SDK tests pass
- OpenAI: `openai` Python SDK verified (models, assistants, chat completions)
See [mockd-samples](https://github.com/getmockd/mockd-samples) for complete digital twin configs.
## AI-Native (MCP)
mockd includes a built-in [Model Context Protocol](https://modelcontextprotocol.io/) server with **18 tools**. AI agents can create mocks, manage state, import specs, and verify contracts without touching the CLI:
```json
{
"mcpServers": {
"mockd": { "command": "mockd", "args": ["mcp"] }
}
}
```
Works in Claude Desktop, Cursor, Windsurf, and any MCP-compatible editor. Tools cover mock CRUD, stateful resources, chaos injection, request logs, verification, workspaces, and import/export.
## Features
Multi-Protocol Mocking — 7 protocols, unified CLI
| Protocol | Port | Example |
|----------|------|---------|
| HTTP/HTTPS | 4280 | `mockd add http --path /api/hello --body '{"msg":"hi"}'` |
| gRPC | 50051 | `mockd add grpc --proto svc.proto --service Greeter --rpc-method Greet` |
| GraphQL | 4280 | `mockd add graphql --path /graphql --operation hello` |
| WebSocket | 4280 | `mockd add websocket --path /ws --echo` |
| MQTT | 1883 | `mockd add mqtt --topic sensors/temp --payload '{"temp":72}'` |
| SSE | 4280 | `mockd add http --path /events --sse --sse-event 'data: hello'` |
| SOAP | 4280 | `mockd add soap --path /soap --operation GetWeather --response ''` |
Import & Export — OpenAPI, Postman, HAR, WireMock, cURL, WSDL
```bash
mockd import openapi.yaml # OpenAPI 3.x / Swagger 2.0
mockd import collection.json # Postman collections
mockd import recording.har # HAR files
mockd import wiremock-mapping.json # WireMock stubs
mockd import service.wsdl # WSDL → SOAP mocks
mockd import "curl -X GET https://api.example.com/users" # cURL commands
mockd export --format yaml > mocks.yaml
```
Chaos Engineering — latency, errors, circuit breakers
```bash
mockd chaos apply flaky # 30% error rate
mockd chaos apply slow-api # 200-800ms latency
mockd chaos apply offline # 100% 503 errors
mockd chaos disable
```
Cloud Tunnel — share local mocks instantly
```bash
mockd tunnel
# → https://a1b2c3d4.tunnel.mockd.io → http://localhost:4280
```
All 7 protocols multiplexed through a single secure connection on port 443. Works behind NAT and firewalls.
Workspaces — isolated mock environments
```bash
mockd workspace create -n "Payment API" --use
mockd import stripe-openapi.yaml
mockd workspace create -n "Comms API" --use
mockd import twilio-openapi.yaml
# Mocks, state, and logs are fully isolated per workspace
```
Proxy Recording — record real traffic, replay as mocks
```bash
mockd proxy start --port 8888
# Configure your app to use http://localhost:8888 as proxy
# Traffic is recorded, then replay with:
mockd import recordings/session.json
```
Web Dashboard — manage mocks visually
Release builds serve a web UI from the admin port (`http://localhost:4290`). VS Code-style editor, command palette, mock tree with folders, request log viewer, and near-miss debugging.
## Mockd Cloud
mockd works fully offline with no account required. For teams that want shared environments:
- **Persistent cloud mocks** — deploy mock environments your whole team can hit
- **Team management** — shared workspaces with access controls
- **Cloud tunnels** — authenticated tunnels with custom domains
Coming soon. [Join the waitlist](https://mockd.io/pricing#waitlist-form).
## Documentation
Full guides, API reference, and config docs at **[docs.mockd.io](https://docs.mockd.io)**.
## Contributing
Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for setup.
## License
[Apache License 2.0](LICENSE) — free for commercial use.