- InMemoryDocumentStore.bm25retrieval and InMemoryBM25Retriever with BM25L (the default) or BM25Plus now return only documents that contain at least one query term, with or without scalescore.…
- TextCleaner.run now raises a clear TypeError when texts is not a list or any element is not a str, instead of failing later or producing unexpected results.
- Haystack now requires anyio>=4.14.2. anyio is installed transitively through httpx and openai; versions before 4.14.2 are affected by CVE-2026-63374 (GHSA-82r6-8w77-94w6).
- Fixed BM25 tokenization in InMemoryDocumentStore for Chinese, Japanese and Korean text. The default bm25tokenizationregex now splits CJK characters into one token each, so bare-term queries can…
- Fix Pipeline.connect() raising TypeError: object of type 'ellipsis' has no len() when one of the sockets is annotated with Callable[..., T]. A Callable[..., T] now matches callables with any…
- Fixed ChatPromptBuilder dropping content parts when the template is a list of ChatMessage objects. Only the first TextContent part was rendered, and every other part - additional texts, images,…
Haystack by deepset
Overview
deepset's open-source framework for building production LLM pipelines and agents, with a focus on retrieval.
Haystack was downloaded 160K times from PyPI in the week ending Oct 4, 2026, up 12.2% on the week before and down 24.0% over the last 30 days compared with the 30 before. The GitHub repository has 26.7K stars, 288 of them added in the last 30 days. The latest stable release is 3.3.0, published Oct 1, 2026; there were 2 stable releases in the past 30 days.
Haystack usage and attention over time
Download the raw daily series: haystack.csv
Install Haystack
| PyPI | pip install haystack-ai |
|---|
These commands use the packages tracked on this page. The vendor may recommend a different installer; see the official documentation.
Key facts
| Maker | deepset |
|---|---|
| Type | LLM pipeline framework |
| License | Apache-2.0 |
| Interfaces | Python library |
| Main language | Python |
| Open issues and PRs | 153 |
Pricing
Haystack is open source and free to use; you pay only for the models and infrastructure it runs on.
, checked Oct 5, 2026. Prices change often; confirm before you buy.
Pulse Score breakdown
Each component is scored 0 to 100 from public signals; a dash means no data for it. Methodology.
What changed: recent Haystack releases
6 stable releases in the last 90 days · Full changelog
- Serialized OutputAdapter and ConditionalRouter components containing Jinja customfilters must now be loaded with Pipeline.load(..., unsafe=True) (or the equivalent Pipeline.loads /…
- The toolresultoffloaded meta key that the hook sets on an offloaded message now always holds a list of store references rather than a single reference string, since a result can span several…
- The + operator for combining Toolsets has been removed. Pass Toolsets as a list wherever tools are accepted instead: Agent(..., tools=[toolseta, toolsetb]). Pipelines serialized with a +-combined…
- Toolset.add() now only accepts a single Tool, not another Toolset. To combine Toolsets, pass them as a list: Agent(..., tools=[toolseta, toolsetb]).
- Add Pipeline.addcomponents() to add a mapping of component names to component instances in one call. Re-adding the same component instance under the same name with Pipeline.addcomponent() or…
- Added the experimental SummarizationCompactor (use with CompactionHook), which progressively summarizes a conversation until it fits a target token budget, preserving useful context from…
- The OpenAI Chat Completions and Responses converters no longer raise on an assistant message with no content parts, which a Chat Generator returns when it discards a malformed tool call. It is…
- The Hugging Face message converter no longer raises on an assistant message with no content parts, and sends it with empty content instead.
- Add an Agent.clone() method that returns a new Agent with the same configuration, optionally replacing some init parameters: variant = agent.clone(systemprompt="Answer in German.").
- Added a linkformat parameter to both PyPDFToDocument and PDFMinerToDocument components, matching the existing functionality in DOCXToDocument. Links are parsed from PDF annotations and appended at…
- Agent now returns an exitreason output reporting why the run stopped, making it easier to route the Agent's output downstream (for example with a ConditionalRouter). It is one of: "text" (the…
- Haystack components that use a document store now provide close and closeasync methods for releasing resources. These methods are available on: AutoMergingRetriever, CacheChecker, DocumentWriter,…
- Add a content-free haystack.agent.hook tracing span for every Agent hook invocation. Each span identifies the hook point, hook name, and hook type, allowing hook latency and failures to be…
- Added the HAYSTACKUNSAFEDESERIALIZATION environment variable as a process-wide equivalent of loading with unsafe=True. When set to a truthy value (1 or true), every Pipeline.load / Pipeline.loads…
- Skills as first-class citizens — SkillToolset discovers skills through progressive disclosure, so the model sees only names and one-line descriptions until it loads one, keeping context lean.
- Dynamic tool selection at runtime — pass tools=... to run / runasync so one reusable Agent serves different teams, tenants, and tasks.
- Native async tools — @tool routes async def callables to a Tool's new asyncfunction.
- Human-in-the-Loop is now a beforetool hook (ConfirmationHook). ⚠️
- Tool result offloading (ToolResultOffloadHook) writes large results to a store and leaves a compact pointer in the conversation.
- Required template variables by default — Agent, PromptBuilder, and ChatPromptBuilder now treat every Jinja2 variable as required (requiredvariables=None restores the old behavior); a new {% insert…
- DocumentNDCGEvaluator now matches documents by their content field by default instead of their auto-generated id. Previously, ground truth and retrieved documents were matched only if they had…
- Added native asynchronous support (runasync) to LLMEvaluator, FaithfulnessEvaluator, and ContextRelevanceEvaluator. This allows concurrent evaluation loops inside async applications like FastMCP…
- Added optional YAML frontmatter extraction to MarkdownToDocument. When initialized with extractfrontmatter=True, YAML frontmatter at the beginning of a Markdown file is removed from the converted…
- Added documentcomparisonfield parameter to DocumentNDCGEvaluator, consistent with DocumentMAPEvaluator, DocumentMRREvaluator, and DocumentRecallEvaluator. Users can now match documents by…
- Add outputpassthrough option to ConditionalRouter. When outputpassthrough: True is set in a route, the output field is treated as a plain variable name instead of a Jinja2 template, and the value…
- Added an opt-in expandreferenceranges parameter to AnswerBuilder. When enabled, reference ranges like [6-10] and comma-separated ranges like [1-3,7-9] are expanded to the corresponding document…
Haystack alternatives
| # | Agent | Pulse | Downloads 7d | 7d | 30d | VS Code installs | Stars | Latest release | Price | Last 90 days | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 4 |
LangChainLangChain |
77 | 44.3M | up 1.9% | down 22.0% | — | 147K+45/day | 1.4.38d ago | Free (OSS) | ||
| 10 |
LangGraphLangChain |
69 | 16.1M | up 11.4% | down 21.8% | — | 42.7K+48/day | 1.2.13yesterday | Free (OSS) | ||
| 11 |
AI SDKVercel |
67 | 34.5M | up 13.5% | up 20.9% | — | 27.1K+18/day | 6.0.301yesterday | Free (OSS) | ||
| 13 | 63 | 8.7M | up 0.6% | up 2.0% | — | 8,679+23/day | 1.58.0yesterday | Free (OSS) | |||
| 17 |
Claude Agent SDKAnthropic |
59 | 21.5M | up 14.6% | up 0.6% | — | 8,219+5/day | 0.2.1636d ago | Free (OSS) | ||
| 21 |
MastraMastra |
58 | 2.2M | up 11.1% | up 19.1% | — | 28.6K+27/day | 1.74.0yesterday | Free (OSS) | ||
| No agents match that filter. | |||||||||||
Haystack FAQ
How much does Haystack cost?
Haystack is open source and free to use; you pay only for the models and infrastructure it runs on.
Is Haystack open source?
Yes. Haystack is open source, released under the Apache-2.0 license.
How popular is Haystack?
Haystack was downloaded 160K times from PyPI in the week ending Oct 4, 2026, up 12.2% on the week before and down 24.0% over the last 30 days compared with the 30 before. The GitHub repository has 26.7K stars, 288 of them added in the last 30 days. The latest stable release is 3.3.0, published Oct 1, 2026; there were 2 stable releases in the past 30 days.
What is the latest version of Haystack?
The latest stable release we track is 3.3.0, published on Oct 1, 2026.
What are the alternatives to Haystack?
The closest alternatives in the same category by Pulse Score are LangChain, LangGraph, AI SDK, Strands Agents.
Where these numbers come from
PyPI: haystack-ai. GitHub: deepset-ai/haystack. See data sources for how each one is collected.
