MockForge is a comprehensive mocking framework for APIs, gRPC services, and WebSockets. It provides a unified interface for creating, managing, and deploying mock servers across different protocols with advanced data generation capabilities.
| Feature | MockForge | WireMock | MockServer | Mockoon |
|---|---|---|---|---|
| Language | Rust | Java | Java/JavaScript | JavaScript |
| Performance | β‘ High (native Rust) | Medium | Medium | Medium |
| HTTP/REST | β Full | β Full | β Full | β Full |
| gRPC Native | β Full + HTTP Bridge | β No | β No | |
| WebSocket | β Scripted Replay + JSONPath | β No | β No | |
| GraphQL | β Yes | β Yes | ||
| Kafka | β Full Mock Broker | β No | β No | β No |
| MQTT | β Full Broker (3.1.1 & 5.0) | β No | β No | β No |
| AMQP/RabbitMQ | β Full Broker (0.9.1) | β No | β No | β No |
| Admin UI | β Modern React UI | β Yes | β Desktop App | |
| Data Generation | β Advanced (Faker + RAG) | |||
| AI-Driven Mocking | β LLM-powered generation | β No | β No | β No |
| Data Drift | β Evolving mock data | β No | β No | β No |
| AI Event Streams | β Narrative-driven WebSocket | β No | β No | β No |
| Plugin System | β WASM-based | β No | ||
| E2E Encryption | β Built-in (AES-256/ChaCha20) | β No | ||
| Workspace Sync | β Git integration + file watching | β No | β No | |
| Cross-Endpoint Validation | β Referential integrity checks | β No | β No | β No |
| OpenAPI Support | β Full + Auto-generation | β Yes | β Yes | β Yes |
| Template Expansion | β Advanced (faker, time, UUIDs) | β Handlebars | ||
| Deployment | Binary, Docker, Cargo | JAR, Docker, Maven | JAR/NPM, Docker | Desktop, NPM, Docker |
| Stateful Mocking | β Yes | β Yes | β Yes | β Yes |
| Request Matching | β JSONPath, Regex, Schema | β Yes | β Yes | β Yes |
| Latency Simulation | β Configurable profiles | β Yes | β Yes | β Yes |
| Fault Injection | β Yes | β Yes | β Yes | β Yes |
| CLI Tool | β Full-featured | β Yes | β Yes | β Yes |
| License | MIT/Apache-2.0 | Apache-2.0 | Apache-2.0 | MIT |
All major features listed in this README are implemented and functional in v1.0, with the following clarification:
- β Fully Implemented: HTTP/REST, gRPC (with HTTP Bridge), WebSocket, GraphQL, AI-powered mocking (with data drift & event streams), Plugin system (WASM + remote loading), E2E encryption, Workspace sync, Data generation (RAG-powered), Admin UI (with SSE live logs, metrics, drag-and-drop fixtures)
β οΈ Planned for v1.1: Admin UI role-based authentication (frontend UI components are built, backend JWT/OAuth integration pending)
All commands, options, and features documented in each protocol section (HTTP, gRPC, WebSocket, GraphQL, Plugins, Data Generation) have been verified to work as described.
- π True Multi-Protocol: Only MockForge provides first-class support for HTTP, gRPC, WebSocket, GraphQL, Kafka, MQTT, and AMQP in a single binary
- π§ AI-Driven Mocking: Industry-first LLM-powered mock generation from natural language prompts
- π Data Drift Simulation: Unique realistic data evolution across requests (order status progression, stock depletion, price changes)
- π AI Event Streams: Generate narrative-driven WebSocket events for real-time testing scenarios
- 𧬠Advanced Data Generation: RAG-powered synthetic data with relationship awareness and smart field inference
- π Modern Plugin System: Extend functionality with sandboxed WASM plugins for custom generators, auth, and data sources
- π Enterprise Security: Built-in end-to-end encryption for sensitive configuration data
- π gRPC HTTP Bridge: Automatically expose gRPC services as REST APIs with OpenAPI docs
- π Production-Ready: Comprehensive testing (unit, integration, mutation), security audits, and automated releases
- Multi-Protocol Support: HTTP REST APIs, gRPC services, GraphQL APIs, WebSocket connections, SMTP email testing, Kafka event streaming, MQTT pub/sub, and AMQP message queuing
- π§ AI-Powered Mocking (Industry First): Revolutionary artificial intelligence features:
- Intelligent Mock Generation: Generate realistic responses from natural language prompts
- Natural language β realistic JSON data
- Schema-aware generation with validation
- Multi-provider support: OpenAI, Anthropic, Ollama (free local), or OpenAI-compatible APIs
- Built-in caching for performance optimization
- Data Drift Simulation: Evolving mock data across requests
- Order statuses progress naturally (pending β processing β shipped β delivered)
- Stock quantities deplete with purchases
- Prices fluctuate realistically over time
- State machine transitions with custom probabilities
- AI Event Streams: LLM-powered WebSocket event generation
- Generate realistic event streams from narrative descriptions
- Progressive scenario evolution for contextual continuity
- Time-based, count-based, or conditional event strategies
- Perfect for testing real-time features
- Free Local Development: Use Ollama for $0 cost during development
- Cost-Effective Production: ~$0.01 per 1,000 requests with OpenAI GPT-3.5
- Intelligent Mock Generation: Generate realistic responses from natural language prompts
- Advanced Data Synthesis: Intelligent mock data generation with:
- Smart Field Inference: Automatic data type detection from field names
- Deterministic Seeding: Reproducible test fixtures for stable testing
- RAG-Driven Generation: Context-aware data using domain knowledge
- Relationship Awareness: Foreign key detection and cross-reference validation
- Schema Graph Extraction: Automatic relationship discovery from protobuf schemas
- Plugin System: WebAssembly-based extensible architecture with:
- Custom Response Generators: Build plugins for specialized mock data
- Authentication Providers: JWT, OAuth2, and custom auth plugins
- Data Source Connectors: CSV, database, and external API integrations
- Template Extensions: Custom template functions and filters
- Security Sandbox: Isolated plugin execution with resource limits
- π Remote Loading: Install plugins from URLs, Git repos, or local files with version pinning
mockforge plugin install https://github.com/user/plugin#v1.0.0- Support for ZIP, tar.gz archives, and direct WASM files
- Checksum verification and automatic caching
- End-to-End Encryption: Enterprise-grade security features:
- Multi-Algorithm Support: AES-256-GCM and ChaCha20-Poly1305 encryption
- Key Management: Hierarchical key system with secure storage
- Auto-Encryption: Automatic encryption of sensitive configuration data
- Template Functions: Built-in encryption/decryption in templates
- Workspace Synchronization: Bidirectional sync with version control:
- File System Watching: Real-time sync between workspaces and directories
- Git Integration: Version control your mock configurations
- Team Collaboration: Shared workspaces with conflict resolution
- Dynamic Response Generation: Create realistic mock responses with configurable latency and failure rates
- Cross-Endpoint Validation: Ensure referential integrity across different endpoints
- Admin UI v2: Modern React-based interface with:
- Role-Based Authentication: β Complete JWT-based authentication with Admin, Editor, and Viewer roles
- Real-time Collaboration: β WebSocket-based collaborative editing with presence awareness and cursor tracking
- Real-time Monitoring: Live logs via Server-Sent Events (SSE), metrics, and performance tracking
- Visual Configuration: Drag-and-drop fixture management with tree view
- Advanced Search: Full-text search across services and logs
- Configuration Management: Flexible configuration via YAML/JSON files with environment variable overrides
- Built-in Data Templates: Pre-configured schemas for common data types (users, products, orders)
- Production Ready: Comprehensive testing, security audits, and automated releases
For comprehensive documentation, tutorials, and guides:
The documentation covers:
- Your First Mock API in 5 Minutes - Fastest path to productivity
- Getting started guide and installation
- Detailed configuration options
- API reference for all protocols (HTTP, gRPC, WebSocket)
- Advanced features and examples
- Contributing guidelines
New to MockForge? Follow our 5-Minute Tutorial to create your first mock API.
Need help? Check the FAQ or Troubleshooting Guide.
# Install from crates.io
cargo install mockforge-cli
# Or build from source
git clone https://github.com/SaaSy-Solutions/mockforge.git
cd mockforge
make setup
make build
make installMockForge comes with comprehensive examples to get you started quickly:
# Run with the included examples
make run-example
# Or use the configuration file
cargo run -p mockforge-cli -- serve --config demo-config.yaml
# Or run manually with environment variables
MOCKFORGE_WS_REPLAY_FILE=examples/ws-demo.jsonl \
MOCKFORGE_RESPONSE_TEMPLATE_EXPAND=true \
cargo run -p mockforge-cli -- serve --spec examples/openapi-demo.json --adminMockForge supports multiple API specification formats for generating mocks and clients:
- OpenAPI 3.0.x and 3.1.x: Full support with comprehensive validation
- OpenAPI 2.0 (Swagger): Format detection and validation (parsing via conversion to 3.x recommended)
- GraphQL Schema: Schema Definition Language (SDL) parsing and validation
- Protocol Buffers: gRPC service definitions from
.protofiles
# Generate mocks from OpenAPI spec
mockforge generate --spec api.json --output ./generated
# Serve with OpenAPI spec
mockforge serve --spec api.yaml --admin
# Import OpenAPI spec and generate mocks
mockforge import openapi ./specs/api.yaml --output mocks.jsonExample OpenAPI 3.0 Specification:
{
"openapi": "3.0.0",
"info": {
"title": "User Management API",
"version": "1.0.0",
"description": "API for managing users"
},
"servers": [
{
"url": "https://api.example.com/v1"
}
],
"paths": {
"/users": {
"get": {
"summary": "List users",
"responses": {
"200": {
"description": "List of users",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/User"
}
}
}
}
}
}
},
"post": {
"summary": "Create user",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/User"
}
}
}
},
"responses": {
"201": {
"description": "User created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/User"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"User": {
"type": "object",
"required": ["id", "name", "email"],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
},
"email": {
"type": "string",
"format": "email"
}
}
}
}
}
}# Serve with GraphQL schema
mockforge serve --graphql schema.graphql --graphql-port 4000
# Generate from GraphQL schema
mockforge generate --spec schema.graphql --output ./generatedExample GraphQL Schema:
type Query {
users: [User!]!
user(id: ID!): User
}
type Mutation {
createUser(input: CreateUserInput!): User!
updateUser(id: ID!, input: UpdateUserInput!): User!
}
type User {
id: ID!
name: String!
email: String!
createdAt: DateTime!
}
input CreateUserInput {
name: String!
email: String!
}
input UpdateUserInput {
name: String
email: String
}
scalar DateTime# Serve with proto files
mockforge serve --grpc-port 50051
# Proto files are discovered from configured directoriesMockForge provides comprehensive validation with detailed error messages:
Example validation output:
$ mockforge generate --spec invalid-api.json
Invalid OpenAPI specification:
Missing 'info' section in OpenAPI 3.x spec (at /info). Hint: Add an 'info' section with 'title' and 'version' fields
Missing or empty 'info.title' field (at /info/title). Hint: Add 'title' field to the 'info' section
'paths' object cannot be empty. At least one endpoint is required (at /paths). Hint: Add at least one path definition
Fix the validation errors above and try againValidation Features:
- β Automatic format detection (OpenAPI, GraphQL, Protobuf)
- β Detailed error messages with JSON pointers to problematic fields
- β Helpful suggestions for fixing validation errors
- β Support for both JSON and YAML formats
- β Warnings for incomplete or suboptimal specifications
While MockForge can detect and validate Swagger 2.0 specifications, full parsing requires OpenAPI 3.x format. Use conversion tools:
# Using swagger2openapi (Node.js)
npx swagger2openapi swagger.json -o openapi.json
# Or use online converter
# https://editor.swagger.io/See examples/README.md for detailed documentation on the example files.
MockForge can also be run using Docker for easy deployment:
# Using Docker Compose (recommended)
make docker-compose-up
# Or using Docker directly
make docker-build && make docker-run# Build the image
docker build -t mockforge .
# Run with examples
docker run -p 3000:3000 -p 3001:3001 -p 50051:50051 -p 9080:9080 \
-v $(pwd)/examples:/app/examples:ro \
-e MOCKFORGE_ADMIN_ENABLED=true \
-e MOCKFORGE_HTTP_OPENAPI_SPEC=examples/openapi-demo.json \
mockforgeSee DOCKER.md for comprehensive Docker documentation and deployment options.
MockForge now supports generating client code for multiple frontend frameworks from your OpenAPI specifications. This enables seamless integration with your existing applications and reduces development time.
- React - Generate React hooks and TypeScript types
- Vue - Generate Vue composables and Pinia stores
- Angular - Generate Angular services and modules
- Svelte - Generate Svelte stores and components
# Generate React client
mockforge client generate --spec examples/user-management-api.json --framework react --output ./generated
# Generate Vue client
mockforge client generate --spec examples/user-management-api.json --framework vue --output ./generated
# Generate Angular client
mockforge client generate --spec examples/user-management-api.json --framework angular --output ./generated
# Generate Svelte client
mockforge client generate --spec examples/user-management-api.json --framework svelte --output ./generatedComplete example applications are available in the examples/ directory:
react-demo/- React application with generated hooksvue-demo/- Vue 3 application with generated composablesangular-demo/- Angular 17 application with generated servicessvelte-demo/- SvelteKit application with generated stores
Each demo includes:
- β Complete working application
- β Generated client integration
- β TypeScript type safety
- β Error handling and loading states
- β Form handling examples
- β Comprehensive documentation
All generated clients include:
- TypeScript Types - Full type safety from OpenAPI schemas
- API Clients - Framework-specific HTTP clients
- Error Handling - Built-in error management
- Loading States - Reactive loading indicators
- Documentation - Usage examples and API reference
// React
const { data: users, loading, error } = useGetUsers();
// Vue
const { data, loading, error } = useGetUsers();
// Angular
this.userService.getUsers().subscribe({
next: (users) => this.users = users,
error: (error) => this.error = error
});
// Svelte
const usersStore = createGetUsersStore();
usersStore.subscribe(state => {
users = state.data;
loading = state.loading;
});See examples/README.md for detailed documentation on all framework examples.
# Build the project
cargo build
# Start all mock servers with Admin UI (separate port)
cargo run -p mockforge-cli -- serve --admin --admin-port 9080
# Start with custom configuration
cargo run -p mockforge-cli -- serve --config config.yaml --admin
# Generate test data
cargo run -p mockforge-cli -- data template user --rows 50 --output users.json
# Start Admin UI only (standalone server)
cargo run -p mockforge-cli -- admin --port 9080
# Start workspace synchronization daemon
cargo run -p mockforge-cli -- sync start --directory ./workspace-sync
# Access Admin Interface
- Standalone Admin: http://localhost:9080/
- Admin embedded under HTTP (when configured): http://localhost:3000/admin/
# Quick development setup with environment variables
MOCKFORGE_ADMIN_ENABLED=true MOCKFORGE_HTTP_PORT=3000 cargo run -p mockforge-cli -- serveMockForge supports AI-powered mock generation for intelligent, evolving data. Perfect for realistic testing!
# Install Ollama (one-time setup)
curl https://ollama.ai/install.sh | sh
ollama pull llama2
# Start MockForge with AI enabled
cargo run -p mockforge-cli -- serve \
--ai-enabled \
--rag-provider ollama \
--rag-model llama2 \
--config examples/ai/intelligent-customer-api.yaml# Start with OpenAI
export MOCKFORGE_RAG_API_KEY=sk-your-api-key
cargo run -p mockforge-cli -- serve \
--ai-enabled \
--rag-provider openai \
--rag-model gpt-3.5-turbo \
--config examples/ai/intelligent-customer-api.yaml# Test intelligent mock generation
cargo run -p mockforge-cli -- test-ai intelligent-mock \
--prompt "Generate realistic customer data for a SaaS platform" \
--rag-provider ollama
# Test data drift simulation
cargo run -p mockforge-cli -- test-ai drift \
--initial-data examples/order.json \
--iterations 10
# Test AI event stream generation
cargo run -p mockforge-cli -- test-ai event-stream \
--narrative "Simulate 5 minutes of live stock market data" \
--event-count 20 \
--rag-provider ollamaresponses:
- name: "AI Customer Response"
status_code: 200
intelligent:
mode: intelligent
prompt: "Generate realistic customer data for a retail SaaS API"
schema:
type: object
properties:
id: { type: string }
name: { type: string }
email: { type: string }
drift:
enabled: true
request_based: true
rules:
- field: tier
strategy: state_machine
states: [bronze, silver, gold, platinum]π Learn More: See docs/AI_DRIVEN_MOCKING.md for complete AI features documentation.
curl http://localhost:3000/ping
MockForge includes a fully functional SMTP server for testing email workflows:
# Start SMTP server
mockforge serve --smtp --smtp-port 1025
# Send test email with Python
python3 << EOF
import smtplib
from email.message import EmailMessage
msg = EmailMessage()
msg['Subject'] = 'Test Email'
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'
msg.set_content('This is a test email.')
with smtplib.SMTP('localhost', 1025) as server:
server.send_message(msg)
print("Email sent successfully!")
EOF
# Or use command-line tools
swaks --to recipient@example.com \
--from sender@example.com \
--server localhost:1025 \
--body "Test email"- β RFC 5321 compliant (HELLO, EHLO, MAIL, RCPT, DATA, QUIT, RSET, NOOP, HELP)
- β Fixture-based email matching (regex patterns for recipients, senders, subjects)
- β In-memory mailbox with size limits
- β Auto-reply configuration with templates
- β Template expansion support (faker functions, UUIDs, timestamps)
- β Storage options (in-memory, file export)
- β Configurable behavior (delays, failure rates)
smtp:
enabled: true
port: 1025
hostname: "mockforge-smtp"
fixtures_dir: "./fixtures/smtp"
enable_mailbox: true
max_mailbox_messages: 1000See SMTP documentation for complete guide.
MockForge supports scripted WebSocket interactions with template expansion and conditional responses.
# Set the replay file environment variable
export MOCKFORGE_WS_REPLAY_FILE=examples/ws-demo.jsonl
# Start the WebSocket server
cargo run -p mockforge-cli -- serve --ws-port 3001Using Node.js:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:3001/ws');
ws.on('open', () => {
console.log('Connected! Sending CLIENT_READY...');
ws.send('CLIENT_READY');
});
ws.on('message', (data) => {
console.log('Received:', data.toString());
// Auto-respond to expected prompts
if (data.toString().includes('ACK')) {
ws.send('ACK');
}
if (data.toString().includes('CONFIRMED')) {
ws.send('CONFIRMED');
}
});
ws.on('close', () => console.log('Connection closed'));Using websocat:
websocat ws://localhost:3001/ws
# Then type: CLIENT_READY
# The server will respond with scripted messagesUsing wscat:
wscat -c ws://localhost:3001/ws
# Then type: CLIENT_READYBrowser Console:
const ws = new WebSocket('ws://localhost:3001/ws');
ws.onopen = () => ws.send('CLIENT_READY');
ws.onmessage = (event) => console.log('Received:', event.data);MockForge supports JSONPath queries for sophisticated WebSocket message matching:
[
{"waitFor": "^CLIENT_READY$", "text": "Welcome!"},
{"waitFor": "$.type", "text": "Type received"},
{"waitFor": "$.user.id", "text": "User authenticated"},
{"waitFor": "$.order.status", "text": "Order status updated"}
]JSONPath Examples:
$.type- Wait for any message with atypeproperty$.user.id- Wait for messages with user ID$.order.status- Wait for order status updates$.items[0].name- Wait for first item name
JSON Message Testing:
const ws = new WebSocket('ws://localhost:3001/ws');
// Send JSON messages that match JSONPath patterns
ws.onopen = () => {
ws.send(JSON.stringify({type: 'login'})); // Matches $.type
ws.send(JSON.stringify({user: {id: '123'}})); // Matches $.user.id
ws.send(JSON.stringify({order: {status: 'paid'}})); // Matches $.order.status
};
ws.onmessage = (event) => console.log('Response:', event.data);See examples/README-websocket-jsonpath.md for complete documentation.
WebSocket replay files use JSON Lines format with the following structure:
{"ts":0,"dir":"out","text":"HELLO {{uuid}}","waitFor":"^CLIENT_READY$"}
{"ts":10,"dir":"out","text":"{\\"type\\":\\"welcome\\",\\"sessionId\\":\\"{{uuid}}\\"}"}
{"ts":20,"dir":"out","text":"{\\"type\\":\\"data\\",\\"value\\":\\"{{randInt 1 100}}\\"}","waitFor":"^ACK$"}ts: Timestamp in milliseconds for message timingdir: Direction ("in" for received, "out" for sent)text: Message content (supports template expansion)waitFor: Optional regex pattern to wait for before sending
WebSocket messages support the same template expansion as HTTP responses:
{{uuid}}β Random UUID{{now}}β Current timestamp{{now+1h}}β Future timestamp{{randInt 1 100}}β Random integer
grpcurl -plaintext -proto crates/mockforge-grpc/proto/gretter.proto -d '{"name":"Ray"}' localhost:50051 mockforge.greeter.Greeter/SayHello
MockForge now includes an advanced HTTP Bridge that automatically converts gRPC services to REST APIs, eliminating the need for separate gRPC and HTTP implementations.
- Automatic Discovery: Scans
.protofiles and creates REST endpoints for all gRPC services - JSON β Protobuf Conversion: Full bidirectional conversion between JSON and protobuf messages
- OpenAPI Documentation: Auto-generated OpenAPI/Swagger specs for all bridged services
- Streaming Support: Server-Sent Events (SSE) for server streaming and bidirectional communication
- Statistics & Monitoring: Built-in request metrics and health checks
# Start gRPC server with HTTP bridge
cargo run -p mockforge-cli -- serve --config config.dev.yaml --adminThe bridge will automatically:
- Discover services from proto files
- Create REST endpoints at
/api/{service}/{method} - Generate OpenAPI docs at
/api/docs - Provide health monitoring at
/api/health
gRPC Service:
service UserService {
rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);
rpc GetUser(GetUserRequest) returns (GetUserResponse);
}HTTP Bridge Endpoints:
# Create user (POST)
curl -X POST http://localhost:3000/api/userservice/createuser \
-H "Content-Type: application/json" \
-d '{"name": "John Doe", "email": "john@example.com"}'
# Get user (POST - gRPC semantics)
curl -X POST http://localhost:3000/api/userservice/getuser \
-H "Content-Type: application/json" \
-d '{"user_id": "123"}'Response:
{
"success": true,
"data": {
"user_id": "123",
"name": "John Doe",
"email": "john@example.com",
"created_at": "2025-01-01T00:00:00Z"
},
"error": null,
"metadata": {
"x-mockforge-service": "userservice",
"x-mockforge-method": "createuser"
}
}Enable the HTTP bridge by modifying your config:
grpc:
dynamic:
enabled: true
proto_dir: "proto" # Directory containing .proto files
enable_reflection: true # Enable gRPC reflection
http_bridge:
enabled: true # Enable HTTP bridge
base_path: "/api" # Base path for REST endpoints
enable_cors: true # Enable CORS
timeout_seconds: 30 # Request timeoutOr via environment variables:
export MOCKFORGE_GRPC_DYNAMIC_ENABLED=true
export MOCKFORGE_GRPC_HTTP_BRIDGE_ENABLED=true
export MOCKFORGE_GRPC_PROTO_DIR=protoGET /api/health- Health checkGET /api/stats- Request statistics and metricsGET /api/services- List available gRPC servicesGET /api/docs- OpenAPI 3.0 documentation/api/{service}/{method}- Automatically generated REST endpoints
For gRPC streaming methods, the bridge provides:
# Server streaming endpoint
curl -N http://localhost:3000/api/chat/streammessages \
-H "Content-Type: application/json" \
-d '{"topic": "tech"}'Returns server-sent events:
data: {"event_type":"message","data":{"text":"Hello!"},"metadata":{}}
event: message
data: {"event_type":"message","data":{"text":"How can I help?"},"metadata":{}}
event: messageThe bridge auto-generates comprehensive OpenAPI documentation:
# Access interactive API docs
open http://localhost:3000/api/docs
# Get OpenAPI JSON spec
curl http://localhost:3000/api/docsFeatures:
- Automatic schema generation from protobuf definitions
- Example requests and responses
- Streaming method documentation
- Method tags and descriptions
- Bidirectional Streaming: Full support for client β server streaming via WebSockets-in-disguise
- Metadata Preservation: Passes gRPC metadata as HTTP headers
- Error Handling: Comprehensive error responses with detailed messages
- Metrics: Request counting, latency tracking, and failure rates
- Security: Configurable CORS and request validation
- Frontend Development: Test gRPC APIs with familiar HTTP tools
- API Gateways: Expose gRPC services as REST APIs
- Mixed Environments: Support for both gRPC and HTTP clients
- Development Tools: Use Postman, curl, or any HTTP client
- Documentation: Auto-generated API docs for gRPC services
MockForge provides first-class support for async and event-driven protocols, enabling comprehensive testing of message-driven architectures, pub/sub systems, and event-driven microservices.
- Kafka - Distributed event streaming with full broker simulation
- MQTT - IoT and pub/sub messaging with QoS support
- AMQP - Enterprise message queuing (RabbitMQ compatible)
# Start all protocols (Kafka, MQTT, AMQP enabled by default)
mockforge serve
# Override ports
mockforge serve --kafka-port 9092 --mqtt-port 1883 --amqp-port 5672
# Or use dedicated commands
mockforge kafka serve --port 9092
mockforge mqtt publish --topic "sensors/temp" --payload '{"temp": 22.5}'
mockforge amqp serve --port 5672Features:
- β 10+ Kafka APIs (Produce, Fetch, Metadata, Consumer Groups, etc.)
- β Topic & partition management with auto-creation
- β Consumer group coordination with rebalancing
- β Offset management and commit tracking
- β Auto-produce messages at configurable rates
- β Compatible with rdkafka, KafkaJS, confluent-kafka
Example: Using with Python
from confluent_kafka import Producer, Consumer
# Producer
producer = Producer({'bootstrap.servers': 'localhost:9092'})
producer.produce('orders', key='order-123', value='{"total": 99.99}')
producer.flush()
# Consumer
consumer = Consumer({
'bootstrap.servers': 'localhost:9092',
'group.id': 'my-group',
'auto.offset.reset': 'earliest'
})
consumer.subscribe(['orders'])Fixture-Based Testing:
Create fixtures/kafka/orders.yaml:
- identifier: "order-created"
topic: "orders.created"
key_pattern: "order-{{uuid}}"
value_template:
order_id: "{{uuid}}"
customer_id: "customer-{{faker.int 1000 9999}}"
total: "{{faker.float 10.0 1000.0 | round 2}}"
status: "pending"
created_at: "{{now}}"
auto_produce:
enabled: true
rate_per_second: 10 # Generate 10 orders/secondFeatures:
- β MQTT 3.1.1 and 5.0 support
- β QoS levels (0, 1, 2) with delivery guarantees
- β
Topic hierarchies with wildcards (
+,#) - β Retained messages and Last Will Testament
- β Session management and auto-publish
- β Compatible with Paho, rumqttc, MQTT.js
Example: Using with JavaScript
const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://localhost:1883');
// Publish
client.publish('sensors/temperature', JSON.stringify({ temp: 22.5 }), { qos: 1 });
// Subscribe
client.subscribe('sensors/#');
client.on('message', (topic, message) => {
console.log(`${topic}: ${message.toString()}`);
});Features:
- β AMQP 0.9.1 protocol (RabbitMQ compatible)
- β Exchange types (direct, fanout, topic, headers)
- β Queue management with bindings
- β Consumer coordination and message routing
- β Fixture-driven testing
- β Compatible with lapin, amqplib, RabbitMQ clients
Example: Using with Python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Declare and bind
channel.exchange_declare(exchange='orders', exchange_type='topic')
channel.queue_declare(queue='order.processing')
channel.queue_bind(exchange='orders', queue='order.processing', routing_key='order.created')
# Publish
channel.basic_publish(exchange='orders', routing_key='order.created',
body='{"order_id": "123"}')Auto-Production:
auto_produce:
enabled: true
rate_per_second: 100
duration_seconds: 0 # 0 = infiniteTemplate Engine:
value_template:
id: "{{uuid}}"
customer_name: "{{faker.name}}"
amount: "{{faker.float 10.0 1000.0 | round 2}}"
created_at: "{{now}}"
status: "{{faker.randomChoice ['pending', 'processing', 'completed']}}"Metrics & Monitoring:
curl http://localhost:9080/__mockforge/metrics
# Example metrics
kafka_messages_produced_total 12345
mqtt_messages_published_total 5678
amqp_messages_published_total 9012kafka:
enabled: true
port: 9092
auto_create_topics: true
default_partitions: 3
fixtures_dir: "./fixtures/kafka"
mqtt:
enabled: true
port: 1883
max_connections: 1000
keep_alive_secs: 60
fixtures_dir: "./fixtures/mqtt"
amqp:
enabled: true
port: 5672
max_connections: 1000
heartbeat_interval: 60
fixtures_dir: "./fixtures/amqp"- Microservices Event Bus - Order service β Inventory β Notifications β Analytics
- IoT Sensor Networks - Temperature/humidity sensors publishing via MQTT
- Task Queue Systems - API publishes tasks, workers consume from specific queues
- Event Sourcing & CQRS - Event store with read model projections
π For detailed documentation, see ASYNC_PROTOCOLS.md
MockForge includes powerful synthetic data generation capabilities:
# Generate user data using built-in templates
cargo run -p mockforge-cli -- data template user --rows 100 --output users.json
# Generate product data
cargo run -p mockforge-cli -- data template product --rows 50 --format csv --output products.csv
# Generate data from JSON schema
cargo run -p mockforge-cli -- data schema schema.json --rows 200 --output custom_data.json
# Enable RAG mode for enhanced data generation
cargo run -p mockforge-cli -- data template user --rows 100 --rag --output users.json- User: Complete user profiles with emails, names, addresses
- Product: Product catalog with pricing, categories, descriptions
- Order: Customer orders with relationships to users and products
- RAG Integration: Use LLM-powered generation for more realistic data
- Multiple Formats: JSON, JSON Lines, CSV output
- Custom Schemas: Generate data from your own JSON schemas
- Relationship Support: Maintain referential integrity between entities
echo -e '{"name":"one"}\n{"name":"two"}' | grpcurl -plaintext -proto crates/mockforge-grpc/proto/gretter.proto -d @ localhost:50051 mockforge.greeter.Greeter/SayHelloClientStream
echo -e '{"name":"first"}\n{"name":"second"}' | grpcurl -plaintext -proto crates/mockforge-grpc/proto/gretter.proto -d @ localhost:50051 mockforge.greeter.Greeter/Chat
MockForge ships a built-in Admin UI that can run as either:
- A standalone server (default when
--adminis used):http://localhost:9080/. - Embedded under the HTTP server at a mount path, e.g.
http://localhost:3000/admin/whenadmin.mount_path: "/admin"is configured.
The Admin UI provides:
- π Modern dashboard with real-time server status and live logs (via SSE)
- βοΈ Configuration management for latency, faults, and proxy settings
- π Request logging with filtering and real-time monitoring
- π Metrics visualization with performance insights
- π― Fixture management with drag-and-drop tree view for organizing fixtures
- π¨ Professional UI with tabbed interface and responsive design
Note: Role-based authentication (Admin/Viewer access control) is planned for v1.1. The frontend UI components are ready, but backend JWT/OAuth authentication is not yet implemented in v1.0. The Admin UI is currently accessible without authentication.
You can embed the Admin UI under the HTTP server instead of running it on a separate port. This is handy when you want a single endpoint to expose mocks and admin controls.
- Configure via file (config.yaml):
admin:
enabled: true
mount_path: "/admin"- Or via environment:
export MOCKFORGE_ADMIN_ENABLED=true
export MOCKFORGE_ADMIN_MOUNT_PATH=/admin- Start servers:
cargo run -p mockforge-cli -- serve- Access URLs:
Notes:
- Static assets are served relative to the mount path (e.g.,
/admin/admin.css). - Switching back to standalone mode: remove
mount_path(or unset env) and run with--admin --admin-port 9080.
You can control how the Admin UI runs via flags on serve:
# Force embedded mode (default mount at /admin)
cargo run -p mockforge-cli -- serve --admin-embed
# Embedded with explicit mount
cargo run -p mockforge-cli -- serve --admin-embed --admin-mount-path /tools
# Force standalone mode on port 9080 (overrides embed)
cargo run -p mockforge-cli -- serve --admin --admin-standalone --admin-port 9080
# Disable Admin APIs (UI loads but __mockforge/* endpoints are absent)
cargo run -p mockforge-cli -- serve --admin-embed --disable-admin-api
# Equivalent env-based control
export MOCKFORGE_ADMIN_ENABLED=true
export MOCKFORGE_ADMIN_MOUNT_PATH=/admin
export MOCKFORGE_ADMIN_API_ENABLED=false
cargo run -p mockforge-cli -- serveAdmin API endpoints are namespaced under __mockforge:
- Standalone Admin (default):
GET /__mockforge/dashboardGET /__mockforge/healthGET /__mockforge/logsGET /__mockforge/metricsGET /__mockforge/fixturesPOST /__mockforge/config/*
- Embedded under a mount path (e.g.,
/admin):GET /admin/__mockforge/dashboardGET /admin/__mockforge/health- ... (same suffixes under the mount prefix)
MockForge supports flexible configuration through YAML or JSON files:
# Initialize a new configuration
mockforge init my-project
# Validate your configuration
mockforge config validate
# Use a configuration file
cargo run -p mockforge-cli -- serve --config my-config.yamlπ Complete Configuration Template - Fully documented template with all available options
Override any configuration setting with environment variables:
# Server ports
export MOCKFORGE_HTTP_PORT=9080
export MOCKFORGE_WS_PORT=8081
export MOCKFORGE_GRPC_PORT=9090
export MOCKFORGE_ADMIN_PORT=9091
# Enable features
export MOCKFORGE_ADMIN_ENABLED=true
export MOCKFORGE_LATENCY_ENABLED=true
# Logging
export MOCKFORGE_LOG_LEVEL=debug- HTTP Server: Port, host, OpenAPI spec, CORS settings
- WebSocket Server: Port, host, replay files, timeouts
- gRPC Server: Port, host, proto files, TLS configuration
- Admin UI: Enable/disable, authentication, custom port
- Core Features: Latency profiles, failure injection, proxy settings
- Data Generation: Default settings, RAG configuration, custom templates
- Rust 1.70 or later
- Make
- Python 3 (for some tooling)
# Clone the repository
git clone https://github.com/SaaSy-Solutions/mockforge.git
cd mockforge
# Set up development environment (installs all tools and hooks)
make setup
# Build the project
make build
# Run all tests
make test
# Run all quality checks
make check-all# Start development mode with file watching
make dev
# Format code
make fmt
# Run lints
make clippy
# Run security audit
make audit
# Generate documentation
make doc
# Build user docs
make bookmockforge/
βββ crates/ # Workspace crates
β βββ mockforge-cli/ # Command-line interface
β βββ mockforge-core/ # Shared logic (routing, validation, latency, proxy)
β βββ mockforge-http/ # HTTP mocking library
β βββ mockforge-ws/ # WebSocket mocking library
β βββ mockforge-grpc/ # gRPC mocking library
β βββ mockforge-data/ # Synthetic data generation (faker + RAG)
β βββ mockforge-ui/ # Admin UI (Axum routes + static assets)
βββ config.example.yaml # Configuration example
βββ docs/ # Project documentation
βββ book/ # mdBook documentation
βββ examples/ # Example configurations and test files
βββ tools/ # Development tools
βββ scripts/ # Setup and utility scripts
βββ .github/ # GitHub Actions and templates
βββ tools/ # Development utilities
We welcome contributions! Please see our Contributing Guide for details.
This project uses automated releases with cargo-release:
# Patch release (bug fixes)
make release-patch
# Minor release (new features)
make release-minor
# Major release (breaking changes)
make release-majorChallenge: A fintech company needed to develop and test 15+ microservices that communicate via gRPC, REST, and WebSocket protocols. Waiting for all services to be ready blocked parallel development.
Solution: MockForge provided:
- gRPC HTTP Bridge: Frontend teams tested gRPC services using familiar REST tools
- Multi-Protocol Support: Single mock server handled HTTP, gRPC, and WebSocket endpoints
- Workspace Sync: Shared mock configurations via Git across distributed teams
- Advanced Data Generation: RAG-powered realistic financial data with referential integrity
Results:
- 60% reduction in integration testing time
- 3 teams able to develop in parallel without blocking
- 100+ realistic test scenarios with deterministic data
Challenge: An e-commerce platform integrated with 8 external payment, shipping, and inventory APIs. Testing was expensive, slow, and unpredictable due to rate limits and sandbox limitations.
Solution: MockForge enabled:
- OpenAPI-Driven Mocks: Auto-generated mocks from vendor OpenAPI specs
- Latency & Fault Injection: Realistic simulation of network issues and API failures
- Stateful Mocking: Transaction flows with proper state management
- Template Expansion: Dynamic responses with timestamps, UUIDs, and context-aware data
Results:
- Zero cost for testing (no sandbox API calls)
- 95% test coverage for error scenarios
- CI/CD pipeline runtime reduced from 45min to 8min
Challenge: A mobile team needed to test iOS and Android apps against a backend API that was constantly evolving. The backend team couldn't provide stable test environments.
Solution: MockForge provided:
- Fixture Management: Record real API responses and replay them
- Admin UI: Product managers created test scenarios without coding
- WebSocket Scripted Replay: Tested real-time chat and notifications
- Cross-Endpoint Validation: Ensured data consistency across related endpoints
Results:
- Mobile developers unblocked from backend dependencies
- QA team created 50+ test scenarios independently
- Bug detection 2 weeks earlier in development cycle
Challenge: A healthcare company was migrating from a monolithic SOAP API to microservices-based REST APIs. They needed to run both systems in parallel during the 18-month transition.
Solution: MockForge acted as:
- Protocol Adapter: Bridged SOAP requests to REST endpoints for testing
- Data Transformation: Template system converted between legacy and new data formats
- End-to-End Encryption: Secured sensitive patient data in mock configurations
- Gradual Migration: Mocked incomplete services while others went live
Results:
- Zero downtime during migration
- Comprehensive regression testing across old and new systems
- 30% faster migration timeline
Challenge: A SaaS platform needed to performance test their client application under various backend conditions (slow responses, partial failures, high load).
Solution: MockForge delivered:
- Configurable Latency Profiles: Simulated various network conditions
- Failure Injection: Random failures, timeouts, and partial responses
- High Throughput: Rust-native performance handled 10K+ req/sec
- Metrics & Monitoring: Real-time performance dashboards
Results:
- Identified 12 critical performance bottlenecks
- Optimized client retry logic and caching
- Production performance improved by 40%
- π Continuous Integration: Fast, reliable mocks in CI/CD pipelines
- π± Mobile/Frontend Development: Work independently of backend teams
- π§ͺ Integration Testing: Test complex multi-service interactions
- π Training & Demos: Consistent demo environments without live systems
- π§ Third-Party API Testing: Test external integrations without costs or rate limits
- β‘ Performance Testing: Simulate various network and load conditions
- π Development Acceleration: Parallel development of dependent services
MockForge includes comprehensive performance benchmarks using Criterion.rs to measure and track performance across releases.
Template Rendering
- Simple variable substitution:
{{name}} - Complex nested templates:
{{user.address.city}} - Array iteration:
{{#each items}}
JSON Schema Validation
- Simple schema validation (single object)
- Complex nested schema validation
- Large array validation (100+ items)
OpenAPI Spec Parsing
- Small specs (1-5 paths)
- Medium specs (10-50 paths)
- Large specs (100+ paths with complex schemas)
Data Generation
- Single record generation
- Bulk data generation (1000+ records)
- RAG-powered synthetic data
Memory Profiling
- Large OpenAPI spec parsing (100+ paths)
- Deep template rendering (nested structures)
- Bulk data validation
# Run all benchmarks
cargo bench
# Run specific benchmark suite
cargo bench --bench core_benchmarks
# Run benchmarks with specific filter
cargo bench template
# Generate detailed HTML reports
cargo bench -- --save-baseline mainTypical performance metrics on modern hardware (AMD Ryzen 9 / Intel i9):
| Operation | Throughput | Latency |
|---|---|---|
| Simple template rendering | ~500K ops/sec | ~2 Β΅s |
| Complex template rendering | ~100K ops/sec | ~10 Β΅s |
| JSON schema validation (simple) | ~1M ops/sec | ~1 Β΅s |
| JSON schema validation (complex) | ~200K ops/sec | ~5 Β΅s |
| OpenAPI spec parsing (small) | ~10K ops/sec | ~100 Β΅s |
| OpenAPI spec parsing (large) | ~500 ops/sec | ~2 ms |
| Data generation (single record) | ~50K ops/sec | ~20 Β΅s |
Note: Results vary based on hardware, spec complexity, and system load. Run benchmarks on your target hardware for accurate metrics.
Benchmarks are run automatically in CI/CD:
- On every pull request to detect performance regressions
- Baseline comparisons against main branch
- Historical performance tracking across releases
View the latest benchmark results in our GitHub Actions.
- User Guide - Complete documentation
- API Reference - Rust API documentation
- Contributing - How to contribute
- Changelog - Release notes
- Benchmarks - Performance benchmarks
- π FAQ (Frequently Asked Questions) - Quick answers to common questions
- π§ Troubleshooting Guide - Solutions for common issues
- π 5-Minute Tutorial - Fastest way to get started
- π Configuration Reference - Complete config template with all options
| Issue | Quick Fix |
|---|---|
| Server won't start | lsof -i :3000 β mockforge serve --http-port 3001 |
| Template variables not working | mockforge serve --response-template-expand |
| Validation too strict | mockforge serve --validation warn |
| Admin UI not loading | mockforge serve --admin --admin-port 9080 |
| Docker port conflicts | docker run -p 3001:3000 mockforge |
| Docker permission issues | sudo chown -R 1000:1000 fixtures/ (Linux) |
See the complete troubleshooting guide for detailed solutions.
- GitHub Issues - Report bugs or request features
- GitHub Discussions - Ask questions and share ideas
- Discord - Join our community chat
- Contributing Guide - Contribute to MockForge development
When reporting issues, please include:
- MockForge version (
mockforge --version) - Operating system
- Configuration file (if applicable)
- Steps to reproduce
- Expected vs actual behavior
- Error logs (
RUST_LOG=debug mockforge serve)
Licensed under either of:
- Apache License, Version 2.0 (LICENSE-APACHE)
- MIT License (LICENSE-MIT)
at your option.
You can control request/response validation via CLI, environment, or config.
-
Environment:
-
MOCKFORGE_REQUEST_VALIDATION=off|warn|enforce(default: enforce) -
MOCKFORGE_AGGREGATE_ERRORS=true|false(default: true) -
MOCKFORGE_RESPONSE_VALIDATION=true|false(default: false) -
MOCKFORGE_RESPONSE_TEMPLATE_EXPAND=true|false(default: false)- When true, mock responses (including media-level
examplebodies) expand tokens:{{uuid}}β random UUID v4{{now}}β RFC3339 timestamp{{nowΒ±Nd|Nh|Nm|Ns}}β timestamp offset by days/hours/minutes/seconds, e.g.,{{now+2h}},{{now-30m}}{{rand.int}}β random integer{{rand.float}}β random float
- Also supports ranged and faker tokens when enabled:
{{randInt 10 99}},{{rand.int -5 5}}{{faker.uuid}},{{faker.email}},{{faker.name}},{{faker.address}},{{faker.phone}},{{faker.company}},{{faker.url}},{{faker.ip}},{{faker.color}},{{faker.word}},{{faker.sentence}},{{faker.paragraph}}
- Determinism: set
MOCKFORGE_FAKE_TOKENS=falseto disable faker token expansion (uuid/now/rand tokens still expand).
- When true, mock responses (including media-level
-
MOCKFORGE_VALIDATION_STATUS=400|422(default: 400)- Status code returned on request validation failure in enforce mode.
-
CLI (serve):
--validation off|warn|enforce--aggregate-errors--validate-responses
-
Config (config.yaml):
http:
request_validation: "enforce" # off|warn|enforce
aggregate_validation_errors: true
validate_responses: false
skip_admin_validation: true
validation_overrides:
"POST /users/{id}": "warn"
"GET /internal/health": "off"When aggregation is enabled, 400 responses include both a flat errors list and a details array with structured items:
{
"error": "request validation failed",
"details": [
{ "path": "query.q", "code": "type", "message": "query.q: expected number, got \"abc\"", "value": "abc" }
]
}