PageSourceSearch

https://weaviate.io/assets/js/dbfef640.289f18b9.js

js weaviate.io collected 2026-10-01 08:37:44 UTC 27,198 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkmy_website=globalThis.webpackChunkmy_website||[]).push([[7754],{46946(e,i,n){n.d(i,{Ay:()=>o,RM:()=>s});var r=n(74848),t=n(28453);const s=[{value:"HFresh Vector Index - General Availability",id:"hfresh-vector-index---general-availability",level:2},{value:"How it works",id:"how-it-works",level:3},{value:"MCP Server - General Availability",id:"mcp-server---general-availability",level:2},{value:"How it works",id:"how-it-works-1",level:3},{value:"Async Replication, Everywhere",id:"async-replication-everywhere",level:2},{value:"How it works",id:"how-it-works-2",level:3},{value:"Boost API (Preview)",id:"boost-api-preview",level:2},{value:"How it works",id:"how-it-works-3",level:3},{value:"Nested Object Filtering (Preview)",id:"nested-object-filtering-preview",level:2},{value:"How it works",id:"how-it-works-4",level:3},{value:"Performance Improvements and Fixes",id:"performance-improvements-and-fixes",level:2},{value:"Community Contributions",id:"community-contributions",level:2},{value:"Summary",id:"summary",level:2}];function a(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(i.p,{children:["Weaviate ",(0,r.jsx)(i.code,{children:"v1.38"})," is now available open-source and on ",(0,r.jsx)(i.a,{href:"https://console.weaviate.cloud",children:"Weaviate Cloud"}),"."]}),"\n",(0,r.jsxs)(i.p,{children:["Two capabilities reach general availability in this release: the ",(0,r.jsx)(i.strong,{children:"HFresh"})," disk-based vector index and the built-in ",(0,r.jsx)(i.strong,{children:"MCP Server"}),". ",(0,r.jsx)(i.strong,{children:"Async replication"})," has been rebuilt to run cluster-wide from a single scheduler, and it now runs by default on every replicated collection. Two new previews join them: the ",(0,r.jsx)(i.strong,{children:"Boost API"})," for query-time rescoring and ",(0,r.jsx)(i.strong,{children:"Nested Object Filtering"}),"."]}),"\n",(0,r.jsx)(i.p,{children:"Here are the release highlights!"}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.img,{alt:"Weaviate 1.38 is released",src:n(85406).A+"",width:"1200",height:"630"})}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#hfresh-vector-index---general-availability",children:"HFresh Vector Index - General Availability"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#mcp-server---general-availability",children:"MCP Server - General Availability"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#async-replication-everywhere",children:"Async Replication, Everywhere"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#boost-api-preview",children:"Boost API (Preview)"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#nested-object-filtering-preview",children:"Nested Object Filtering (Preview)"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#performance-improvements-and-fixes",children:"Performance Improvements and Fixes"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#community-contributions",children:"Community Contributions"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"#summary",children:"Summary"})}),"\n"]}),"\n",(0,r.jsx)(i.h2,{id:"hfresh-vector-index---general-availability",children:"HFresh Vector Index - General Availability"}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.a,{href:"/blog/weaviate-1-36-release#hfresh-preview",children:"HFresh"}),", the disk-based vector index we introduced as a technical preview in ",(0,r.jsx)(i.code,{children:"v1.36"}),", is now ",(0,r.jsx)(i.strong,{children:"generally available"}),". It's inspired by the ",(0,r.jsx)(i.a,{href:"https://arxiv.org/abs/2410.14452",children:"SPFresh algorithm"}),": instead of keeping every vector in memory like HNSW, HFresh groups vectors into on-disk regions called ",(0,r.jsx)(i.em,{children:"postings"})," and keeps a small in-memory HNSW index over their centroids to decide which regions to read. Memory stays low and latency stays predictable as a collection grows into the billions, which makes it a good fit for ",(0,r.jsx)(i.strong,{children:"streaming workloads"})," where data changes continuously rather than being loaded once."]}),"\n",(0,r.jsx)(i.h3,{id:"how-it-works",children:"How it works"}),"\n",(0,r.jsxs)(i.p,{children:["HFresh is selected per (named) vector, the same way as any other index. In ",(0,r.jsx)(i.co
1de,{children:"v1.38"})," it's no longer behind a preview flag \u2014 you enable it by configuring a vector to use it:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:'from weaviate.classes.config import Configure, VectorDistances\n\nclient.collections.create(\n    "Article",\n    vector_config=Configure.Vectors.text2vec_weaviate(\n        name="default",\n        source_properties=["title", "body"],\n        vector_index_config=Configure.VectorIndex.hfresh(\n            distance_metric=VectorDistances.COSINE,\n        ),\n    ),\n)\n'})}),"\n",(0,r.jsxs)(i.p,{children:["HFresh has ",(0,r.jsx)(i.strong,{children:"RQ-1"})," ",(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/weaviate/concepts/vector-quantization",children:"quantization"})," built in: postings are stored compressed on disk, and final ranking rescores against the uncompressed vectors for accuracy. It supports the ",(0,r.jsx)(i.code,{children:"cosine"})," and ",(0,r.jsx)(i.code,{children:"l2-squared"})," distance metrics."]}),"\n",(0,r.jsx)(i.p,{children:"Because the index rebalances incrementally \u2014 splitting oversized postings, merging undersized ones, and reassigning vectors as the boundaries shift \u2014 it keeps up with continuous updates without the periodic full rebuilds that other on-disk indexes depend on."}),"\n",(0,r.jsx)(i.admonition,{title:"Related resources",type:"info",children:(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/weaviate/concepts/vector-index#hfresh-index",children:"Concepts: Vector Index - HFresh"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://arxiv.org/abs/2410.14452",children:"SPFresh: Incremental In-Place Update for Billion-Scale Vector Search"})}),"\n"]})}),"\n",(0,r.jsx)(i.h2,{id:"mcp-server---general-availability",children:"MCP Server - General Availability"}),"\n",(0,r.jsxs)(i.p,{children:["The built-in ",(0,r.jsx)(i.a,{href:"https://modelcontextprotocol.io/",children:"Model Context Protocol (MCP)"})," server, introduced as a preview in ",(0,r.jsx)(i.a,{href:"/blog/weaviate-1-37-release#mcp-server-preview",children:(0,r.jsx)(i.code,{children:"v1.37"})}),", is now ",(0,r.jsx)(i.strong,{children:"generally available"}),". It lets LLMs, IDEs, and AI agents work with Weaviate directly \u2014 inspecting schemas, running hybrid searches, and writing objects back \u2014 with no glue code. The server is a Streamable HTTP endpoint at ",(0,r.jsx)(i.code,{children:"/v1/mcp"})," on the same port as the REST API, authenticates with a Bearer / API-key token, and respects Weaviate's standard ",(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/deploy/configuration/authorization",children:"RBAC"})," permissions."]}),"\n",(0,r.jsx)(i.p,{children:"The server exposes four tools:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:(0,r.jsx)(i.code,{children:"weaviate-collections-get-config"})})," \u2014 inspect a collection's schema and configuration"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:(0,r.jsx)(i.code,{children:"weaviate-tenants-list"})})," \u2014 list the tenants of a multi-tenant collection"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:(0,r.jsx)(i.code,{children:"weaviate-query-hybrid"})})," \u2014 run a hybrid (vector + keyword) search"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:(0,r.jsx)(i.code,{children:"weaviate-objects-upsert"})})," \u2014 insert or update objects (only when write access is enabled)"]}),"\n"]}),"\n",(0,r.jsx)(i.h3,{id:"how-it-works-1",children:"How it works"}),"\n",(0,r.jsxs)(i.p,{children:["You enable the server with ",(0,r.jsx)(i.code,{children:"MCP_SERVER_ENABLED"}),", and optionally expose its write tools with ",(0,r.jsx)(i.code,{children:"MCP_SERVER_WRITE_ACCESS_ENABLED"}),". What's new in ",(0,r.jsx)(i.code,{children:"v1.38"})," is that both flags are ",(0,r.jsx)(i.strong,{children:"runtime-configurable"}),": rather than only being read at startup, Weaviate now picks up changes to them from its runtime-overrides file while the cluster is running."]}
1),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-yaml",children:"# Runtime-overrides file \u2014 applied without a restart\nmcp_server_enabled: true\nmcp_server_write_access_enabled: true\n"})}),"\n",(0,r.jsx)(i.p,{children:"So you can grant or revoke an agent's write access on a live cluster, with no rolling restart."}),"\n",(0,r.jsx)(i.admonition,{title:"Related resources",type:"info",children:(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/weaviate/configuration/mcp-server",children:"Docs: Weaviate MCP server"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://modelcontextprotocol.io/",children:"Model Context Protocol"})}),"\n"]})}),"\n",(0,r.jsx)(i.h2,{id:"async-replication-everywhere",children:"Async Replication, Everywhere"}),"\n",(0,r.jsxs)(i.p,{children:["Async replication is the background repair process that keeps replicas in sync on collections with a replication factor greater than 1. In ",(0,r.jsx)(i.code,{children:"v1.38"})," it has been re-architected to run ",(0,r.jsx)(i.strong,{children:"cluster-wide from a single scheduler"}),", rather than being configured and run separately per collection. It also now runs ",(0,r.jsx)(i.strong,{children:"by default"})," on every RF > 1 collection, where previously it was opt-in per collection."]}),"\n",(0,r.jsx)(i.h3,{id:"how-it-works-2",children:"How it works"}),"\n",(0,r.jsx)(i.p,{children:"One scheduler coordinates async repair across all replicated collections, drawing from a single shared worker pool instead of a separate pool per collection. That makes repair behavior consistent across the cluster and simpler to operate at scale."}),"\n",(0,r.jsxs)(i.p,{children:["With the move to a central scheduler, the per-collection ",(0,r.jsx)(i.code,{children:"maxWorkers"})," and ",(0,r.jsx)(i.code,{children:"enabled"})," settings are gone. Two cluster-level controls replace them:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-yaml",children:"# Size of the shared async-replication worker pool\nASYNC_REPLICATION_SCHEDULER_WORKERS: '<n>'\n# Kill-switch \u2014 pause all async replication, no restart needed\nASYNC_REPLICATION_DISABLED: 'false'\n"})}),"\n",(0,r.jsxs)(i.p,{children:[(0,r.jsx)(i.code,{children:"ASYNC_REPLICATION_SCHEDULER_WORKERS"})," sizes the shared pool, and ",(0,r.jsx)(i.code,{children:"ASYNC_REPLICATION_DISABLED"})," is a cluster-wide kill-switch you can flip at runtime."]}),"\n",(0,r.jsx)(i.admonition,{title:"Related resources",type:"info",children:(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/weaviate/concepts/replication-architecture",children:"Concepts: Replication architecture - Async replication"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/deploy/configuration/replication",children:"Configuration: Replication"})}),"\n"]})}),"\n",(0,r.jsx)(i.h2,{id:"boost-api-preview",children:"Boost API (Preview)"}),"\n",(0,r.jsxs)(i.p,{children:["Sometimes you want to nudge results without removing any. A filter is too blunt for that \u2014 it drops everything that doesn't match \u2014 when what you really want is to rank fresh articles a little higher, or favor in-stock products, while keeping the full result set. The new ",(0,r.jsx)(i.strong,{children:"Boost API"})," does exactly that."]}),"\n",(0,r.jsx)(i.h3,{id:"how-it-works-3",children:"How it works"}),"\n",(0,r.jsxs)(i.p,{children:["Boost runs ",(0,r.jsx)(i.em,{children:"after"})," the primary search. It re-scores the candidates by blending their original score with one or more boost conditions, then re-sorts them \u2014 promoting or demoting results without dropping any. Conditions can be based on:"]}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Filter matches"})," \u2014 promote results that satisfy a filter"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Property values"})," \u2014 rank by a numeric property's value"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Time decay"})," \u2014 favor more recent (or near-a-date) objects"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Numeric decay"})," \u2014 favor objects closer to a target number"]}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["In the Python client (",(0,r.jsx)(i.co
1de,{children:"v4.22.0"}),"+), you build a boost and pass it to any query via ",(0,r.jsx)(i.code,{children:"boost="}),":"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:'from weaviate.classes.query import Boost, Filter\n\n# Softly promote in-stock products without dropping the rest\nresponse = collection.query.hybrid(\n    query="wireless headphones",\n    limit=10,\n    boost=Boost.filter(\n        Filter.by_property("in_stock").equal(True),\n        weight=0.3,\n    ),\n)\n'})}),"\n",(0,r.jsxs)(i.p,{children:["The ",(0,r.jsx)(i.code,{children:"weight"})," (0\u20131) sets how much the boost shifts the final score: the result is ",(0,r.jsx)(i.code,{children:"(1 - weight)"})," of the original score plus ",(0,r.jsx)(i.code,{children:"weight"})," of the boost score. Boost is ",(0,r.jsx)(i.strong,{children:"gRPC-only"})," \u2014 there's no REST or GraphQL equivalent \u2014 and a single query can apply at most ",(0,r.jsx)(i.strong,{children:"20 conditions"}),"."]}),"\n",(0,r.jsx)(i.admonition,{title:"Preview",type:"caution",children:(0,r.jsxs)(i.p,{children:["The Boost API is a ",(0,r.jsx)(i.strong,{children:"preview"})," feature, available over gRPC. The API and behavior may change in future releases."]})}),"\n",(0,r.jsx)(i.admonition,{title:"Related resources",type:"info",children:(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/weaviate/search/boost",children:"How-to: Search - Boost results"})}),"\n"]})}),"\n",(0,r.jsx)(i.h2,{id:"nested-object-filtering-preview",children:"Nested Object Filtering (Preview)"}),"\n",(0,r.jsxs)(i.p,{children:["Weaviate ",(0,r.jsx)(i.code,{children:"v1.38"})," adds a preview for ",(0,r.jsx)(i.strong,{children:"filtering on nested object properties"}),". Until now, ",(0,r.jsx)(i.code,{children:"object"})," and ",(0,r.jsx)(i.code,{children:"object[]"})," properties were stored but couldn't be filtered on directly."]}),"\n",(0,r.jsx)(i.h3,{id:"how-it-works-4",children:"How it works"}),"\n",(0,r.jsxs)(i.p,{children:["You filter on a nested field by referencing it with a ",(0,r.jsx)(i.strong,{children:"dotted path"})," \u2014 for example, ",(0,r.jsx)(i.code,{children:"cars.make"})," to filter on the ",(0,r.jsx)(i.code,{children:"make"})," field inside a ",(0,r.jsx)(i.code,{children:"cars"})," object property. The feature is ",(0,r.jsx)(i.strong,{children:"off by default"})," and gated behind a preview environment variable:"]}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-yaml",children:"WEAVIATE_PREVIEW_NESTED_FILTERING: 'true'\n"})}),"\n",(0,r.jsx)(i.p,{children:"Once enabled, the dotted path goes wherever you'd normally supply a property name, including from the clients:"}),"\n",(0,r.jsx)(i.pre,{children:(0,r.jsx)(i.code,{className:"language-python",children:'from weaviate.classes.query import Filter\n\nresponse = collection.query.fetch_objects(\n    filters=Filter.by_property("cars.make").equal("Toyota"),\n)\n'})}),"\n",(0,r.jsxs)(i.p,{children:["This works for data nested inside both ",(0,r.jsx)(i.code,{children:"object"})," and ",(0,r.jsx)(i.code,{children:"object[]"})," properties."]}),"\n",(0,r.jsx)(i.admonition,{title:"Preview",type:"caution",children:(0,r.jsxs)(i.p,{children:["Nested Object Filtering is a ",(0,r.jsx)(i.strong,{children:"preview"})," feature, off by default behind ",(0,r.jsx)(i.code,{children:"WEAVIATE_PREVIEW_NESTED_FILTERING"}),". The API and behavior may change in future releases."]})}),"\n",(0,r.jsx)(i.admonition,{title:"Related resources",type:"info",children:(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/weaviate/search/filters",children:"How-to: Filters"})}),"\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/weaviate/config-refs/datatypes",children:"Config references: Data types - object"})}),"\n"]})}),"\n",(0,r.jsx)(i.h2,{id:"performance-improvements-and-fixes",children:"Performance Improvements and Fixes"}),"\n",(0,r.jsxs)(i.p,{children:["Beyond the headline features, ",(0,r.jsx)(i.co
1de,{children:"v1.38"})," ships a long list of improvements. A few worth calling out:"]}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Production-ready replica movement:"})," Moving a shard's replicas between nodes \u2014 for rebalancing and scaling \u2014 graduates to production-ready, backed by a change-capture log that keeps writes flowing during the move."]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Default vector index type:"})," A new cluster-level setting picks the default vector index for new collections (including named vectors), instead of always defaulting to HNSW."]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Usage guardrails:"})," Operators can set server-side limits on the number of objects, collections, tenants, and shards, plus allow-lists for vector-index and compression types."]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsxs)(i.strong,{children:["New module \u2014 ",(0,r.jsx)(i.code,{children:"text2vec-digitalocean"}),":"]})," Generate embeddings through DigitalOcean's inference platform."]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Backup reliability:"})," Backups no longer pause compactions, and object-storage listing is faster \u2014 both help large collections back up more reliably."]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Fractional BM25 property boosts:"})," Keyword-search property boosts now accept fractional values (e.g. ",(0,r.jsx)(i.code,{children:"title^2.5"}),"), not just integers."]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Deterministic tie-breaking:"})," Vector searches break ties between equal-distance results deterministically, for stable, repeatable ordering."]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Faster startup"})," and an improved cache for compressed vector indexes."]}),"\n"]}),"\n",(0,r.jsx)(i.admonition,{title:"Related resources",type:"info",children:(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsx)(i.li,{children:(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/releases/tag/v1.38.0",children:"Weaviate 1.38: GitHub Release Notes"})}),"\n"]})}),"\n",(0,r.jsx)(i.h2,{id:"community-contributions",children:"Community Contributions"}),"\n",(0,r.jsx)(i.p,{children:"Weaviate is open source, and this release includes work from several first-time contributors. Thank you to:"}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/dillonledoux",children:"@dillonledoux"})," \u2014 the new ",(0,r.jsx)(i.code,{children:"text2vec-digitalocean"})," module (",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/pull/11298",children:"#11298"}),")"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/anishesg",children:"@anishesg"})," \u2014 inverted-index and HFresh fixes, including correct handling of negative zero and pre-1970 dates (",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/pull/11120",children:"#11120"}),")"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/msnandhis",children:"@msnandhis"})," \u2014 fractional BM25 property boosts (",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/pull/11471",children:"#11471"}),")"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/3em0",children:"@3em0"})," \u2014 reject duplicate static API keys (",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/pull/11393",children:"#11393"}),")"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/kedar49",children:"@kedar49"})," \u2014 collision check for DB user identifiers (",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/pull/11381",children:"#11381"}),")"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.a,{href:"https://github.com/SAY-5",children:"@SAY-5"})," \u2014 HFresh stability fix during async init (",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/pull/11087",children:"#11087"}),")"]}),"\n"]}),"\n",(0,r.jsxs)(i.p,{children:["If you'd like to contribute, check out the ",(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/contributor-guide/",children:"contributor guide"})," and the ",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/issues",children:(0,r.jsx)(i.co
1de,{children:"good-first-issue"})})," label on GitHub."]}),"\n",(0,r.jsx)(i.h2,{id:"summary",children:"Summary"}),"\n",(0,r.jsxs)(i.p,{children:["Weaviate ",(0,r.jsx)(i.code,{children:"v1.38"})," brings two capabilities to general availability \u2014 HFresh and the MCP Server \u2014 alongside a rebuilt async replication path and two new previews."]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.strong,{children:"Key highlights:"})}),"\n",(0,r.jsxs)(i.ul,{children:["\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"HFresh (GA)"})," \u2014 The disk-based, SPFresh-inspired vector index for streaming workloads, selected per named vector with ",(0,r.jsx)(i.code,{children:'vectorIndexType: "hfresh"'})," and built-in RQ-1 quantization"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"MCP Server (GA)"})," \u2014 The built-in Model Context Protocol server at ",(0,r.jsx)(i.code,{children:"/v1/mcp"}),", with its enable flags now runtime-configurable"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Async Replication, Everywhere"})," \u2014 Cluster-wide async repair from one scheduler and a shared worker pool, on by default for replicated collections, with a runtime kill-switch"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Boost API (Preview)"})," \u2014 Query-time rescoring that promotes or demotes results without dropping any"]}),"\n",(0,r.jsxs)(i.li,{children:[(0,r.jsx)(i.strong,{children:"Nested Object Filtering (Preview)"})," \u2014 Filter on ",(0,r.jsx)(i.code,{children:"object"})," / ",(0,r.jsx)(i.code,{children:"object[]"})," properties using a dotted path"]}),"\n"]}),"\n",(0,r.jsx)(i.p,{children:(0,r.jsx)(i.strong,{children:"Ready to get started?"})}),"\n",(0,r.jsxs)(i.p,{children:["The release is available open-source on ",(0,r.jsx)(i.a,{href:"https://github.com/weaviate/weaviate/releases/tag/v1.38.0",children:"GitHub"})," and on ",(0,r.jsx)(i.a,{href:"https://console.weaviate.cloud/",children:"Weaviate Cloud"}),", where you can spin up a cluster on the free tier."]}),"\n",(0,r.jsx)(i.admonition,{type:"note",children:(0,r.jsx)(i.p,{children:"Not all features may be available on Weaviate Cloud. Some capabilities \u2014 preview features in particular, and those that require specific environment configuration \u2014 may not be enabled on managed clusters, or may become available on a different schedule."})}),"\n",(0,r.jsxs)(i.p,{children:["For those upgrading a self-hosted version, please check the ",(0,r.jsx)(i.a,{href:"https://docs.weaviate.io/deploy/migration#general-upgrade-instructions",children:"migration guide"})," for version-specific notes."]}),"\n",(0,r.jsx)(i.p,{children:"Thanks for reading, and happy vector searching!"})]})}function o(e={}){const{wrapper:i}={...(0,t.R)(),...e.components};return i?(0,r.jsx)(i,{...e,children:(0,r.jsx)(a,{...e})}):a(e)}},29257(e,i,n){n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>h});var r=n(54284),t=n(74848),s=n(28453),a=n(46946),o=n(73284);const l={title:"Weaviate 1.38 Release",slug:"weaviate-1-38-release",authors:["ivan"],date:new Date("2026-06-25T00:00:00.000Z"),image:"./img/hero.png",tags:["release","engineering"],description:"This release brings the HFresh disk-based vector index and the built-in MCP Server to general availability, rebuilds cluster-wide async replication to run from a single scheduler (on by default), and adds two previews: the Boost API and Nested Object Filtering."},c=void 0,d={image:n(4551).A,authorsImageUrls:[void 0]},h=[...a.RM];function p(e){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(a.Ay,{}),"\n","\n",(0,t.jsx)(o.Ay,{})]})}function u(e={}){const{wrapper:i}={...(0,s.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(p,{...e})}):p()}},4551(e,i,n){n.d(i,{A:()=>r});const r=n.p+"assets/images/hero-4a89efeaabb0804a755c5d50b90bcc88.png"},85406(e,i,n){n.d(i,{A:()=>r});const r=n.p+"assets/images/hero-4a89efeaabb0804a755c5d50b90bcc88.png"},54284(e){e.exports=JSON.parse('{"permalink":"/blog/weaviate-1-38-release","editUrl":"https://github.com/weaviate/weaviate-io/tree/main/blog/2026-06-25-weaviate-1-38/index.mdx","source":"@site/blog/2026-06-25-weaviate-1-38/index.mdx","title":"Weaviate 1.38 Release","description":"This release brings the HFresh disk-based vector index and the built-in MCP Server to general availability, rebuilds cluster-wide async replication to run from a single scheduler (on by default), and adds two previews: the Boost API and Nested Object Filtering.","date":"2026-06-25T00:00:00.000Z","tags":[{"inline":true,"label":"release","permalink":"/blog/tags/release"},{"inline":true,"label":"engineering","permalink":"/blog/tags/engineering"}],"readingTime":0.11,"hasTruncateMarker":false,"authors":[{"name":"Ivan Despot","title":"Developer Experience Engineer","url":"https://www.linkedin.com/in/ivan-g-despot/","imageURL":"/img/people/icon/ivan.jpeg","key":"ivan","page":null}],"frontMatter":{"title":"Weaviate 1.38 Release","slug":"weaviate-1-38-release","authors":["ivan"],"date":"2026-06-25T00:00:00.000Z","image":"./img/hero.png","tags":["release","engineering"],"description":"This release brings the HFresh disk-based vector index and the built-in MCP Server to general availability, rebuilds cluster-wide async replication to run from a single scheduler (on by default), and adds two previews: the Boost API and Nested Object Filtering."},"unlisted":false,"prevItem":{"title":"Query Profiling: See Where a Slow Query Spends Its Time","permalink":"/blog/query-profiling"},"nextItem":{"title":"Import & Vectorize Data with Weaviate at Scale","permalink":"/blog/data-import-best-practices"}}')}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.