Overview
UVRN is an open consensus engine: it checks whether independent data sources agree on a claim and produces a deterministic, cryptographically verifiable outcome. Results are stamped as consensus receipts—tamper-proof proofs anyone can verify.
The Delta Engine runs those consensus checks across multiple sources, compares metrics, iterates until sources converge (or not), and returns an outcome—typically consensus or indeterminate.
The public consensus ledger at uvrn.org/access is where indexed receipts can be searched and inspected.
What's new in v4
UVRN Packages v4 is the canonical 26-package protocol generation — every @uvrn/* package is published to npm at 4.0.0, with internal peers pinned at ^4.0.0 (v4 resolves only against v4 peers). v4 adds signed NetworkReceipt envelopes, durable SQLite stores, toHumanView() rendering, and an umbrella @uvrn/protocol install. Three packages are new in v4.
Signed receipts — @uvrn/receipt
Canonical receipt object model: JCS canonicalization, Ed25519 signing, NetworkReceipt envelope, and Layer D vocabulary via toHumanView(). Wrap any MasterReceipt, sign it, and render a structured human view without touching receipt identity.
Durable local store — @uvrn/store-sqlite
Zero-signup SQLite implementations for every UVRN store interface, plus SqliteReceiptStore.pushToNetwork() for satellite sync to the registry.
Umbrella install — @uvrn/protocol
Single dependency for the full claim → measurement → master receipt → signed network receipt flow: core + receipt + measure + consensus + score + signal, flat-exported.
The four measurement outcomes — @uvrn/measure (debuted in v3)
First-party, pluggable relationship measurements over the Measurement contract in @uvrn/core. Each is pure logic — no storage, signer, or network call.
- Agree — emits
agreewhen comparable sources converge at or above the agree threshold (default 0.9). - Disagree — emits
disagreewhen numeric spread exceeds the divergence threshold. Pure numeric spread is never a conflict. - Conflict — emits
conflictwhen two sources assert mutually exclusive categorical/boolean values or disjoint ranges on the same field. - Potential — emits
potentialwhen agreement observations are rising but still below the agree threshold (early signal).
import { defaultRegistry } from '@uvrn/measure';
const results = defaultRegistry().runAll({
claim: 'Two sources report similar revenue.',
sources: [
{ id: 'source-a', kind: 'numeric', value: 100, label: 'Source A' },
{ id: 'source-b', kind: 'numeric', value: 104, label: 'Source B' },
],
context: { agreeThreshold: 0.9, divergenceThreshold: 0.1, history: [0.55, 0.62, 0.74] },
});Signal ranking — @uvrn/algox (debuted in v3)
Turns a pile of agent-gathered candidates into a ranked list of the most prominent signals — scored, de-duplicated, diversity-capped, and freshness-filtered. Pure logic, no UI, zero runtime dependencies. Every knob (weights, per-source cap, max age, top-K) is tunable.
import { rankSignals } from '@uvrn/algox';
const result = await rankSignals(candidates, {
topK: 10, // how many to keep
capPerSource: 3, // max per source — stops one outlet dominating
maxAgeDays: 30, // drop stale signals (null disables)
weights: { prominence: 1, mentions: 0.001 },
});
result.ranked; // highest score first, ready to renderCross-domain decomposition — @uvrn/lattice (debuted in v3)
Takes a multi-domain research question, decomposes it into domain-specific signal bundles, normalizes them into @uvrn/core DataSpec records, and runs the resulting DeltaBundle through the engine. It also adds claim ↔ evidence sufficiency grading: the V-Score asks “do the sources agree?” while verifyClaim() asks “is the right kind of evidence present for this claim?” — a high V-Score with an Unverified sufficiency verdict is valid and expected.
import { BUILT_IN_TEMPLATES, MockDomainConnector, runLattice } from '@uvrn/lattice';
const template = BUILT_IN_TEMPLATES.find((t) => t.id === 'builder-radar');
const receipt = await runLattice(
'Should regional robotics builders enter municipal maintenance markets?',
template,
{ connector: new MockDomainConnector() }
);
console.log(receipt.vScore, receipt.deltaReceipt.outcome);The other 23 packages were updated to v4. See the full lineup in Package Reference below.
Quick Start — connect via MCP
The fastest way to use UVRN is through your AI assistant. Install @uvrn/mcp and the consensus engine becomes a tool your LLM can call directly — no API key, no account, no separate app. The engine runs on your machine; results come back through the AI.
- Install the MCP serverterminal
npm install -g @uvrn/mcp - Add it to your MCP client config
For Claude Desktop, add to
claude_desktop_config.json:claude_desktop_config.json{ "mcpServers": { "uvrn": { "command": "uvrn-mcp" } } }Cursor, Windsurf, and other MCP-compatible clients follow the same pattern — check your client's MCP settings.
- Ask your AI to run a consensus check
Restart your client and try a prompt like:
example promptUse UVRN to check whether three sources agree that remote work is the dominant employment trend for 2026. Score each source 0–100 on how strongly they feature it, run the consensus check, and show me the outcome and receipt hash.The engine runs locally on your machine and returns a receipt with
outcome,deltaFinal, andhash. Nothing is sent anywhere unless you explicitly ask to publish.
Try it with any AI assistant
Don't have MCP set up yet? Copy the prompt below and paste it into any AI assistant — Claude, ChatGPT, Grok, or similar. It gives the AI everything it needs to walk you through a real consensus check step by step.
AI assistants with terminal or code execution (like Cursor or Claude with computer use) can run the full flow end-to-end. Others will give you the exact commands to run yourself.
Try asking something like this after pasting the prompt
You have access to the UVRN consensus engine — an open protocol that determines whether independent sources agree on a claim and produces a cryptographically-verifiable proof of the outcome.
The Delta Engine runs entirely on your machine via @uvrn/core, @uvrn/cli, or @uvrn/mcp — no API key needed to compute. Receipts are fully valid locally. The public ledger at uvrn.org/access is a separate opt-in registry — publishing is never required.
Now do the following:
Search the web for the top 10 men's fashion trends in California for Summer 2026. Use 10 different sources. For each trend, assign a prominence score (0–100) based on how strongly each source features it.
Install the UVRN CLI and run a local consensus check:
npm install -g @uvrn/cli
Create bundle.json with this shape:
{
"bundleId": "mens-fashion-summer-2026",
"claim": "These sources agree on the top men's fashion trends in California for Summer 2026.",
"thresholdPct": 0.05,
"maxRounds": 5,
"dataSpecs": [
{
"id": "source-1",
"label": "<source name>",
"sourceKind": "report",
"originDocIds": ["<url or doc id>"],
"metrics": [
{ "key": "<trend name>", "value": <prominence score 0-100> }
]
}
// ... one entry per source, all 10
]
}
Run: uvrn run bundle.json
Show me: the outcome ("consensus" or "indeterminate"), deltaFinal, which trends reached consensus vs. indeterminate, and the receipt hash. The receipt is complete and verifiable at this point — nothing has been sent anywhere.npm packages
26 scoped packages, all live on npm at 4.0.0 (UVRN Packages v4) — from the core consensus engine to protocol layers for ingestion, normalization, scoring, identity, measurement, cross-domain decomposition, and embedding. All are MIT licensed — browse the org at npmjs.com/org/uvrn. New in v4: @uvrn/receipt, @uvrn/store-sqlite, @uvrn/protocol.
Start with @uvrn/mcp or @uvrn/core. Every package is independently installable; internal peers are declared explicitly at ^4.0.0.
npm install @uvrn/mcp # MCP server — connect the engine to your LLM (start here)
npm install @uvrn/core # Core consensus engine — run, hash, verify locally
npm install @uvrn/sdk # Higher-level SDK for emitting consensus receipts
npm install @uvrn/adapter # DRVC3 envelope adapter, EIP-191 signing
npm install @uvrn/api # REST API server (Fastify) — self-host the engine
npm install @uvrn/cli # CLI tool — run bundle.json from your terminalThe full protocol pipeline — drift, agent, canon, ranking, signal, scoring, ingestion, normalization, cross-domain lattice, consensus, compare, measurement, identity, timeline, alerting, and embedding.
npm install @uvrn/drift # Drift monitoring — track claim score decay over time
npm install @uvrn/agent # Agent monitoring envelope — unsigned drift receipts
npm install @uvrn/canon # Canonization — freeze and store verified receipts
npm install @uvrn/algox # Signal ranking — rank agent candidates (debuted in v3, zero-dep)
npm install @uvrn/signal # Typed in-process event bus — zero-dep pub/sub
npm install @uvrn/score # Score breakdown and explanation layer (V-Score components)
npm install @uvrn/farm # Provider-agnostic data ingestion with connector contract
npm install @uvrn/normalize # Profile-driven FarmSource normalization
npm install @uvrn/lattice @uvrn/core # Cross-domain evidence decomposition (debuted in v3)
npm install @uvrn/consensus # Farm output → DeltaBundle builder with source ranking
npm install @uvrn/compare # Head-to-head and time-series claim comparison
npm install @uvrn/measure @uvrn/core # agree / disagree / conflict / potential (debuted in v3)
npm install @uvrn/identity # Signer reputation tracking (pluggable IdentityStore)
npm install @uvrn/timeline # Claim history reconstruction and chart shaping
npm install @uvrn/watch # Threshold-event alerts with pluggable delivery targets
npm install @uvrn/embed # Embeddable React badge + UMD widget for live claim status
npm install @uvrn/receipt @uvrn/core # Signed NetworkReceipt envelope + toHumanView() (new in v4)
npm install @uvrn/store-sqlite # Durable SQLite stores + pushToNetwork() (new in v4)
npm install @uvrn/protocol # Umbrella single-install — full protocol stack (new in v4)
npm install --save-dev @uvrn/test # Dev-time mocks, factories, fixtures (dev only)@uvrn/embed UMD: For plain HTML pages, no npm install is required — serve dist/embed.umd.js and load it with a <script> tag.
For developers
Everything below is for developers integrating UVRN into their own systems — bundle format reference, CLI usage, and the public ledger API for teams who want to register receipts programmatically or build their own local Worker setup.
CLI — run locally
Install the CLI and pass any valid DeltaBundle JSON file:
npm install -g @uvrn/cli
uvrn run bundle.jsonReturns a receipt with outcome, deltaFinal, hash, and roundsRun. Nothing leaves your machine.
DeltaBundle input shape
{
"bundleId": "my-bundle-001",
"claim": "These sources agree on current design trends.",
"thresholdPct": 0.05, // consensus threshold — 0.05 = 5%
"maxRounds": 3,
"dataSpecs": [
{
"id": "source-a",
"label": "Source A",
"sourceKind": "report", // report · metric · chart · meta
"originDocIds": ["doc-a"],
"metrics": [
{ "key": "minimalism_index", "value": 72 },
{ "key": "accessibility_priority", "value": 88 }
]
},
{
"id": "source-b",
"label": "Source B",
"sourceKind": "metric",
"originDocIds": ["doc-b"],
"metrics": [
{ "key": "minimalism_index", "value": 71 },
{ "key": "accessibility_priority", "value": 87 }
]
}
]
}{
"hash": "bb2e5f64...26ab1", // prepend "sha256:" to publish to ledger
"outcome": "consensus", // consensus | indeterminate
"deltaFinal": 0.01242236,
"roundsRun": 1,
"bundleId": "my-bundle-001",
"metricsCompared": ["minimalism_index", "accessibility_priority"]
}Ledger API — endpoint reference
This is the shape of a DRVC3-compatible ledger API. Use this as a reference when building your own D1 Worker registry, or to read from the UVRN public ledger at uvrn.org/access (read-only endpoints are always open).
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /search | None | Search registered receipts by source, action, type, date, hash prefix |
| GET | /receipts/:hash | None | Fetch a single receipt by hash |
| GET | /receipts/:hash/links | None | Linked receipts (outbound + inbound) |
| GET | /chain/:chainId | None | All receipts in a named chain |
| POST | /delta/run | Demo key | Register a locally-computed receipt on the public ledger |
@uvrn/api package gives you a Fastify-based REST server as a starting point. How you deploy and host it is entirely up to you.Package Reference
Every @uvrn/* package — install snippet, key exports, usage example, and full README inline.
Delta Engine core — deterministic multi-source comparison, canonical hashing, and receipt verification.
Install
npm install @uvrn/coreKey exports
runDeltaEnginevalidateBundleverifyReceiptcanonicalSerializehashReceiptDeltaBundle (type)DeltaReceipt (type)Usage
import { runDeltaEngine, validateBundle, verifyReceipt } from '@uvrn/core';
const bundle = {
bundleId: 'example-001',
claim: 'Sources agree within 10%.',
thresholdPct: 0.10,
dataSpecs: [
{
id: 'source-a', label: 'Source A',
sourceKind: 'report', originDocIds: ['doc-a'],
metrics: [{ key: 'count', value: 100 }],
},
{
id: 'source-b', label: 'Source B',
sourceKind: 'report', originDocIds: ['doc-b'],
metrics: [{ key: 'count', value: 105 }],
},
],
};
const receipt = runDeltaEngine(bundle);
console.log(receipt.outcome); // 'consensus' | 'indeterminate'
console.log(receipt.deltaFinal); // max delta across metrics
console.log(receipt.hash); // SHA-256 of canonical receiptTypeScript SDK — programmatic Delta Engine access in CLI, HTTP, or local mode with a fluent BundleBuilder.
Install
npm install @uvrn/sdkKey exports
DeltaEngineClientBundleBuildervalidateBundlevalidateReceiptverifyReceiptHashUsage
import { DeltaEngineClient, BundleBuilder } from '@uvrn/sdk';
// Local mode — runs in-process, no server needed
const client = new DeltaEngineClient({ mode: 'local' });
const bundle = new BundleBuilder()
.setClaim('Sources agree within 5%')
.addDataSpecQuick('src-a', 'Source A', 'report', ['doc-001'], [{ key: 'total', value: 1000 }])
.addDataSpecQuick('src-b', 'Source B', 'report', ['doc-002'], [{ key: 'total', value: 1020 }])
.setThreshold(0.05)
.build();
const receipt = await client.runEngine(bundle);
console.log(receipt.outcome); // 'consensus'
console.log(receipt.deltaFinal); // 0.02
console.log(receipt.hash);DRVC3 envelope adapter — wraps Delta Engine receipts in signed DRVC3 envelopes using EIP-191 (ethers Wallet).
Install
npm install @uvrn/core @uvrn/adapterKey exports
wrapInDRVC3validateDRVC3extractDeltaReceiptUsage
import { runDeltaEngine } from '@uvrn/core';
import { wrapInDRVC3, validateDRVC3, extractDeltaReceipt } from '@uvrn/adapter';
import { Wallet } from 'ethers';
const receipt = runDeltaEngine(bundle);
const wallet = new Wallet(process.env.SIGNER_PRIVATE_KEY);
const drvc3 = await wrapInDRVC3(receipt, wallet, {
issuer: 'my-service',
event: 'delta-reconciliation',
extensions: { source: 'https://example.com/feed' },
});
const valid = validateDRVC3(drvc3); // true
const back = extractDeltaReceipt(drvc3); // original DeltaReceiptMCP server — connect the Delta Engine to Claude Desktop or any MCP-compatible AI assistant. Published at 4.0.x (monorepo 4.0.1).
Install
npm install -g @uvrn/mcpKey exports
delta_run_engine (tool)delta_validate_bundle (tool)delta_verify_receipt (tool)schema resourcesMCP promptsUsage
// claude_desktop_config.json
{
"mcpServers": {
"delta-engine": {
"command": "npx",
"args": ["-y", "@uvrn/mcp"]
}
}
}
// Or run standalone:
npx @uvrn/mcpREST API server (Fastify) — self-host the Delta Engine over HTTP for any client to call.
Install
npm install @uvrn/apiKey exports
createServerstartServerPOST /api/v1/delta/runPOST /api/v1/delta/validatePOST /api/v1/delta/verifyGET /api/v1/healthUsage
// Start with npx:
npx @uvrn/api
// Or from your app:
import { startServer, createServer } from '@uvrn/api';
const server = await createServer();
await startServer(server);
// Then call it from any HTTP client:
// POST http://localhost:3000/api/v1/delta/run
// POST http://localhost:3000/api/v1/delta/validate
// POST http://localhost:3000/api/v1/delta/verify
// GET http://localhost:3000/api/v1/healthCLI — run the Delta Engine from your terminal. Accepts bundle files, stdin, or URLs. Outputs receipts.
Install
npm install -g @uvrn/cliKey exports
uvrn runuvrn validateuvrn verifyUsage
# Run a bundle file
uvrn run bundle.json
# Pretty-print output + save receipt
uvrn run bundle.json --output receipt.json --pretty
# Pipe from stdin
cat bundle.json | uvrn run
# Validate structure without running
uvrn validate bundle.json
# Verify receipt integrity
uvrn verify receipt.jsonTemporal decay scoring — models how a claim's confidence degrades over time using configurable decay curves.
Install
npm install @uvrn/driftKey exports
computeDriftDriftMonitorcomputeDriftFromInputDRIFT_PROFILESDriftProfile (type)DriftSnapshot (type)Usage
import { computeDrift, DriftMonitor, DRIFT_PROFILES } from '@uvrn/drift';
// One-shot scoring
const result = computeDrift(receipt, DRIFT_PROFILES.fast);
console.log(result.drift.decayed_score); // e.g. 61 (was 88, 24h ago)
console.log(result.drift.status); // 'DRIFTING'
console.log(result.drift.delta); // -27
// Continuous monitoring
const monitor = new DriftMonitor({
intervalMs: 60_000,
onThreshold: (event) => {
console.log(`${event.receipt_id}: ${event.from} → ${event.to}`);
},
});
monitor.watch(receipt, DRIFT_PROFILES.threshold_short);
monitor.start();Continuous claim monitoring loop — registers claims, fetches sources on interval, emits unsigned drift receipts.
Install
npm install @uvrn/agent @uvrn/drift @uvrn/coreKey exports
AgentConsoleEmitterFileEmitterWebhookEmitterMultiEmitterMockFarmConnectorPROFILESUsage
import { Agent, ConsoleEmitter, MockFarmConnector, PROFILES } from '@uvrn/agent';
const agent = new Agent({
farmConnector: new MockFarmConnector(),
receiptEmitter: new ConsoleEmitter(),
});
agent.register({
id: 'clm_sol_001',
label: '"Exchange X holds full reserves"',
query: 'Exchange X proof of reserves 2026',
driftConfig: PROFILES.solvency,
intervalMs: 6 * 60 * 60 * 1000, // every 6h
});
agent
.on('claim:threshold', event => console.warn('THRESHOLD', event))
.on('receipt:emitted', receipt => { /* save or wire to canon */ })
.start();Canonization layer — permanently locks a verified drift receipt with a cryptographic signature. The final step in the TVC loop.
Install
npm install @uvrn/canon @uvrn/drift @uvrn/coreKey exports
CanonNodeSignerMockSignerMockStoreR2StoreSupabaseStoreIpfsStoreMultiStoreUsage
import { Canon, NodeSigner, MockStore } from '@uvrn/canon';
const canon = new Canon({
stores: [new MockStore()],
signer: new NodeSigner(process.env.UVRN_PRIVATE_KEY),
canonizerId: 'my-app-prod-01',
autoSuggest: { enabled: true, consecutiveRuns: 3, minScore: 85 },
});
// Record agent runs — canon auto-suggests when ready
const suggestion = await canon.recordRun(claimId, snapshot);
// Human confirms → canon executes
const result = await canon.canonize({
driftReceipt: lastReceipt,
finalSnapshot: lastSnapshot,
trigger: { type: 'auto_suggest', confirmed_by: 'shawn', suggestion_id: suggestion.suggestion_id },
suggestionId: suggestion.suggestion_id,
});
console.log(result.receipt.canon_id);
console.log(result.verified); // trueTunable signal-ranking pipeline — turns a pile of agent-gathered candidates into a ranked list of the most prominent signals. Zero runtime dependencies.
Install
npm install @uvrn/algoxKey exports
rankSignalsrunPipelinedropMissingdedupByKeyweightedScorercapPerGrouptopKhostOfUsage
import { rankSignals } from '@uvrn/algox';
const candidates = [
{ label: 'oversized blazers', url: 'https://vogue.com/a', source: 'vogue.com',
prominence: 90, observedAt: '2026-05-20', signals: { mentions: 1200 } },
{ label: 'quiet luxury', url: 'https://vogue.com/b', source: 'vogue.com',
prominence: 85, observedAt: '2026-05-21', signals: { mentions: 1500 } },
// ...more from your agents
];
const result = await rankSignals(candidates, {
topK: 10, // how many to keep
capPerSource: 3, // max per source — stops one outlet dominating
maxAgeDays: 30, // drop stale signals (null disables)
weights: { prominence: 1, mentions: 0.001 }, // blend signals, your weights
});
result.ranked; // ScoredCandidate[] — highest score first, ready to render
result.dropped; // what was filtered out, each with a 'reason'Typed in-process event bus — zero-dep pub/sub so drift, canon, agent, and watch can communicate without hard-wiring.
Install
npm install @uvrn/signalKey exports
SignalBusSignalBridgeUVRNEventMapDriftThresholdEvent (type)CanonSuggestionEvent (type)WatchAlertEvent (type)Usage
import { SignalBus, SignalBridge } from '@uvrn/signal';
const bus = new SignalBus();
bus.on('drift:threshold', (event) => {
console.log(event.claimId, event.snapshot.adjustedScore);
});
bus.emit('drift:threshold', {
claimId: 'clm_sol_001',
status: 'DRIFTING',
snapshot: { adjustedScore: 67.4, freshness: 52, decayRate: 0.35, timestamp: Date.now() },
});
// Extend with your own events
interface AppEvents extends UVRNEventMap { 'custom:ping': { id: string; ok: boolean } }
const appBus = new SignalBus<AppEvents>();
appBus.emit('custom:ping', { id: 'ping-1', ok: true });Score breakdown and explanation — applies canonical V-Score weights to completeness, parity, and freshness components.
Install
npm install @uvrn/score @uvrn/coreKey exports
ScoreBreakdownSCORE_PROFILESWEIGHTSScoringProfile (type)ScoreBreakdownResult (type)Usage
import { SCORE_PROFILES, ScoreBreakdown } from '@uvrn/score';
import type { ScoringProfile } from '@uvrn/score';
const breakdown = new ScoreBreakdown(
{ completeness: 88, parity: 92, freshness: 75 },
SCORE_PROFILES.financial
);
console.log(breakdown.final); // 85.5
console.log(breakdown.explanation); // short factual explanation string
console.log(breakdown.toJSON()); // serializable breakdown object
// Custom profile
const custom: ScoringProfile = {
name: 'operations',
description: 'Operational incident claims',
completenessNote: 'How broad the source coverage is',
parityNote: 'How closely reports agree',
freshnessNote: 'How recent the operational data is',
thresholds: { stable: 78, drifting: 52 },
};Dev-time toolkit — factories, fixtures, and in-memory mocks for testing UVRN packages without external services.
Install
npm install --save-dev @uvrn/test @uvrn/coreKey exports
mockReceiptmockDriftSnapshotmockCanonReceiptmockFarmResultMockFarmConnectorMockStoreMockSignerfixturesUsage
import {
MockFarmConnector, MockSigner, MockStore,
fixtures, mockCanonReceipt, mockReceipt,
} from '@uvrn/test';
const receipt = mockReceipt({ v_score: 88, status: 'STABLE' });
const canonReceipt = mockCanonReceipt({ claim_id: 'clm_001' });
const farm = new MockFarmConnector({ latencyMs: 25 });
const result = await farm.fetch('clm_001');
const store = new MockStore();
await store.save(canonReceipt);
const signer = new MockSigner({ address: '0xABC123' });
const signed = await signer.sign(receipt);
console.log(fixtures.stableReceipt.v_score); // 92Provider-agnostic ingestion layer — defines the FarmConnector contract and includes reference connectors.
Install
npm install @uvrn/farm @uvrn/core @uvrn/agentKey exports
BaseConnectorMultiFarmConnectorRegistryFarmConnector (type)FarmResult (type)FarmSource (type)Usage
import { BaseConnector, MultiFarm } from '@uvrn/farm';
import { CoinGeckoFarm, CoinbaseFarm } from '@uvrn/farm/connectors';
import type { ClaimRegistration, FarmResult } from '@uvrn/farm';
// Implement the contract
class MyConnector extends BaseConnector {
readonly name = 'MyConnector';
async fetch(claim: ClaimRegistration): Promise<FarmResult> {
return {
claimId: claim.id,
sources: [{ url: 'https://example.com/data', title: 'My source', snippet: 'Evidence here.', publishedAt: new Date().toISOString(), credibility: 0.8 }],
fetchedAt: new Date().toISOString(),
durationMs: 10,
};
}
}
// Or use reference connectors in parallel
const farm = new MultiFarm([new CoinGeckoFarm(), new CoinbaseFarm()]);Profile-driven FarmSource normalization — standardizes ingestion output into a stable shape before aggregation.
Install
npm install @uvrn/normalize @uvrn/core @uvrn/agentKey exports
normalizeNormalizationProfilesNormalizationProfile (type)NormalizedSource (type)Usage
import { normalize, NormalizationProfiles } from '@uvrn/normalize';
import type { NormalizationProfile } from '@uvrn/normalize';
// Use a built-in profile
const result = normalize(farmResult.sources, NormalizationProfiles.financial);
// Or define your own
const customProfile: NormalizationProfile = {
name: 'custom',
description: 'My domain normalization',
transform(source) {
return { name: source.title, value: source.snippet, unit: 'text', timestamp: Date.parse(source.publishedAt ?? new Date().toISOString()), credibility: source.credibility ?? 0.5, rawData: source, normalizer: 'custom' };
},
normalizeTimestamp: (ts) => typeof ts === 'number' ? ts : Date.parse(String(ts)),
normalizePrecision: (v) => v,
};Cross-domain evidence decomposition — decomposes a multi-domain question into signal bundles, normalizes them to DataSpecs, and runs the Delta Engine. Includes claim↔evidence sufficiency grading.
Install
npm install @uvrn/lattice @uvrn/coreKey exports
runLatticeverifyClaimverifyClaimAsyncBUILT_IN_TEMPLATESMockDomainConnectorClaudeSearchConnectorUsage
import { BUILT_IN_TEMPLATES, MockDomainConnector, runLattice } from '@uvrn/lattice';
const template = BUILT_IN_TEMPLATES.find((t) => t.id === 'builder-radar');
const receipt = await runLattice(
'Should regional robotics builders enter municipal maintenance markets?',
template,
{ connector: new MockDomainConnector() }
);
console.log(receipt.vScore, receipt.deltaReceipt.outcome);Farm output → DeltaBundle builder — parses numeric evidence, ranks sources, deduplicates, and emits a bundle ready for @uvrn/core.
Install
npm install @uvrn/consensus @uvrn/core @uvrn/agentKey exports
ConsensusEngineConsensusErrorSourceWeights (type)ConsensusStats (type)Usage
import { ConsensusEngine } from '@uvrn/consensus';
const engine = new ConsensusEngine({
sources: farmResult,
weights: { credibility: 0.4, recency: 0.3, coverage: 0.3 },
});
const bundle = engine.buildBundle('claim: Exchange X holds full reserves');
const stats = engine.stats();
console.log(stats.agreementScore); // weighted consensus score
console.log(stats.summary); // verbatim-ready description
// Then: runDeltaEngine(bundle) from @uvrn/coreHead-to-head and time-series claim comparison — compare two claims or one claim across historical receipts.
Install
npm install @uvrn/compare @uvrn/core @uvrn/driftKey exports
CompareEngineCompareOptions (type)CompareResult (type)SeriesOptions (type)SeriesResult (type)Usage
import { CompareEngine } from '@uvrn/compare';
// Head-to-head: two claims, most recent receipts
const result = CompareEngine.compare([receiptA, receiptB], {
normalize: true,
includeTimeline: true,
});
console.log(result.winner); // claim with higher V-Score
console.log(result.summary); // verbatim-ready description
console.log(result.divergenceAt); // when the lead changed (if timeline provided)
// Time-series: one claim over time
const series = CompareEngine.compareSeries(receiptHistory, {
claim: 'clm_sol_001',
});
console.log(series.trend); // 'improving' | 'stable' | 'declining'Pluggable relationship measurements — the first-party agree / disagree / conflict / potential modules over the core Measurement contract.
Install
npm install @uvrn/measure @uvrn/coreKey exports
defaultRegistryMeasurementRegistryMeasurement (type)agreedisagreeconflictpotentialUsage
import { defaultRegistry } from '@uvrn/measure';
const registry = defaultRegistry();
const results = registry.runAll({
claim: 'Two sources report similar revenue.',
sources: [
{ id: 'source-a', kind: 'numeric', value: 100, label: 'Source A' },
{ id: 'source-b', kind: 'numeric', value: 104, label: 'Source B' },
],
context: {
agreeThreshold: 0.9,
divergenceThreshold: 0.1,
history: [0.55, 0.62, 0.74],
},
});Signer reputation tracking — scores signers from protocol-verifiable facts only. Storage is pluggable via IdentityStore.
Install
npm install @uvrn/identity @uvrn/coreKey exports
IdentityRegistryMockIdentityStoreIdentityStore (type)ReputationScore (type)ReputationLevel (type)Usage
import { IdentityRegistry, MockIdentityStore } from '@uvrn/identity';
const registry = new IdentityRegistry({ store: new MockIdentityStore() });
await registry.record({
signerAddress: '0xA9F1...',
receiptId: 'rec_001',
vScore: 88,
consensusVScore: 91,
canonized: true,
timestamp: Date.now(),
});
const rep = await registry.reputation('0xA9F1...');
console.log(rep.score); // 0–100
console.log(rep.level); // 'trusted' | 'established' | 'new' | 'unknown'Claim history reconstruction — query, bucket, and chart-shape drift snapshots and canon events over time.
Install
npm install @uvrn/timeline @uvrn/drift @uvrn/canonKey exports
TimelineMockTimelineStoreTimelineStore (type)TimelineResult (type)ChartData (type)Usage
import { MockTimelineStore, Timeline } from '@uvrn/timeline';
const timeline = new Timeline({ store: new MockTimelineStore() });
const history = await timeline.query('clm_sol_001', {
from: '2026-01-01',
to: '2026-03-29',
resolution: 'daily',
});
console.log(history.summary); // verbatim-ready description
console.log(history.chart.labels); // date labels aligned to resolution
console.log(history.chart.vScores); // V-Score per bucket
// chart data is recharts + chart.js compatibleThreshold-event alerts — subscribes to agent drift events and fires pluggable delivery targets on DRIFTING or CRITICAL.
Install
npm install @uvrn/watch @uvrn/agent @uvrn/driftKey exports
WatcherDeliveryTarget (type)WebhookDeliverySlackDeliveryDiscordDeliveryAlertEvent (type)Usage
import { Watcher } from '@uvrn/watch';
const watcher = new Watcher({ agent });
// In-process callback — zero external dependencies
watcher.subscribe('clm_sol_001', {
on: 'CRITICAL',
notify: { callback: (event) => console.log(event.summary) },
mode: 'once',
cooldown: 300_000, // 5 min
});
// Custom delivery target
class PagerDutyDelivery {
async deliver(event) { /* call PagerDuty API */ }
}
watcher.subscribe('clm_sol_001', {
on: 'DRIFTING',
notify: { targets: [new PagerDutyDelivery()] },
mode: 'every',
});Embeddable badge — renders live claim status as a React component or a plain-HTML UMD widget. No backend required.
Install
npm install @uvrn/embed react react-domKey exports
ConsensusBadge (React)BadgeProps (type)window.UVRN.init()window.UVRN.renderBadge()Usage
// React
import { ConsensusBadge } from '@uvrn/embed';
<ConsensusBadge
claimId="clm_sol_001"
apiUrl="https://api.uvrn.org"
theme="dark"
showScore={true}
showStatus={true}
/>
// Plain HTML (no install)
// <script src="/path/to/embed.umd.js"></script>
// <div data-uvrn-claim="clm_sol_001" data-uvrn-api="https://api.uvrn.org" data-uvrn-theme="dark"></div>
// Programmatic UMD
UVRN.renderBadge(element, { claimId: 'clm_sol_001', apiUrl: 'https://api.uvrn.org', theme: 'dark' });
UVRN.init(); // auto-init all data-uvrn-claim elementsCanonical receipt object model — JCS canonicalization, Ed25519 signing, NetworkReceipt envelope, toHumanView(), Layer D vocabulary.
Install
npm install @uvrn/receipt @uvrn/coreKey exports
wrapMasterReceiptwrapDeltaReceiptsignReceiptverifyReceiptFullgenerateReceiptKeyPairtoHumanViewcanonicalizevalidateNetworkReceiptUsage
import { generateReceiptKeyPair, wrapMasterReceipt, signReceipt, toHumanView } from '@uvrn/receipt';
import { buildMasterReceipt, runDeltaEngine } from '@uvrn/core';
const master = buildMasterReceipt({ /* base, claim, measurements, nodes */ });
const keys = generateReceiptKeyPair();
const signed = signReceipt(
wrapMasterReceipt(master, { claim: 'My claim', source: 'my-host', action: 'master.measured' }),
{ privateKey: keys.privateKey, publicKeyRef: 'my-pk-2026-v1' }
);
const view = toHumanView(signed);Durable zero-signup SQLite stores for all UVRN store interfaces + pushToNetwork() satellite sync.
Install
npm install @uvrn/store-sqliteKey exports
openUvrnDatabaseSqliteCanonStoreSqliteIdentityStoreSqliteTimelineStoreSqliteWatchStoreSqliteAgentStateStoreSqliteReceiptStoreUsage
import { openUvrnDatabase, SqliteReceiptStore } from '@uvrn/store-sqlite';
const db = openUvrnDatabase('./uvrn.db');
const store = new SqliteReceiptStore(db);
store.save(signedReceipt);
await store.pushToNetwork(workerClient);Umbrella single-install — core + receipt + measure + consensus + score + signal in one dependency.
Install
npm install @uvrn/protocolKey exports
runDeltaEnginebuildMasterReceiptwrapMasterReceiptsignReceipttoHumanViewConsensusEnginedefaultRegistryScoreBreakdownUsage
import { runDeltaEngine, buildMasterReceipt, wrapMasterReceipt, signReceipt, generateReceiptKeyPair } from '@uvrn/protocol';
const base = runDeltaEngine(bundle);
const master = buildMasterReceipt({ base, claim, measurements, nodes });
const keys = generateReceiptKeyPair();
const signed = signReceipt(wrapMasterReceipt(master, { claim, source: 'my-host', action: 'master.measured' }), { privateKey: keys.privateKey, publicKeyRef: 'my-pk' });Consensus receipt schema
TypeScript-style reference for a stored consensus receipt and related types.
interface StoredReceipt {
// Identity
receiptHash: string; // "sha256:<64-char hex>"
registryId: number; // Auto-assigned by registry
schemaVersion: string; // "drvc3-receipt-1"
// Core fields (included in hash computation)
source: string; // Emitter id
action: string; // e.g. USER_SIGNUP, DELTA_RUN
occurredAt: string; // ISO 8601
payload: object;
sdk: {
name: string;
version: string;
integrityHash: string; // use "stubbed" for dev
};
// Optional hash input fields
tags?: string[];
receiptType?: string; // genesis | parity | delta | analytics | …
narrative?: string; // max 500 chars
links?: ReceiptLink[];
chainId?: string; // max 128 chars
// Server-added (not in hash)
registeredAt: string;
uvrnSeal: UvrnSeal | null;
flags: string[]; // e.g. SDK_INTEGRITY_MISMATCH
typeConfidence?: string; // declared | inferred
}
interface ReceiptLink {
hash: string;
rel: "follows" | "caused-by" | "references" | "part-of" | "responds-to";
label?: string; // max 256 chars
}
interface UvrnSeal {
signature: string; // Base64 Ed25519
certifiedAt: string;
publicKeyRef: string;
sealVersion: "uvrn-seal-1";
}Disclaimer
UVRN sources data — it does not produce it. UVRN aggregates and cross-references information from third-party data sources. We do not own, control, or warrant the accuracy, completeness, or timeliness of any underlying data. The quality of any output is directly dependent on the quality of the sources available at the time of the request.
A ∆-Score is not a guarantee of truth. The ∆-Score and consensus outcome reflect the degree of agreement between sources at a specific point in time — nothing more. A high score means sources agreed; it does not mean the claim is objectively correct, complete, or will remain accurate in the future.
You are always the final decision-maker. UVRN is a verification tool, not an authority. Any conclusions, decisions, or actions taken based on UVRN outputs are solely the responsibility of the individual user. We strongly encourage critical thinking and independent verification before acting on any result.
Not professional advice. Nothing produced by UVRN — including receipts, scores, or consensus outcomes — constitutes legal, financial, medical, scientific, or any other form of professional advice. Do not substitute UVRN outputs for qualified professional judgment.
Data freshness varies. Sources change, disappear, or update without notice. A receipt is a snapshot — it reflects what was true of its sources at the moment it was issued. UVRN makes no commitment that results will remain valid or consistent over time.
AI and LLM use. When UVRN is accessed via MCP or an AI agent, the output is only as reliable as the claim that was submitted. Vague, misleading, or poorly formed claims will produce unreliable results. UVRN does not validate the intent or quality of the input — that responsibility lies with the user or the system submitting the claim.
Mission: to trust the answer the first time. Every time — but only when that trust is earned through transparent, verifiable, and honestly sourced data. Use UVRN as one tool among many, and always bring your own judgment.