[{"data":1,"prerenderedAt":604},["ShallowReactive",2],{"tool-weaviate-en":3},{"slug":4,"published":5,"minutes":6,"category":7,"tags":8,"keywords":14,"about":23,"sources":33,"cover":58,"og":59,"expertise":60,"locales":61,"lang":62,"title":65,"description":66,"coverAlt":67,"url":68,"pricing":69,"kind":70,"metaTitle":71,"takeaways":72,"faq":78,"toc":94,"blocks":119,"others":410},"weaviate","2026-06-02",10,"rag",[9,10,11,12,13],"Vector search","Hybrid search","HNSW","Quantization","Multi-tenancy",[15,16,17,18,19,20,21,22],"weaviate vector database","weaviate vs qdrant","weaviate vs pinecone","weaviate vs pgvector","hnsw vs hfresh","weaviate cloud pricing","vector database comparison","weaviate hybrid search",[24,27,30],{"name":25,"url":26},"Weaviate","https:\u002F\u002Fgithub.com\u002Fweaviate\u002Fweaviate",{"name":28,"url":29},"Hierarchical Navigable Small World","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNearest_neighbor_search",{"name":31,"url":32},"SPFresh","https:\u002F\u002Farxiv.org\u002Fpdf\u002F2410.14452",[34,37,40,43,46,49,52,55],{"title":35,"url":36},"Weaviate documentation: Vector indexing","https:\u002F\u002Fdocs.weaviate.io\u002Fweaviate\u002Fconcepts\u002Fvector-index",{"title":38,"url":39},"Weaviate documentation: ANN benchmark","https:\u002F\u002Fdocs.weaviate.io\u002Fweaviate\u002Fbenchmarks\u002Fann",{"title":41,"url":42},"Weaviate 1.39 release notes","https:\u002F\u002Fweaviate.io\u002Fblog\u002Fweaviate-1-39-release",{"title":44,"url":45},"Weaviate 1.38 release notes","https:\u002F\u002Fweaviate.io\u002Fblog\u002Fweaviate-1-38-release",{"title":47,"url":48},"Weaviate documentation: MCP server","https:\u002F\u002Fdocs.weaviate.io\u002Fweaviate\u002Fconfiguration\u002Fmcp-server",{"title":50,"url":51},"Weaviate Cloud pricing","https:\u002F\u002Fweaviate.io\u002Fpricing",{"title":53,"url":54},"weaviate\u002Fweaviate: LICENSE","https:\u002F\u002Fgithub.com\u002Fweaviate\u002Fweaviate\u002Fblob\u002Fmain\u002FLICENSE",{"title":56,"url":57},"weaviate\u002Fweaviate v1.40.0 release notes","https:\u002F\u002Fgithub.com\u002Fweaviate\u002Fweaviate\u002Freleases\u002Ftag\u002Fv1.40.0","\u002Fimages\u002Fblog\u002Fweaviate\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fweaviate\u002Fog.jpg","ai-engineer",[62,63,64],"en","de","hu","Weaviate: a vector database that has to win on search, not only on similarity","Weaviate review: hybrid BM25 and vector search in one query, HNSW and the disk-based HFresh index, quantisation choices, a built-in MCP server and what the licence keys now cover.","A Weaviate query running through two indexes at once: the inverted index for filters and BM25, the vector index for distance, then fusion, boost and reranking.","https:\u002F\u002Fweaviate.io","BSD-3 · Cloud from $25 per month","Vector database","Weaviate review: search, not just similarity · Balázs Csorba",[73,74,75,76,77],"Weaviate answers one query with BM25 keyword search, vector similarity and structured filters at the same time, which is the reason to pick it over a bare nearest-neighbour index.","HNSW is memory-bound: the documentation puts a node at 2 to 12 kB, so a million 1536-dimension vectors is 2 to 12 GB of index in RAM and a hundred million is 200 to 1200 GB.","Index type and quantisation width are effectively creation-time decisions. Rotational quantisation bits are fixed the first time RQ is enabled and cannot be migrated afterwards.","The vendor benchmark for DBPedia with OpenAI ada002 embeddings reports 97.24 percent recall@10 at 5639 queries per second and 4.43 ms p99 on a single 16 vCPU, 128 GB machine, unfiltered.","The repository is BSD-3 outside the wl directory, and v1.40 gates Namespaces and deduplicated backups behind a Weaviate licence key in the same binary.",[79,82,85,88,91],{"q":80,"a":81},"Is Weaviate still free to self-host?","The database is BSD-3-Clause and can be self-hosted with no usage limit. The repository LICENSE is explicit that code inside the wl directory is proprietary and unlocked with an enterprise licence key, and v1.40 puts Namespaces and deduplicated backups behind that key. Cloud pricing has three tiers: a free tier, Flex from $45 per month and Premium from $400 per month.",{"q":83,"a":84},"HNSW or HFresh for a large collection?","HNSW is the fastest option and the default, but it holds the whole graph in memory. HFresh keeps only a compressed centroid index in RAM and reads posting lists from disk, which the documentation says is not designed to beat HNSW on raw throughput. Choose HFresh when memory is the binding constraint and the workload tolerates a slightly higher p99.",{"q":86,"a":87},"Does quantisation reduce the Weaviate Cloud bill?","No. Cloud billing is based on the number of stored vector dimensions, plus storage and backups, and compression does not change the dimension count. It reduces the memory and compute Weaviate needs, which shows up in the per-dimension list rate rather than in the number of dimensions billed.",{"q":89,"a":90},"Can an agent query Weaviate over MCP?","Yes, since v1.38 the database ships an MCP server at \u002Fv1\u002Fmcp on the REST port with four tools: weaviate-collections-get-config, weaviate-tenants-list, weaviate-query-hybrid and weaviate-objects-upsert. It is disabled by default when self-hosting and always enabled in Weaviate Cloud, where the write tool is exposed unless the cluster's Enable MCP Read-Only switch is set.",{"q":92,"a":93},"How large can a HNSW collection get before memory becomes the limit?","The documentation sizes an HNSW node at 2 to 12 kB depending on dimensionality, plus about 200 bytes of edges per vector. That is 2 to 12 GB at a million vectors and 200 to 1200 GB at a hundred million. Rotational quantisation or HFresh are the two levers; the default vector cache is capped at 1e12 objects per collection and is a separate constraint during import.",[95,98,101,104,107,110,113,116],{"id":96,"title":97},"what-it-is","What it is",{"id":99,"title":100},"how-it-works","How it works",{"id":102,"title":103},"getting-started","Getting started",{"id":105,"title":106},"index-and-memory","Indexes, memory and the bill",{"id":108,"title":109},"where-it-shingles","Where it shingle",{"id":111,"title":112},"mcp-and-licensing","MCP access and the licence boundary",{"id":114,"title":115},"verdict","Verdict",{"id":117,"title":118},"sources","Sources",[120,124,127,130,133,153,154,157,166,171,172,175,178,189,204,214,215,218,256,265,268,271,276,277,280,326,329,330,342,357,360,361,364,377,383,384],{"type":121,"content":122},"paragraph",[123],"Weaviate is a vector database that stores objects and their embeddings side by side and answers one query with BM25 keyword search, vector similarity and structured filters at once. It is the most complete search engine in the open-source category. The reason to hesitate is not retrieval quality: it is the memory bill, and the number of index and quantisation decisions that have to be made before the first import.",{"type":121,"content":125},[126],"It competes with Qdrant on memory-efficient indexes, with Pinecone on managed operations, and with pgvector on the argument that a team which already runs a database should not add a second one. Weaviate's answer is that it is a full database first, replication, backups, multi-tenancy, RBAC and incremental schema changes included, with nearest-neighbour search attached.",{"type":128,"level":129,"id":96,"text":97},"heading",2,{"type":121,"content":131},[132],"The project comes out of the Dutch company Weaviate B.V., is written in Go, and the current release is 1.40.0, tagged on 7 October 2026. It ships official clients for Python, JavaScript, Java, Go and C#, and speaks REST, gRPC and GraphQL. The core facts worth knowing before a comparison:",{"type":134,"ordered":135,"items":136},"list",false,[137,145,147,149,151],[138,139,144],"Hybrid search fuses BM25 and vector results in a single query, with an ",{"tag":140,"href":141,"children":142},"a","https:\u002F\u002Fdocs.weaviate.io\u002Fweaviate\u002Fsearch\u002Fhybrid",[143],"alpha"," parameter weighting the two halves.",[146],"Four vector index types: flat, HNSW, dynamic (a flat index that upgrades itself to HNSW) and HFresh, the disk-based index introduced in 1.36 and generally available in 1.38.",[148],"Quantisation covers scalar, product, binary and rotational schemes; 4-bit rotational quantisation is a preview, and v1.40 adds RQ-4 to HNSW indexes.",[150],"A built-in MCP server, generally available since 1.38, exposes four tools at \u002Fv1\u002Fmcp on the REST port.",[152],"Multi-tenancy, replication, backups, incremental backups, object TTL and collection aliases are all in the open-source build rather than the paid one.",{"type":128,"level":129,"id":99,"text":100},{"type":121,"content":155},[156],"A query meets two index families. Object properties live in inverted indexes, the same BM25 machinery an inverted-index search engine uses, so a filter narrows the candidate set before anything expensive happens. Vectors live in the vector index, where HNSW walks a layered graph held in memory. What comes back is fused, optionally boosted and optionally reranked.",{"type":158,"attrs":159,"inner":163,"caption":164},"diagram",{"viewBox":160,"role":161,"aria-labelledby":162},"0 0 720 330","img","wv-diagram-t wv-diagram-d","\u003Ctitle id=\"wv-diagram-t\">A Weaviate hybrid query\u003C\u002Ftitle>\u003Cdesc id=\"wv-diagram-d\">One query branches into two indexes. The inverted index resolves the structured filter and runs BM25 keyword scoring. The vector index returns nearest neighbours by distance. Both candidate lists are fused, then boosted and reranked, and only then is the result page cut.\u003C\u002Fdesc>\u003Cdefs>\u003Cmarker id=\"ah-wv\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"7\" markerHeight=\"7\" orient=\"auto-start-reverse\">\u003Cpath d=\"M0 0L10 5L0 10z\" class=\"d-head\" \u002F>\u003C\u002Fmarker>\u003C\u002Fdefs>\u003Ctext x=\"16\" y=\"30\" class=\"d-title\">one query, two indexes\u003C\u002Ftext>\u003Crect x=\"16\" y=\"137\" width=\"140\" height=\"56\" rx=\"10\" class=\"d-accent\" \u002F>\u003Ctext x=\"86\" y=\"160\" text-anchor=\"middle\" class=\"d-text\">query\u003C\u002Ftext>\u003Ctext x=\"86\" y=\"180\" text-anchor=\"middle\" class=\"d-small\">text or vector\u003C\u002Ftext>\u003Crect x=\"196\" y=\"77\" width=\"230\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"311\" y=\"100\" text-anchor=\"middle\" class=\"d-text\">inverted index\u003C\u002Ftext>\u003Ctext x=\"311\" y=\"120\" text-anchor=\"middle\" class=\"d-small\">filter and BM25\u003C\u002Ftext>\u003Crect x=\"196\" y=\"197\" width=\"230\" height=\"56\" rx=\"10\" class=\"d-mint\" \u002F>\u003Ctext x=\"311\" y=\"220\" text-anchor=\"middle\" class=\"d-text\">vector index\u003C\u002Ftext>\u003Ctext x=\"311\" y=\"240\" text-anchor=\"middle\" class=\"d-small\">HNSW or HFresh\u003C\u002Ftext>\u003Crect x=\"466\" y=\"137\" width=\"238\" height=\"56\" rx=\"10\" class=\"d-gold\" \u002F>\u003Ctext x=\"585\" y=\"160\" text-anchor=\"middle\" class=\"d-text\">fusion\u003C\u002Ftext>\u003Ctext x=\"585\" y=\"180\" text-anchor=\"middle\" class=\"d-small\">alpha, limit, depth\u003C\u002Ftext>\u003Crect x=\"466\" y=\"247\" width=\"238\" height=\"56\" rx=\"10\" class=\"d-box\" \u002F>\u003Ctext x=\"585\" y=\"270\" text-anchor=\"middle\" class=\"d-text\">boost and rerank\u003C\u002Ftext>\u003Ctext x=\"585\" y=\"290\" text-anchor=\"middle\" class=\"d-small\">then cut the page\u003C\u002Ftext>\u003Cpath d=\"M156 165L192 105\" class=\"d-line\" marker-end=\"url(#ah-wv)\" \u002F>\u003Cpath d=\"M156 165L192 225\" class=\"d-line\" marker-end=\"url(#ah-wv)\" \u002F>\u003Cpath d=\"M426 105L462 150\" class=\"d-line\" marker-end=\"url(#ah-wv)\" \u002F>\u003Cpath d=\"M426 225L462 175\" class=\"d-line\" marker-end=\"url(#ah-wv)\" \u002F>\u003Cpath d=\"M585 193L585 243\" class=\"d-line-accent\" marker-end=\"url(#ah-wv)\" \u002F>",[165],"The filter is an index lookup, not a post-filter, so it narrows the vector search instead of discarding its output.",{"type":121,"content":167},[168,169,170],"Two consequences follow. Filtered search stays cheap because the filter runs first. And the expensive part is always the vector index, which is where the operational cost sits. ","QUERY_HYBRID_MAXIMUM_RESULTS"," defaults to 200, so each half of a hybrid query retrieves at least that many candidates before fusion; it is the first knob to turn down when a query is slower than its benchmark suggested.",{"type":128,"level":129,"id":102,"text":103},{"type":121,"content":173},[174],"The Python client is the one to reach for. A collection with an HNSW index, quantisation, hybrid search, a filter, a booster and diversity selection, in about thirty lines:",{"type":176,"code":177},"code","from datetime import timedelta\n\nimport weaviate\nfrom weaviate.classes.config import Configure, VectorDistances\nfrom weaviate.classes.query import Boost, Diversity, Filter\n\nclient = weaviate.connect_to_local()  # or connect_to_cloud(cluster_url, auth)\n\nclient.collections.create(\n    \"Product\",\n    vector_config=Configure.Vectors.text2vec_openai(\n        source_properties=[\"name\", \"description\"],\n        vector_index_config=Configure.VectorIndex.hnsw(\n            distance_metric=VectorDistances.COSINE,\n            quantizer=Configure.VectorIndex.Quantizer.rq(bits=8),\n        ),\n    ),\n)\n\nproducts = client.collections.get(\"Product\")\nproducts.data.insert_many([\n    {\"name\": \"Kestrel Wireless Headphones\", \"in_stock\": True, \"released\": \"2026-09-20\"},\n    {\"name\": \"Aurora Wireless Headphones\", \"in_stock\": False, \"released\": \"2025-11-02\"},\n    {\"name\": \"Nimbus Wireless Headphones\", \"in_stock\": True, \"released\": \"2026-10-05\"},\n])\n\nboost = Boost.blend(\n    [\n        Boost.filter(Filter.by_property(\"in_stock\").equal(True), weight=2.0),\n        Boost.time_decay(\"released\", scale=timedelta(days=30)),\n    ],\n    weight=0.3,   # 30 percent boost, 70 percent original relevance\n    depth=200,    # re-score the top 200 candidates\n)\n\nhits = products.query.hybrid(\n    query=\"wireless headphones\",\n    limit=4,\n    filters=Filter.by_property(\"released\").greater_than(\"2025-01-01\"),\n    boost=boost,\n    diversity_selection=Diversity.mmr(limit=4, balance=0.3),\n)\nfor hit in hits.objects:\n    print(hit.properties[\"name\"])\n",{"type":121,"content":179},[180,181,182,183,184,185,186,187,188],"Four details in that snippet decide how the page looks. ","Boost.blend"," never removes a result, it only re-sorts, so a negative condition weight demotes instead of filtering. ","depth"," sets how many candidates are rescored and the outer ","weight"," decides how much of the final score the boost owns. MMR needs client 4.23.0 or newer, and its ","balance"," default is 0.0, which means pure diversity rather than a neutral midpoint. If boost and rerank are combined, the reranker runs last and has the final word.",{"type":190,"variant":191,"title":192,"body":193},"callout","warn","Decide the index before the first import",[194],[195,196,199,200,203],"Index type, HNSW build parameters and the rotational quantisation width are creation-time choices in practice. ",{"tag":176,"children":197},[198],"bits"," is fixed the moment RQ is first enabled on a vector, with no migration from 8-bit to 4-bit codes, and ",{"tag":176,"children":201},[202],"ef"," is only useful if it was set thoughtfully at build time. Rebuilding a collection to change a parameter is the expensive part of running this database.",{"type":190,"variant":205,"title":206,"body":207},"tip","Imports need memory, not just disk",[208],[209,210,213],"Every import performs repeated searches against already-imported vectors, so the documentation advises raising ",{"tag":176,"children":211},[212],"vectorCacheMaxObjects"," high enough to hold the whole corpus during a load. Import throughput collapses when the cache cannot hold the vectors. Asynchronous indexing moves graph updates behind a persistent on-disk queue, which helps, at the cost of a short delay between writing an object and finding it through the index.",{"type":128,"level":129,"id":105,"text":106},{"type":121,"content":216},[217],"HNSW holds nodes and edges in memory, and the documentation is unusually direct about the cost: a node is 2 to 12 kB depending on dimensionality, so one million vectors is 2 to 12 GB and a hundred million is 200 to 1200 GB, with edges adding roughly 200 bytes per vector. That is a number for a capacity plan, not a throughput target.",{"type":219,"head":220,"rows":229},"table",[221,223,225,227],[222],"Index",[224],"Memory",[226],"Search behaviour",[228],"Use it when",[230,239,247],[231,233,235,237],[232],"Flat",[234],"Very low",[236],"Exact, linear scan",[238],"Small collections and per-tenant datasets in a multi-tenant setup",[240,241,243,245],[11],[242],"High, everything resident",[244],"Fastest; logarithmic in the graph",[246],"Large collections with high query throughput",[248,250,252,254],[249],"HFresh",[251],"Low, disk-backed postings",[253],"Reads a few posting lists, then rescores",[255],"Memory is the binding constraint; tolerates slightly higher p99",{"type":121,"content":257},[258,259,260,261,262,263,264],"HFresh is the interesting one for a large corpus. It groups vectors into on-disk postings, keeps a small 8-bit-quantised HNSW index over their centroids in memory, and stores the postings themselves at 1-bit. Search reads only the postings the centroid index selects, then rescores the candidates against uncompressed vectors. The documentation is careful that it supports only cosine and l2-squared distances, that dot product is not available, and that it is not designed to beat HNSW on raw throughput. Read the recall parameters as a latency dial: ","searchProbe"," sets how many posting lists a query visits, ","replicas"," how many lists each vector joins, and ","maxPostingSizeKB"," the cluster size.",{"type":121,"content":266},[267],"Quantisation is the other lever. Rotational quantisation rotates a vector so its values spread evenly across the dimensions, then stores each dimension as a small integer. At 4 bits and 1536 dimensions a vector costs 784 bytes against 6144 for raw float32, a factor of 7.84 rather than a round 8, because the 16-byte rotation header stays. Compression cuts memory and compute but not the number of dimensions Cloud bills for: Weaviate Cloud prices from $0.00465 per million vector dimensions per month on Flex, storage from $0.12 per GiB, with a $45 monthly minimum, and more aggressive compression shows up as a lower per-dimension rate rather than a smaller bill.",{"type":121,"content":269},[270],"The vendor benchmark is worth reading with its methodology attached. On DBPedia embedded with OpenAI ada002, one million objects at 1536 dimensions and cosine distance, the recommended configuration of efConstruction 256, maxConnections 16 and ef 96 yields 97.24 percent recall@10 at 5639 queries per second, 2.80 ms mean latency and 4.43 ms p99. That is 10,000 unfiltered searches on one GCP n4-highmem-16 instance with 16 vCPU and 128 GB, driven by the Go client from the same VPC, with every matched object read back from disk. The scripts are open source, which is the part that matters.",{"type":190,"variant":191,"title":272,"body":273},"Do not carry those numbers across without the setup",[274],[275],"The benchmark is unfiltered, single-node, same-VPC and end-to-end including object reads, which flatters it against a filtered production query across a real network. It is also the vendor's own hardware. The same documentation warns that HNSW performs considerably worse on random vectors than on real data, which means a synthetic benchmark of your own corpus is the only number worth trusting.",{"type":128,"level":129,"id":108,"text":109},{"type":121,"content":278},[279],"The weaknesses first, because they decide whether this is your database. Growth on HNSW is a memory curve rather than a horizontal one: a hundred million 1536-dimension vectors is a multi-hundred-gigabyte planning exercise, and adding nodes does not shrink one shard's index. Deletion is asynchronous, so a search straight after a delete can still return the object. The API surface is broad enough that GraphQL, gRPC, gRPC-Web and a fourth experimental REST search API coexist, and the 1.39 release notes state that reference selection in that new REST API is being replaced, so code written against it will change.",{"type":219,"head":281,"rows":290},[282,284,286,288],[283],"Database",[285],"Index model",[287],"Self-host footprint",[289],"Where it hurts",[291,299,308,317],[292,293,295,297],[25],[294],"HNSW, flat, dynamic, HFresh",[296],"A database: replication, backups, RBAC, multi-tenancy",[298],"Memory-bound growth; more schema surface to learn",[300,302,304,306],[301],"Qdrant",[303],"HNSW with on-disk and scalar quantisation",[305],"A focused vector engine with filtering",[307],"Fewer of the database features Weaviate ships",[309,311,313,315],[310],"pgvector",[312],"Postgres indexes: HNSW, IVFFlat",[314],"None: it is an extension on a database you already run",[316],"Recall and tuning are Postgres tuning now",[318,320,322,324],[319],"Pinecone",[321],"Managed only",[323],"Nothing to run",[325],"No self-hosting, and a bill that scales with read units",{"type":121,"content":327},[328],"Two operational notes finish the picture. Async replication was rebuilt in 1.38 to run cluster-wide from a single scheduler and is on by default for every replicated collection, which is a reliability win and a background-load cost at the same time. And in 1.40 the new Namespaces feature, which adds control-plane and data isolation between users sharing one cluster, is gated behind a Weaviate licence key.",{"type":128,"level":129,"id":111,"text":112},{"type":121,"content":331},[332,333,334,335,336,337,338,143,339,340,341],"The MCP server is what most teams will meet first. It is a Streamable HTTP server at \u002Fv1\u002Fmcp on the REST port, disabled by default when self-hosting, always enabled in Weaviate Cloud, and authenticated with an API key as a bearer token. It exposes four tools: ","weaviate-collections-get-config"," for schemas, ","weaviate-tenants-list",", ","weaviate-query-hybrid"," for a hybrid search with an "," that defaults to 0.75, and ","weaviate-objects-upsert"," for writes. Permissions are the normal RBAC roles, checked when a tool is called.",{"type":190,"variant":191,"title":343,"body":344},"Three defaults to check before an agent touches the cluster",[345],[346,349,350,353,354,356],{"tag":176,"children":347},[348],"tools\u002Flist"," returns every tool to every authenticated key, so a read-only credential still learns that the write tool exists; a denied call comes back as HTTP 200 with an ",{"tag":176,"children":351},[352],"isError"," tool result rather than a 403. ",{"tag":176,"children":355},[340]," replaces the stored object instead of merging, so a partial payload drops the properties it leaves out, and with auto-schema on a mistyped collection name creates a collection rather than failing. Weaviate Cloud ships with the write tool enabled unless the cluster's Enable MCP Read-Only switch is set, which is off by default.",{"type":121,"content":358},[359],"On licensing the repository LICENSE is unambiguous: code outside the wl directory is BSD-3-Clause, code inside it is Copyright Weaviate B.V. and available only under a separate enterprise licence unlocked with a licence key, and the BSD licence does not grant the right to use those features or to circumvent the key. v1.40 puts Namespaces and deduplicated backups on that side of the line. The database itself remains BSD-3 and self-hostable without a usage limit, so the only real question is how much of the roadmap ends up behind the key.",{"type":128,"level":129,"id":114,"text":115},{"type":121,"content":362},[363],"Weaviate is the vector database to choose when retrieval quality and operational completeness matter more than the smallest possible memory footprint, and when the team can afford to treat index type, quantisation width and ef as real parameters rather than defaults. It is the wrong answer for a team that already runs Postgres and wants embeddings next to the rows, and the wrong answer for a hundred-million-vector corpus on a fixed memory budget.",{"type":134,"ordered":365,"items":366},true,[367,369,371,373,375],[368],"Choose it if queries need filters and keywords as well as vectors, and you want that in one round trip rather than three.",[370],"Choose it if you need multi-tenancy, replication, backups and RBAC without bolting four services onto a bare vector index.",[372],"Choose it if you can self-host a BSD-3 database and want a managed option behind the same API for when you cannot.",[374],"Avoid it if the corpus is large enough that HNSW memory dominates the bill and your queries would tolerate a slightly higher p99; that is HFresh's job, or a purpose-built engine's.",[376],"Avoid it if you expect the whole roadmap to stay behind the BSD licence. Check which features your version gates behind a licence key before you design around them.",{"type":190,"variant":378,"title":379,"body":380},"note","The short version",[381],[382],"A well-built database with the best hybrid search in its class, priced and licensed so that the interesting parts of the roadmap increasingly sit behind a key. Read the version-specific gating before committing, and size the memory before the schema.",{"type":128,"level":129,"id":117,"text":118},{"type":134,"ordered":365,"items":385},[386,389,392,395,398,401,404,407],[387],{"tag":140,"href":36,"children":388},[35],[390],{"tag":140,"href":39,"children":391},[38],[393],{"tag":140,"href":42,"children":394},[41],[396],{"tag":140,"href":45,"children":397},[44],[399],{"tag":140,"href":48,"children":400},[47],[402],{"tag":140,"href":51,"children":403},[50],[405],{"tag":140,"href":54,"children":406},[53],[408],{"tag":140,"href":57,"children":409},[56],[411,461,514,554],{"slug":412,"published":413,"minutes":414,"category":7,"tags":415,"keywords":421,"about":430,"sources":434,"cover":453,"og":454,"expertise":60,"locales":455,"lang":62,"title":456,"description":457,"coverAlt":458,"url":459,"pricing":460,"kind":416},"zep","2026-10-06",11,[416,417,418,419,420],"Agent memory","Knowledge graph","Temporal graph","Context engineering","RAG",[422,423,424,425,426,427,428,429],"zep ai","zep agent memory","graphiti knowledge graph","zep pricing","zep vs mem0","long-term memory for agents","temporal knowledge graph","zep cloud",[431],{"name":432,"url":433},"Zep","https:\u002F\u002Fwww.getzep.com\u002F",[435,438,441,444,447,450],{"title":436,"url":437},"Zep pricing: plans, credits and limits","https:\u002F\u002Fwww.getzep.com\u002Fpricing",{"title":439,"url":440},"Zep documentation","https:\u002F\u002Fhelp.getzep.com\u002F",{"title":442,"url":443},"Graphiti on GitHub","https:\u002F\u002Fgithub.com\u002Fgetzep\u002Fgraphiti",{"title":445,"url":446},"Graphiti product page","https:\u002F\u002Fwww.getzep.com\u002Fplatform\u002Fgraphiti\u002F",{"title":448,"url":449},"Announcing a new direction for Zep's open-source strategy","https:\u002F\u002Fwww.getzep.com\u002Fblog\u002Fannouncing-a-new-direction-for-zeps-open-source-strategy\u002F",{"title":451,"url":452},"Graphiti: temporal knowledge graphs for AI agents (arXiv)","https:\u002F\u002Farxiv.org\u002Fabs\u002F2501.13956","\u002Fimages\u002Fblog\u002Fzep\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fzep\u002Fog.jpg",[62,63,64],"Zep review: agent memory on a temporal graph","Zep is a hosted agent-memory API on a temporal knowledge graph: credits on writes, retrieval free, Flex from $125 a month, Graphiti as the part you can self-host.","Diagram of how a fact reaches the prompt in Zep: messages and facts are extracted into a per-user context graph of entities and relationships, and retrieval walks the graph to return a context block with the supporting facts.","https:\u002F\u002Fwww.getzep.com","Apache-2.0 core · Cloud from $50 per month",{"slug":462,"published":463,"minutes":464,"category":7,"tags":465,"keywords":467,"about":475,"sources":481,"cover":506,"og":507,"expertise":60,"locales":508,"lang":62,"title":509,"description":510,"coverAlt":511,"url":512,"pricing":513,"kind":70},"lancedb","2026-09-21",9,[9,10,466,420],"Embedded database",[462,468,469,470,471,472,473,474],"lancedb review","lance vector database","embedded vector database","lancedb vs qdrant","hybrid search rrf","lancedb indexing","lance data format",[476,478],{"name":70,"url":477},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVector_database",{"name":479,"url":480},"Apache Arrow","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FApache_Arrow",[482,485,488,491,494,497,500,503],{"title":483,"url":484},"LanceDB quickstart","https:\u002F\u002Fdocs.lancedb.com\u002Fquickstart",{"title":486,"url":487},"LanceDB vector indexes","https:\u002F\u002Fdocs.lancedb.com\u002Findexing\u002Fvector-index",{"title":489,"url":490},"LanceDB indexing guide","https:\u002F\u002Fdocs.lancedb.com\u002Findexing\u002Findex",{"title":492,"url":493},"LanceDB hybrid search","https:\u002F\u002Fdocs.lancedb.com\u002Fsearch\u002Fhybrid-search",{"title":495,"url":496},"LanceDB Enterprise","https:\u002F\u002Fdocs.lancedb.com\u002Fenterprise",{"title":498,"url":499},"LanceDB frequently asked questions","https:\u002F\u002Fdocs.lancedb.com\u002Ffaq\u002Ffaq-oss",{"title":501,"url":502},"LanceDB pricing","https:\u002F\u002Flancedb.com\u002Fpricing",{"title":504,"url":505},"LanceDB on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Flancedb\u002F","\u002Fimages\u002Fblog\u002Flancedb\u002Fcover.webp","\u002Fimages\u002Fblog\u002Flancedb\u002Fog.jpg",[62,63,64],"LanceDB: vector search that starts as a library","A review of LanceDB: an Apache-2.0 embedded vector library, its IVF and HNSW index choices, hybrid search with rank fusion, and what the Enterprise tier adds.","Cover art for the LanceDB review: one Lance table feeding a vector index and a full-text index into a fused ranking","https:\u002F\u002Flancedb.com","Apache-2.0 · Cloud paid",{"slug":310,"published":463,"minutes":6,"category":7,"tags":515,"keywords":518,"about":525,"sources":531,"cover":546,"og":547,"expertise":60,"locales":548,"lang":62,"title":549,"description":550,"coverAlt":551,"url":527,"pricing":552,"kind":553},[9,516,11,420,517],"Postgres","Quantisation",[310,519,520,521,522,523,524],"pgvector vs qdrant","postgres vector search","hnsw index postgres","iterative index scans","binary quantization postgres","vector database postgres",[526,528],{"name":310,"url":527},"https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector",{"name":529,"url":530},"PostgreSQL","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPostgreSQL",[532,534,537,540,543],{"title":533,"url":527},"pgvector README",{"title":535,"url":536},"pgvector changelog","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector\u002Fblob\u002Fmaster\u002FCHANGELOG.md",{"title":538,"url":539},"PostgreSQL news: pgvector 0.8.2 released","https:\u002F\u002Fwww.postgresql.org\u002Fabout\u002Fnews\u002Fpgvector-082-released-3245\u002F",{"title":541,"url":542},"AWS: Scale pgvector with binary quantization","https:\u002F\u002Faws.amazon.com\u002Fblogs\u002Fdatabase\u002Fscale-pgvector-with-binary-quantization-on-amazon-aurora-postgresql\u002F",{"title":544,"url":545},"pgvector licence","https:\u002F\u002Fgithub.com\u002Fpgvector\u002Fpgvector\u002Fblob\u002Fmaster\u002FLICENSE","\u002Fimages\u002Fblog\u002Fpgvector\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fpgvector\u002Fog.jpg",[62,63,64],"pgvector, reviewed: the vector database you do not have to run","A review of pgvector 0.8.7: iterative scans for filtered search, HNSW and IVFFlat, binary quantisation at 100M vectors, and the CVE that made index builds a patch item.","A query enters at the top and splits into an exact sequential scan, an HNSW graph walk and an IVFFlat probe; a band below shows an iterative scan continuing until the limit is full.","PostgreSQL licence","Vector database extension",{"slug":555,"published":556,"minutes":6,"category":7,"tags":557,"keywords":559,"about":565,"sources":569,"cover":597,"og":598,"expertise":60,"locales":599,"lang":62,"title":600,"description":601,"coverAlt":602,"url":568,"pricing":603,"kind":416},"mem0","2026-09-17",[416,558,420,9],"Long-term memory",[555,560,561,562,563,427,564],"mem0 review","agent memory layer","mem0 self-hosted","mem0 pricing","mem0 alternatives",[566],{"name":567,"url":568},"Mem0","https:\u002F\u002Fmem0.ai",[570,573,576,579,582,585,588,591,594],{"title":571,"url":572},"Mem0 documentation","https:\u002F\u002Fdocs.mem0.ai\u002Fintroduction",{"title":574,"url":575},"Mem0 quickstart","https:\u002F\u002Fdocs.mem0.ai\u002Fquickstart",{"title":577,"url":578},"How Mem0 works","https:\u002F\u002Fdocs.mem0.ai\u002Fcore-concepts\u002Fhow-it-works",{"title":580,"url":581},"Mem0 pricing","https:\u002F\u002Fmem0.ai\u002Fpricing",{"title":583,"url":584},"Mem0 on GitHub","https:\u002F\u002Fgithub.com\u002Fmem0ai\u002Fmem0",{"title":586,"url":587},"mem0ai on PyPI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fmem0ai\u002F",{"title":589,"url":590},"Mem0 research and benchmarks","https:\u002F\u002Fmem0.ai\u002Fresearch",{"title":592,"url":593},"Mem0 MCP server","https:\u002F\u002Fdocs.mem0.ai\u002Fplatform\u002Fmem0-mcp",{"title":595,"url":596},"Mem0 paper on arXiv","https:\u002F\u002Farxiv.org\u002Fabs\u002F2504.19413","\u002Fimages\u002Fblog\u002Fmem0\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fmem0\u002Fog.jpg",[62,63,64],"Mem0: what an agent memory layer costs per turn","A review of Mem0: facts extracted from every turn, the April 2026 benchmark table and its platform-only caveat, four cloud tiers and what self-hosting leaves out.","A loop that turns conversation into stored facts and reads them back into the prompt","Free tier · from $19 per month",1791383549018]