ruzor 0.1.2

Ruzor, a 1:1-compatible Rust port of the Pyzor UDP client and server
Documentation
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Protocol And Compatibility - Ruzor Documentation</title>
  <meta name="description" content="Ruzor compatibility notes for the Pyzor digest algorithm, UDP request headers, response fields, packet limits, and Pyzor 1.1.2 behavior.">
  <meta name="author" content="Bonjour Services">
  <meta name="keywords" content="Ruzor, Pyzor, Rust, spam detection, UDP, email filtering, GPL-3.0, public.ruzor.org, public.pyzor.org">
  <meta name="robots" content="index, follow">
  <meta name="theme-color" content="#D4FF00">
  <link rel="canonical" href="https://docs.ruzor.org/protocol.html">
  <meta property="og:type" content="article">
  <meta property="og:site_name" content="Ruzor Documentation">
  <meta property="og:title" content="Protocol And Compatibility - Ruzor Documentation">
  <meta property="og:description" content="Ruzor compatibility notes for the Pyzor digest algorithm, UDP request headers, response fields, packet limits, and Pyzor 1.1.2 behavior.">
  <meta property="og:url" content="https://docs.ruzor.org/protocol.html">
  <meta property="article:section" content="Protocol">
  <meta property="article:modified_time" content="2026-05-28T00:00:00+00:00">
  <meta name="twitter:card" content="summary">
  <meta name="twitter:title" content="Protocol And Compatibility - Ruzor Documentation">
  <meta name="twitter:description" content="Ruzor compatibility notes for the Pyzor digest algorithm, UDP request headers, response fields, packet limits, and Pyzor 1.1.2 behavior.">
  <script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "Protocol And Compatibility - Ruzor Documentation",
  "description": "Ruzor compatibility notes for the Pyzor digest algorithm, UDP request headers, response fields, packet limits, and Pyzor 1.1.2 behavior.",
  "url": "https://docs.ruzor.org/protocol.html",
  "inLanguage": "en",
  "dateModified": "2026-05-28",
  "author": {
    "@type": "Organization",
    "name": "Bonjour Services",
    "email": "contact@bonjour.email",
    "url": "https://github.com/bonjourservices/ruzor"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Bonjour Services",
    "email": "contact@bonjour.email"
  },
  "isPartOf": {
    "@type": "TechArticle",
    "name": "Ruzor Documentation",
    "url": "https://docs.ruzor.org/index.html"
  },
  "about": [
    "Ruzor",
    "Pyzor-compatible spam detection",
    "Rust command-line utilities",
    "UDP email digest checking"
  ],
  "mentions": [
    {
      "@type": "SoftwareSourceCode",
      "name": "Ruzor",
      "codeRepository": "https://github.com/bonjourservices/ruzor",
      "programmingLanguage": "Rust"
    },
    {
      "@type": "SoftwareApplication",
      "name": "ruzor crate",
      "url": "https://crates.io/crates/ruzor",
      "applicationCategory": "DeveloperApplication"
    },
    {
      "@type": "CreativeWork",
      "name": "Upstream Pyzor documentation",
      "url": "https://www.pyzor.org/en/latest/"
    }
  ],
  "license": "https://www.gnu.org/licenses/gpl-3.0.en.html",
  "codeRepository": "https://github.com/bonjourservices/ruzor"
}
  </script>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header class="topbar">
    <a class="brand" href="index.html" aria-label="Ruzor documentation home">
      <span class="brand-mark">RZ</span>
      <span>Ruzor Docs</span>
    </a>
    <nav class="topnav" aria-label="Primary documentation navigation">
      <a class="nav-link " href="index.html">Overview</a>
<a class="nav-link " href="getting-started.html">Install</a>
<a class="nav-link " href="client.html">Client</a>
<a class="nav-link " href="server.html">Server</a>
<a class="nav-link " href="configuration.html">Configuration</a>
<a class="nav-link is-active" href="protocol.html">Protocol</a>
<a class="nav-link " href="integrations.html">Integrations</a>
<a class="nav-link " href="license.html">License</a>
    </nav>
  </header>

  <main>
    <section class="hero-band">
      <div class="hero-grid">
        <p class="eyebrow">Digest and UDP behavior</p>
        <h1>Protocol And Compatibility</h1>
        <p class="hero-copy">Rust-native Pyzor-compatible client and server documentation.</p>
      </div>
    </section>

    <div class="doc-layout">
      <aside class="side-rail" aria-label="Documentation links">
        <span class="side-title">Documentation</span>
        <a class="nav-link " href="index.html">Overview</a>
<a class="nav-link " href="getting-started.html">Install</a>
<a class="nav-link " href="client.html">Client</a>
<a class="nav-link " href="server.html">Server</a>
<a class="nav-link " href="configuration.html">Configuration</a>
<a class="nav-link is-active" href="protocol.html">Protocol</a>
<a class="nav-link " href="integrations.html">Integrations</a>
<a class="nav-link " href="license.html">License</a>
      </aside>
      <article class="doc-content">
        
<section class="section">
  <h2>Compatibility Target</h2>
  <p>Ruzor targets Pyzor 1.1.2 observable behavior for client and server commands. It preserves the digest algorithm, datagram shape, thread ids, request signing, ACL behavior, local whitelist behavior, and supported backend record formats.</p>
</section>

<section class="section">
  <h2>Digest Flow</h2>
  <p>The Pyzor digest is designed to identify message content while ignoring volatile delivery details. Ruzor follows the upstream approach: discard headers, normalize selected body content, remove long noise tokens, strip email addresses, URLs and HTML-like tags, collapse whitespace, then hash the normalized payload.</p>
  <pre><code>ruzor predigest &lt; message.eml
ruzor digest &lt; message.eml</code></pre>
</section>

<section class="section">
  <h2>UDP Request Shape</h2>
  <p>Requests and responses use RFC-822-style headers over UDP. Ruzor preserves <code>PV: 2.1</code>, the 8192-byte packet limit, operation headers, digest headers, and account signature headers.</p>
  <pre><code>Op: check
Op-Digest: 7421216f915a87e02da034cc483f5c876e1a1338
Thread: 1234
PV: 2.1
User: anonymous

</code></pre>
</section>

<section class="section">
  <h2>Responses</h2>
  <table>
    <thead><tr><th>Field</th><th>Meaning</th></tr></thead>
    <tbody>
      <tr><td><code>Code</code></td><td>Server status code, commonly <code>200</code> for OK.</td></tr>
      <tr><td><code>Diag</code></td><td>Diagnostic text, commonly <code>OK</code>.</td></tr>
      <tr><td><code>Count</code></td><td>Number of spam reports for the digest.</td></tr>
      <tr><td><code>WL-Count</code></td><td>Number of whitelist reports for the digest.</td></tr>
      <tr><td><code>Entered</code> and <code>Updated</code></td><td>Record timestamps for report state.</td></tr>
      <tr><td><code>WL-Entered</code> and <code>WL-Updated</code></td><td>Record timestamps for whitelist state.</td></tr>
    </tbody>
  </table>
</section>

<section class="section">
  <h2>Not Shipped</h2>
  <p>Ruzor covers the client and server package surface. It does not ship the Python-only <code>pyzor-migrate</code> helper.</p>
</section>

      </article>
    </div>
  </main>

  
<footer class="site-footer">
  <div>
    <strong>Ruzor documentation</strong>
    <span>GPL-3.0-only. Maintained by Bonjour Services.</span>
  </div>
  <div class="footer-links">
    <a href="https://github.com/bonjourservices/ruzor">GitHub</a>
    <a href="https://crates.io/crates/ruzor">crates.io</a>
    <a href="https://www.pyzor.org/en/latest/">Pyzor docs</a>
    <a href="mailto:contact@bonjour.email">contact@bonjour.email</a>
  </div>
</footer>

</body>
</html>