Skip to content

Releases: Exa-Networks/exabgp

ExaBGP 'Back 2 Back' Release

11 Apr 13:42
5.0.9
5d36bc4

Choose a tag to compare

  • Fix: --env-file was ignored, it is now honoured. (#1378)
  • Fix: logging to a file was silently dropped. Bare absolute paths, ~-expanded paths, file: and host: destinations now work, with a warning on invalid destinations. (#1378)

ExaBGP 'Flying Bell' Release

04 Apr 12:51
5.0.7
e2be9f0

Choose a tag to compare

Version 5.0.7

  • Fix: send zero-length capabilities in OPEN message (#1371)
    Route Refresh (RFC 2918), Enhanced Route Refresh (RFC 7313), and
    Extended Message (RFC 8654) capabilities were silently dropped from
    the wire OPEN message despite appearing in debug logs. These are
    valid zero-length capabilities that were incorrectly filtered out
    by a too-broad check added in PR #1221 (fcf6bb0).

  • Fix: do not send empty Hostname capability when hostname is not configured
    When hostname was None, HostName.extract() returned an invalid
    zero-length payload instead of suppressing the capability entirely.
    Also hardens the parser against truncated hostname data from peers.

  • Fix: wrap log message in lambda for lazy evaluation
    The named pipes error message in server.py triggered a non-callable
    log message warning at runtime.

ExaBGP 'Easter Rabbit' Release

03 Apr 12:53
5.0.6
4d26f0d

Choose a tag to compare

Version 5.0.6:

  • Feature: add --env-file flag and EXABGP_ENVFILE env var for custom env file (#1367)
    The exabgp 5.x CLI had no way to specify a custom exabgp.env file path,
    unlike the 4.x --env flag. Two override mechanisms are now available:
    exabgp --env-file /path/to/exabgp.env server config.conf
    EXABGP_ENVFILE=/path/to/exabgp.env exabgp server config.conf
  • Fix: show error details when configuration validation fails (#1367)
    Validation errors were silently swallowed with exit code 1 and no output.
    Now writes errors to stderr with the actual parse error.
  • Fix: accept wildcard * in healthcheck --neighbor option (#1367)
    The --neighbor argument rejected * which is common in 4.x config files.
    Adds neighbor_address() validator that accepts * as a wildcard.
  • Fix: show error on stderr when server can't find config file (#1367)
    The server silently exited with code 1 when given a nonexistent config
    file. Now writes the error to stderr.
  • Fix: healthcheck uses per-state as-path instead of ignoring it
    The locally-resolved as_path variable (from --up-as-path, --down-as-path,
    --disabled-as-path) was computed but never used.

ExaBGP 'Saint Patrick' release

17 Mar 12:47
5.0.5
d84e98c

Choose a tag to compare

Version 5.0.5:

  • Fix: healthcheck --neighbor produced doubled neighbor prefix (#1366)
  • Fix: healthcheck crash when --ip-ifname not used (#1365)
  • Fix: Align column headers in show neighbor extensive
  • Fix: Route Refresh messages sent after new updates instead of before
    When flush adj-rib out and a new announce arrived in the same reactor
    cycle, the new route UPDATE was sent before the ROUTE_REFRESH start
    marker, violating the Enhanced Route Refresh sequence.
  • Fix: pytest collecting tests from wrong exabgp installation
    Added pythonpath to pyproject.toml so tests use local src/.

ExaBGP 'Alpine' release

05 Mar 14:02
5.0.4
607093b

Choose a tag to compare

Version 5.0.4:

  • Fix: Flaky test on slow CI runners (Alpine Linux) (#1359)
    Race condition in test_connection_lifecycle where client-side TCP
    handshake completes before server thread calls accept(). Added
    retry loop instead of bare assertion.
  • Fix: Release script no longer generates debian/changelog

ExaBGP 'Lancastrian' release

05 Mar 09:54
5.0.3
931b246

Choose a tag to compare

Version 5.0.3:

  • Fix: CLI hang on failing async commands ASYNC error handler now sends error response when callback fails, preventing the CLI from hanging indefinitely.
  • Fix: peer-id field in show neighbor extensive cli_data() now correctly uses peer['peer-id'] instead of peer['router-id'].
  • Fix: timedelta formatting error on Python 3.12+ Python 3.12+ timedelta.format rejects alignment specs like :>15. Wrapping in str() before formatting fixes the TypeError.

ExaBGP "A La French" Release

02 Mar 20:40
5.0.2
97afee6

Choose a tag to compare

Version 5.0.2:

  • Fix: healthcheck (and other subcommands) not working when api.cli is enabled
    When exabgp.api.cli is true, the exabgp_cli_pipe environment variable was
    inherited by all child processes, causing 'python -m exabgp healthcheck'
    to run the CLI pipe code instead of the healthcheck subcommand.
    Only the internal CLI process now receives this variable.

ExaBGP 'Never trust 0.0 code' release

21 Nov 23:32
55927f1

Choose a tag to compare

ExaBGP 5.0.1

This is a bug fix release addressing issues introduced in 5.0.0.

🚨 Critical Fixes

Container ImportError Fix

  • Fix: Container startup failure in 5.0.0 - The 5.0.0 Docker container (ghcr.io/exa-networks/exabgp:5.0.0) failed to start with ImportError: cannot import name 'get_root' from
    'exabgp.version'
  • Added missing get_root() and get_zipapp() functions that were removed during 5.0.0 release but still required by application/version.py
  • All exabgp commands (--help, version, etc.) now work correctly

RIB Stability Fixes

  • Fix: RIB iterator crash in delete_cached_family() - Modified dictionary during iteration causing RuntimeError on configuration reload
  • Fix: RIB iterator safety in cached_changes() - Prevented iterator corruption during concurrent access
  • Fix: race condition in RIB updates() generator - Fixed missing/duplicate route updates when API flush commands arrive during peer sending

✨ Testing Improvements

  • Added comprehensive RIB stress test suite (tests/unit/test_rib_stress.py) - 18 tests covering critical bugs, race conditions, edge cases, and performance

ExaBGP "Claude" release

17 Nov 21:49
5.0.0
f12892d

Choose a tag to compare

Pre-release

Major code release

This is the first stable release of ExaBGP 5.0.

This release is based on the main branch, which has been widely used in production (with some recent changes). Development in main will lead to the creation of version 6.0.0, which already includes significant work to leverage modern Python asynchronous features as well as code annotations with mypy. As these changes are more likely to introduce potential issues, we are releasing 5.0 as a stable version for production use.

This release removes support for Python 3.7 and requires Python 3.8+.

"Nothing much" happened since the latest 4.2.22 release "but":

  • 871 commits since 4.2.22
  • 920 files changed, 88,481 insertions, 29,566 deletions
  • 20+ contributors
  • All major changes are documented in the CHANGELOG

🙏 Acknowledgments

Special thanks to:

  • All contributors who submitted patches, bug reports, and feature requests
  • The BGP community for protocol clarifications
  • Early adopters who tested pre-release versions
  • Everyone who contributed to documentation and examples

🐛 Known Issues

See the issue tracker for known issues.

Notable TODOs for future releases:

  • OriginASN4Number extended community (Type 2,2)
  • RouteTargetASN4Number extended community (Type 2,3)
  • IP/Range/CIDR class API improvements

📄 License

ExaBGP is licensed under the BSD-3-Clause License.


🔗 Links


💬 Questions?


Full Changelog: 4.2.22...5.0.0


👻 Ghost written by Claude (Anthropic AI)

ExaBGP 'Not a Zen Day' release

17 Mar 10:06
ee02a9e

Choose a tag to compare

This release fixes an issue with doctopt introduced in 4.2.23.

The short option of the command line -1, -s and -x were not understood anymore.