Version 29.9.0
Released: September 11th 2026
This release adds chunked and multi-vector auto-embeddings, safe UTF-8 identifiers, configurable embedding input limits, German sharp-s normalization, richer manticore-load benchmarking, authenticated cloud-aware backups, and memory-mapped columnar attributes by default, with fixes across KNN, hybrid and grouped search, schema changes, bulk ingestion, replication, binlog recovery, compatibility, and shutdown behavior.
❤️ We’d like to thank @tudorvasinca for their work on PR #4857, PR #4859, and PR #4873.
New Features and Improvements
- 🆕 v29.9.0 PR #4898 Changed the default access_columnar_attrs mode from buffered
filereads tommap, allowing the operating system to cache columnar attribute data on demand without prereading it. Setaccess_columnar_attrs='file'explicitly to retain the previous behavior;ALTER TABLEnow also reopens replaced columnar storage using the configured access mode. - 🆕 v29.8.0 Backup Issue #134 Updated manticore-backup to 1.11.0, allowing S3 backups and restores to use the AWS SDK credential provider chain—including IRSA, shared credentials, ECS task roles, and EC2 instance profiles—when static keys are not set, and adding
AWS_SESSION_TOKENsupport for temporary credentials. - 🆕 v29.7.0 Issue #4816 Added opt-in MAX_INPUT_TOKENS for local auto-embedding columns, allowing each input text to be truncated before embedding to bound long-document inference time and reduce retry-driven memory exhaustion. It can be set during
CREATE TABLEor changed withALTER TABLE ... MODIFY COLUMNwithout re-embedding existing rows;0or omission preserves the model’s own limit. - 🆕 v29.6.0 manticore-load Issue #26 Updated manticore-load to 1.28.0, adding opt-in
--httpmode for benchmarking through Manticore’s HTTP JSON API: writes use/bulk, searches use/search, HTTP defaults to port9308, and--tableselects the target table. - 🆕 v29.5.0 manticore-load PR #28 Updated
manticore-loadto 1.27.0, adding localsearchdRSS to live progress, peak RSS, disk, and CPU usage to final reports, and aggregate monitoring across all tables in multi-command workloads. - 🆕 v29.4.0 MCL Issue #190 Added chunking strategies for auto-embeddings:
meanembeds a long document as one averaged vector, whilefixed,recursive, andsentencestore multiple searchable vectors in afloat_vector_array. The newMAX_TOKENS,OVERLAP_TOKENS, andMAX_CHUNKSoptions control chunk size, overlap, and count; existingtruncatebehavior remains the default. - 🆕 v29.3.12 Issue #4827 Added opt-in German AOT sharp-s normalization using
charset_table=non_cont,germanwithlemmatize_de_v2orlemmatize_de_v2_all, soß,ẞ, andssmatch equivalently in ordinary whole-word searches whileindex_exact_words=1preserves their distinction in exact-word queries. Existing German morphology modes remain unchanged; switching a populated table to v2 requires rebuilding or replaying it. - 🆕 v29.3.4 Issue #4844 Updated manticore-backup to 1.10.4, allowing its CLI to authenticate HTTP requests with authentication options such as
--userand--passwordor--token, and ensuring selected tables are unfrozen if a backup fails or is interrupted. - 🆕 v29.3.0 Issue #4770 Added consistent safe UTF-8 table, field, and attribute names across RT, percolate, distributed, template, and plain tables, SQL DDL and expressions, full-text field selectors, and inferred source schemas, allowing localized names such as Chinese and Cyrillic identifiers without renaming the source schema.
- 🆕 v29.2.0 Issue #4099 Added float_vector_array for real-time tables, allowing each document to store and search several KNN vectors such as text chunks, product images, or video keyframes.
- 🆕 v29.1.0 manticore-load PR #24 Updated
manticore-loadto 1.26.0, adding--worker-initand--worker-finalizeSQL hooks for connection-scoped setup and ordered concurrent finalization around benchmark workloads.
Bug Fixes
- 🪲 v29.8.4 Issue #4889 Fixed hybrid search ignoring filters on
weight()or expressions and aliases derived from it; weight-dependent filters now run after fusion against the final text weight. Such filters inORfilter trees are not supported and now return an explicit error. - 🪲 v29.8.2 Issue #4893 Fixed valid fixed-length gzip-compressed /bulk requests failing with HTTP 400 when the compressed body arrived across multiple socket reads; socket-read boundaries no longer affect decompression or ingestion.
- 🪲 v29.8.1 Issue #4884 Fixed Elasticsearch-compatible
/_bulkrequests returning request-level HTTP409for item failures, which caused clients such as Fluent Bit to retry already-applied writes; processed batches now return HTTP200, preserve successful items, report duplicatecreateoperations as per-item409version_conflict_engine_exceptionerrors, including duplicates within the same batch, and reject malformed action metadata at request level. - 🪲 v29.7.2 Issue #4872 Fixed ALTER TABLE leaving stale attribute and source-field metadata on RT tables with auto-embeddings, which silently discarded values written by
INSERTorREPLACEto subsequently added MVA columns and could misalign embeddings after earlier columns were dropped. Values lost before upgrading must be restored from their source or a backup. - 🪲 v29.7.1 MCL PR #205 Updated MCL to 14.2.1, fixing auto-embedding models potentially remaining in memory after
ALTER TABLE ... MODIFY COLUMN ... MAX_INPUT_TOKENSand preventing differentAPI_TIMEOUTandMAX_INPUT_TOKENSsettings from colliding in the model cache and incorrectly reusing the same model. - 🪲 v29.5.1 MCL PR #204 Fixed KNN HNSW index construction occasionally leaving indexed vectors unreachable by KNN queries; newly built indexes now repair disconnected level-0 graph nodes before being saved. Existing indexes are not rewritten automatically and should be rebuilt if affected.
- 🪲 v29.3.13 Issue #4844 Fixed SQL BACKUP and
manticore-backupfailing when authentication is enabled; backup operators can now authenticate with username/password or bearer tokens and requirebackup ON *plusreadon each selected table, or unrestrictedread ON *for full backups. Before downgrading to a version without thebackupaction, remove allbackupgrants. - 🪲 v29.3.11 PR #4879 Fixed LENGTH() on float_vector_array attributes returning the internal storage-word count instead of the number of vectors; empty arrays return
0, and the corrected value is used consistently in selection, filtering, and grouping. - 🪲 v29.3.10 Issue #4844 Updated Buddy to 4.4.3 to preserve the authenticated SQL user and pass Buddy’s internal bearer token to manticore-backup requests, providing the dependency-side authentication path for
BACKUP; completeauth=1support, including daemon-sidebackuppermission checks, requires v29.3.13. - 🪲 v29.3.9 Issue #4639 Fixed hybrid search with
GROUP BYreturning empty or missing buckets, including MVA groups; grouped results now retain all buckets and honor finalORDER BYandWITHIN GROUP ORDER BY. - 🪲 v29.3.8 Issue #4774 Fixed equality,
IN, and range filters on document IDs whose signed representation is negative returning no rows when the document-ID lookup index was used; lookup filtering now follows the index’s unsigned ID order. - 🪲 v29.3.7 Issue #4856 Fixed multi-chunk RT-table GROUP BY queries with more groups than
max_matchespotentially returning duplicate groups and incorrect split counts, or hangingsearchdwhenCOUNT(DISTINCT ...)was ordered by that count and the select list included an expression. - 🪲 v29.3.6 Issue #4826 Updated Buddy to 4.4.2, fixing Kafka materialized-view workers permanently stopping with
Invalid JSON foundwhen internalSELECT ...; SHOW METAresponses contained large integer IDs or long numeric-looking strings; response values are now preserved losslessly and ingestion continues. - 🪲 v29.3.5 Issue #4822 Fixed
searchdintermittently crashing on JSON/searchqueries to distributed tables when sorting by a string attribute and aggregating a JSON field across multiple local tables. - 🪲 v29.3.3 Issue #4860 Fixed
searchdcrashing whenDROP TABLEraced with an in-flight/bulkinsert into an RT table using auto-embeddings; the transaction now completes against the live table or fails safely if the table is dropped or replaced. - 🪲 v29.3.2 Issue #4791 Fixed HTTP KNN queries on distributed and sharded tables with a local shard potentially crashing the coordinator or returning the wrong nearest neighbor when 1-bit quantization triggered rescoring; merged shard results are no longer rescored a second time.
- 🪲 v29.3.1 PR #4864 Fixed
searchdcrashing when a multi-statement request’s second statement performed hybrid search by combiningMATCH(),KNN(), andOPTION fusion_method='rrf'. - 🪲 v29.2.9 Issue #4837 Fixed indextool --apply-killlists crashing when a current-format killlist was applied to an older plain table with a legacy JSON header;
indextoolnow reads the table’s actual on-disk format version before processing lookup data. - 🪲 v29.2.8 Issue #4854 Restored full CI test coverage by running GoogleTest, API consistency,
indextool, and other CTest-managed tests alongside ubertests. - 🪲 v29.2.7 Issue #4842 Fixed ALTER TABLE ... RENAME failing with
Invalid API key for remote modelfor real-time tables using remote auto-embeddings; table copies now preserve hidden embedding API keys without exposing them inSHOW CREATE TABLE. - 🪲 v29.2.6 PR #4861 Fixed a KNN search performance regression in queries with additional filters by avoiding a redundant
knn_distprefilter when the HNSW iterator already excludes documents without vectors, while preserving correct exclusion on brute-force, full-text, grouped, and faceted KNN paths. - 🪲 v29.2.5 Issue #4833 Fixed SQL queries on tables with UUID document IDs returning stored
textfields as empty; stored fields are now retrieved correctly when selected explicitly or throughSELECT *. - 🪲 v29.2.4 Issue #4828 Restored Sequel Ace 5.3.1+ compatibility by supporting its
CAST(DATABASE() AS BINARY)andCAST(@@character_set_client AS BINARY)probes, preventing every subsequent query from failing. - 🪲 v29.2.3 PR #4619 Fixed graceful
searchd --stopwaithanging while a sharded table was rebalanced after a node rejoined; in-progress shard transfer now stops during shutdown and detached workers use bounded waits. - 🪲 v29.2.2 Issue #4793 Fixed
indexerfailing to build plain tables when their configured path contained missing parent directories; it now creates the missing directory tree automatically when the nearest existing parent is writable. - 🪲 v29.2.1 PR #4832 Corrected and completed copyright and GPL license headers in recently added source files.
- 🪲 v29.1.1 Issue #4808 Fixed upgrades from versions with v15 binlogs potentially crashing or omitting a newly flushed RT disk chunk from table metadata during shutdown; compatible recovery logs now replay, completed chunks are published before clean shutdown, and unsupported recovery formats fail safely.
- 🪲 v29.0.6 Issue #4811 Improved fatal binlog replay diagnostics to name the matching --replay-flags recovery option:
ignore-open-errorsfor missing binlog files andignore-trx-errorsfor transaction replay failures. - 🪲 v29.0.5 Issue #4784 Fixed JSON
/searchqueries with negation losing distances for NEAR and proximity operators, which caused valid positional queries to fail with a zero-distance error or behave incorrectly. - 🪲 v29.0.4 Issue #4788 Fixed LEFT JOIN queries ordered by string attributes returning internal
@int_attr_*helper columns in client results. - 🪲 v29.0.3 PR #4790 Fixed malformed binary API
SEARCHrequests with negative or impossible element counts potentially terminatingsearchd; invalid counts are now rejected with protocol errors, including whenmax_batch_queries=0.