Jina Reader is an API-first SaaS application that turns URLs of web pages, PDFs, and other documents into markdown or images. It's built to help developers prepare data context for LLMs — now widely known as context engineering.
Jina Reader is a multi-threaded Node.js application.
- Web pages are rendered using a headless Chrome browser, with text content extracted via a stack of techniques (see HTML to Markdown profiles).
- PDF parsing and rendering are done using PDF.js.
- MS Office documents are processed using LibreOffice.
Given a URL, Jina Reader fetches the content and renders it using headless Chrome if it's a web page (HTML/xHTML). If the content is a PDF, it uses PDF.js to parse and render. For MS Office documents, LibreOffice converts them to PDF + HTML first, after which the PDF/HTML path takes over.
Advanced options let you filter or manipulate the page content — CSS-selector-based filtering, custom JavaScript execution, custom proxy routing, and more.
Reader can also take raw HTML and convert it to markdown, using the same conversion pipeline as the URL-to-Markdown feature.
Reader can take a PDF file, extract text content as markdown, and render each page as an image.
Reader can take MS Office documents (Word, Excel, PowerPoint) and convert them to markdown or images by first converting them to PDF/HTML using LibreOffice.
Reader can take an image and produce a text description (captioning). This is built on the jina-vlm small vision-language model and can be extended to VQA tasks. Note: this is not exactly OCR.
Reader supports several engines for fetching/rendering web pages to HTML.
The most-used engine. The current implementation runs latest headless Chrome via the puppeteer library. It provides the most accurate rendering and can execute JavaScript on the page, which is essential for modern web pages.
A lightweight engine that uses curl-impersonate to fetch the raw HTML of a web page. It does not execute JavaScript. Reader's implementation includes a simulated cookie layer to handle basic cookie-based redirection.
Uses Cloudflare's Browser Rendering REST API for URL-to-HTML. Strict rate limits apply; this engine is meant for testing and as a fallback.
The default. Reader intelligently uses the CURL and Browser engines in combination, based on content characteristics and request requirements.
Reader supports several profiles for converting HTML to markdown.
Readability is automatically used to clean HTML before converting to markdown. It produces a clean, readable version of the HTML content for many pages.
A custom implementation inspired by the turndown library, with custom rules and plugins to convert HTML into markdown.
An experimental engine that uses a specifically trained small language model to convert HTML to markdown.
WIP / future engine that uses a vision-language model to convert webpage screenshots directly to markdown.
- Request filtering: block requests targeting suspicious addresses.
- Request throttling: cap concurrent requests per page.
- Anonymous-user pressure relief: when one URL receives excessive anonymous traffic, temporarily block that website for anonymous users.
- Excessive HTML nodes/depth: fall back to HTML-to-text instead of markdown.
- Stage 0: fully stateless — no caching, no rate limit, no persistence.
- Stage 1: S3-like object storage for caching, no rate limit.
- Stage 2: MongoDB + S3-like object storage. MongoDB indexes the cached objects; rate limiting is available. This is the SaaS configuration and is not part of the open source branch.
- Proxy: Reader supports a built-in proxy provider for fetching content via a different IP.
- SERP: Reader primarily relies on external SERP providers for web search results.
- VLM: Reader relies on a vision-language model for image captioning. The current model is
gemini-2.5-flash-lite, but it can be switched to any model with similar capabilities.
The SaaS version of Jina Reader is deployed as a Docker image on GCP Cloud Run. MongoDB Atlas is used for metadata indexing and rate limiting; Google Cloud Storage is used for cache data. Internal services and dependencies — such as billing, jina-vlm, and readerlm-v2 — are reached over a private VPC peering link.
We run two independent clusters: US and EU. The US cluster spans 3 regions (us-central1, us-east1, us-west1); the EU cluster runs in 1 region (europe-west1).
Due to the high resource requirements of headless Chrome and LibreOffice, Reader is best deployed on serverless platforms that handle auto-scaling and resource management.