svix/svix-webhooks
The open source and enterprise-ready webhooks service π¦
Healthy across the board
Permissive license, no critical CVEs, actively maintained β safe to depend on.
Has a license, tests, and CI β clean foundation to fork and modify.
Documented and popular β useful reference codebase to read through.
No critical CVEs, sane security posture β runnable as-is.
- βLast commit today
- β10 active contributors
- βDistributed ownership (top contributor 26% of recent commits)
- βMIT licensed
- βCI configured
- βTests present
Computed from maintenance signals β commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Healthy" badge
Paste into your README β live-updates from the latest cached analysis.
[](https://repopilot.app/r/svix/svix-webhooks)Paste at the top of your README.md β renders inline like a shields.io badge.
βΈPreview social card
This card auto-renders when someone shares https://repopilot.app/r/svix/svix-webhooks on X, Slack, or LinkedIn.
Ask AI about svix/svix-webhooks
Grounded in the actual source code. Pick a starter question or write your own.
Onboarding doc
Onboarding: svix/svix-webhooks
Generated by RepoPilot Β· 2026-06-24 Β· Source
π―Verdict
GO β Healthy across the board
- Last commit today
- 10 active contributors
- Distributed ownership (top contributor 26% of recent commits)
- MIT licensed
- CI configured
- Tests present
<sub>Computed from maintenance signals β commit recency, contributor breadth, bus factor, license, CI, tests</sub>
β‘TL;DR
Svix is an enterprise-grade webhook delivery service written primarily in Rust that abstracts away the complexity of sending, retrying, securing, and monitoring webhooks at scale. Developers call one API endpoint, and Svix handles deliverability guarantees, exponential backoff retries, payload signing (HMAC), and detailed event loggingβsimilar to how Twilio abstracts SMS but for webhooks. Monorepo structure: svix-bridge/ contains the core Rust webhook service with OpenTelemetry observability; svix-bridge-types/ defines shared types; svix-bridge-plugin-queue/ and svix-bridge-plugin-kafka/ are pluggable queue backends. Separate language-specific SDKs (python/, java/, csharp/, etc.) are code-generated or hand-written, with release pipelines per language (.github/workflows/*-release.yml). The server component (likely in server/ based on workflows) runs the central webhook orchestration, while CLI tooling (cli-docker-release.yml) provides operational interfaces.
π₯Who it's for
Backend engineers and platform teams building SaaS products who need reliable webhook delivery without managing their own retry logic, security, and monitoring infrastructure. SDK users span 8+ languages (Python, TypeScript, Go, Java, C#, Rust, Ruby, PHP, Kotlin) to integrate Svix into their applications.
π±Maturity & risk
Production-ready and actively maintained. The codebase is substantial (1.8M LOC in Rust alone across the monorepo) with extensive CI/CD pipelines (.github/workflows/ contains 20+ automated checks including security scans, linting, and multi-language releases). Multiple SDK versions published to package registries (PyPI, Crates.io, NPM, Maven Central, NuGet, Packagist) indicate stable, versioned releases. Version pinned at 1.93.0 in Cargo workspace suggests regular releases.
Low-to-moderate risk for a webhook service. The monorepo structure spans 8+ languages which increases maintenance surface areaβany breaking change requires coordinated releases across server, CLI, bridge, and all SDKs (see mega-releaser.yml). Dependency management is centralized via workspace.dependencies in Cargo.toml but external dependencies are substantial (opentelemetry, tokio, serde, thiserror, tracing). No visible single-maintainer risk given the organizational backing (Svix company), but the multi-language complexity means regressions in one SDK can silently affect users of others.
Active areas of work
Active development across multiple dimensions: language SDK releases are automated (mega-releaser.yml coordinates them), security scanning is ongoing (rust-security.yml, server-security.yml, bridge-security.yml), and container image management is automated (server-docker-image.yml, cli-docker-release.yml). The presence of codegen.yml suggests API spec or SDK generation is part of the workflow. OpenTelemetry integration is a focus area (version 0.29.0 pinned), indicating observability investment.
πGet running
git clone https://github.com/svix/svix-webhooks.git
cd svix-webhooks
# For Rust components (primary server/bridge):
cargo build
cargo test
# For a specific language SDK, e.g., Python:
cd python
pip install -e .
# For CLI (Rust-based):
cargo build --bin svix
Daily commands:
For the Rust server/bridge component: cargo build && cargo run --bin svix-bridge. For Python SDK testing: cd python && pip install -e . && pytest. For CLI: cargo build --bin svix && ./target/debug/svix --help. Actual server startup likely requires environment configuration (database connection, queue backend, auth tokens)βcheck server-ci.yml for CI runtime setup hints.
πΊοΈMap of the codebase
bridge/Cargo.tomlβ Workspace root for the Svix Bridge project; defines version, members, and shared Rust lints that all contributors must understandbridge/svix-bridge-plugin-queue/src/lib.rsβ Core queue plugin abstraction serving as the foundation for all message queue integrations (RabbitMQ, SQS, Redis, GCP Pub/Sub)bridge/svix-bridge-plugin-kafka/src/lib.rsβ Kafka plugin entry point; demonstrates the plugin architecture pattern used throughout the bridge systembridge/svix-bridge-types/srcβ Shared type definitions and interfaces for all bridge components; critical for inter-plugin communication contracts.github/workflows/server-ci.ymlβ Main CI pipeline for the Svix server; every contributor must understand the automated testing and validation gatesREADME.mdβ Project overview and scope; essential context on what Svix webhooks service does and its position in the ecosystem
π οΈHow to make changes
Add a new message queue backend
- Create a new module in bridge/svix-bridge-plugin-queue/src/ (e.g., src/newqueue/mod.rs) (
bridge/svix-bridge-plugin-queue/src/lib.rs) - Define Config, Input (consumer), and Output (producer) structs implementing traits from svix-bridge-types (
bridge/svix-bridge-plugin-queue/src/config.rs) - Register the new backend in the plugin's lib.rs with conditional compilation or feature gates (
bridge/svix-bridge-plugin-queue/src/lib.rs) - Add integration test in bridge/svix-bridge-plugin-queue/tests/it/ (e.g., newqueue_consumer.rs) (
bridge/svix-bridge-plugin-queue/tests/it/main.rs) - Update Cargo.toml with optional dependency and feature flag for the new backend (
bridge/svix-bridge-plugin-queue/Cargo.toml)
Add a new plugin type (beyond queues/Kafka)
- Create new workspace member directory bridge/svix-bridge-plugin-mytype/ with its own Cargo.toml (
bridge/Cargo.toml) - Define your plugin's Config, Input/Output types implementing core traits from svix-bridge-types/src (
bridge/svix-bridge-types/src) - Implement error handling following the pattern in bridge/svix-bridge-plugin-kafka/src/error.rs (
bridge/svix-bridge-plugin-kafka/src/error.rs) - Add integration tests in bridge/svix-bridge-plugin-mytype/tests/it/ (
bridge/svix-bridge-plugin-kafka/tests/it/main.rs) - Create CI workflow at .github/workflows/ following bridge-ci.yml and bridge-release.yml patterns (
.github/workflows/bridge-ci.yml)
Release a new bridge version
- Update version in bridge/Cargo.toml (workspace.package.version) (
bridge/Cargo.toml) - Update .version file at repository root to match (
.version) - Create git tag matching the version (e.g., v1.93.0) (
.github/workflows/bridge-release.yml) - Push tag to main branch; bridge-release.yml workflow automatically publishes to crates.io and Docker Hub (
.github/workflows/bridge-release.yml)
π§Why these technologies
- Rust (Tokio async runtime) β High performance, memory safety, and concurrency for handling high-volume webhook traffic without garbage collection pauses
- Plugin architecture (trait-based) β Enables extensible integrations with multiple message queues and event sources without monolithic coupling
- Docker containerization β Simplifies deployment and enables the bridge to run alongside Svix server in cloud and on-premise environments
- Multi-crate workspace (Cargo) β Allows shared types (svix-bridge-types) and independent plugin compilation/release cycles
βοΈTrade-offs already made
-
Trait-based plugin system over dynamic loading
- Why: Compile-time safety and no runtime reflection overhead
- Consequence: New queue backends require code changes and recompilation; cannot load plugins at runtime without reimplementing the system
-
Feature gates for optional queue backends
- Why: Reduce binary size and dependency bloat for users who only need specific queues
- Consequence: More complex Cargo.toml and conditional compilation; developers must remember to enable features in tests
-
Integration tests over unit tests for queue backends
- Why: Real queue behavior (connection pooling, retry logic, ordering) cannot be reliably mocked
- Consequence: Tests require external services (RabbitMQ, SQS, Redis, Kafka) running locally; slower CI pipelines
-
Single workspace with all plugins vs. separate repositories
- Why: Unified versioning and shared type contracts; easier to enforce breaking changes across plugins
- Consequence: Repository is larger; changes to svix-bridge-types may trigger releases of all plugins
π«Non-goals (don't propose these)
- Does not implement webhook storage or persistence; relies on Svix server for durability
- Not a message broker; only consumes and produces to external queues (RabbitMQ, SQS, Kafka, etc.)
- Does not handle webhook signature validation or authentication; Svix server owns that
- Not a real-time UI or dashboard; bridge is a headless integration service
πͺ€Traps & gotchas
Multi-language coordination: A single logical change (e.g., new webhook field) requires updates to server, svix-bridge-types, AND all 8 language SDKs. The mega-releaser.yml workflow expects consistent versioning (workspace.package.version = "1.93.0")βbumping this in one place should cascade. Docker hub publishing: svix/svix-server publishes automatically; ensure docker credentials are configured in GitHub secrets. Workspace resolver 2: Cargo workspace requires resolver = "2" to compile (see comment in Cargo.toml about wgpu-hal)βdon't downgrade to resolver 1. Plugin system: svix-bridge-plugin-kafka and svix-bridge-plugin-queue define pluggable backends; new storage layers require implementing the trait contract in bridge-types. Linting: Pre-commit hooks (.pre-commit-config.yaml) run formatters and linters; failing these will block commits locally and in CI.
ποΈArchitecture
π‘Concepts to learn
- Exponential Backoff Retry Strategy β Svix's core feature is handling delivery retries; exponential backoff ensures failed webhooks don't overwhelm downstream services while respecting delivery deadlines
- HMAC Payload Signing β Webhooks are sent to user-controlled endpoints; HMAC-SHA256 signing prevents tampering and proves messages came from Svix, following the standard-webhooks spec
- Pluggable Queue Backends β svix-bridge-plugin-queue and svix-bridge-plugin-kafka show Svix's architecture allows swapping the underlying message queue (in-memory, Kafka, RabbitMQ) without changing core logic
- Distributed Tracing (OpenTelemetry/OTLP) β A webhook delivery service must trace requests across retries, queue processing, and delivery attempts; OpenTelemetry integration (0.29.0 workspace dependency) enables observability in production
- Workspace Resolver 2 (Cargo) β The monorepo uses Rust workspace resolver v2 to handle complex dependency graphs across bridge, plugins, and multiple binaries; this is a non-obvious Cargo configuration detail
- Code Generation for Multi-Language SDKs β codegen.yml suggests SDKs are generated from a canonical schema (likely OpenAPI/Swagger); changes to API contracts flow automatically to all 8 language SDKs
- Event Sourcing / Audit Logging β Webhook services must maintain an immutable event log for compliance and debugging; Svix's detailed event logging (mentioned in README) likely uses event sourcing patterns
πRelated repos
standard-webhooks/standard-webhooksβ Defines the webhook signing standard (HMAC-based) that Svix implements; referenced in payload security validationinngest/inngestβ Alternative workflow/event orchestration service; competes in the reliable event delivery space for background jobs and webhookstemporal-io/temporalβ Distributed workflow engine; solves similar retry/durability problems but for internal workflows rather than external webhookshookdeck/hookdeck-open-sourceβ Open-source webhook gateway/proxy; complements Svix by providing on-prem webhook ingestion and routingopen-telemetry/opentelemetry-rustβ The OpenTelemetry Rust SDK that Svix heavily depends on (0.29.0); understanding this library is critical for observability customization
πͺPR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add CI workflow for Bridge plugin validation and compatibility testing
The repo has multiple bridge plugins (kafka, queue) but no dedicated CI workflow to validate plugin compilation, integration tests, or compatibility across the workspace. Currently, plugins rely on general rust-ci.yml. A dedicated workflow would catch plugin-specific regressions early and ensure plugin authors follow the pattern established in svix-bridge-types.
- [ ] Create .github/workflows/bridge-plugins-ci.yml that runs tests for all members in bridge/svix-bridge-plugin-*/ directories
- [ ] Add integration tests in bridge/svix-bridge-plugin-kafka/tests/ and bridge/svix-bridge-plugin-queue/tests/ (currently missing or minimal)
- [ ] Validate that each plugin implements the expected trait interfaces from svix-bridge-types
- [ ] Add step to verify workspace dependency resolution with 'cargo build -p svix-bridge-plugin-kafka' and '-p svix-bridge-plugin-queue'
Add lint configuration and CI workflow for Rust bridge code (clippy, format checks)
While rust-lint.yml exists for the main Rust server, the bridge Cargo workspace has its own .rustfmt.toml and .clippy.toml (in bridge/.clippy.toml and bridge/.rustfmt.toml) but no dedicated bridge-lint.yml workflow. This creates inconsistent lint enforcement between server and bridge codebases and risks clippy/format violations in bridge PRs.
- [ ] Create .github/workflows/bridge-lint.yml that runs 'cargo fmt --check' and 'cargo clippy --all-targets' in the bridge/ directory
- [ ] Ensure the workflow reads the workspace-level lints from bridge/Cargo.toml [workspace.lints] section (currently defined but not actively enforced in CI)
- [ ] Add a check for bridge/.rustfmt.toml and bridge/.clippy.toml to validate they align with root linting rules
- [ ] Include deny checks for bridge dependencies (similar to server security workflow pattern)
Create bridge/PLUGIN_DEVELOPMENT.md with plugin lifecycle and testing patterns
The repo has bridge/README.md but lacks specific guidance for developing new plugins. With svix-bridge-types as a shared interface and existing plugins (kafka, queue), new contributors need clear documentation on plugin trait implementation, testing patterns, and workspace integration. Currently this institutional knowledge is only in code.
- [ ] Create bridge/PLUGIN_DEVELOPMENT.md documenting the plugin trait interface from svix-bridge-types/src/lib.rs
- [ ] Add a step-by-step example showing how to create a minimal new plugin (e.g., svix-bridge-plugin-example)
- [ ] Document required test patterns: unit tests in plugin crate, integration tests with svix-bridge (reference bridge/run-tests.sh and bridge/run-idle-test.sh)
- [ ] Include workspace Cargo.toml member registration requirements and version management via [workspace.package]
- [ ] Add section on how to verify plugin builds with 'cargo build -p svix-bridge-plugin-<name>' and validate it integrates with main bridge binary
πΏGood first issues
- Add integration tests for C# SDK webhook signing verification (csharp-release.yml exists but no csharp/ tests visible in workflows; audit test coverage gap and add HMAC signature validation tests similar to Python's test suite)
- Document OpenTelemetry metrics export in OpenTelemetry.md and add example Grafana dashboard config (OpenTelemetry.md exists but is sparse; add concrete examples of metrics exported by svix-bridge and how to visualize them)
- Add missing
--helpoutput documentation to the CLI binary and generate man pages in CI (cli-docker-release.yml builds the CLI but no man page generation visible; contribute to CLI usability)
βTop contributors
Click to expand
Top contributors
- @svix-jplatte β 26 commits
- @svix-jbrown β 23 commits
- @tasn β 19 commits
- @svix-pluiz β 12 commits
- @dependabot[bot] β 8 commits
πRecent commits
Click to expand
Recent commits
78fe28fβ ruby: Remove post-install message (#2318) (svix-jplatte)81bf9e9β Release v1.93.0 (#2315) (svix-jplatte)563e068β server: Bump Cargo.lock (#2316) (svix-jplatte)3705758β js: npm audit fix (#2314) (svix-jplatte)e207918β Java: Add a Java 8 compilation test to CI. (#2312) (tasn)37bfed9β C#: implement trusted publishing. (#2313) (tasn)9e92075β Java: fix compatibilty with Java 1.8. (#2311) (tasn)c36ae2aβ build(deps-dev): bump ip-address from 10.1.0 to 10.2.0 in /javascript (#2310) (dependabot[bot])b3bea29β build(deps): bump openssl from 0.10.78 to 0.10.79 in /bridge (#2309) (dependabot[bot])601c2b5β deps: update webhook_http_client to use hickory 0.26 (#2303) (svix-jbrown)
πSecurity observations
The Svix webhooks codebase demonstrates a strong security posture with multiple security workflows (security.yml files for rust, server, bridge), active use of linting and code quality tools, and a clear security reporting policy. However, there are areas for improvement: (1) Automated dependency vulnerability scanning should be formally integrated into CI/CD, (2) Security headers and middleware configuration need explicit visibility, (3) Input validation patterns for webhook handling should be documented and enforced, (4) Some clippy lints should be elevated from 'warn' to 'deny', and (5) SBOM generation would improve supply chain security transparency. The project shows good security practices with workspace linting, pre-commit hooks, and multiple security workflows, but would benefit from stricter enforcement of certain rules and more explicit documentation of security-critical components.
- Medium Β· Outdated Dependencies with Known Vulnerabilities β
Cargo.toml (workspace dependencies). The workspace dependencies include versions that may have known security vulnerabilities. Specifically, tokio 1.38.0, serde 1.0.203, and other dependencies should be regularly audited. The project should implement automated dependency scanning. Fix: Run 'cargo audit' regularly in CI/CD pipeline. Enable dependabot or similar automated dependency update tools. Keep dependencies up to date with latest security patches. - Medium Β· Missing Security Headers Configuration β
Server configuration (not visible in provided structure). No visible security headers configuration (CSP, HSTS, X-Frame-Options, etc.) in the codebase structure. The server implementation should enforce security headers. Fix: Implement security headers middleware in the server. Configure HSTS, CSP, X-Content-Type-Options, X-Frame-Options, and other relevant security headers. - Medium Β· Insufficient Input Validation Framework Visibility β
Bridge and server components (webhook handling). While the codebase includes serde for serialization, there's limited visibility into input validation mechanisms for webhook payloads, which could be a high-risk area for injection attacks. Fix: Implement comprehensive input validation for all webhook payload data. Use schema validation and sanitization. Consider implementing rate limiting and payload size limits. - Low Β· Debug Macro Usage in Production Code β
.github/linters configuration / Cargo.toml. Workspace lints include 'dbg_macro = warn' which is good, but this should be enforced as 'deny' to prevent accidental debug output in production releases. Fix: Change dbg_macro lint level from 'warn' to 'deny' in workspace.lints.clippy to prevent debug macros in production code. - Low Β· Missing SBOM and Dependency Transparency β
.github/workflows/. No visible Software Bill of Materials (SBOM) generation or dependency transparency documentation in the CI/CD workflows for security auditing. Fix: Implement SBOM generation using tools like 'cargo-sbom' or 'cyclonedx'. Include SBOM in release artifacts and security documentation. - Low Β· Pre-commit Configuration Present but Validation Unclear β
.pre-commit-config.yaml. The .pre-commit-config.yaml exists but its content is not visible. Pre-commit hooks should include security scanning. Fix: Ensure pre-commit hooks include: gitleaks (already configured in .gitleaks.toml), cargo audit, rustfmt, and clippy. Verify all hooks are configured and enforced.
LLM-derived; treat as a starting point, not a security audit.
πWhere to read next
- Open issues β current backlog
- Recent PRs β what's actively shipping
- Source on GitHub
π€Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale β STOP and ask the user to regenerate it before proceeding. - Treat the AI Β· unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/svix/svix-webhooks shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything β but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
β Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live svix/svix-webhooks
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale β regenerate it at
repopilot.app/r/svix/svix-webhooks.
What it runs against: a local clone of svix/svix-webhooks β the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in svix/svix-webhooks | Confirms the artifact applies here, not a fork |
| 2 | License is still MIT | Catches relicense before you depend on it |
| 3 | Default branch main exists | Catches branch renames |
| 4 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 5 | Last commit β€ 30 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of svix/svix-webhooks. If you don't
# have one yet, run these first:
#
# git clone https://github.com/svix/svix-webhooks.git
# cd svix-webhooks
#
# Then paste this script. Every check is read-only β no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of svix/svix-webhooks and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "svix/svix-webhooks(\\.git)?\\b" \\
&& ok "origin remote is svix/svix-webhooks" \\
|| miss "origin remote is not svix/svix-webhooks (artifact may be from a fork)"
# 2. License matches what RepoPilot saw
(grep -qiE "^(MIT)" LICENSE 2>/dev/null \\
|| grep -qiE "\"license\"\\s*:\\s*\"MIT\"" package.json 2>/dev/null) \\
&& ok "license is MIT" \\
|| miss "license drift β was MIT at generation time"
# 3. Default branch
git rev-parse --verify main >/dev/null 2>&1 \\
&& ok "default branch main exists" \\
|| miss "default branch main no longer exists"
# 4. Critical files exist
test -f "bridge/Cargo.toml" \\
&& ok "bridge/Cargo.toml" \\
|| miss "missing critical file: bridge/Cargo.toml"
test -f "bridge/svix-bridge-plugin-queue/src/lib.rs" \\
&& ok "bridge/svix-bridge-plugin-queue/src/lib.rs" \\
|| miss "missing critical file: bridge/svix-bridge-plugin-queue/src/lib.rs"
test -f "bridge/svix-bridge-plugin-kafka/src/lib.rs" \\
&& ok "bridge/svix-bridge-plugin-kafka/src/lib.rs" \\
|| miss "missing critical file: bridge/svix-bridge-plugin-kafka/src/lib.rs"
test -f "bridge/svix-bridge-types/src" \\
&& ok "bridge/svix-bridge-types/src" \\
|| miss "missing critical file: bridge/svix-bridge-types/src"
test -f ".github/workflows/server-ci.yml" \\
&& ok ".github/workflows/server-ci.yml" \\
|| miss "missing critical file: .github/workflows/server-ci.yml"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 30 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~0d)"
else
miss "last commit was $days_since_last days ago β artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) β safe to trust"
else
echo "artifact has $fail stale claim(s) β regenerate at https://repopilot.app/r/svix/svix-webhooks"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
Generated by RepoPilot. Verdict based on maintenance signals β see the live page for receipts. Re-run on a new commit to refresh.
Embed this chat in your README β
Drop this iframe anywhere β the widget runs against the same live analysis cache as the main app.
<iframe src="https://repopilot.app/embed/svix/svix-webhooks" width="100%" height="500" style="border:1px solid #d0d7de; border-radius:8px;" allow="microphone" loading="lazy" ></iframe>