Architecture — how zero-egress actually works.

Burein has no backend. No telemetry. No remote config. This page walks through what that means in practice, and why it isn't just marketing.

HOST APPLICATION
BUREIN SDK
Collectors1,000+ signals
Risk Enginerules + on-device models
Packagersigned BureinReport
↓ returned to your code via Burein.collect() — attach to your own API (header, body, any channel your stack already runs)
❌ NO network call from Burein — ever
Six invariants

The properties we build the SDK around.

1. Zero egress

No collector or engine module makes a network call. CI enforces this with static analysis on every build. Customers can verify by running a packet capture against any production build — there's nothing to see.

2. No remote configuration

All rules, thresholds, and ML models ship inside the SDK binary. There is no channel to swap our logic at runtime. Updates require a version bump in your build pipeline.

3. No PII by default

Class-0 and Class-1 signals (computed, derived, device characteristics) are on. Class-2 (quasi-identifiers like ad-ID, WebRTC IPs) require host opt-in. Class-3 (IMEI, MSISDN) require both opt-in and a matching platform permission.

4. Deterministic output

The same device in the same state produces the same visitor_id and the same signal hashes. This makes every report testable, replayable, and auditable.

5. Signed output

Every report is canonicalized (RFC 8785 JCS) and signed with your Ed25519 key, embedded at build time via your toolchain. Your server holds the public key. An in-app attacker that hooks the host code can't forge a report the SDK didn't produce.

6. Composable

Pick a signal set per call: full, balanced, minimal. Override severities. Bring your own rules. Disable any collector. Tune the engine without forking.

Supply chain

Verifiable from source to runtime.

Reproducible builds

Every release builds bit-for-bit identical across machines. Customers can independently rebuild and diff against the published artifact.

SLSA Level 3 provenance

Every artifact carries provenance attesting the build environment, source revision, and inputs.

Signed releases (cosign + sigstore)

Releases are signed; verification keys are published; revocation is possible.

CycloneDX SBOM

Full SBOM with every release. No surprise dependencies; zero non-vendor native dependencies on mobile is a target.

The BureinReport

One artifact. Two consumers.

The BureinReport is the single thing the SDK hands back. The host invokes a public method — Burein.collect() on web, Buren.collect { … } on iOS, buren.collect() on Android — and receives a deterministic, signed, schema-versioned, JSON-serializable report containing every signal you asked for, every threat that fired, a contributing-evidence list per threat, a tunable risk score, and a decision hint.

You attach it to your existing API — typically as an X-Burein-Report HTTP header, or as a JSON field on the request body, or via any other channel your stack already uses. Burein never picks the transport. The signed report flows over your APIs, on your wire, terminating at the backend you already verify against.

Two consumers, both yours: your client (to make immediate UX decisions like step-up auth), and your server (to verify the signature and feed your risk model). Burein is in neither.

Browse all signals →
BureinReport.json
{
  "schema_version": "1.0.0",
  "sdk": { "platform": "web", "version": "1.0.0" },
  "collected_at": "2026-05-13T10:14:22Z",
  "device": {
    "visitor_id": "v1_b3c1...e7",
    "confidence": 0.97
  },
  "signals": { ...1042 entries },
  "threats": [
    { "id": "FRIDA_HOOK_DETECTED",
      "severity": "critical",
      "confidence": 0.98,
      "evidence": [...] }
  ],
  "risk": { "score": 87, "band": "high" },
  "signature": {
    "algorithm": "Ed25519",
    "key_id": "host-app-2026-Q2",
    "value": "..."
  }
}

Want to go deeper?

Talk to us about your fraud and integrity goals — we'll show you the signals that matter for your stack.