Skip to content
Thomas Mangin edited this page Mar 6, 2026 · 50 revisions

ExaBGP Wiki

Welcome to the comprehensive ExaBGP documentation. This wiki covers everything from beginner setup to advanced features and production deployments.

🚨 Common Problem - Pipe Filling

Many online ExaBGP script examples DO NOT read ACK responses ("done") from the API. Your own code MUST read the response message to your command as otherwise:

  • The STDIN pipe will fill up
  • ExaBGP will block and stop processing
  • Your BGP session will hang

ExaBGP 4.x and 5.0.0+ have ACK enabled by default. Your scripts MUST either:

  1. Read ACK responses with select() or equivalent (recommended)
  2. Disable ACK via export exabgp.api.ack=false (simpler but less reliable)
  3. Use runtime control (5.0.0+ only): disable-ack, enable-ack, silence-ack

See ACK Feature Documentation for correct implementation patterns.

Important Notice

ExaBGP does NOT manipulate the RIB (Routing Information Base) or FIB (Forwarding Information Base).

ExaBGP is a pure BGP protocol implementation that:

  • Implements the BGP-4 protocol and modern extensions
  • Provides JSON/text API for external process communication
  • Maintains internal routing information
  • Does NOT install routes into the kernel routing table
  • Does NOT modify forwarding tables

If you need FIB manipulation, consider alternatives like BIRD or FRRouting.

Version Compatibility

  • 6.0.0 (main): Active development. Async reactor, enhanced CLI, shell completion, health monitoring API. Python 3.12+ required. See 5.x → 6.0.0 Migration.
  • 5.0.0 (LTS): Stable release. SRv6, BGP-MUP, security fixes. Python 3.8+.
  • 4.x (End of Life): Critical fixes only. Python 3.6+. See 4.x → 5.0.0 Migration Guide.

New users: Install from main (6.0.0) — it is production-tested and has the best tooling.

Existing 5.x users: 6.0.0 has breaking changes (Python 3.12+, BGP-LS JSON). See 5.x → 6.0.0 Migration Guide.

Quick Navigation

New to ExaBGP?

⭐ Most Popular Feature: Health Checks

Zero-Code Health Checks Built-In! ExaBGP includes a production-ready exabgp healthcheck module - no custom scripting required:

# Automatically announce/withdraw routes based on service health
exabgp healthcheck --cmd "curl -sf http://localhost/health" --ip 10.0.0.1/32

Why health checks matter: ExaBGP's killer feature is automatic route announcement/withdrawal based on service health. Your application controls its own BGP routing - announce when healthy, withdraw when failing. No manual intervention, no external monitoring required.

Configuration

API Documentation

Address Families

Basic Address Families

FlowSpec

L3VPN

EVPN

BGP-LS

Other Address Families

Use Cases

Features

Capabilities

Communities

  • Communities - Standard, Extended, and Large Communities (RFC 1997, 4360, 8092)

Attributes & Other

Tools

Operations

Integration

Reference

Migration

Community

External Resources

Configuration Examples

Browse configuration examples organized by:

  • User experience level (Beginner/Intermediate/Advanced)
  • Use case (DDoS/Anycast/VPN/etc)
  • Feature (FlowSpec/EVPN/BGP-LS/etc)
  • Protocol family (IPv4/IPv6/VPN/etc)

About This Documentation

This documentation is organized to help users at all levels:

  • Beginners: Start with Getting Started
  • Operators: Focus on Use Cases and Operations
  • Developers: Explore API and Development sections
  • Reference: Use the A-Z indices for quick lookups

Every document includes:

  • Clear table of contents
  • Practical examples from the configuration files
  • Cross-references to related docs
  • Common errors and solutions
  • Version compatibility notes

RFC Compliance

ExaBGP implements 55+ RFCs including:

  • Core BGP-4 (RFC 4271) - Protocol only, no RIB/FIB manipulation
  • Multiprotocol BGP (RFC 4760) - Multiple address families
  • FlowSpec (RFC 5575) - Traffic filtering
  • EVPN (RFC 7432) - Ethernet VPN
  • BGP-LS (RFC 7752) - Link State distribution
  • SRv6 (RFC 9514) - Segment Routing over IPv6
  • And many more...

See RFC Information for the complete list.


Need Help? Join our Slack community or file an issue.


Clone this wiki locally