Self-hosted service
svix/svix-webhooks avatar
svix/svix-webhooks

Svix Webhooks: The Rust Webhook Service You Can Self-Host

The open source and enterprise-ready webhooks service 🦀

3,424 stars287 forksRustMIT

At a glance

What is it?
Svix is a webhook delivery service written in Rust, with official SDKs for nine languages and a Docker image for self-hosting. It handles retries, delivery guarantees and signature verification so your application does not have to.
Who is it for?
Adopt Svix if you need to send webhooks from multiple languages and want retries, delivery tracking and signature verification handled outside your application code. The Docker Compose file in server/docker-compose.yml is the fastest way to see whether the self-hosted setup fits your infrastructure.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Svix Solves and Who It Is For

Sending a webhook looks trivial until you need to deliver it reliably. The receiver is down, the request times out, the endpoint returns a 500, and the event is gone. The README frames the product as a way for developers to "make one API call, and Svix takes care of deliverability, retries, security, and more." That is the whole pitch: your application publishes an event, and Svix owns the delivery loop.

The intended user is a backend team that already emits events and now has to push them to customer-controlled endpoints. That is a different problem from internal messaging. Customer endpoints are unreliable, they belong to someone else, and the customer will ask what happened to a specific event. Svix targets that case, not general-purpose queueing.

The repository is a monorepo. Alongside the Rust server in server/ there are client libraries for Go, Python, TypeScript/JavaScript, Java, Kotlin, Ruby, C#, Rust and PHP, plus a Terraform provider and a CLI in svix-cli/. The README's feature table marks all of those as officially supported for both API access and webhook verification, with Java noting that async support is planned and pointing Kotlin users at the Kotlin library for coroutines.

How the Server, SDKs and CLI Fit Together

The architecture visible in the repository separates the delivery engine from the language bindings. The server is a Rust binary published to Docker Hub as svix/svix-server. It is the component that stores endpoints, accepts messages, signs payloads, attempts delivery and records the outcome. The SDKs are generated clients that talk to that server's HTTP API, which is why the repository also contains codegen/ and regen_openapi.py: the OpenAPI specification is the source of truth, and the per-language directories under go/, python/, javascript/ and the rest are produced from it.

That layout has a practical consequence. The server and the SDKs version independently in one sense but are released together in another. The recent releases are labelled things like "SDKs and CLI v2.5.0" and "SDKs + CLI v2.3.0", which suggests the client artifacts move as a group. If you self-host the server and pin an SDK, you are responsible for keeping the two compatible.

Webhook verification is a first-class concern rather than an afterthought. Every officially supported library in the README's table carries a checkmark for it, including the Terraform provider, which is marked N/A because Terraform does not receive webhooks. That means the SDKs ship the code a receiver needs to confirm a payload actually came from your Svix instance, not just the code to send one.

Installing the CLI and Sending a First Message

The README documents two ways to get the CLI. You can run it without installing anything through npx, or install it globally from npm under the package name svix-cli.

bash
npx svix-cli --help

Running that prints the CLI's command list. The alternative is a global install:

bash
npm install -g svix-cli
svix-cli --help

For the server itself, the README says Docker is "probably the most common" route and points at the official image. It offers three deployment shapes: the example docker-compose.yml in server/ with Docker Compose, Docker Swarm, or a standalone container. The Compose path is described as the easiest because it also boots and configures Redis and PostgreSQL.

bash
docker compose up

Run from the directory holding the example Compose file, that starts the server plus its two backing services. The README notes the Compose route assumes Docker Compose v2. The README is truncated at the point where it begins walking through the serve directory, so the exact commands after `cd serve` are not reproduced here; the full walkthrough lives in the repository's server documentation. The README also directs readers to the server configuration section for available settings, and to docs.svix.com for general usage.

The Self-Hosting Cost Is PostgreSQL and Redis

The Compose file is convenient precisely because it hides a real requirement. Svix is not a single binary you drop on a box and forget. The README states that the Compose setup "will also boot up and configure redis and postgresql", which means a production deployment needs both. That is two additional stateful services to run, back up, monitor and upgrade, and it is the first thing to weigh if your team has no existing PostgreSQL and Redis infrastructure.

This is not a criticism of the design. Durable delivery with retries needs persistent storage for endpoints and message state, and a fast store for scheduling and locking. The point is that the operational surface is larger than the one-line description suggests. A team evaluating Svix should count three services, not one.

The README does not document rollback, downgrade paths or data migration between server versions. It links to the server configuration reference and to docs.svix.com, but nothing in the repository's top-level documentation describes what happens when you move a self-hosted instance from one version to another. Treat version pinning as your own responsibility until you have read the configuration documentation.

A second limitation is scope. Svix is a webhook dispatcher. It is not a general message queue, and the topics list includes kafka, rabbitmq and pubsub because those are integrations or adjacent concepts, not because Svix replaces them. If your events are consumed by internal services rather than external customer endpoints, a broker is the better tool.

How Svix Differs from Rolling Your Own Dispatcher

The obvious alternative is a background job framework plus an HTTP client. In Python that might be Celery with a retry decorator; in Node it is a queue library and fetch. The difference is where the state lives. A job framework knows about a task and its retries. It does not know that a customer has three endpoints, that one of them has been failing for six hours, or that a specific delivery attempt returned a 503 with a particular body. You would build all of that: an endpoint registry, per-endpoint delivery records, a manual replay path, and a signing scheme the receiver can verify.

Svix puts those concerns behind an API. The trade-off is that you now run the service and its dependencies, and your delivery logic lives in someone else's schema. If your requirements are genuinely simple, one endpoint per customer and a retry-on-failure loop, the framework approach is less machinery and less to operate.

Within the webhook-service space, the meaningful axis is self-hosted versus hosted. Svix offers both: the repository is the self-hosted server under the MIT licence, and the company also operates a hosted service at svix.com. The self-hosted path gives you control over where payloads and endpoint data live, which matters if customer event data cannot leave your infrastructure. The hosted path removes the PostgreSQL and Redis burden. The README does not compare the two in detail, so if data residency is your deciding factor, verify it against the documentation rather than assuming the self-hosted build and the hosted product are configured identically.

Licence, Releases and Upgrade Cadence

The repository is MIT licensed. That is permissive: you can use, modify and redistribute the server, including commercially, provided the licence text travels with it. This is not legal advice, and the MIT grant covers the code in this repository, not the hosted service or any separate commercial terms attached to it. If you plan to redistribute Svix inside a product, read LICENSE in the repository root and confirm what it covers.

The release cadence visible in the recent tags is fast. v2.3.0 landed on 2026-09-03, v2.4.0 on 2026-09-09 and v2.5.0 on 2026-09-11, all labelled as SDK and CLI releases. Frequent SDK releases are normal for generated clients, but they set the upgrade expectation: if you track the SDKs, you will be bumping versions often. The server image is tagged separately on Docker Hub, with a latest tag and versioned tags, and the README explicitly offers both. For a self-hosted deployment, pinning a versioned tag rather than latest is the safer default, since the README does not describe an automatic migration path between server versions.

The Go module carries a long retract block listing versions from v1.46.0 through v1.61.0, with comments explaining that some had a bug that "silently broke downstream error handling code" and others were accidentally published test versions. That is a useful signal about how to consume the Go library: Go's retract mechanism exists for exactly this, so make sure your tooling honours it rather than pinning a retracted version in a lockfile.

Editorial conclusion

Adopt Svix if you need to send webhooks from multiple languages and want retries, delivery tracking and signature verification handled outside your application code. The Docker Compose file in server/docker-compose.yml is the fastest way to see whether the self-hosted setup fits your infrastructure. Do not adopt it if you cannot run PostgreSQL and Redis alongside it, or if your delivery volume is small enough that a background job and an HTTP client would suffice. Before committing, check the server configuration reference for the settings your deployment needs, and confirm that the SDK version you install matches the server version you run. The repository was last pushed on 2026-09-23.

Frequently asked questions

What does Svix do?

Svix is a webhook service. Developers make one API call and Svix handles deliverability, retries and security for the outgoing webhooks, according to the README. It ships as a Rust server plus officially supported client libraries for nine languages, a CLI and a Terraform provider.

What is svix webhooks?

It is the svix/svix-webhooks repository: an open source webhook service written in Rust and released under the MIT licence. The README describes it as an enterprise ready webhook service, and the same repository also contains the official SDKs and the CLI.

How much does Svix cost?

The repository itself is MIT licensed, so the self-hosted server code is free to use and modify under that licence. The README does not state pricing for the hosted service; it links to svix.com, which is where commercial terms would be published.

What are the downsides of using webhooks?

The core downside is that the receiving endpoint is outside your control, so deliveries fail for reasons you cannot fix. Svix exists to absorb that: the README says it handles deliverability and retries so your application does not have to. Self-hosting it adds PostgreSQL and Redis to your infrastructure, since the example Compose file boots both.

What are webhooks used for?

Webhooks push an event to an HTTP endpoint when something happens, so the receiver does not have to poll. Svix is aimed at the case where those endpoints belong to customers, which is why it tracks delivery attempts and signs payloads that the SDKs can verify.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. svix/svix-webhooks on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/svix-svix-webhooks.svg)](https://hysenlabs.com/projects/svix-svix-webhooks)