# karatelabs/karate architecture

> Architecture diagram of the GitHub repository karatelabs/karate, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/karatelabs/karate
- Repository: https://github.com/karatelabs/karate

## Overview

Karate is a unified testing framework for API tests, mocks, performance tests, and browser automation. The primary workflow starts at the CLI, selects and parses feature files, executes scenarios and steps, then exposes results and reports. Separate branches cover mock servers, browser drivers, and Gatling integration; the runtime also includes HTTP, matching, JavaScript, and server-rendered markup capabilities. The README establishes the product scope, while the sampled sources are partial, so uncertain internal call wiring is omitted.

Main entry points: [`karate-core/src/main/java/io/karatelabs/core/StepExecutor.java`](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/StepExecutor.java) (Step executor), [`karate-core/src/main/java/io/karatelabs/core/Runner.java`](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/Runner.java) (Test runner), [`karate-core/src/main/java/io/karatelabs/core/Suite.java`](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/Suite.java) (Suite execution), [`karate-core/src/main/java/io/karatelabs/Main.java`](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/Main.java) (Karate CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_execution["Test execution"]
  node_cli["Karate CLI<br/>[Main.java]"]
  node_runcommand["Run command<br/>[RunCommand.java]"]
  node_runner["Test runner<br/>[Runner.java]"]
  node_gherkin["Feature parser<br/>[GherkinParser.java]"]
  node_suite["Suite execution<br/>[Suite.java]"]
  node_scenario["Scenario runtime"]
  node_steps["Step executor<br/>[StepExecutor.java]"]
  node_results["Run results"]
  node_reports["Report output"]
end

subgraph group_runtime["Shared runtime"]
  node_js["JavaScript engine<br/>[Engine.java]"]
  node_http["HTTP client<br/>[Http.java]"]
  node_match["Matchers<br/>[Match.java]"]
end

subgraph group_integrations["Testing integrations"]
  node_mock["Mock server<br/>[MockServer.java]"]
  node_mockhandler["Mock handler<br/>[MockHandler.java]"]
  node_driver["Browser driver<br/>[Driver.java]"]
  node_cdp["CDP transport<br/>[CdpClient.java]"]
  node_gatling["Gatling adapter"]
end

subgraph group_web["Web capabilities"]
  node_markup["Markup rendering<br/>[Markup.java]"]
  node_server["HTTP server<br/>[HttpServer.java]"]
end

node_user(("Engineer"))

node_user -->|"starts"| node_cli
node_cli -->|"dispatches"| node_runcommand
node_runcommand -->|"configures run"| node_runner
node_runner -->|"parses features"| node_gherkin
node_runner -->|"starts suite"| node_suite
node_suite -->|"runs scenarios"| node_scenario
node_scenario -->|"executes steps"| node_steps
node_steps -->|"sends requests"| node_http
node_steps -->|"checks values"| node_match
node_steps -->|"evaluates scripts"| node_js
node_suite -->|"records outcomes"| node_results
node_results -->|"provides results"| node_reports
node_mock -->|"dispatches requests"| node_mockhandler
node_driver -.->|"uses CDP"| node_cdp
node_gatling -->|"executes features"| node_runner
node_server -->|"renders responses"| node_markup

click node_cli "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/Main.java"
click node_runcommand "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/cli/RunCommand.java"
click node_runner "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/Runner.java"
click node_gherkin "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/gherkin/GherkinParser.java"
click node_suite "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/Suite.java"
click node_scenario "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/ScenarioRuntime.java"
click node_steps "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/StepExecutor.java"
click node_reports "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/output/HtmlReportListener.java"
click node_js "https://github.com/karatelabs/karate/blob/main/karate-js/src/main/java/io/karatelabs/js/Engine.java"
click node_http "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/http/Http.java"
click node_match "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/match/Match.java"
click node_mock "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/MockServer.java"
click node_mockhandler "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/MockHandler.java"
click node_driver "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/driver/Driver.java"
click node_cdp "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/driver/cdp/CdpClient.java"
click node_gatling "https://github.com/karatelabs/karate/blob/main/karate-gatling/src/main/java/io/karatelabs/gatling/KarateExecutor.java"
click node_markup "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/markup/Markup.java"
click node_server "https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/http/HttpServer.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_runcommand,node_runner,node_gherkin,node_suite,node_scenario,node_steps,node_results,node_reports toneBlue
class node_js,node_http,node_match toneAmber
class node_mock,node_mockhandler,node_driver,node_cdp,node_gatling toneMint
class node_markup,node_server toneRose
class node_user toneIndigo
```

## Components

### Test execution

- [Karate CLI](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/Main.java): `karate-core/src/main/java/io/karatelabs/Main.java`
- [Run command](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/cli/RunCommand.java): `karate-core/src/main/java/io/karatelabs/cli/RunCommand.java`
- [Test runner](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/Runner.java): `karate-core/src/main/java/io/karatelabs/core/Runner.java`
- [Feature parser](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/gherkin/GherkinParser.java): `karate-core/src/main/java/io/karatelabs/gherkin/GherkinParser.java`
- [Suite execution](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/Suite.java): `karate-core/src/main/java/io/karatelabs/core/Suite.java`
- [Scenario runtime](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/ScenarioRuntime.java): `karate-core/src/main/java/io/karatelabs/core/ScenarioRuntime.java`
- [Step executor](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/StepExecutor.java): `karate-core/src/main/java/io/karatelabs/core/StepExecutor.java`
- **Run results**
- [Report output](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/output/HtmlReportListener.java): `karate-core/src/main/java/io/karatelabs/output/HtmlReportListener.java`

### Shared runtime

- [JavaScript engine](https://github.com/karatelabs/karate/blob/main/karate-js/src/main/java/io/karatelabs/js/Engine.java): `karate-js/src/main/java/io/karatelabs/js/Engine.java`
- [HTTP client](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/http/Http.java): `karate-core/src/main/java/io/karatelabs/http/Http.java`
- [Matchers](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/match/Match.java): `karate-core/src/main/java/io/karatelabs/match/Match.java`

### Testing integrations

- [Mock server](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/MockServer.java): `karate-core/src/main/java/io/karatelabs/core/MockServer.java`
- [Mock handler](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/core/MockHandler.java): `karate-core/src/main/java/io/karatelabs/core/MockHandler.java`
- [Browser driver](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/driver/Driver.java): `karate-core/src/main/java/io/karatelabs/driver/Driver.java`
- [CDP transport](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/driver/cdp/CdpClient.java): `karate-core/src/main/java/io/karatelabs/driver/cdp/CdpClient.java`
- [Gatling adapter](https://github.com/karatelabs/karate/blob/main/karate-gatling/src/main/java/io/karatelabs/gatling/KarateExecutor.java): `karate-gatling/src/main/java/io/karatelabs/gatling/KarateExecutor.java`

### Web capabilities

- [Markup rendering](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/markup/Markup.java): `karate-core/src/main/java/io/karatelabs/markup/Markup.java`
- [HTTP server](https://github.com/karatelabs/karate/blob/main/karate-core/src/main/java/io/karatelabs/http/HttpServer.java): `karate-core/src/main/java/io/karatelabs/http/HttpServer.java`

### Other components

- **Engineer**

## Connections

- Engineer → Karate CLI: starts
- Karate CLI → Run command: dispatches
- Run command → Test runner: configures run
- Test runner → Feature parser: parses features
- Test runner → Suite execution: starts suite
- Suite execution → Scenario runtime: runs scenarios
- Scenario runtime → Step executor: executes steps
- Step executor → HTTP client: sends requests
- Step executor → Matchers: checks values
- Step executor → JavaScript engine: evaluates scripts
- Suite execution → Run results: records outcomes
- Run results → Report output: provides results
- Mock server → Mock handler: dispatches requests
- Browser driver → CDP transport: uses CDP
- Gatling adapter → Test runner: executes features
- HTTP server → Markup rendering: renders responses
