# apache/tika architecture

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

- Interactive diagram: https://gitdiagram.com/apache/tika
- Repository: https://github.com/apache/tika

## Overview

Apache Tika detects file types and extracts text and metadata from documents, with Markdown as the documented default output. The principal workflow is a caller or CLI submitting a file, parsing it, recursively extracting embedded resources, and receiving formatted or structured results. Additional documented capabilities include isolated parsing through Tika Pipes, configurable inference engines, and emitting extracted documents to OpenSearch. The graph uses the README and supplied excerpts; major unsampled parser and server internals are represented only where the tree supports their paths.

Main entry points: [`tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java`](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java) (Auto-detect parser), [`tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java`](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java) (Recursive results), [`tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java`](https://github.com/apache/tika/blob/main/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java) (Tika CLI), [`tika-core/src/main/java/org/apache/tika/Tika.java`](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/Tika.java) (Tika API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry points"]
  node_cli["Tika CLI<br/>[TikaCLI.java]"]
  node_facade["Tika API<br/>[Tika.java]"]
end

subgraph group_parse["Detection and parsing"]
  node_autoparser["Auto-detect parser"]
  node_detectors["Type detection"]
  node_parsers["Format parsers"]
  node_embedded["Embedded extraction"]
end

subgraph group_output["Extraction results"]
  node_metadata["Metadata model<br/>[Metadata.java]"]
  node_recursive["Recursive results"]
  node_handler["Content handlers"]
  node_result["Markdown or JSON"]
end

subgraph group_inference["Inference"]
  node_config["Engine configuration<br/>[EngineLoader.java]"]
  node_registry["Engine registry"]
  node_embedding["Embedding engine"]
end

subgraph group_pipes["Pipes and emitters"]
  node_pipes_manager["Client process manager"]
  node_emitter_manager["Emitter manager"]
  node_opensearch["OpenSearch emitter"]
end

node_caller(("Application caller"))
node_input["Document input"]
node_inference_service{{"Embedding service"}}
node_search[("OpenSearch")]

node_caller -->|"submits file"| node_facade
node_caller -->|"invokes"| node_cli
node_cli -->|"parses input"| node_autoparser
node_facade -->|"parses input"| node_autoparser
node_autoparser -->|"detects type"| node_detectors
node_autoparser -->|"dispatches parsing"| node_parsers
node_parsers -->|"extracts resources"| node_embedded
node_embedded -->|"parses embedded"| node_autoparser
node_autoparser -->|"populates metadata"| node_metadata
node_autoparser -->|"sends content"| node_handler
node_recursive -->|"wraps parsing"| node_autoparser
node_recursive -->|"collects metadata"| node_metadata
node_handler -->|"formats content"| node_result
node_config -->|"builds registry"| node_registry
node_registry -->|"holds engine"| node_embedding
node_embedding -.->|"requests vectors"| node_inference_service
node_pipes_manager -->|"isolates parsing"| node_input
node_emitter_manager -->|"provides emitter"| node_opensearch
node_opensearch -.->|"indexes documents"| node_search

click node_cli "https://github.com/apache/tika/blob/main/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java"
click node_facade "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/Tika.java"
click node_autoparser "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java"
click node_detectors "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java"
click node_parsers "https://github.com/apache/tika/tree/main/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules"
click node_embedded "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/extractor/ParsingEmbeddedDocumentExtractor.java"
click node_metadata "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/metadata/Metadata.java"
click node_recursive "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java"
click node_handler "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/sax/BasicContentHandlerFactory.java"
click node_result "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/sax/FastMarkdownTextRenderer.java"
click node_config "https://github.com/apache/tika/blob/main/tika-serialization/src/main/java/org/apache/tika/config/loader/EngineLoader.java"
click node_registry "https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/inference/EngineRegistry.java"
click node_embedding "https://github.com/apache/tika/blob/main/tika-parsers/tika-parsers-ml/tika-inference/src/main/java/org/apache/tika/inference/OpenAIEmbeddingEngine.java"
click node_pipes_manager "https://github.com/apache/tika/blob/main/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PerClientServerManager.java"
click node_emitter_manager "https://github.com/apache/tika/blob/main/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitterManager.java"
click node_opensearch "https://github.com/apache/tika/blob/main/tika-pipes/tika-pipes-plugins/tika-pipes-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchClient.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_facade toneBlue
class node_autoparser,node_detectors,node_parsers,node_embedded,node_search toneAmber
class node_metadata,node_recursive,node_handler,node_result toneMint
class node_config,node_registry,node_embedding toneRose
class node_pipes_manager,node_emitter_manager,node_opensearch,node_caller,node_input,node_inference_service toneIndigo
```

## Components

### Entry points

- [Tika CLI](https://github.com/apache/tika/blob/main/tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java): `tika-app/src/main/java/org/apache/tika/cli/TikaCLI.java`
- [Tika API](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/Tika.java): `tika-core/src/main/java/org/apache/tika/Tika.java`

### Detection and parsing

- [Auto-detect parser](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java): `tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java`
- [Type detection](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java): `tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java`
- [Format parsers](https://github.com/apache/tika/tree/main/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules): `tika-parsers/tika-parsers-standard/tika-parsers-standard-modules`
- [Embedded extraction](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/extractor/ParsingEmbeddedDocumentExtractor.java): `tika-core/src/main/java/org/apache/tika/extractor/ParsingEmbeddedDocumentExtractor.java`

### Extraction results

- [Metadata model](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/metadata/Metadata.java): `tika-core/src/main/java/org/apache/tika/metadata/Metadata.java`
- [Recursive results](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java): `tika-core/src/main/java/org/apache/tika/parser/RecursiveParserWrapper.java`
- [Content handlers](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/sax/BasicContentHandlerFactory.java): `tika-core/src/main/java/org/apache/tika/sax/BasicContentHandlerFactory.java`
- [Markdown or JSON](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/sax/FastMarkdownTextRenderer.java): `tika-core/src/main/java/org/apache/tika/sax/FastMarkdownTextRenderer.java`

### Inference

- [Engine configuration](https://github.com/apache/tika/blob/main/tika-serialization/src/main/java/org/apache/tika/config/loader/EngineLoader.java): `tika-serialization/src/main/java/org/apache/tika/config/loader/EngineLoader.java`
- [Engine registry](https://github.com/apache/tika/blob/main/tika-core/src/main/java/org/apache/tika/parser/inference/EngineRegistry.java): `tika-core/src/main/java/org/apache/tika/parser/inference/EngineRegistry.java`
- [Embedding engine](https://github.com/apache/tika/blob/main/tika-parsers/tika-parsers-ml/tika-inference/src/main/java/org/apache/tika/inference/OpenAIEmbeddingEngine.java): `tika-parsers/tika-parsers-ml/tika-inference/src/main/java/org/apache/tika/inference/OpenAIEmbeddingEngine.java`

### Pipes and emitters

- [Client process manager](https://github.com/apache/tika/blob/main/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PerClientServerManager.java): `tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/PerClientServerManager.java`
- [Emitter manager](https://github.com/apache/tika/blob/main/tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitterManager.java): `tika-pipes/tika-pipes-core/src/main/java/org/apache/tika/pipes/core/emitter/EmitterManager.java`
- [OpenSearch emitter](https://github.com/apache/tika/blob/main/tika-pipes/tika-pipes-plugins/tika-pipes-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchClient.java): `tika-pipes/tika-pipes-plugins/tika-pipes-opensearch/src/main/java/org/apache/tika/pipes/emitter/opensearch/OpenSearchClient.java`

### Other components

- **Application caller**
- **Document input**
- **Embedding service**
- **OpenSearch**

## Connections

- Application caller → Tika API: submits file
- Application caller → Tika CLI: invokes
- Tika CLI → Auto-detect parser: parses input
- Tika API → Auto-detect parser: parses input
- Auto-detect parser → Type detection: detects type
- Auto-detect parser → Format parsers: dispatches parsing
- Format parsers → Embedded extraction: extracts resources
- Embedded extraction → Auto-detect parser: parses embedded
- Auto-detect parser → Metadata model: populates metadata
- Auto-detect parser → Content handlers: sends content
- Recursive results → Auto-detect parser: wraps parsing
- Recursive results → Metadata model: collects metadata
- Content handlers → Markdown or JSON: formats content
- Engine configuration → Engine registry: builds registry
- Engine registry → Embedding engine: holds engine
- Embedding engine → Embedding service: requests vectors
- Client process manager → Document input: isolates parsing
- Emitter manager → OpenSearch emitter: provides emitter
- OpenSearch emitter → OpenSearch: indexes documents
