Releases: botirkhaltaev/sift
Releases · botirkhaltaev/sift
Release list
v0.6.0
Breaking
- Make
SearchQueryfields private and expose search options throughSearchQuery::opts() - Move search-domain types under the public
sift_core::searchmodule and reduce root re-exports toSearchError,SearchOutcome, andSearchQuery - Change
SearchExecutionto borrow candidates instead of taking ownership - Replace boolean grep/index modes with
GrepMode,UnindexedStrategy, andIndexWalkConfigdomain types - Change CLI dispatch to consume
Cliduring routing
Performance
- Cache candidate file size and directory depth from walk/index metadata, reducing repeated filesystem metadata calls
- Skip total file byte accounting unless stats are requested
Fixes
- Use
bitflags::set()inPatternCompilerso disabled flags are applied correctly - Replace unchecked storage reads with explicit little-endian read helpers
Docs
- Revamp README installation and usage documentation
- Add benchmark chart generation and benchmark result images
- Add implementation and review plans for the architecture cleanup
Deps
- Bump
memmap2from 0.9.10 to 0.9.11 - Bump
actions/checkoutfrom 6 to 7
v0.5.0
Breaking
- Replace
Daemon::sendwithDaemon::index; remove publicDaemonOpexport Daemon::servetakesServeConfiginstead of loose arguments
Features
- Ship
sift-daemonin GitHub release assets andinstall.sh - Collapse daemon into
index/daemon/mod.rswith inlineDaemon::serveevent loop
Refactor
- Tighten daemon API:
Daemon::bootstrap,Daemon::executable, domain methods on grouped serve types (#100)
v0.4.0
Breaking
meta.jsonlayout changed (corpus/walk/filtersnesting). Re-runsift index buildafter upgrading; old stores are not migrated automatically.- Daemon IPC types moved from
sift_core::DaemonOptosift_grep::index::daemon::{Daemon, DaemonOp, DaemonError}; core no longer exports daemon types.
Features
- Modular index daemon with async
index update,--lazybuild, and search-triggered background indexing - MR-SW snapshot index store with unified
reconcileand partial-path updates - Walk unindexed corpus paths during daemon-enabled search for files not yet in the snapshot
Refactor
- Migrate grep/filter helpers to domain-type impls (
PatternConfig::search_options,FilterConfig::candidate_config,OutputConfig::separators,ByteSize) - Migrate core search helpers to domain types (
CandidateFilter::collect,WalkOptions::discover_files,IgnoreConfig::matcher) - Consolidate daemon into CLI-only
index/daemon.rs(Daemon::send,Daemon::serve,Daemon::ensure_running); removeServe, coordinator, and core IPC types - Remove no-op
DaemonOp::WatchIPC opcode; reload store metadata before daemon reconciles; failserveon startup reconcile errors; rebind filesystem watcher when corpus root changes - Unify
TrigramIndex::build(config, dir, paths)API (empty paths = full corpus)
Documentation
- Add LICENSE-MIT, LICENSE-APACHE-2.0, CONTRIBUTING.md, SECURITY.md
- Add crate metadata and README release-scope section
- Expand rg compatibility matrix and integration test coverage
v0.3.0
Bug Fixes
- reconcile on startup to catch changes made while daemon was down (#71)
- configure WalkBuilder from VisibilityConfig in no-index search (#59)
Features
- add idle timeout to daemon + redesign coordinator state machine (#72)
- concurrent daemon and multi-reader-single-writer index store (#68)
- add QueryPlanner, clean up index API, split regression tests (#60)
Miscellaneous
- bump sift-core path dep during release
Performance
- 2-pass trigram-only radix sort for posting assembly (#83)
- use incremental update in CLI when index exists (#80)
- use thread-local bitset for trigram dedup in from_bytes (#81)
- stream-decode posting lists during intersection (#82)
- defer content-level validation on index open (#78)
- drop redundant result sort in scan workers (#65)
- skip path work when no ignore rules apply (#66)
- read files for trigram extraction instead of mmap (#67)
Refactor
- reorganize index and trigram modules by domain (#64)
v0.2.0
Bug Fixes
- prune gitignored directories during index build (#58)
- redesign daemon event loop with RefreshState, remove is_relevant_event (#57)
- optimize index build with varint postings and unified visibility (#54)
- eliminate #[allow], split benchmarks per module, add profiling (#22)
- rustfmt import formatting
- remove unused rel_match_context helper, use string literals
- Windows clippy, context prefix formatting, and expanded tests
Documentation
- rewrite READMEs and AGENTS.md for clarity and index generality (#32)
- mark no-op flags (line-buffered, block-buffered, mmap, no-mmap) explicitly
- rewrite READMEs and add AGENTS.md to all projects and modules (#18)
- update Linux benchsuite snapshot with fresh results and chart
- tighten agent notes — scannable layout, no policy essays
- branch-per-phase workflow before roadmap slices
Features
- redesign daemon architecture with explicit config, spawn lock, and --once mode (#56)
- unified Index trait, auto-init, incremental updates with fingerprint-based change detection (#31)
- modular public-API-only benchmarks (#26)
- comprehensive unit and integration test coverage for sift-core (#25)
- add --no-config, --unicode/--no-unicode, --colors, --regex-size-limit, --dfa-size-limit, -M/--max-columns, --max-columns-preview flags
- add --no-config, --unicode/--no-unicode, --colors, --regex-size-limit, --dfa-size-limit, -M/--max-columns, --max-columns-preview flags
- add -j/--threads, --line-buffered, --block-buffered, --path-separator, --one-file-system, -U/--multiline, --multiline-dotall, --crlf, --mmap/--no-mmap flags
- add -j/--threads, --line-buffered, --block-buffered, --path-separator, --one-file-system, -U/--multiline, --multiline-dotall, --crlf, --mmap/--no-mmap flags
- add -r/--replace, --trim, -b/--byte-offset, --passthru, --include-zero flags
- add -r/--replace, --trim, -b/--byte-offset, --passthru, --include-zero flags
- add --no-ignore-parent, --no-ignore-global, --no-ignore-exclude, --no-messages, --no-ignore-messages, --no-ignore-files, --ignore-file flags
- add --no-ignore-parent, --no-ignore-global, --no-ignore-exclude, --no-messages, --no-ignore-messages, --no-ignore-files, --ignore-file flags
- add -a/--text and --binary flags for binary file handling
- add -a/--text and --binary flags for binary file handling
- add filter flags for max-depth, max-filesize, types, iglob, files, sort
- add --max-depth, --max-filesize, --iglob, --ignore-file, --files, -t/--type, -T/--type-not, --type-list, --type-add, --type-clear, --sort/--sortr filter flags
- add --context-separator, --no-context-separator, --field-match-separator, --field-context-separator flags (#10)
- add --column, --vimgrep, --pretty, -N/--no-line-number, --version flags (#9)
- implement scope-based path display resolution
- --json JSON Lines output (ripgrep-compatible) (#6)
- bytes searched in SearchStats and --stats (#5)
- elapsed time in SearchStats and --stats output (#4)
- --stats and SearchStats counters (#3)
- --color, --null, grouped output structs (#2)
- context lines (-A/-B/-C) for standard search
- search parity — paths, ignores, follow, filter pipeline
Miscellaneous
- bump softprops/action-gh-release from 2 to 3 (#34)
- bump actions/upload-artifact from 4 to 7 (#35)
- bump actions/download-artifact from 4 to 8 (#36)
- add release infrastructure — changelog, release script, ARM64, checksums, dependabot (#33)
- remove sift-profile binary from core crate (#23)
- fix pre-existing clippy lints (map_or, is_ok_and, byte str literals) (#17)
- remove fff.nvim
- remove useless scripts
- remove unused #[allow(dead_code)] from rel_match_context
Performance
- optimized trigram index build with packed sort and codec removal (#55)
- parallel corpus walk with WalkBuilder::build_parallel() (#47)
- extract trigrams from raw bytes instead of lossy UTF-8 (#48)
- reduce PathBuf allocations in resolve_candidates (#49)
- parallelize save_to_dir index file writes (#50)
- avoid materializing Vec in all_file_ids (#51)
- sift-profile revamp, matcher/searcher caches, parallel and index tuning
Refactor
- split search and grep modules, add index intersection planning (#30)
- remove parallel threshold, always use Rayon (#28)
- split grep module into domain folders (#27)
- restructure core into index/, grep/, and query/ modules (#24)
- harden integration test suite with TestProject helper (#21)
- organize CLI into domain-oriented modules (#19)
- replace Option with ColumnAction enum for max_columns
- avoid needless String allocation and double trim_start()
- add doc comments to ignore-granular structs
- rename parse_filesize to parse_size_suffix for consistency
Testing
- add 200 inline unit tests, convert CLI to lib+bin layout (#20)