Releases: codecoradev/uteke
Release v0.0.15
What's New in v0.0.15
Changed
- CLI cold start: ~3s β ~20ms for non-embedding commands (#185)
ONNX embedding model is now loaded lazily on first use. Commands like
list,get,stats,tags,forget,namespace,aging,export,
doctor, andverifystart instantly without waiting for model load.
Commands that need embedding (remember,recall,search) still take
~3s on first use per process invocation. - Refactor CLI into modular structure (#131)
CLI argument definitions extracted tocli.rs, logging setup tologging.rs.
main.rs reduced from 449 to ~100 lines for easier maintenance. - Release workflow now decoupled: crates.io publish runs in parallel with
builds, GitHub Release only waits for builds. Single platform failure
no longer blocks release. - Shell hook scripts inlined into uteke-cli crate for crates.io compatibility.
- Added
.cora.yamlconfig and pre-commit hook (Cora v0.5.0).
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.15-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.15-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.15-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.15-x86_64-pc-windows-msvc.zip |
π Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/codecoradev/uteke/blob/main/CHANGELOG.md
Release v0.0.14
What's New in v0.0.14
Security
- Set owner-only file permissions (0700/0600) on database and model directories (#134)
- Add SHA256 checksum verification for downloaded ONNX model files (#134)
- Pin expected model checksums to detect corrupted/tampered downloads
Added
- Indonesian README translation (README.id.md) with language switcher (#277)
- TLS & Reverse Proxy documentation page (Caddy, Nginx, Cloudflare Tunnel) (#100)
- Crates.io metadata in all Cargo.toml files (#136)
Changed
- Server now handles requests concurrently via thread-per-request (#233)
UsesArc<Mutex<Uteke>>for safe shared access across threads. - Contradiction threshold is now a parameter instead of hardcoded 0.65 (#253)
- Rename
euclidean_to_cosinetocosine_distance_to_similarity(#232) - 9 code quality improvements from Cora scan (#232)
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.14-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.14-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.14-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.14-x86_64-pc-windows-msvc.zip |
π Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/codecoradev/uteke/blob/main/CHANGELOG.md
Release v0.0.13
What's New in v0.0.13
Added
- FTS5 hybrid search with RRF β Full-text search (FTS5) as parallel retrieval channel merged with vector search via Reciprocal Rank Fusion (RRF, k=60). New
RecallStrategyenum:hybrid(default),vector,fts5. FTS5 virtual table auto-created; existing DBs get schema migration v1βv2. Phrase search + token-OR fallback. Deprecated memories excluded from FTS5. 6 new tests (#250, PR #261) - Metadata enrichment via CLI flags β
--entity,--category,--meta key:value,...onremember. Post-filter onrecallandlistby--entityand--category.parse_meta_pairs()with auto type detection (string/number/bool). JSON output includes metadata when present (#251, PR #262) - Concurrent reads via RwLock β
Mutex<VectorIndex>βRwLock<VectorIndex>for read-heavy workload. Multiple concurrent recalls share read lock. Embedder remainsMutex(ONNX tokenizer requires&mut self) (#209, PR #260)
Fixed
- Vector index consistency β Atomic save for
.keyssidecar file (temp + rename).insert()andbuild()now returnResultfor error propagation (#139, PR #263) - FTS5 BM25 score conversion β Negative unbounded BM25 values were always clamped to 0.0. Fixed to proper sigmoid-based normalization (PR #264)
- RRF normalization β
.min(1.0)β.clamp(0.0, 1.0)with clearer math (PR #264) memories.remove().unwrap()β Replaced with.expect()for meaningful panic message (PR #264)- Server-mode metadata support β
remembervia HTTP API now includes entity, category, and meta in request body (PR #264) - Clippy
collapsible_else_ifβ 2 pre-existing warnings fixed (PR #260)
Changed
- Repository transferred β
ajianaz/utekeβcodecoradev/uteke. All references updated across 16 files - Cora Review CI β switched from local Infisical OIDC action to
codecoradev/cora-review-action@v1with GitHub Secrets. Removed.cora.yamlproject config - README simplified β 400 β 97 lines. Detailed content moved to VitePress docs (
docs/architecture.md,docs/cli-reference.md, etc.) - Roadmap cleaned β consolidated old versions, removed speculative Phase B/C phases
- CONTRIBUTING.md β added Cora CLI integration docs, CI checks table, architecture updated to 3 crates, Key Design Decisions section
- AGENT.md β new file with persistent AI agent context: critical rules, architecture, lessons learned, proven workflow
- docs/architecture.md β new VitePress page with system overview, data flow diagrams, performance benchmarks, design decisions
- docs/roadmap.md β v0.0.12 section added, old versions consolidated, "What's Next" list
- Star History chart added to README (cora-cli + uteke)
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.13-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.13-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.13-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.13-x86_64-pc-windows-msvc.zip |
π Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v curl -fsSL https://raw.githubusercontent.com/codecoradev/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/codecoradev/uteke/blob/main/CHANGELOG.md
Release v0.0.12
What's New in v0.0.12
Fixed
- TOCTOU race in tag operations β
rename_taganddelete_tagnow start transaction before SELECT, preventing lost updates from concurrent writers (#235) - TOCTOU race in aging/prune β
aging_cleanupandprunenow delete by specific IDs instead of re-querying by criteria, preventing vector index orphans (#235) - bulk_forget_ lock order* β All 3 bulk delete methods now acquire index lock before SQLite delete, matching the pattern from
forget()(#236) - Server 500 leaks internals β 500 responses now return generic "Internal server error" to client; full error logged server-side (#237)
- Server JSON fallback β
json_responsefallback now usesserde_json::json!instead offormat!, preventing broken JSON (#237) - Atomic write tmp naming β Temp files now named
filename.tmpinstead of fragile extension swapping (#238)
Added
Store::delete_by_ids()β New method for atomic batch deletion by specific IDs
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.12-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.12-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.12-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.12-x86_64-pc-windows-msvc.zip |
π Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/ajianaz/uteke/blob/main/CHANGELOG.md
Release v0.0.11
What's New in v0.0.11
Fixed
- [CRITICAL] Timestamp format mismatch β Aging/pruning queries never matched because SQLite
datetime('now')format differs from stored RFC3339 timestamps. Now computes cutoffs in Rust usingchrono(#221) - Namespace=None inconsistency β Tag operations (
tags_with_counts,rename_tag,delete_tag,count_by_tag) treatedNoneas "default" namespace instead of "all namespaces". Now consistent withunique_tagsbehavior (#222) - Non-atomic model file write β Model downloads now use atomic write (
.tmp+ rename) to prevent corrupt files on crash. Cleans up leftover.tmpfiles on startup (#225) uteke_home()panic β Replaced.expect()withResultreturn type to prevent crashes in minimal Docker/CI environments (#226)- Server path matching β
DELETE /forgetnow uses exact path match, preventing false matches on/forgetfuletc. (#228) - Query param parsing β Use
splitn(2, '=')to preserve values containing=(#228) - Missing CLI arg value β
--host/--portwithout value now prints error instead of silently ignoring (#228) - 404 path reflection β Generic "Not found" message instead of echoing request path (#228)
- SQLite/index inconsistency β
forget()now acquires index lock before SQLite delete to narrow the inconsistency window (#231) - Memory type validation β
remember_typed()now validatesmemory_typeagainst known variants (#229)
Added
- Security scanning workflow β New
security.ymlCI workflow withcargo audit+ Trivy filesystem scan. Runs on push, PRs, and daily schedule (#177, #220) - quinn-proto update β Updated to v0.11.14 fixing CVE-2026-31812 (DoS via crafted QUIC packet)
Error::Genericvariant β New error type for general-purpose errors
Changed
uteke_home()returnsResultβ All callers updated to handle potential failure
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.11-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.11-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.11-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.11-x86_64-pc-windows-msvc.zip |
π Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/ajianaz/uteke/blob/main/CHANGELOG.md
Release v0.0.10
What's New in v0.0.10
Fixed
- Safe slice for deprecated IDs β
dep_id.get(..8).unwrap_or(dep_id)prevents panic on short IDs (#192) - Index lock before SQLite write β Acquire vector index lock before any SQLite writes so lock failures are detected early, preventing false errors (#191)
- HTTP status checking β Server proxy now validates response status codes, returning proper error messages instead of silently accepting failures (#193)
- Aging cleanup filter β
cleanup_agednow includesdeprecated = 0filter matchingfind_agedcriteria (#189) - Schema migration transactions β Each migration step + version stamp wrapped in SQLite transaction (#188)
- Batch bulk deletes β Replace N individual DELETE statements with single batched query for better performance (#190)
Changed
- Store module split β
store.rs(2,065 LOC) split into 8 focused modules: schema, crud, tags, aging, bulk, vector, types, store (#179) - Commands module split β
commands.rs(820 LOC) split into 9 per-command modules (#180) - SQLite-first dual-write β
remember()now writes to SQLite before vector index, matchingforget()pattern (#182) - Embedding docs corrected β All docs now correctly state 768d (not 256d) for EmbeddingGemma (#183)
- Shell hook guards β Bash
PROMPT_COMMANDand Zshchpwd_functionsnow have idempotency guards (#143) - Hermes branding removed β All product-specific branding replaced with generic names; only
--namespaceexamples remain (#178)
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.10-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.10-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.10-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.10-x86_64-pc-windows-msvc.zip |
π Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/ajianaz/uteke/blob/main/CHANGELOG.md
Release v0.0.8
What's New in v0.0.8
Added
- Architecture: module split β
lib.rs(1471β352) andmain.rs(1538β422) broken into focused modules:operations,maintenance,consolidate,error,types,import_export,commands,init,output,bench - Input validation β Max content 10K chars, max 20 tags, max server payload 1MB (#132)
- Binary checksums β SHA256 checksums in release artifacts +
verify-checksumssubcommand (#134) - Schema versioning β
schema_versiontable + migration framework for future DB upgrades (#138) - Error handling rewrite β
Errorenum with sanitized user-friendly messages, ~90 call sites migrated from raw rusqlite/usearch/ONNX errors (#144) - Python wrapper expansion β 7β21 methods covering all CLI commands, namespace support, type hints, Google-style docstrings (#137)
- Memory benchmark β
memory-benchbinary for library-level timing across dataset sizes (#49) - Memory consolidation β
consolidatecommand to find and merge near-duplicate memories - Import/Export β JSONL-based memory backup and restore via
import/exportcommands
Changed
- Contradiction detection β Now read-only during check; deprecation happens after new memory is safely persisted (prevents data loss on insert failure) (#139)
- README β v0.0.8 badge, Design Philosophy section, Performance benchmarks
Fixed
- Deadlock in
check_contradictionβ Mutex re-acquire pattern fixed by separating read-only check from mutation (#139)
Security
- Error sanitization β Internal error details (file paths, SQL, model names, ONNX internals) no longer exposed to users (#144)
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.8-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.8-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.8-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.8-x86_64-pc-windows-msvc.zip |
π Quick Start
# Quick install (Linux / macOS)
curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Pin a specific version
UTEKE_VERSION=v curl -fsSL https://raw.githubusercontent.com/ajianaz/uteke/main/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/ajianaz/uteke/blob/main/CHANGELOG.md
Release v0.0.7
What's New in v0.0.7
Added
- Tag storage:
json_each()queries β All 8 tag query methods refactored fromLIKE '%\"tag\"%'tojson_each()for exact matching and performance (#120) - Config wiring: tier thresholds β
TierConfigstruct with configurablehot_days,warm_days,hot_boost;Uteke::open_with_tier()accepts custom config (#127) - Test coverage: 34 β 94 tests β Comprehensive tests for store, lib, and config modules (#129)
- Config tests β 7 new tests for
merge_from_file,expand_tilde,set_namespace_in_toml(#129)
Changed
MemoryTier::from_last_accessed()β Now acceptshot_daysandwarm_daysparameters (was hardcoded 7/30)tags_with_counts()β N+1 query pattern replaced with singleGROUP BYviajson_each()unique_tags()β SQL returns individual tag values directly (no in-Rust JSON parsing)tier_counts()andbulk_delete_cold()β Now accept configurable threshold parameters
Fixed
- Tag substring false positives β Tag
"rust"no longer matches memory tagged"rustacean" - README configuration docs β Fixed config search paths, removed non-existent
--configflag, corrected TOML format (#128)
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.7-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.7-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.7-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.7-x86_64-pc-windows-msvc.zip |
π Quick Start
# Install
curl -fsSL https://uteke.ajianaz.dev/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/ajianaz/uteke/blob/main/CHANGELOG.md
Release v0.0.6
What's New in v0.0.6
Fixed
- JSON output omits embedding vector β
Memory.embeddingnow uses#[serde(skip_serializing, default)]- Reduces JSON response size by ~3KB per memory
- Embeddings are populated programmatically via ONNX, not from JSON
import()now persists vector index β previously imported memories were lost on restart because the index was never saved- CI: Node.js 24 enforcement β added
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24to all workflows - Docker: non-root container β added
USER utekedirective (uid/gid 1000) with owned/datadirectory - CI: removed unused
musl-toolsinstall β targets are glibc only
Added
- Dependabot β automated dependency updates for cargo, GitHub Actions, and Docker
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.6-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.6-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.6-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.6-x86_64-pc-windows-msvc.zip |
π Quick Start
# Install
curl -fsSL https://uteke.ajianaz.dev/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/ajianaz/uteke/blob/main/CHANGELOG.md
Release v0.0.5
What's New in v0.0.5
Added
- UTEKE_HOME environment variable β single env var to override all
dirs::home_dir()paths- Affects: database path (
uteke.db), vector index (uteke_index.usearch), model cache (models/) - Default:
$HOME/.utekewhen not set - Essential for Docker volume mounts and custom data directories
- Affects: database path (
- Server reads uteke.toml config β
uteke-servenow respects configuration file- Reads
[server]section:host,port - Default host changed to
0.0.0.0(was127.0.0.1) for Docker/network compatibility - Config loaded at startup, printed to logs
- Reads
- Smart server fallback β CLI auto-falls back to local mode for server-unsupported commands
- Commands not yet available via HTTP API gracefully fall back to local execution
- No more error when
server.enabled = trueand command lacks server endpoint
- API parity β expanded remember endpoint β
POST /remembernow accepts all CLI fieldsmemory_type,detect_contradiction,valid_from,valid_untilparameters- Returns contradiction detection result when enabled
- GET /memory endpoint β retrieve single memory by ID via
GET /memory?id=<id> - DELETE /forget bulk operations β
DELETE /forget?all=true&cold=truefor mass deletion - Multi-stage Dockerfile β production-ready Docker image for
uteke-serve- Base:
debian:bookworm-slim(glibc/ONNX compatible) - Model baked into image at build time (~208MB total)
- Non-root user, health check endpoint, configurable via env vars
- Base:
- Docker image CI β automatic build and push to GHCR on release
- Multi-platform:
linux/amd64+linux/arm64 - Buildx with cache, tags:
latest+ version tag
- Multi-platform:
- Release notes from CHANGELOG.md β dynamic extraction via
awk(no hardcoded notes)
Changed
- Server default host:
127.0.0.1β0.0.0.0(Docker/network accessible) - Cora review action: hardcoded version β
latest(auto-updates)
Fixed
- Pre-existing format issue:
.to_string_lossy().to_string()chain cleaned up
π¦ Binaries
Each archive contains two binaries:
utekeβ CLI tooluteke-serveβ HTTP server daemon
| Platform | File |
|---|---|
| Linux (x86_64) | uteke-v0.0.5-x86_64-unknown-linux-gnu.tar.gz |
| Linux (ARM64) | uteke-v0.0.5-aarch64-unknown-linux-gnu.tar.gz |
| macOS (Apple Silicon) | uteke-v0.0.5-aarch64-apple-darwin.tar.gz |
| Windows (x86_64) | uteke-v0.0.5-x86_64-pc-windows-msvc.zip |
π Quick Start
# Install
curl -fsSL https://uteke.ajianaz.dev/install.sh | sh
# Store a memory
uteke remember "Important context" --tags project
# Recall by meaning
uteke recall "what was that context?"
# Start server for fast AI agent access
uteke-serve --port 8767Full changelog: https://github.com/ajianaz/uteke/blob/main/CHANGELOG.md