outpost

module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 21, 2026 License: Apache-2.0

README


Outpost logo

License Go Report Card Issues - Outpost GitHub Release Managed Service

Outbound Webhooks and Event Destinations Infrastructure

Production-ready infrastructure for sending webhooks and delivering events from your platform to your customers' systems. Self-host it anywhere, or use Hookdeck Outpost as a managed service.

Add outbound webhooks and Event Destinations to your platform, with support for Webhooks, Hookdeck Event Gateway, Amazon EventBridge, AWS SQS, AWS S3, GCP Pub/Sub, RabbitMQ, and Kafka. Outpost handles retries, tenant isolation, observability, and provides a portal for your end users.

The runtime has minimal dependencies (Redis/Redis cluster, PostgreSQL, a supported message queue), is 100% backward compatible with your existing webhook implementation, and is optimized for high-throughput, low-cost operation.

Outpost is built and maintained by Hookdeck. Written in Go. Distributed as a binary and Docker container. Licensed under Apache-2.0.

Outpost architecture

Read Outpost Concepts to learn more about the Outpost architecture and design.

Features

  • Multi-tenant support: Create multiple tenants on a single Outpost deployment.
  • User portal: Allow customers to view delivery metrics, manage destinations, debug delivery issues, and observe their event destinations.
  • Delivery failure alerts: Get notified when destinations are failing so you can act before your customers notice.
  • Event topics and topic-based subscriptions: Supports the common publish and subscription paradigm to ease adoption and integration into existing systems.
  • At least once delivery guarantee: Messages are guaranteed to be delivered at least once and never lost.
  • Automatic and manual retries: Configure retry strategies for event destinations and manually trigger event delivery retries via the API or user portal.
  • Event fanout: A message sent to a topic is replicated and delivered to multiple endpoints for parallel processing and asynchronous event notifications.
  • Publish events via the API or a queue: Publish events using the Outpost API or configure Outpost to read events from a publish queue.
  • OpenTelemetry: OTel standardized traces, metrics, and logs.
  • Webhook best practices: Opt-out webhook best practices, such as headers for idempotency, timestamp and signature, and signature rotation.
  • SDKs and MCP server: Go, Python, and TypeScript SDKs are available. Outpost also ships with an MCP server.
  • Event destination types: Out of the box support for Webhooks, Hookdeck Event Gateway, Amazon EventBridge, AWS SQS, AWS S3, GCP Pub/Sub, RabbitMQ, and Kafka.

See the Outpost Features for more information.

Why Outpost

Outpost is a good fit if:

  • You're adding outbound webhooks to your platform for the first time
  • You're replacing a homegrown webhook system that's become a maintenance burden
  • You want to offer your customers more than just HTTP callbacks (queues, brokers, buses)
  • You need multi-tenant isolation with a customer-facing portal out of the box
  • You want full control over your infrastructure and data

Outpost is backward compatible with your existing payload format, HTTP headers, and signatures — you can drop it into what you already have.

Documentation

Quickstart

Deploy to Railway

Deploy on Railway

Once deployed, set the TOPICS environment variable to your supported topics (e.g. TOPICS=user.created,user.updated,user.deleted). You'll need the public Railway URL of your Outpost instance ($OUTPOST_URL) and the generated API_KEY to authenticate requests.

Deploy locally with Docker

git clone https://github.com/hookdeck/outpost.git
cd outpost/examples/docker-compose/
cp .env.example .env

Update the API_KEY value in the .env file, then start the services:

docker-compose -f compose.yml -f compose-rabbitmq.yml -f compose-postgres.yml up

Outpost is now running on localhost:3333.

See the Configuration Reference for Redis cluster setup, TLS, and other deployment options.

Try it out

Set your environment variables:

export OUTPOST_URL=http://localhost:3333
export API_KEY=your_api_key

Create a tenant, add a webhook destination, and publish an event:

# Create a tenant
curl -X PUT "$OUTPOST_URL/api/v1/tenants/acme-corp" \
  -H "Authorization: Bearer $API_KEY"

# Create a webhook destination
curl "$OUTPOST_URL/api/v1/tenants/acme-corp/destinations" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "type": "webhook",
    "topics": ["*"],
    "config": { "url": "https://your-endpoint.com/webhooks" }
  }'

# Publish an event
curl "$OUTPOST_URL/api/v1/publish" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "tenant_id": "acme-corp",
    "topic": "user.created",
    "data": { "user_id": "123" }
  }'

Get a portal link for the tenant:

curl "$OUTPOST_URL/api/v1/tenants/acme-corp/portal" \
  -H "Authorization: Bearer $API_KEY"

Open the returned redirect_url to view the Outpost portal.

Dashboard homepage

SDKs are available for Go, TypeScript, and Python. See the full quickstart guides for step-by-step setup with your stack.

Hookdeck Outpost (Managed)

Don't want to run the infrastructure yourself? Hookdeck Outpost is a fully managed version that runs the exact same codebase — no proprietary fork, no reduced feature set.

The managed service adds serverless scaling, SOC 2 compliance, SSO, RBAC, and usage-based pricing starting at $10 per million events.

Get started with Hookdeck Outpost →

Contributing

See CONTRIBUTING.

License

This repository contains Outpost, covered under the Apache License 2.0, except where noted (any Outpost logos or trademarks are not covered under the Apache License, and should be explicitly noted by a LICENSE file.)

Directories

Path Synopsis
cmd
configdocsgen command
outpost command
outpost-server command
publish command
redis-debug command
seed command
tools/genprovider command
cmd/tools/genprovider/main.go
cmd/tools/genprovider/main.go
internal
app
cursor
Package cursor provides a unified cursor encoding/decoding utility for pagination.
Package cursor provides a unified cursor encoding/decoding utility for pagination.
destregistry/metadata
internal/destregistry/metadata/types.go
internal/destregistry/metadata/types.go
logstore/drivertest
Package drivertest provides a conformance test suite for logstore drivers.
Package drivertest provides a conformance test suite for logstore drivers.
lru
Package lru implements an LRU cache with TTL that refreshes on access
Package lru implements an LRU cache with TTL that refreshes on access
migrator/coordinator
Package coordinator provides a unified interface over the SQL and Redis migration subsystems so callers (CLI, startup checks) can work with "migrations" as a single concept instead of two separate systems.
Package coordinator provides a unified interface over the SQL and Redis migration subsystems so callers (CLI, startup checks) can work with "migrations" as a single concept instead of two separate systems.
migrator/migrations
Package migrations provides a central registry for all Redis migrations.
Package migrations provides a central registry for all Redis migrations.
mqs
pagination
Package pagination provides a generic cursor-based pagination implementation.
Package pagination provides a generic cursor-based pagination implementation.
pagination/paginationtest
Package paginationtest provides a reusable test suite for cursor-based pagination.
Package paginationtest provides a reusable test suite for cursor-based pagination.
redislock
Package redislock provides distributed locking using Redis.
Package redislock provides distributed locking using Redis.
simplejsonmatch
Package simplejsonmatch provides JSON schema matching functionality.
Package simplejsonmatch provides JSON schema matching functionality.
tenantstore
Package tenantstore provides the TenantStore facade for tenant and destination storage.
Package tenantstore provides the TenantStore facade for tenant and destination storage.
tenantstore/driver
Package driver defines the TenantStore interface and associated types.
Package driver defines the TenantStore interface and associated types.
tenantstore/drivertest
Package drivertest provides a conformance test suite for tenantstore drivers.
Package drivertest provides a conformance test suite for tenantstore drivers.
tenantstore/memtenantstore
Package memtenantstore provides an in-memory implementation of driver.TenantStore.
Package memtenantstore provides an in-memory implementation of driver.TenantStore.
tenantstore/redistenantstore
Package redistenantstore provides a Redis-backed implementation of driver.TenantStore.
Package redistenantstore provides a Redis-backed implementation of driver.TenantStore.
sdks
go module
outpost-go module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL