Skip to content

Releases: botirkhaltaev/sift

v0.6.0

Choose a tag to compare

@botirkhaltaev botirkhaltaev released this 24 Jun 13:43

Breaking

  • Make SearchQuery fields private and expose search options through SearchQuery::opts()
  • Move search-domain types under the public sift_core::search module and reduce root re-exports to SearchError, SearchOutcome, and SearchQuery
  • Change SearchExecution to borrow candidates instead of taking ownership
  • Replace boolean grep/index modes with GrepMode, UnindexedStrategy, and IndexWalkConfig domain types
  • Change CLI dispatch to consume Cli during 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() in PatternCompiler so 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 memmap2 from 0.9.10 to 0.9.11
  • Bump actions/checkout from 6 to 7

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 00:39

Breaking

  • Replace Daemon::send with Daemon::index; remove public DaemonOp export
  • Daemon::serve takes ServeConfig instead of loose arguments

Features

  • Ship sift-daemon in GitHub release assets and install.sh
  • Collapse daemon into index/daemon/mod.rs with inline Daemon::serve event loop

Refactor

  • Tighten daemon API: Daemon::bootstrap, Daemon::executable, domain methods on grouped serve types (#100)

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 19 Jun 22:45
cf1607c

Breaking

  • meta.json layout changed (corpus / walk / filters nesting). Re-run sift index build after upgrading; old stores are not migrated automatically.
  • Daemon IPC types moved from sift_core::DaemonOp to sift_grep::index::daemon::{Daemon, DaemonOp, DaemonError}; core no longer exports daemon types.

Features

  • Modular index daemon with async index update, --lazy build, and search-triggered background indexing
  • MR-SW snapshot index store with unified reconcile and 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); remove Serve, coordinator, and core IPC types
  • Remove no-op DaemonOp::Watch IPC opcode; reload store metadata before daemon reconciles; fail serve on 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

Choose a tag to compare

@github-actions github-actions released this 02 Jun 18:22

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

Choose a tag to compare

@botirkhaltaev botirkhaltaev released this 29 May 21:12

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)

Deps

  • bump clap from 4.6.0 to 4.6.1 (#37)
  • bump serde_json from 1.0.149 to 1.0.150 (#38)
  • bump rayon from 1.11.0 to 1.12.0 (#39)
  • bump bitflags from 2.11.0 to 2.11.1 (#40)

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 02 Apr 19:35

Full Changelog: v0.1.1...v0.1.2