Skip to content

Releases: imattau/polypack

v2.4.7

Choose a tag to compare

@imattau imattau released this 01 Aug 12:49

Added

  • New polypack-graph crate: a pure-Rust port of PolyGraph's public API
    on top of polypack-core, for applications that need the graph engine
    without a JS runtime. Covers node/edge CRUD with owned/shared
    cascade-delete semantics, the flush/warm/save/clear/dispose/prune
    persistence lifecycle, hot-cache eviction backed by an O(1) LRU list,
    the GraphQuery/PersistedGraphQuery fluent query builders (including
    joins, traversal, similarity ranking, and grouping/aggregation), and
    pluggable text embeddings (EmbeddingProvider, FeatureHashEmbedding,
    verified bit-for-bit identical to the TypeScript implementation) with
    add_node_with_embedding/query_text/search_nodes wired through.
    Published to crates.io alongside polypack-core.

Fixed

  • Resolved cargo clippy --all-targets -D warnings failures in the new
    polypack-graph crate that were blocking CI: type-complexity on several
    dyn Fn closure fields (factored into type aliases), a needless
    .clone() on the Copy HnswConfig, two sort_by calls better
    expressed as sort_by_key, an if/else with identical bodies in
    remove_edges's edge-index cleanup, and a manual modulo check now
    expressed as u64::is_multiple_of. No behavior changes.

v2.4.6

Choose a tag to compare

@imattau imattau released this 01 Aug 09:28

Fixed

  • PolyGraph's createVectorIndex constructor hook was typed as
    (onChange) => VectorIndex, so HNSWIndex and
    @0xx0lostcause0xx0/polypack-native's NativeVectorIndex/NativeHnswIndex
    — the entire point of the hook — failed to type-check under tsc --strict
    despite working at runtime, because VectorIndex's private fields give it
    a nominal type brand. Introduced a structural VectorIndexLike interface
    (now exported from the package root) that VectorIndex and HNSWIndex
    both implement, and retyped PolyGraph.vectors/createVectorIndex
    against it.
  • MemoryAdapter's maxNodes cap was not actually LRU: applyChanges and
    bulkPutNodes re-put an existing node via a raw Map.set(), which does
    not move an existing key to the end of a JS Map's iteration order (only
    putNode's delete-then-set did). Since PolyGraph.flush()/save()
    prefer applyChanges when available, a frequently-updated node could
    still be evicted as if untouched. Both paths now route through the same
    touch-then-set helper as putNode.

Documentation

  • README, docs/API.md, and per-package docs (python/README.md,
    crates/polypack-core/README.md, packages/node-native/README.md)
    updated to cover all three distribution channels (npm, PyPI's
    polypack-db, crates.io's polypack-core) and to describe recent
    additions (addNodes, adaptive compaction, secondary indexes,
    createVectorIndex, HNSWIndex, markVectorDirty, VectorIndex.hydrate,
    MemoryAdapter's eviction behavior).
  • Added missing JSDoc/rustdoc/docstrings across the TypeScript, Rust, and
    Python public API surfaces, and merged three duplicate/leftover doc
    comments found on SyncClient, SyncServer, and MemoryTransport.

Polypack 2.4.5

Choose a tag to compare

@imattau imattau released this 01 Aug 07:39

Fixed

  • get_edges_by_sources/get_edges_by_targets in the Rust Store tripped
    clippy's unnecessary_map_or lint (edge_type.map_or(true, |t| ...)
    edge_type.is_none_or(|t| ...)), which CI enforces as a hard error. No
    behavior change.

See CHANGELOG.md for details.

Polypack 2.4.3

Choose a tag to compare

@imattau imattau released this 01 Aug 01:05

Version-only re-release of 2.4.2. @0xx0lostcause0xx0/polypack-native@2.4.2
was accidentally unpublished from npm during manual recovery from an OIDC
trusted-publisher outage; npm permanently blocks reusing an unpublished
name+version, so the whole stack moves to 2.4.3 to stay in lockstep. No
code changes beyond 2.4.2 — see CHANGELOG.md.

Polypack 2.4.2

Choose a tag to compare

@imattau imattau released this 01 Aug 00:40

Bug-fix release: Python graph deletion persistence, Rust WAL-before-mutation
ordering, atomic snapshot writes, and coordinated versioning across the
TypeScript, Rust, Python, and native npm packages (all now 2.4.2).

See CHANGELOG.md for details.

Polypack 2.4.1

Choose a tag to compare

@imattau imattau released this 31 Jul 12:13

Polypack 2.4.1 — coordinated multi-language release

  • Browser-safe persistence subpaths (persistence/node, persistence/opfs)
  • Conformance harness with recovery + query-plan fixtures
  • Rust core (polypack-core 0.1.1): exact index, update-safe HNSW,
    byte-compatible persistence state machine, query-plan executor
  • Node native NAPI-RS bindings (0.1.1) and Python PyO3 bindings
    (polypack-db 0.1.1)
  • Fixed native matrix: macos-13 for darwin-x64

Polypack 2.4.0

Choose a tag to compare

@imattau imattau released this 31 Jul 11:19

Polypack 2.4.0 — multi-language core release

  • Browser-safe persistence subpaths (persistence/node, persistence/opfs)
  • Conformance harness with recovery + query-plan fixtures
  • Rust core (polypack-core): exact index, update-safe HNSW, byte-compatible
    persistence state machine, query-plan executor
  • Node native NAPI-RS bindings and Python PyO3 bindings (abi3 wheel)
  • Release hardening: per-platform npm packages, cross-platform CI, coordinated
    release pipeline (release.yml)
  • Benchmark reports: go/no-go and in-memory query-gate

v2.3.0 — BinaryStoreAdapter

Choose a tag to compare

@imattau imattau released this 20 Jul 09:52

Replaced IndexedDBAdapter with BinaryStoreAdapter: MessagePack + WAL binary persistence. Fast writes via append-only WAL, fast reads from in-memory cache, and automatic compaction. Works in Node.js (fs) and browsers (OPFS).

v2.2.0

Choose a tag to compare

@imattau imattau released this 20 Jul 05:23

Full Changelog: v2.1.0...v2.2.0

Polypack v2.1.0

Choose a tag to compare

@imattau imattau released this 18 Jul 02:05