CILicenseRust Version

Weave

Graph analysis, image processing, and content DSL tools for OSINT knowledge graphs.

Weave is a Cargo workspace that publishes Rust crates to crates.io and an Elixir NIF package to hex.pm.

Packages

Package Registry Version Description
weave-graphcrates.iocrates.io Conflict-of-interest pattern detection
weave-imagecrates.iocrates.io Thumbnail download, resize, WebP conversion
weave-contentcrates.iocrates.io Content DSL parser, validator, and builder
rbt_weavehex.pmhex.pm Elixir NIF bridge (graph + image)

Conflict Detection

weave-graph detects six conflict-of-interest patterns (COI-001 through COI-006) using three algorithms:

All algorithms operate on in-memory subgraphs extracted from Neo4j with O(1) adjacency lookups. Detection completes in <50ms for subgraphs up to 10K nodes / 50K edges.

Thumbnail Processing

weave-image handles thumbnail generation for entity images:

Content DSL

weave-content parses, validates, and builds Markdown case files into JSON for database seeding.

cargo install weave-content
weave-content validate --root content/
weave-content verify --root content/
weave-content build --root content/

Elixir Usage

Add rbt_weave to your dependencies:

def deps do
  [
    {:rbt_weave, "~> 0.2.2"}
  ]
end

A Rust toolchain (1.88+) is required to compile the NIF.

# Verify NIF is loaded
"ok" = Weave.Graph.health_check()

# Detect conflicts (JSON-in, JSON-out)
{:ok, results_json} = Weave.Graph.detect_conflicts(subgraph_json, opts_json)

Rust Usage

Add crates to your Cargo.toml:

[dependencies]
weave-graph = "0.2"
weave-image = "0.2"
use weave_graph::graph::{Subgraph, IndexedSubgraph};
use weave_graph::detect::{detect_conflicts, DetectOpts};

let subgraph = Subgraph { nodes: vec![/* ... */], edges: vec![/* ... */] };
let indexed = IndexedSubgraph::from_subgraph(&subgraph);
let results = detect_conflicts(&indexed, &DetectOpts::default());

Development

# Run Rust tests
cargo test

# Run clippy
cargo clippy --workspace -- -D warnings

# Run Elixir tests
mix deps.get && mix test

# Format
cargo fmt --all --check
mix format --check-formatted

License

MIT -- see LICENSE for details.