NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2317 most downloaded on crates.io
Search engine library
Last release 1 months ago
08 Sep 2026
Release timing varies
gaps range from 2 weeks to 12 months
Some releases are documented
notes for 25 of 42 stable releases
21 versions withdrawn
withdrawn after publishing
10 years old
63 releases · first in 2016
Fix term aggregation document-count overflow when merging buckets across segments by widening intermediate counts from u32 to u64 (@PSeitz)
u32 to u64 (@PSeitz)seek_danger override to avoid consuming unaligned scorers #3086(@PSeitz)Update time deps to defensively address a vulnerability. by @fulmicoton in #2850
index_writer.commit in example by @Platane in #2732collect_block for Collectors which wrap other Collectors by @stuhood in #2727Language hashable by @philippemnoel in #2763TopDocs::order_by by @stuhood in #2780SortKeyComputer to sort on types which are not known until runtime by @stuhood in #2770Full Changelog: 0.25.0...0.26.1
One column per quarter.
Nothing published for this version
Nothing published for this version
Fix TopNComputer for reverse order. #2672(@stuhood @PSeitz)
Affected queries are order_by_fast_field and
order_by_u64_field
for Order::Asc
Tantivy 0.24 will be backwards compatible with indices created with v0.22 and v0.21. The new minimum rust version will be 1.75. Tantivy 0.23 will be s
Tantivy 0.24 will be backwards compatible with indices created with v0.22 and v0.21. The new minimum rust version will be 1.75. Tantivy 0.23 will be skipped.
OwnedBytes debug panic #2512(@b41sh)Aggregation
Range Queries
RangeQuery it is autodetected) #2477(@PSeitz)make find_field_with_default return json fields without path #2476(@trinity-1686a)
Make BooleanQuery support minimum_number_should_match #2405(@LebranceBW)
RegexPhraseQuery
RegexPhraseQuery supports phrase queries with regex. E.g. query "b.* b.* wolf" matches "big bad wolf". Slop is supported as well: "b.* wolf"~2 matches "big bad wolf" #2516(@PSeitz)
Optional Index in Multivalue Columnar Index
For mostly empty multivalued indices there was a large overhead during creation when iterating all docids (merge case).
This is alleviated by placing an optional index in the multivalued index to mark documents that have values.
This will slightly increase space and access time. #2439(@PSeitz)
Store DateTime as nanoseconds in doc store DateTime in the doc store was truncated to microseconds previously. This removes this truncation, while still keeping backwards compatibility. #2486(@PSeitz)
Performace/Memory
Json Type
QueryParser
title:(return AND "pink panther") #2333(@trinity-1686a)Change in Executor API #2391(@fulmicoton)
Removed usage of num_cpus #2387(@fulmicoton)
use bingang for agg and stacker benchmark #2378#2492(@PSeitz)
make convert_to_fast_value_and_append_to_json_term pub #2370(@PSeitz)
Fix trait bound of StoreReader::iter #2360(@adamreichold)
Nothing published for this version
Fix TopNComputer for reverse order. #2672(@stuhood @PSeitz)
Affected queries are order_by_fast_field and
order_by_u64_field
for Order::Asc
Nothing published for this version
Range queries on fast fields with less values on that field than documents had an invalid end condition, leading to missing results. #2226(@appaquet @
Nothing published for this version
Align numerical type priority order on the search side. #2088 (@fmassot)
Fix building on windows with mmap #2070 (@ChillFish8)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Hotfix: positions computation. #1629 (@fmassot, @fulmicoton, @PSeitz)
Nothing published for this version
Nothing published for this version
Major Bugfix on multivalued fastfield. #1151
Bugfix in the filesum check. (@evanxg852000) #1127
Major bugfix. Deleting documents was broken when the index was sorted by a field. (@appaquet, @fulmicoton) #1101
Major bugfix. DocStore still panics when a deleted doc is at the beginning of a block. (@appaquet) #1088
Major bugfix. DocStore panics when first block is deleted. (@appaquet) #1077
API Changes. Using Range instead of (start, end) in the API and internals (FileSlice, OwnedBytes, Snippets, ...) This change is breaking but migration
FileSlice, OwnedBytes, Snippets, ...)
This change is breaking but migration is trivial.Migrated tantivy error from the now deprecated failure crate to thiserror #760. (@hirevo)
failure crate to thiserror #760. (@hirevo)Schema::Value now returns an Option instead of panicking if the type does not match.FileSlice that can be reduced and eventually read into an OwnedBytes object. Long and blocking io operation are still required by they do not span over the entire file.Query::explainnotify #924. Replaced with FileWatcher struct that polls meta file every 500ms in background thread. (@halvorboe @guilload)FilterCollector, which wraps another collector and filters docs using a predicate over a fast field (@barrotsteindev)FilterCollector now supports all Fast Field value types (@barrotsteindev)tantivy::merge_segments #1005. (@evanxg852000)This version breaks compatibility and requires users to reindex everything.
Nothing published for this version
Bugfix. Acquiring a facet reader on a segment that does not contain any doc with this facet returns None.
Bugfix. Acquiring a facet reader on a segment that does not contain any
doc with this facet returns None. (#896)
Made Query and Collector Send + Sync. Updated misc dependency versions.
Made Query and Collector Send + Sync.
Updated misc dependency versions.
Tantivy 0.13 introduce a change in the index format that will require you to reindex your index (BlockWAND information are added in the skiplist). The
Tantivy 0.13 introduce a change in the index format that will require you to reindex your index (BlockWAND information are added in the skiplist). The index size increase is minor as this information is only added for full blocks. If you have a massive index for which reindexing is not an option, please contact me so that we can discuss possible solutions.
FuzzyTermQuery not matching terms by prefix when it should (@Peachball)MMapDirectory::open does not return a Result anymore..advance() returns the new DocId. Scorer::skip(target) has been replaced by Scorer::seek(target) and returns the resulting DocId.
As a result, iterating through DocSet now looks as followslet mut doc = docset.doc();
while doc != TERMINATED {
// ...
doc = docset.advance();
}
The change made it possible to greatly simplify a lot of the docset's code.
Scorer::for_each_pruning function. (@fulmicoton)Removing static dispatch in tokenizers for simplicity.
TermDictionary stream. (@halvorboe)Crates relying on custom tokenizer, or registering tokenizer in the manager will require some minor changes. Check https://github.com/quickwit-oss/tantivy/blob/main/examples/custom_tokenizer.rs to check for some code sample.
- Fixed DateTime as a fast field
The future returned by IndexWriter::merge does not borrow self mutably anymore
IndexWriter::merge does not borrow self mutably anymore (#732)WatchHandle (#731)- Bug fix #729
Added f64 field. Internally reuse u64 code the same way i64 does (@fdb-hiroshima)
Box<BoxableTokenizer>. See detail in #629Box<dyn BoxableTokenizer> has been replaced by a BoxedTokenizer struct.RegexQuery instance is built. As a result, it can now return
an error and handling the Result is required.tantivy::version() now returns a Version object. This object implements ToString()Nothing published for this version
Closes #656. Solving memory leak.
Closes #544. A few users experienced problems with the directory watching system. Avoid watching the mmap directory until someone effectively creates
*Tantivy 0.10.0 index format is compatible with the index format in 0.9.0.*
Tantivy 0.10.0 index format is compatible with the index format in 0.9.0.
TopDocs::tweak_scoreand TopScore::custom_score (@fulmicoton)query.count in presence of deletes (@fulmicoton).explain(...) in Query and Weight to (@fulmicoton)delete_all_documents in IndexWriter (@petr-tik).
All segments are simply removed.u16::max_value() - 4 chars are discarded silently instead of panicking.SegmentReader is created.IndexMeta is now public. (@hntd187)IndexWriter add_document, delete_term. IndexWriter is Sync, making it possible to use it with a Arc<RwLock<IndexWriter>>. add_document and delete_term can
only require a read lock. (@fulmicoton)Opstamp as an expressive type alias for u64. (@petr-tik)AtomicU64 on all platforms (@petr-tik)Your program should be usable as is.
Fast fields used to be accessed directly from the SegmentReader.
The API changed, you are now required to acquire your fast field reader via the
segment_reader.fast_fields(), and use one of the typed method:
.u64(), .i64() if your field is single-valued ;.u64s(), .i64s() if your field is multi-valued ;.bytes() if your field is bytes fast field.Nothing published for this version
tantivy 0.9 brought some API breaking change. To update from tantivy 0.8, you will need to go through the following steps.
0.9.0 index format is not compatible with the previous index format.
Mmap objects were being leaked, and would never get released. (@fulmicoton)INT_STORED and INT_INDEXED. It is now possible to use STORED and INDEXED
for int fields. (@fulmicoton)tantivy 0.9 brought some API breaking change. To update from tantivy 0.8, you will need to go through the following steps.
schema::INT_INDEXED and schema::INT_STORED should be replaced by schema::INDEXED and schema::INT_STORED.
The index now does not hold the pool of searcher anymore. You are required to create an intermediary object called
IndexReader for this.
// create the reader. You typically need to create 1 reader for the entire
// lifetime of you program.
let reader = index.reader()?;
// Acquire a searcher (previously `index.searcher()`) is now written:
let searcher = reader.searcher();
// With the default setting of the reader, you are not required to
// call `index.load_searchers()` anymore.
//
// The IndexReader will pick up that change automatically, regardless
// of whether the update was done in a different process or not.
// If this behavior is not wanted, you can create your reader with
// the `ReloadPolicy::Manual`, and manually decide when to reload the index
// by calling `reader.reload()?`.
Fixing build for x86_64 platforms. (#496) No need to update from 0.8.1 if tantivy is building on your platform.
Fixing build for x86_64 platforms. (#496) No need to update from 0.8.1 if tantivy is building on your platform.
Merge was reflecting deletes before commit was passed. Thanks @barrotsteindev for reporting the bug.
Hotfix of #476.
Merge was reflecting deletes before commit was passed. Thanks @barrotsteindev for reporting the bug.
API Breaking change in the collector API. (@jwolfe, @fulmicoton)
No change in the index format
Nothing published for this version
*No change in the index format*
No change in the index format
Nothing published for this version
Bugfix #324. GC removing was removing file that were still in useful
*field:[startIncl to endIncl]field:{startExcl to endExcl}field:[startIncl to endExcl} and vice versafield:[start to *], field:[* to end]Nothing published for this version
- bugfix #274 - bugfix #280 - bugfix #289
bugfix #254 : tantivy failed if no documents in a segment contained a specific field.
Nothing published for this version
Nothing published for this version
Bugfix race condition when deleting files.
Prevent usage of AVX2 instructions
- Bugfix for non-indexed fields.
Raise the limit of number of fields (previously 256 fields) (@fulmicoton)
(age:1)Expose a method to trigger files garbage collection
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →