<!-- Generated from https://trafficparrot.com/documentation/5.65.x/data_sheet.html by scripts/generate-md-mirrors.sh. Do not edit: edit the .html and regenerate. -->

# Data sheet

<a id="overview"></a>
## Overview

Traffic Parrot is an API and service simulation (service virtualization) platform, a product of Traffic Parrot Ltd. It stands in for the APIs, services and systems your application depends on, so your teams can test without waiting for a shared environment, a third party or a mainframe to be available.

One installation simulates [HTTP(S)](https://trafficparrot.com/documentation/5.65.x/http.html) (REST, SOAP and GraphQL), [gRPC](https://trafficparrot.com/documentation/5.65.x/grpc.html), [WebSocket](https://trafficparrot.com/documentation/5.65.x/websocket.html), [JMS](https://trafficparrot.com/documentation/5.65.x/jms.html), [native IBM® MQ](https://trafficparrot.com/documentation/5.65.x/ibmmq.html) with the [CICS bridge](https://trafficparrot.com/documentation/5.65.x/cics.html), [file transfers](https://trafficparrot.com/documentation/5.65.x/filemessage.html) over the local file system, FTP and SFTP, and [Thrift](https://trafficparrot.com/documentation/5.65.x/thrift.html), from one web console, one [management API](https://trafficparrot.com/documentation/5.65.x/user_guide.html#management-apis) and one [MCP endpoint](https://trafficparrot.com/documentation/5.65.x/mcp.html) for AI agents.

<a id="at-a-glance"></a>
## At a glance

|  |  |
| --- | --- |
| Java runtime | Java 17 or later. Tested on Java 17 and 21 on Windows, Linux and macOS, and on Java 25 in Docker. Three of the four [downloads](https://trafficparrot.com/documentation/5.65.x/start.html#download-section) bundle a Java runtime, so nothing has to be installed first. |
| Memory | 512 MB of RAM with the default heap; 1 GB or more recommended. See [hardware requirements](#hardware-requirements). |
| Disk | About 165 MB unpacked for the download without a Java runtime, 320 to 460 MB for the downloads that bundle one, plus room for recordings and logs. |
| Operating systems | Windows, Linux and macOS. The Mac download runs natively on Apple Silicon and Intel. |
| Runs on | A laptop or [workstation](https://trafficparrot.com/documentation/5.65.x/workstation.html), a virtual machine, [Docker](https://trafficparrot.com/documentation/5.65.x/user_guide.html#running-docker), [Kubernetes](https://trafficparrot.com/documentation/5.65.x/user_guide.html#running-kubernetes), [OpenShift](https://trafficparrot.com/documentation/5.65.x/user_guide.html#running-openshift), and inside a test with [Testcontainers](https://trafficparrot.com/documentation/5.65.x/testcontainers.html). |
| Licensing | A [licence file](https://trafficparrot.com/documentation/5.65.x/user_guide.html#supplying-the-license) in the installation, the `TRAFFICPARROT_LICENSE` environment variable (in Docker, Docker Compose and Kubernetes), or a [licence server](https://trafficparrot.com/documentation/5.65.x/user_guide.html#license-server) you host. |

<a id="where-fit"></a>
## Where does Traffic Parrot fit in?

Traffic Parrot decouples a team from its dependencies in the testing phase of the software development lifecycle. Depending on your infrastructure and test plans it can virtualize all of the traffic your application sends to its dependencies, over HTTP(S), gRPC, WebSocket, JMS, IBM® MQ, files and Thrift, and proxy the rest through to the real system.

![Before: the application under test calls its real dependencies. After: it calls Traffic Parrot virtual services instead.](https://trafficparrot.com/documentation/5.65.x/img/tp/before_and_after.png)

<a id="admin-console"></a>
## Administration console

Every virtual service is configured from a web console. Mappings are added by hand, recorded from real traffic or imported from a specification, edited in place, and saved as JSON files under the installation that you keep in version control. The same console lists the requests received over HTTP, gRPC, JMS, IBM® MQ and files and, for an unmatched HTTP request, the mappings that came closest and the field each one missed on.

![The console home page: the navigation bar with HTTP, gRPC, JMS, IBM MQ, Files, Virtual Services, Tools, Settings and Help, and a table of the HTTP(S) virtual services with their HTTP and HTTPS ports](https://trafficparrot.com/documentation/5.65.x/img/data-sheet/console-home.webp)

![The HTTP mapping editor: a GET request matched on a URL path regular expression, with a status code, delay and fault settings and a templated JSON response body](https://trafficparrot.com/documentation/5.65.x/img/data-sheet/http-mapping-editor.webp)

<a id="components"></a>
## Components

One Traffic Parrot instance is one Java process. It serves the administration console, the [management APIs](https://trafficparrot.com/documentation/5.65.x/user_guide.html#management-apis) and the [MCP endpoint](https://trafficparrot.com/documentation/5.65.x/mcp.html), and runs the virtual services the system under test connects to, each on its own port or queue: HTTP(S), gRPC, WebSocket, JMS, native IBM® MQ, file transfers and Thrift. A small launcher process starts the server and, with the shipped start script, exits once the server is up. Mappings, and the files they reference, are kept on the local file system as JSON, one directory per [scenario](https://trafficparrot.com/documentation/5.65.x/user_guide.html#scenarios).

![HTTP: a tester uses the web console on the management port; the system under test calls the virtual service on its HTTP and HTTPS ports; mappings and files are stored on disk](https://trafficparrot.com/documentation/5.65.x/img/tp/architecture.png)

For a message queue the virtual service consumes from the request queue and replies on the response queue, on Traffic Parrot's internal broker or on your own broker or queue manager.

![Messaging: the virtual service reads the request queue and writes the response queue on a message broker the system under test also uses; mappings are stored on disk](https://trafficparrot.com/documentation/5.65.x/img/tp/architecture-replay-jms-queue.png)

<a id="capabilities"></a>
## Capabilities

Each entry links to the documentation page that describes it.

### Protocols

- [HTTP(S)](https://trafficparrot.com/documentation/5.65.x/http.html): HTTP/1.0, HTTP/1.1 and HTTP/2; REST, [SOAP](https://trafficparrot.com/documentation/5.65.x/http.html#soap), [GraphQL](https://trafficparrot.com/documentation/5.65.x/http.html#request-graphql-matcher) and [static files](https://trafficparrot.com/documentation/5.65.x/http.html#static-images)
- [gRPC](https://trafficparrot.com/documentation/5.65.x/grpc.html): unary, server streaming, client streaming and bidirectional streaming calls
- [WebSocket](https://trafficparrot.com/documentation/5.65.x/websocket.html)
- [JMS](https://trafficparrot.com/documentation/5.65.x/jms.html): ActiveMQ TCP, ActiveMQ AMQP 1.0, Azure AMQP 1.0, RabbitMQ AMQP 0.9.1 and IBM® MQ, with an internal ActiveMQ broker for tests that have no broker of their own
- [Native IBM® MQ](https://trafficparrot.com/documentation/5.65.x/ibmmq.html), tested with IBM MQ 9.3 and 9.4, including the [CICS bridge](https://trafficparrot.com/documentation/5.65.x/cics.html) with COBOL copybooks
- [File transfers](https://trafficparrot.com/documentation/5.65.x/filemessage.html): local file system, FTP and SFTP, and Traffic Parrot as the [SFTP server](https://trafficparrot.com/documentation/5.65.x/filemessage.html#sftp-server)
- [Thrift](https://trafficparrot.com/documentation/5.65.x/thrift.html)
- [SWIFT and FIX](https://trafficparrot.com/documentation/5.65.x/request_matching.html#matchers-reference) message fields matched on JMS, IBM MQ and [files](https://trafficparrot.com/documentation/5.65.x/filemessage.html)
- Another protocol? [Tell us](https://trafficparrot.com/request_features.html)

### Recording and import

- [Record traffic on every protocol](#protocol-matrix) and edit what was recorded
- [Passthrough proxy](https://trafficparrot.com/documentation/5.65.x/http.html#passthrough-proxy) to the real system, with one-click stub creation from the request log
- [Credential headers masked](https://trafficparrot.com/documentation/5.65.x/http.html#recording-header-redaction) and [URLs and bodies rewritten](https://trafficparrot.com/documentation/5.65.x/http.html#recording-url-rewriting) while recording
- [Import](https://trafficparrot.com/documentation/5.65.x/http.html#import-http-supported-formats) OpenAPI and Swagger, RAML, HAR, Pact, WireMock ZIP files, Mountebank imposters and cURL commands from a file, or [from a URL](https://trafficparrot.com/documentation/5.65.x/http.html#import-http-from-url) for every format but RAML and WireMock ZIP
- Import [AsyncAPI](https://trafficparrot.com/documentation/5.65.x/jms.html#import-asyncapi-jms) and [Pact message](https://trafficparrot.com/documentation/5.65.x/jms.html#import-message-pact-jms) contracts into JMS and [IBM MQ](https://trafficparrot.com/documentation/5.65.x/ibmmq.html#import-asyncapi-mq) mappings
- Import [proto files and descriptor sets](https://trafficparrot.com/documentation/5.65.x/grpc.html#configuration) for gRPC, or discover the schema by server reflection
- Export mappings as a [ZIP in the WireMock format](https://trafficparrot.com/documentation/5.65.x/http.html#export-http-usage), as an [OpenAPI specification](https://trafficparrot.com/documentation/5.65.x/http.html#export-http-openapi), or recorded traffic as [HAR](https://trafficparrot.com/documentation/5.65.x/http.html#export-http-har)
- [Switching from WireMock, Mountebank, MockServer, Mockoon, Hoverfly or DevTest](https://trafficparrot.com/documentation/5.65.x/switching-from-another-tool.html)

### Matching and responses

- [Request matchers](https://trafficparrot.com/documentation/5.65.x/request_matching.html#matchers-reference) on URL, path, query parameters, headers and bodies: JSON, JSONPath, JSON Schema, XML, XPath, GraphQL, regular expressions and exact bytes; [CICS](https://trafficparrot.com/documentation/5.65.x/cics.html), SWIFT and FIX fields; combined with [and, or and not](https://trafficparrot.com/documentation/5.65.x/request_matching.html#logical-operators); matching scripts
- [Near-miss diagnosis](https://trafficparrot.com/documentation/5.65.x/http.html#request-log-near-misses): why an unmatched request matched nothing, field by field
- [Dynamic responses](https://trafficparrot.com/documentation/5.65.x/dynamic.html) with Handlebars helpers: values from the request, dates, random data, [HMAC](https://trafficparrot.com/documentation/5.65.x/dynamic.html#hmac-hash-helpers) and [JWT](https://trafficparrot.com/documentation/5.65.x/dynamic.html#wiremock-helpers) helpers
- Responses built from [CSV, XLS, Couchbase and any JDBC database](https://trafficparrot.com/documentation/5.65.x/dynamic.html#data-source)
- [Response bodies from files](https://trafficparrot.com/documentation/5.65.x/http.html#file-backed-responses), managed in the [Static Files browser](https://trafficparrot.com/documentation/5.65.x/http.html#static-files-browser)
- [Delays, faults and chunked responses](https://trafficparrot.com/documentation/5.65.x/http.html#fault-delay-injection)
- [Scenarios](https://trafficparrot.com/documentation/5.65.x/user_guide.html#scenarios) group mappings by test case, and [composite scenarios](https://trafficparrot.com/documentation/5.65.x/virtual_services.html#composite-scenarios) combine them
- [Webhook callbacks](https://trafficparrot.com/documentation/5.65.x/http.html#add-edit-webhook), [signed](https://trafficparrot.com/documentation/5.65.x/dynamic.html#sign-webhook), and [JMS messages sent after an HTTP or gRPC response](https://trafficparrot.com/documentation/5.65.x/jms.html#send-jms-message-json)
- [Mock OAuth2/OIDC provider](https://trafficparrot.com/documentation/5.65.x/oauth2-mock.html), and stubs that [require a valid token](https://trafficparrot.com/documentation/5.65.x/oauth2-mock.html#guard) from it
- Your own response transformers [in Java with the SDK](https://trafficparrot.com/documentation/5.65.x/dynamic.html#custom-extensions-intro), or [in any language as an external process](https://trafficparrot.com/documentation/5.65.x/dynamic.html#external-process-transformer)

### AI and MCP

- A [built-in MCP server](https://trafficparrot.com/documentation/5.65.x/mcp.html), so an AI assistant can list, create and change mappings and read the request log; it accepts local requests only unless you give it a token
- [Generate mocks with your own AI agent](https://trafficparrot.com/documentation/5.65.x/generate-mocks-with-ai-agent.html): an [`AGENTS.md` brief](https://trafficparrot.com/documentation/5.65.x/generate-mocks-with-ai-agent.html#agents-md) in the installation, [served mapping schemas](https://trafficparrot.com/documentation/5.65.x/generate-mocks-with-ai-agent.html#download-schemas), a [helper policy](https://trafficparrot.com/documentation/5.65.x/generate-mocks-with-ai-agent.html#helper-policy) and a [validate command](https://trafficparrot.com/documentation/5.65.x/generate-mocks-with-ai-agent.html#validate) for what the agent wrote
- [Traffic Parrot and AI](https://trafficparrot.com/ai/): the hub page

### Testing and CI

- [Testcontainers module](https://trafficparrot.com/documentation/5.65.x/testcontainers.html) for [JUnit 5](https://trafficparrot.com/documentation/5.65.x/testcontainers.html#junit5) and [JUnit 4](https://trafficparrot.com/documentation/5.65.x/testcontainers.html#junit4), with your extension jars and properties, and a [Cypress](https://trafficparrot.com/documentation/5.65.x/testcontainers.html#cypress) suite
- [JUnit and Spring Boot tests](https://trafficparrot.com/documentation/5.65.x/user_guide.html#junit-spring-tests) against a running instance
- [Maven](https://trafficparrot.com/documentation/5.65.x/user_guide.html#maven-plugin) and [Gradle](https://trafficparrot.com/documentation/5.65.x/user_guide.html#gradle-plugin) plugins
- [`trafficparrot validate`](https://trafficparrot.com/documentation/5.65.x/http.html#validate-cli) checks mappings against OpenAPI, proto and AsyncAPI specifications, their [schemas](https://trafficparrot.com/documentation/5.65.x/http.html#validate-cli-mapping-schema) and [captured traffic](https://trafficparrot.com/documentation/5.65.x/http.html#validate-cli-traffic), as a [CI gate](https://trafficparrot.com/documentation/5.65.x/http.html#validate-cli-ci)
- [Coverage](https://trafficparrot.com/documentation/5.65.x/http.html#http-coverage) of a specification by the mappings, [live while recording](https://trafficparrot.com/documentation/5.65.x/http.html#recording-live-coverage)
- [Request verification](https://trafficparrot.com/documentation/5.65.x/http.html#verifying-requests) through the management API
- [Workstation to CI](https://trafficparrot.com/documentation/5.65.x/workstation.html): mappings authored locally, kept in version control, run in the pipeline
- [Performance testing](https://trafficparrot.com/documentation/5.65.x/performance_testing.html) guidance

### Management and security

- [Management APIs](https://trafficparrot.com/documentation/5.65.x/user_guide.html#management-apis) with an [OpenAPI reference](https://trafficparrot.com/documentation/5.65.x/openapi/index.html)
- [Several virtual services per instance](https://trafficparrot.com/documentation/5.65.x/virtual_services.html), each on its own ports
- Configuration by [properties](https://trafficparrot.com/documentation/5.65.x/properties.html) and [environment variables](https://trafficparrot.com/documentation/5.65.x/environment-variables.html)
- [Logging](https://trafficparrot.com/documentation/5.65.x/logging.html) and the [request log](https://trafficparrot.com/documentation/5.65.x/http.html#request-log)
- [Role-based access](https://trafficparrot.com/documentation/5.65.x/user_guide.html#role-based-access) and [Okta single sign-on](https://trafficparrot.com/documentation/5.65.x/properties.html#enterprise-properties)
- [HTTPS with your certificates](https://trafficparrot.com/documentation/5.65.x/user_guide.html#https-certificates), limited to the [TLS versions and cipher suites](https://trafficparrot.com/documentation/5.65.x/user_guide.html#https-certificates-tls) you choose
- [Docker](https://trafficparrot.com/documentation/5.65.x/user_guide.html#running-docker), [Kubernetes](https://trafficparrot.com/documentation/5.65.x/user_guide.html#running-kubernetes) and [OpenShift](https://trafficparrot.com/documentation/5.65.x/user_guide.html#running-openshift)
- [Upgrades](https://trafficparrot.com/documentation/5.65.x/user_guide.html#upgrade) that carry your mappings and settings across
- [Licence file or environment variable](https://trafficparrot.com/documentation/5.65.x/user_guide.html#supplying-the-license), or a [licence server](https://trafficparrot.com/documentation/5.65.x/user_guide.html#license-server)

<a id="protocol-matrix"></a>
## Protocol matrix

What each protocol's virtual service records, replays and imports, and how an unmatched request is diagnosed.

| Protocol | Record | Replay | Import formats | Near-miss diagnostics |
| --- | --- | --- | --- | --- |
| [HTTP(S)](https://trafficparrot.com/documentation/5.65.x/http.html) | [Yes](https://trafficparrot.com/documentation/5.65.x/http.html#recording-http), as a recording proxy for HTTP and HTTPS, with URL and body rewriting and credential redaction | [HTTP/1.0, HTTP/1.1 and HTTP/2](https://trafficparrot.com/documentation/5.65.x/http.html#supported-protocols); REST, SOAP and GraphQL | [OpenAPI 2.0 and 3.0.x, Swagger 1.x and 2.x, RAML 0.8, HAR 1.1 and 1.2, Pact v2 to v4, Mountebank imposters, cURL commands, WireMock ZIP](https://trafficparrot.com/documentation/5.65.x/http.html#import-http-supported-formats), from a file, or [from a URL](https://trafficparrot.com/documentation/5.65.x/http.html#import-http-from-url) except RAML and WireMock ZIP | [Request Log ranks the closest mappings](https://trafficparrot.com/documentation/5.65.x/http.html#request-log-near-misses), field by field, with a link to edit the stub |
| [gRPC](https://trafficparrot.com/documentation/5.65.x/grpc.html) | [Unary, server streaming and client streaming](https://trafficparrot.com/documentation/5.65.x/grpc.html#recording-grpc), with your proto files or server reflection; bidirectional streaming is replayed but not recorded | [All four call types](https://trafficparrot.com/documentation/5.65.x/grpc.html#streaming-modes) | [`.proto` files, compiled descriptors and descriptor sets](https://trafficparrot.com/documentation/5.65.x/grpc.html#configuration) (`.bin`, `.set.bin`, `.desc`, `.protoset`), or server reflection; [mapping ZIP](https://trafficparrot.com/documentation/5.65.x/grpc.html#import-export-grpc-mappings) | Requests page marks each call matched or unmatched |
| [WebSocket](https://trafficparrot.com/documentation/5.65.x/websocket.html) | [Text frames](https://trafficparrot.com/documentation/5.65.x/websocket.html#recording-websocket) exchanged with a backend | [Mappings answer text frames](https://trafficparrot.com/documentation/5.65.x/websocket.html#websocket-mappings) | None; mappings are written in the console or recorded | [The message journal marks unmatched frames](https://trafficparrot.com/documentation/5.65.x/websocket.html#websocket-management-api) |
| [JMS](https://trafficparrot.com/documentation/5.65.x/jms.html) | [Queues and topics](https://trafficparrot.com/documentation/5.65.x/jms.html#recording-jms), on the internal or an external broker | [Queues and topics](https://trafficparrot.com/documentation/5.65.x/jms.html#edit-jms) | [AsyncAPI 2.x and 3.0](https://trafficparrot.com/documentation/5.65.x/jms.html#import-asyncapi-jms), [Pact message contracts](https://trafficparrot.com/documentation/5.65.x/jms.html#import-message-pact-jms), [mapping ZIP](https://trafficparrot.com/documentation/5.65.x/jms.html#import-export-jms-mappings) | Requests page with near misses, when [messaging diagnostics](https://trafficparrot.com/documentation/5.65.x/properties.html#jms-properties) are on |
| [IBM® MQ](https://trafficparrot.com/documentation/5.65.x/ibmmq.html) (native) | [Queues, topics and model queues](https://trafficparrot.com/documentation/5.65.x/ibmmq.html#recording-mq) on your queue manager, and [CICS bridge conversations](https://trafficparrot.com/documentation/5.65.x/cics.html#recording) | [Queues and topics](https://trafficparrot.com/documentation/5.65.x/ibmmq.html#edit-mq), and the [CICS DPL bridge](https://trafficparrot.com/documentation/5.65.x/cics.html) with COBOL copybooks | [AsyncAPI 2.x and 3.0](https://trafficparrot.com/documentation/5.65.x/ibmmq.html#import-asyncapi-mq), [Pact message contracts](https://trafficparrot.com/documentation/5.65.x/ibmmq.html#import-message-pact-mq) | Requests page with near misses, [the decoded CICS request included](https://trafficparrot.com/documentation/5.65.x/cics.html#request-view) |
| [Files](https://trafficparrot.com/documentation/5.65.x/filemessage.html) (local, FTP, SFTP) | [Text and binary files](https://trafficparrot.com/documentation/5.65.x/filemessage.html#binary-files) on local file system, SFTP and FTP connections | [Manual or scripted replay](https://trafficparrot.com/documentation/5.65.x/filemessage.html#replay-script); Traffic Parrot as the [SFTP server](https://trafficparrot.com/documentation/5.65.x/filemessage.html#sftp-server) | [Mapping ZIP](https://trafficparrot.com/documentation/5.65.x/filemessage.html#import-export-file-mappings) | Requests page with near misses, when [messaging diagnostics](https://trafficparrot.com/documentation/5.65.x/properties.html#jms-properties) are on |
| [Thrift](https://trafficparrot.com/documentation/5.65.x/thrift.html) | [Yes](https://trafficparrot.com/documentation/5.65.x/thrift.html#recording-thrift), with your Thrift IDL files | [Yes](https://trafficparrot.com/documentation/5.65.x/thrift.html#edit-thrift) | [Thrift IDL files](https://trafficparrot.com/documentation/5.65.x/thrift.html#configuration) | None |

![The HTTP Request Log with an unmatched GET request expanded: its headers, the 900 response, and three near misses ranked 95, 48 and 28 percent, the first missing only its Authorization header](https://trafficparrot.com/documentation/5.65.x/img/data-sheet/request-log-near-miss.webp)

![The gRPC Add/Edit page: a request matched on its gRPC method and message payload, a response message, metadata matching, and two Order/Purchase mappings in the list](https://trafficparrot.com/documentation/5.65.x/img/data-sheet/grpc-mappings.webp)

![The IBM MQ Add/Edit page: a request destination and body matcher, a response with its destination, MQ message format and character set, and two queue mappings in the list](https://trafficparrot.com/documentation/5.65.x/img/data-sheet/ibm-mq-mappings.webp)

<a id="security"></a>
## Security

- [Role-based access](https://trafficparrot.com/documentation/5.65.x/user_guide.html#role-based-access): a read-only role and an edit role, checked on every request that would change Traffic Parrot, through the console, the APIs it serves and the MCP endpoint.
- [Single sign-on with Okta](https://trafficparrot.com/documentation/5.65.x/properties.html#enterprise-properties) for the web console.
- Credentials can stay out of recordings: with [recording redaction](https://trafficparrot.com/documentation/5.65.x/http.html#recording-header-redaction) switched on, `Authorization`, `Cookie` and any header you name are masked in what recording saves and in the log, and the [rewrite rules](https://trafficparrot.com/documentation/5.65.x/http.html#recording-request-body-rewriting) you define keep secrets out of recorded bodies.
- Passwords and secret-looking settings are redacted in the [log](https://trafficparrot.com/documentation/5.65.x/logging.html) Traffic Parrot writes at startup.
- The [MCP endpoint](https://trafficparrot.com/documentation/5.65.x/mcp.html#access) accepts requests from the local machine only unless you configure a bearer token, checks the browser `Origin`, and, with the console login on, refuses a tool that changes something to a user without the edit role.
- [HTTPS with your own certificates](https://trafficparrot.com/documentation/5.65.x/user_guide.html#https-certificates), limited to the [TLS protocol versions and cipher suites](https://trafficparrot.com/documentation/5.65.x/user_guide.html#https-certificates-tls) you choose.
- Webhooks are signed both ways: [outbound callbacks carry an HMAC signature](https://trafficparrot.com/documentation/5.65.x/dynamic.html#sign-webhook), and [an inbound webhook's signature is verified](https://trafficparrot.com/documentation/5.65.x/request_matching.html#verify-signed-webhook) before a mapping matches it.
- AI-written mocks are bounded by a [helper policy](https://trafficparrot.com/documentation/5.65.x/generate-mocks-with-ai-agent.html#helper-policy), and the MCP tools preview a change before it is applied.
- On your own infrastructure: Traffic Parrot installs on your machines, virtual machines or clusters, and its licence is read from a [file or an environment variable](https://trafficparrot.com/documentation/5.65.x/user_guide.html#supplying-the-license), or from a [licence server](https://trafficparrot.com/documentation/5.65.x/user_guide.html#license-server) you host.

<a id="platforms"></a>
## Requirements

Traffic Parrot requires Java 17 or later. Three of the four downloads bundle a Java runtime, so the JVM is already in the ZIP package you download; the fourth runs on a Java runtime you install, on any of the supported operating systems.

Although Traffic Parrot is built on the JVM it works over the wire, so the systems it simulates and the applications it serves can be written in any language, and no Java knowledge is needed unless you want to write [Traffic Parrot plugins and extensions](https://trafficparrot.com/documentation/5.65.x/dynamic.html#custom-extensions-intro). For example, you can use Traffic Parrot to mock Go or .NET C# microservice APIs.

<a id="hardware-requirements"></a>
### Hardware requirements

Traffic Parrot ships with a small default Java heap (`-Xmx128m` in the install's `jvm.args` file), which you raise for larger recordings, larger datasets, or multiple virtual services per instance (see [JVM arguments](https://trafficparrot.com/documentation/5.65.x/user_guide.html#jvm-arguments)). The figures below are sized for that default configuration; high request rates and performance testing need more (see [Performance testing](https://trafficparrot.com/documentation/5.65.x/performance_testing.html) for sizing guidance).

|  | Minimum | Recommended |
| --- | --- | --- |
| Memory (RAM) | 512 MB (with the default `-Xmx128m` heap) | 1 GB or more (raise `-Xmx` to `512m` or higher for larger workloads) |
| Disk space | About 165 MB unpacked for the download without a bundled Java runtime | About 320 MB (Windows), 330 MB (Linux) or 460 MB (Mac, with both Intel and Apple Silicon runtimes) unpacked for the downloads that bundle a Java runtime; allow extra for recordings and logs |

<a id="software-requirements"></a>
### Software requirements

|  |  |
| --- | --- |
| Java runtime | Java 17 or later, or choose a download that bundles a Java runtime, so no separate installation is required. Tested on Java 17 and 21, and on Java 25 in Docker. The bundled Linux and Windows runtimes are for x64; on another architecture use the download without a bundled runtime and your own Java 17 or later. |
| Operating system | Windows, Linux or macOS. The Mac download runs natively on Apple Silicon and on Intel. Docker images on Alpine and Debian are tested. |
| Web browser | The administration console is tested with Chrome. |

<a id="poc-link"></a>
## How to run a POC (proof of concept project)

Have a look at [Proof of concept with on-premises installation at a large enterprise](https://trafficparrot.com/documentation/5.65.x/user_guide.html#poc)
