Skip to content

Releases: splinterhq/libsplinter

Version 1.2.0 - Green Onions

Choose a tag to compare

@splinterhq splinterhq released this 30 Jun 19:46

Splinter 1.2.0 (LTS) — Changelog

This is a long-term support (LTS) release. Splinter is no longer beta.

The documentation site has also been completely overhauled. Please have a look!

Notable changes since the 1.1.9 release (06d7ccb). This release adds the
cooperative Logic Shard election system, two new CLI commands, a published
set of Rust bindings on crates.io, and a substantial round of core correctness
fixes. ~117 commits in total; the highlights are below.

Highlights

  • Logic Shard election — a cooperative, read-only memory-advisement system
    so multiple agents can arbitrate madvise() intent over a shared store
    without fighting each other.
  • Rust bindings on crates.iolibsplinter-sys and
    libsplinter-persist-sys, vendored and built from source.
  • mop set/get is now the memory-operation API — the deprecated *_av()
    functions have been removed.
  • New CLI commands: shard and retrain.
  • Numerous core memory-ordering and lifecycle correctness fixes.

Detailed changelog below (and the beginning of the changelog convention for the project!)


Logic Shard Election (cooperative memory advisement)

A new election system lets cooperating processes bid for the right to issue
posix_madvise() advice on regions of a shared store. The election is a
read-only, deterministic O(32) scan over a static bid table — no locks on the
hot path — and the hot path was kept under ~1500 LOC to remain compatible with
self-election.

New public API in splinter.h:

  • splinter_shard_election() — run the read-only scan, return the current
    sovereign and its intent.
  • splinter_shard_is_sovereign() — query whether a shard currently wins.
  • splinter_shard_claim() / splinter_shard_claim_ex() — register a bid
    (intent, 0–255 priority, duration in ticks); the _ex form lets a supervisor
    bid on another process's behalf for deterministic tests.
  • splinter_shard_rebid() — refresh a claim's timestamp and optionally change
    intent/priority/duration.
  • splinter_shard_release() — drop a claim.
  • splinter_shard_table_snapshot() — snapshot the full bid table.
  • splinter_madvise() — issue real posix_madvise() only if you win the
    election (never call raw posix_madvise() on a shared store).

Intents: WILLNEED, SEQUENTIAL, RANDOM, DONTNEED, NONE. A bidder
cannot win the election while a live WILLNEED/SEQUENTIAL claim is held, so a
stray DONTNEED can't evict another agent's working set.

New CLI commands

  • shard — inspect and seed the Logic Shard bid table; map intent names,
    view the current sovereign, and construct deterministic election scenarios.
  • retrain — prepare a key for retraining: zeroes the key's vectors and
    flips its epoch back to 4, releasing the sequence lock and republishing the
    key so clients and watchers revalidate it. Works even when vectors are
    disabled (epoch-only flip in that case).

CLI command improvements

  • export — when a key is VARTEXT, the value is now included in the JSON
    (for archival or sharing).
  • search — accepts the search phrase from a file or stdin, for pipe use.
  • unset — added a recursive option for removing tandem keys.
  • lua — many improvements: scripts can now access vectors and sleep.

Memory-operation API (mop) — breaking change

  • The mop set/get pattern is now the supported memory-operation API.
    splinter_set_mop() / splinter_get_mop() replace the deprecated *_av()
    functions.
  • Removed (previously deprecated): splinter_set_av(),
    splinter_set_hybrid_av(), splinter_get_av(), splinter_get_hybrid_av().
    Migrate to splinter_set_mop() / splinter_get_mop().
  • Default mop mode is now byte-aligned hybrid scrub (previously none).

Core changes & bug fixes

  • Fixed a missing memory fence in splinter_get(), dropping the EAGAIN retry
    rate to nearly zero.
  • splinter_poll() no longer forces the caller to retry on a write-busy (odd)
    epoch — it retries internally, as poll should; -2 is now returned only on
    header loss.
  • Overwrites no longer leave stale embeddings behind.
  • VALUES are recomputed after initialization to avoid aliasing into slot data.
  • New splinter_retrain_slot() deliberately rewinds a slot's epoch and scrubs
    its vector (epochs otherwise only advance) to signal revalidation.
  • Persistent stores now honor a custom umask on creation and open
    exclusively (enforced by open()); safer default umask handling.
  • More portable CPU reference clock for transaction timestamps.
  • Enforce the token limit at 90% of a model's trained limit so models stay
    runnable.

Inference (splinference / splainference)

  • New --vector-training switch makes selected vectors a write-once-only
    contract, preventing calculated centroid/variance sets from being overwritten
    during tuning.
  • Fixed unhandled context-window overflow beyond a model's trained size.
  • Embedding context size is now derived from the model's training size.
  • Key capacity scales with store size (up to ~500k keys).
  • Batches are cleared between runs to prevent residual bleed; cold-start fixes.

Rust bindings

  • Published as conventional -sys crates: libsplinter-sys (in-memory) and
    libsplinter-persist-sys (persistent, built with SPLINTER_PERSISTENT).
  • Vendored C sources are compiled from source via the cc crate and bound with
    bindgen at build time — no system install of libsplinter required.
  • Bindings updated to follow the mop API helper changes.

Build & packaging

  • bigbang universal installer for Debian/Ubuntu-based systems, plus a
    package shuttle for Debian-based distros.
  • On arm64, the rpath is baked in at compile time, removing the build-time
    dependency on patchelf.

Documentation

  • New documentation site and a refreshed README with expanded coverage of
    events, FFI, CLI/REPL usage, and governance.
  • Updated thesis (now also citeable via arXiv if you use it in research) and updated build instructions.
  • Changelogs now versioned in changelogs/{VERSION}.md for convenience.

Version 1.1.9 - Max's Caramel Chew

Choose a tag to compare

@splinterhq splinterhq released this 21 Apr 23:12
06d7ccb

This is a really, really, really big one. Splinter is now essentially a RAG in a box 🎁

Additions

  • We now have an epoll() compatible signal group broker (currently in testing, appreciate any testers):
    splinter_event_bus_open(), splinter_event_bus_wait(), splinter_event_bus_close() and splinter_event_bus_get_dirty()` to see what fired.
  • New CLI 'ingest' command reads a text file and chunks it into (n) slots x (max_val_len), allowing splinference to embed
  • New CLI 'search' command allows for semantic search ordered by Eudlidean distance over embedded keys
  • New CLI caps command allows for showing compiled-in capabilities and
  • New CLI uuid command generates a UUIDv4 on-demand (no external dependencies)
  • New sidecar system monitor allows for watching loads and triggering run breakpoints while observing bus debug chatter
  • WASM is now supported (GET/SET) for SIMD workloads (thanks to WASMEdge embedded)
  • Splainference now provides completion using chat templates

Fixes

  • Correctly parse .splinterrc and -r --rc-file directives are now honored properly
  • Numerous CLI code and efficiency improvements

Version 1.1.8 - Crinkle Cookies

Choose a tag to compare

@splinterhq splinterhq released this 08 Apr 22:15

This is a significant feature and bug fix release:

  • Splinference is now production ready (all bugs fixed)
  • Added splinter_append() to the core library (this is the last block needed for context management)
  • Updated the TS bindings and added tests for bun
  • Implemented bump to advance a key's epoch without doing any other work
  • Numerous minor improvements & documentation cleanup

Full Changelog: v1.1.7...v1.1.8

Version 1.1.7 - Blue Freeze Pop

Choose a tag to compare

@splinterhq splinterhq released this 26 Mar 20:55

This is a periodic maintenance release. The bulk of the changes are in the CLI/Inference, where code was hardened in line with real-world use and semantic embedding workflow needs. Fixed many positional argument bugs, brought in argparse to replace getopt for CLI modules, improvements in test coverage and overhaul of CMake, among many other improvements.

There was also just a general catching up to the massive amount that recently went into core, so fixtures in the CLI are now more permanent feeling.

Core additions:

  • splinter_pulse_keygroup() -> Pulse a signal group by any of its members (key name) (slot no longer needed)
  • splinter_set_as_system() -> Commandeer a key as a binary scratch pad for accounting
  • splinter_unset_label() -> unsets a previously-set bloom label

CLI additions:

  • New bind command to bind a bloom label to a signal group ID.

All users are encouraged to upgrade, but no security fixes are in this release (pull when ready).

Version 1.1.6 - Knickerbocker Glory

Choose a tag to compare

@splinterhq splinterhq released this 06 Mar 00:15

This release provides a much needed splinter_enumerate_matches() to scope keys based on bloom bits. It provides a convenient callback (similar to CURL) that can function as an iterator for only slots that match a certain bitmask (bloom) filter.

IOW - lightning fast search tagged by bits instead of equality or string match, which was already there, just not-so-conveniently exposed. This callback implementation remedies that and is warranted even though the 999 LOC ceiling is looming closer.

Splinter 1.1.5 - Root Beer Float

Choose a tag to compare

@splinterhq splinterhq released this 25 Feb 19:41

This is the first public "official" release of Splinter!! 🎉

This is also the beginning of the public change manifest.

We can get happy on vectors and share our High Rank Tensors in memory again!! 🤓