SHACL Advanced Features are done, quoted triples now flow through the whole engine, and the default build links not a single line of C crypto.
Today we released OxiRS 0.3.1 — a hardening release for the Rust-native Semantic Web / SPARQL 1.2 / GraphQL platform that completes SHACL Advanced Features, brings RDF-star into the query executor itself, and finishes the COOLJAPAN Pure-Rust migration end to end.
No JVM. No ring. No aws-lc-sys quietly compiling C and assembly under your “Rust” crypto. OxiRS stays the Rust-first replacement for Apache Jena + Fuseki — one dataset speaking both SPARQL 1.2 and GraphQL, every crate stand-alone, compiled to a single static binary. With 0.3.1, cargo tree -i ring and cargo tree -i aws-lc-sys both come back empty for the default feature set. The whole crypto path is auditable Rust.
Why OxiRS 0.3.1 is a game changer
Two long-running threads land in this release, and a third quietly disappears.
SHACL gets its advanced half. Validation is where most “RDF stacks” stop at the basics. 0.3.1 completes SHACL Advanced Features (SHACL-AF) in oxirs-shacl: recursive shapes and qualified value shapes, plus a dedicated rule-based reasoning engine — a reasoning validator with its own reasoning types and validation rules for RDFS / OWL 2 RL-style entailment. On top of that, oxirs-shacl-ai adds a genetic algorithm (optimization/genetic.rs) that searches for the cheapest constraint evaluation order — configurable population, generations, tournament size, and mutation rate, scored by a cost estimate.
RDF-star stops being a parser feature and becomes an engine feature. Quoted triples now flow through the entire oxirs-core query path: query algebra, the executor, the JIT, the planner, pattern unification, and SIMD triple matching all understand << s p o >>. You can pattern-match on statements about statements and have the optimizer reason about them, not just round-trip them through Turtle-star.
The C crypto vanishes. 0.3.1 finishes a migration that has been in flight across the 0.3.x line. Every dependency that used to drag in C or assembly is now Pure Rust:
- Compression —
brotli→oxiarc-brotli,snap→oxiarc-snappy,flate2→oxiarc-deflate, across all consuming crates; the direct deps are gone. - Crypto — 27 first-party
ring::call sites (in the CLI,oxirs-did,oxirs-fuseki,oxirs-cluster) migrated to OxiCrypto leaf crates (hash/mac/aead/kdf/rand), withed25519-dalekandrsafor signatures; all directringdeps removed. - TLS — a pure-Rust
oxitls::pure_provider()is installed process-wide at every binary entry point;rustls,reqwest, andtokio-rustlsare all wired to use it with no C provider.
The net result, stated in the release’s own words: the default cargo build is now free of ring and aws-lc-sys/aws-lc-rs C/asm crypto.
This all lands at ~43,500 tests across the workspace, zero warnings, with every .rs file under 2,000 lines.
Technical Deep Dive: what’s new under the hood
1. Reasoning, not just checking. SHACL-AF’s rule-based reasoning engine is the headline of the validation tier. Combined with recursive and qualified value shapes, OxiRS can now express and enforce constraints that depend on entailed triples — closing the gap with the most capable SHACL processors. The genetic constraint-order optimizer then makes large shape graphs practical to validate by minimizing evaluation cost.
2. Inductive embeddings with GraphSAGE. oxirs-embed adds models/graph_sage.rs — a GraphSageEmbedder doing k-hop mean aggregation with ReLU + L2-normalization, Xavier initialization via scirs2-core, margin ranking loss, sign-SGD, and LCG neighbor sampling. Unlike transductive embeddings, it produces vectors for unseen entities — embed a node that wasn’t in the training graph.
3. GraphRAG that explains and adapts. oxirs-graphrag gains a GraphSummarizer (summarizer.rs) that runs Leiden community detection → in-degree centrality → predicate-frequency analysis and emits a natural-language to_text() summary of a graph. A new TripleRelevanceFeedback (feedback.rs) re-ranks results with multiplicative weight adjustment (clamped 0.1–2.0) and seahash-based triple IDs.
4. New formats and security boundaries. oxirs-ttl adds an HDT 1.0 (Header-Dictionary-Triples) binary reader and a streaming TriG pull-parser (TriGStreamingParser as an Iterator). oxirs-fuseki and oxirs-did gain a FIPS 140-2 fips feature gate for FIPS-validated cryptography, backed by RFC-003’s FIPS boundary policy, and oxirs-fuseki adds RBAC policy templates — a PolicyTemplateRegistry with built-in DBA, ReadOnly, and Auditor roles (18 tests).
5. The dependency floor moves up. SciRS2 jumps 0.4.3 → 0.5.0 across all 12 sub-crates, and the OxiARC compression family is pinned to 0.3.3 and consumed directly from crates.io — the temporary path overrides are gone. (That 0.3.3 release fixed an oxiarc-brotli incompressible-input bug found while migrating OxiRS, and shipped upstream the same day.)
Getting Started
Install the CLI:
cargo install oxirs
Validate a graph against SHACL shapes and serve it:
oxirs init mykg
oxirs import mykg data.ttl --format turtle
oxirs query mykg "SELECT * WHERE { ?s ?p ?o } LIMIT 10"
oxirs serve mykg/oxirs.toml --port 3030
Embedding the engine and want quoted-triple support in your own code? Add the core crate:
cargo add oxirs-core
RDF-star quoted triples now participate in pattern matching directly:
use oxirs_core::query::QueryEngine;
// Match statements *about* statements: who asserted that Alice knows Bob?
let q = "SELECT ?who WHERE { << ?a foaf:knows ?b >> ex:assertedBy ?who }";
let results = QueryEngine::new(&store).execute(q)?;
What’s New in 0.3.1
- SHACL Advanced Features complete — recursive shapes, qualified value shapes, and a rule-based reasoning engine in
oxirs-shacl. - Genetic constraint-order optimization —
optimization/genetic.rsinoxirs-shacl-ai, with configurable population/generations/tournament/mutation. - RDF-star in query execution — quoted triples flow through algebra, executor, JIT, planner, unification, and SIMD matching in
oxirs-core. - GraphSAGE inductive embeddings —
models/graph_sage.rsinoxirs-embed, with unseen-entity support. - GraphRAG summarizer & relevance feedback — Leiden → centrality → predicate-frequency summaries, plus multiplicative re-ranking.
- New RDF formats — HDT 1.0 binary reader and a streaming TriG parser in
oxirs-ttl. - FIPS 140-2 gates —
fipsfeature inoxirs-fusekiandoxirs-did(RFC-003 boundary policy). - RBAC policy templates — DBA / ReadOnly / Auditor roles via
PolicyTemplateRegistryinoxirs-fuseki. - Pure-Rust migration complete — compression → OxiARC, crypto → OxiCrypto, TLS →
oxitls; default build links zeroring/aws-lc-sys. - Dependency refresh — SciRS2
0.5.0; OxiARC0.3.3direct from crates.io; ~43,500 tests; every file under 2,000 lines.
Tips
- Lean on SHACL-AF for real constraints. Recursive and qualified value shapes plus the reasoning engine mean you can validate against entailed triples. For big shape graphs, run the genetic optimizer in
oxirs-shacl-aito find a cheap constraint order before validating at scale. - Use GraphSAGE for evolving graphs. If new entities arrive constantly, transductive embeddings force a retrain.
GraphSageEmbedderembeds unseen nodes from their k-hop neighborhood — no retrain needed. - Summarize before you query.
GraphSummarizer::to_text()gives a natural-language overview of a subgraph (communities, central nodes, frequent predicates) — handy for exploration and for feeding context to a RAG prompt. - Reach for
fipsonly when mandated. Thefipsfeature inoxirs-fuseki/oxirs-didexists for compliance regimes that require FIPS-validated crypto; the default Pure-Rust build (OxiCrypto +oxitls) is already C-free without it. - Start from a policy template.
PolicyTemplateRegistry’s DBA / ReadOnly / Auditor roles are a fast, safe RBAC baseline — apply one to a user, then tighten from there instead of hand-rolling permissions. - Verify the C-free build yourself. After upgrading, run
cargo tree -i ringandcargo tree -i aws-lc-syson your default feature set — both should be empty. That’s the migration, made checkable.
This is the foundation
OxiRS is part of the COOLJAPAN ecosystem of Pure-Rust infrastructure, and 0.3.1 is the release where that principle becomes total for the crypto and compression stack. It rides on SciRS2 (now 0.5.0) for graph analytics and numerics, routes all compression through the OxiARC family (oxiarc-brotli, oxiarc-snappy, oxiarc-deflate, pinned to 0.3.3), and now handles every hash, MAC, AEAD, KDF, and RNG through OxiCrypto, with transport secured by OxiTLS. Alongside siblings like OxiZ (SMT) and OxiRAG, OxiRS gives you an end-to-end auditable, JVM-free, C-free path from bytes on disk to a reasoned SPARQL answer.
Repository: https://github.com/cool-japan/oxirs
Star the repo if you want a knowledge graph whose entire crypto and compression stack you can read in Rust. Pure Rust Semantic Web is here — fast, safe, and sovereign.
— KitaSan at COOLJAPAN OÜ June 7, 2026