---
title: Introduction
description: Webhook signing, verification, and delivery-retry policy for Node.js — deterministic, dependency-free, and the single source of truth for the Sigil signature format.
url: https://pr-1-10d18e06d3bf.thally.app/
---

# Introduction

Webhook signing, verification, and delivery-retry policy for Node.js — deterministic, dependency-free, and the single source of truth for the Sigil signature format.

## What Sigil does

`@sigil/core` defines the wire format, timing rules, and retry schedule that
every Sigil sender, receiver, and the CLI share. Import one library instead of
reimplementing HMAC-SHA256 header signing, tolerance-window verification, and
exponential backoff separately.

#### [Sign a webhook](/signing)

    Produce a `Sigil-Signature` header that binds the timestamp into the signed
    material so it cannot be tampered with or replayed.

#### [Verify a webhook](/verification)

    Check the header, enforce a tolerance window, and compare digests in
    constant time — or use `constructEvent` to verify and decode in one call.

#### [Rotate secrets](/key-rotation)

    Change a webhook secret without dropping events, using multi-signature
    headers and multi-secret verification.

#### [Retry policy](/retry-policy)

    Query the built-in exponential-backoff schedule so senders, dashboards,
    and alerting all quote the same numbers.

## Design principles

- **No dependencies.** The package uses only `node:crypto`.
- **No network, no implicit clock.** Every function that needs a timestamp
  accepts one as an option, so tests are deterministic and schedulers can
  persist retry times exactly.
- **Single source of truth.** Constants like the header name, signature
  version, tolerance window, and retry schedule are exported rather than
  duplicated across services.

> **Note:**
  `@sigil/core` is an ES module (`"type": "module"`) and requires
  Node.js 20+.