{"id":15037645,"url":"https://github.com/exa-networks/exabgp","last_synced_at":"2026-10-19T08:45:25.140Z","repository":{"id":10289090,"uuid":"12407457","full_name":"Exa-Networks/exabgp","owner":"Exa-Networks","description":"The BGP swiss army knife of networking","archived":false,"fork":false,"pushed_at":"2026-10-12T16:50:06.000Z","size":33882,"stargazers_count":2311,"open_issues_count":0,"forks_count":463,"subscribers_count":123,"default_branch":"main","last_synced_at":"2026-10-12T18:40:15.532Z","etag":null,"topics":["bgp","bgp-ls","ddos-protection","exabgp","flow","flowspec","health-check","ipv4","ipv6","mpls","protection","pypi","python","visualisation","vpls"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Exa-Networks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"accessibility":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":"CLAUDE.md","gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2013-08-27T13:56:08.000Z","updated_at":"2026-10-12T16:57:00.000Z","dependencies_parsed_at":"2026-10-12T18:34:27.368Z","dependency_job_id":null,"html_url":"https://github.com/Exa-Networks/exabgp","commit_stats":{"total_commits":4806,"total_committers":145,"mean_commits":"33.144827586206894","dds":0.3160632542655014,"last_synced_commit":"11a15c9c1c30173535d9c471eef2b18c2633cf2a"},"previous_names":[],"tags_count":134,"template":false,"template_full_name":null,"purl":"pkg:github/Exa-Networks/exabgp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exa-Networks%2Fexabgp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exa-Networks%2Fexabgp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exa-Networks%2Fexabgp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exa-Networks%2Fexabgp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Exa-Networks","download_url":"https://codeload.github.com/Exa-Networks/exabgp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Exa-Networks%2Fexabgp/sbom","scorecard":{"id":47564,"data":{"date":"2025-08-11","repo":{"name":"github.com/Exa-Networks/exabgp","commit":"3463e6274fd2190f08a76c9559d264376891021a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.7,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/19 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"19 commit(s) and 6 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:18","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:17","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/functional-3.6.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/functional-3.7.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/functional-testing.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/linting.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/release.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/unit-testing.yml:13","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENCE.txt:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/codeql-analysis.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/functional-3.6.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/functional-3.6.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/functional-3.6.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/functional-3.6.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/functional-3.7.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/functional-3.7.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/functional-3.7.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/functional-3.7.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/functional-testing.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/functional-testing.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/functional-testing.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/functional-testing.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linting.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/linting.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linting.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/linting.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-testing.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/unit-testing.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/unit-testing.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/Exa-Networks/exabgp/unit-testing.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:14: pin your Docker image by updating python:3-slim to python:3-slim@sha256:6f79e7a10bb7d0b0a50534a70ebc78823f941fba26143ecd7e6c5dca9d7d7e8a","Warn: containerImage not pinned by hash: Dockerfile.remote:14: pin your Docker image by updating python:3-slim to python:3-slim@sha256:6f79e7a10bb7d0b0a50534a70ebc78823f941fba26143ecd7e6c5dca9d7d7e8a","Warn: pipCommand not pinned by hash: Dockerfile.remote:22","Warn: pipCommand not pinned by hash: Dockerfile.remote:40-43","Warn: pipCommand not pinned by hash: .github/workflows/functional-3.6.yml:35","Warn: pipCommand not pinned by hash: .github/workflows/functional-3.6.yml:36","Warn: pipCommand not pinned by hash: .github/workflows/functional-3.6.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/functional-3.7.yml:35","Warn: pipCommand not pinned by hash: .github/workflows/functional-3.7.yml:36","Warn: pipCommand not pinned by hash: .github/workflows/functional-3.7.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/functional-testing.yml:35","Warn: pipCommand not pinned by hash: .github/workflows/functional-testing.yml:36","Warn: pipCommand not pinned by hash: .github/workflows/functional-testing.yml:37","Warn: pipCommand not pinned by hash: .github/workflows/linting.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/linting.yml:32","Warn: pipCommand not pinned by hash: .github/workflows/unit-testing.yml:34","Warn: pipCommand not pinned by hash: .github/workflows/unit-testing.yml:35","Info:   0 out of  16 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of  15 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2019-41 / GHSA-qfc5-mcwq-26q8"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (12) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-14T23:05:51.104Z","repository_id":10289090,"created_at":"2025-08-14T23:05:51.104Z","updated_at":"2025-08-14T23:05:51.104Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38352851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-19T02:00:06.414Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bgp","bgp-ls","ddos-protection","exabgp","flow","flowspec","health-check","ipv4","ipv6","mpls","protection","pypi","python","visualisation","vpls"],"created_at":"2024-09-24T20:35:12.149Z","updated_at":"2026-10-19T08:45:25.126Z","avatar_url":"https://github.com/Exa-Networks.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ExaBGP\n\n**BGP Swiss Army Knife of Networking**\n\nExaBGP is a BGP implementation designed to enable network engineers and developers to interact with BGP networks using simple Python scripts or external programs via a simple API.\n\n**Key Differentiator**: Unlike traditional BGP daemons (BIRD, FRRouting), ExaBGP does **not** manipulate the FIB (Forwarding Information Base). Instead, it focuses on BGP protocol implementation and provides an API for external process.\n\nExaBGP has a fully backward-compatible successor written in Go, called Ze (**[ze-software.net](https://ze-software.net)**). If you need more performance than a Python program can deliver, take a look.\n\n## Table of Contents\n\n- [Use Cases](#use-cases)\n- [Features](#features)\n- [Quick Start](#quick-start)\n- [Version Notice](#version-notice)\n- [Related Project: Ze](#related-project-ze)\n- [Installation](#installation)\n- [Upgrade](#upgrade)\n- [Compiled build (experimental)](#compiled-build-experimental)\n- [Documentation](#documentation)\n- [Support](#support)\n- [Contributing](#contributing)\n\n## Use Cases\n\nExaBGP is used for:\n\n- **Service Resilience**: Cross-datacenter failover solutions, migrating /32 service IPs\n- **DDoS Mitigation**: Centrally deploying network-level filters (blackhole and/or FlowSpec)\n- **Network Monitoring**: Gathering network information via BGP-LS or BGP with Add-Path\n- **Traffic Engineering**: Dynamic route injection and manipulation via API\n- **Anycast Management**: Automated anycast network control\n\nLearn more on the [wiki](https://github.com/Exa-Networks/exabgp/wiki).\n\n## Features\n\n### Protocol Support\n- **RFC Compliance**: ASN4, IPv6, MPLS, VPLS, Flow, Graceful Restart, Enhanced Route Refresh, Extended Next-Hop, BGP-LS, AIGP, and more\n- **Address Families**: IPv4/IPv6 Unicast/Multicast, VPNv4/VPNv6, EVPN, FlowSpec, BGP-LS, MUP, SRv6\n- **Capabilities**: Add-Path, Route Refresh, Graceful Restart, 4-byte ASN\n\nSee [RFC compliance details](https://github.com/Exa-Networks/exabgp/wiki/RFC-Information) for the latest developments.\n\n### Architecture\n- **JSON API**: Control BGP via external programs (Python, shell scripts, etc.)\n- **No FIB Manipulation**: Pure BGP protocol implementation\n- **Event-Driven**: asyncio on `main`, a homemade reactor (which pre-dates asyncio) on 5.0\n- **Extensible**: Registry-based plugin architecture\n\n**Note**: If you need FIB manipulation, consider other open source BGP daemons such as [BIRD](http://bird.network.cz/) or [FRRouting](https://frrouting.org/).\n\n## Quick Start\n\n```sh\npip install exabgp\nexabgp --help\n```\n\nThe [Quick Start](https://github.com/Exa-Networks/exabgp/wiki/Quick-Start) tutorial on the wiki takes you from there to a running BGP session, and the [`etc/exabgp`](https://github.com/Exa-Networks/exabgp/tree/main/etc/exabgp) folder holds over 100 configuration examples.\n\n## Version Notice\n\nTwo branches are maintained and both are supported:\n\n- **`5.0` is the stable branch.** It is the released version (currently 5.0.13), it is what `pip`/`pipx` and most OS packages install, and it runs on Python 3.8 or later. Pick it if you want a tagged release, or if you are not on Python 3.12 yet.\n- **`main` is the development branch**, and the default branch of the repository. It will become 6.0, but it is not 6.0 yet and nothing is tagged: expect the odd rough edge, even though the full unit and functional test suites run on every commit. It requires Python 3.12 or later. Pick it if you want the features being built for 6.0: asyncio engine, the interactive CLI with shell completion, and health monitoring API commands.\n\nIf you have no preference, use the stable branch. Beware that `git clone` without a checkout, and `docker pull ghcr.io/exa-networks/exabgp:latest`, both give you `main`, while `pip install exabgp` gives you the latest 5.0 release.\n\n## Related Project: Ze\n\n**[Ze](https://github.com/ze-software/ze)** is a new project by the ExaBGP author, a ground-up rewrite in Go aiming to be a fully programmable network stack. Beyond BGP, it manages network interfaces, programs the FIB, and serves a config editor over SSH and a web UI.\n\nZe is **pre-alpha**: the core BGP engine works, but APIs and config syntax will change without notice. Existing ExaBGP plugins work unchanged, and `ze config migrate` converts ExaBGP configs. If you use ExaBGP, try it with your configs and tell us what works and what does not.\n\nOfficial repo: [github.com/ze-software/ze](https://github.com/ze-software/ze), development: [codeberg.org/thomas-mangin/ze](https://codeberg.org/thomas-mangin/ze), Discord: [discord.gg/ykJb8meS4](https://discord.gg/ykJb8meS4).\n\n## Installation\n\n```sh\n# pip or pipx, the latest 5.0 release\npipx install exabgp\n\n# the container, from ghcr.io\ndocker pull ghcr.io/exa-networks/exabgp:5.0.13\ndocker run -it --rm ghcr.io/exa-networks/exabgp:5.0.13 version\n\n# the zipapp of main, one file run by any Python 3.12 or later, rebuilt each night main changed\ncurl -LO https://github.com/Exa-Networks/exabgp/releases/download/nightly/exabgp.pyz\npython3 exabgp.pyz version\n\n# git, running from the checkout (main by default, `git checkout 5.0` for stable)\ngit clone https://github.com/Exa-Networks/exabgp\ncd exabgp\n./sbin/exabgp version\n```\n\n### Setting up the zipapp\n\nThe zipapp, `exabgp.pyz`, is ExaBGP in a single file which Python runs as it is: nothing to install, only Python on the machine (3.12 or later for 6.x and the nightly, 3.8 or later for 5.0). Download it, check it, and make it a command:\n\n```sh\n# the latest release, or replace latest/download with download/nightly for main\ncurl -LO https://github.com/Exa-Networks/exabgp/releases/latest/download/exabgp.pyz\ncurl -LO https://github.com/Exa-Networks/exabgp/releases/latest/download/SHA256SUMS\nsha256sum --ignore-missing -c SHA256SUMS    # shasum -a 256 --ignore-missing -c SHA256SUMS on macOS\n\n# run it with Python\npython3 exabgp.pyz version\n\n# or make it executable, and install it as the exabgp command\nchmod +x exabgp.pyz\n./exabgp.pyz version\nsudo install -m 755 exabgp.pyz /usr/local/bin/exabgp\nexabgp version\n```\n\nTo upgrade, download the new file and install it over the old one. If the `python3` on your `PATH` is too old, it stops and says so: run the file with a newer interpreter (`python3.12 exabgp.pyz ...`), and use that interpreter in your service file. Should ExaBGP drop privileges (`exabgp.daemon.user`), that user must be able to read the file.\n\n[doc/user/zipapp.md](doc/user/zipapp.md) explains what the zipapp is and how to use it: configuration, healthcheck, systemd. Should you encounter any issues, we will ask you to install the latest version from git. The wiki [Installation Guide](https://github.com/Exa-Networks/exabgp/wiki/Installation-Guide) covers the other ways: a self-contained zipapp, GitHub release archives, OS packages, building your own container image, and running several versions side by side.\n\n## Upgrade\n\nMoving from 5.0 to `main` (the future 6.0) needs Python 3.12, and some configurations will not load and some API output changes shape. The [5.x to 6.0.0 migration guide](https://github.com/Exa-Networks/exabgp/wiki/From-5.x-to-6.x) lists every change and what to do about it. Run `exabgp configuration validate \u003cfile\u003e` against your configuration before switching over.\n\nEvery effort is made to keep backward compatibility, but read the [CHANGELOG](https://github.com/Exa-Networks/exabgp/blob/main/doc/CHANGELOG.rst) and check your setup after any upgrade. Coming from 3.4, read [From 3.4 to 4.x](https://github.com/Exa-Networks/exabgp/wiki/From-3.4-to-4.x).\n\n## Compiled build (experimental)\n\nOn `main`, the whole implementation can be compiled with [mypyc](https://mypyc.readthedocs.io/) into C extensions from the same Python source, including configuration, the reactor, API and CLI. Only package initializers and the import-time `util/mypyc.py` fallback remain Python. Build a compiled tree, wheel, or one-file executable with bundled Python; no compiled wheel is published to PyPI yet. The pure-Python build remains the default and is required for reliable `server --memory` GC inspection. See [doc/user/compiled-build.md](doc/user/compiled-build.md) for measurements, build commands and limitations, and the wiki page [Compiled Build](https://github.com/Exa-Networks/exabgp/wiki/Compiled-Build).\n\nThe whole-package build measured 1.4–2.4x faster on the documented message/RIB workloads (Apple M4 Max, Python 3.12.14). That excludes startup: the one-file macOS binary took 8.16s for `version`, so prefer the wheel for frequent short-lived commands.\n\n## Documentation\n\nThe [**ExaBGP Wiki**](https://github.com/Exa-Networks/exabgp/wiki) is the documentation. The most useful pages:\n\n- [**Quick Start**](https://github.com/Exa-Networks/exabgp/wiki/Quick-Start) - 5-minute tutorial\n- [**Installation Guide**](https://github.com/Exa-Networks/exabgp/wiki/Installation-Guide) - Detailed installation for all platforms\n- [**First BGP Session**](https://github.com/Exa-Networks/exabgp/wiki/First-BGP-Session) - Step-by-step BGP setup\n- [**Configuration Syntax**](https://github.com/Exa-Networks/exabgp/wiki/Configuration-Syntax) - Complete syntax guide\n- [**API Overview**](https://github.com/Exa-Networks/exabgp/wiki/API-Overview) - Architecture and patterns\n- [**JSON API Reference**](https://github.com/Exa-Networks/exabgp/wiki/JSON-API-Reference) - JSON message format\n- [**FlowSpec Overview**](https://github.com/Exa-Networks/exabgp/wiki/FlowSpec-Overview) - DDoS mitigation guide\n- [**Debugging**](https://github.com/Exa-Networks/exabgp/wiki/Debugging) - Finding out what went wrong\n- [**RFC compliance ledger**](doc/RFC_COMPLIANCE.md) - generated, in this repository: 24 RFCs requirement by requirement, with the tests which prove each one and the gaps we have not closed. Every quote in it is checked against the published RFC on every test run. The concept comes from [Ze](https://github.com/ze-software/ze), ExaBGP's successor, and was backported here in a simpler form\n\nRun `exabgp --help` for command-line options and built-in documentation.\n\n## Support\n\n**The most common issue reported (ExaBGP hangs after some time) is caused by using code written for ExaBGP 3.4 with current versions (5.0+) without having read [this wiki entry](https://github.com/Exa-Networks/exabgp/wiki/From-3.4-to-4.x)**\n\nExaBGP is supported through GitHub's [issue tracker](https://github.com/Exa-Networks/exabgp/issues). So should you encounter any problems, please do not hesitate to [report it](https://github.com/Exa-Networks/exabgp/issues?labels=bug\u0026page=1\u0026state=open) so we can help you.\n\nDuring \"day time\" (GMT/BST) feel free to contact us on [Slack](https://join.slack.com/t/exabgp/shared_invite/enQtNTM3MTU5NTg5NTcyLTMwNmZlMGMyNTQyNWY3Y2RjYmQxODgyYzY2MGFkZmYwODMxNDZkZjc4YmMyM2QzNzA1YWM0MmZjODhlYThjNTQ). We will try to respond if available. The best way to be informed about our progress/releases is to follow us on [Twitter](https://twitter.com/search?q=exabgp).\n\nIf there are any bugs, we'd like to ask you to help us fix the issue using the main branch. We will backport critical fixes to stable releases. Please remove any non `git main` installations if you are trying the latest release to prevent running the wrong code by accident; it happens more than you think. Verify the binary by running `exabgp version`.\n\nWe will nearly systematically ask for the **FULL** output of exabgp with the option `-d`.\n\n## Contributing\n\nContributions are welcome, from bug reports on the [issue tracker](https://github.com/Exa-Networks/exabgp/issues) to pull requests, and documentation improvements, even small ones, are genuinely appreciated. Target `main` for new features and `5.0` for bug fixes, and include tests.\n\n[CONTRIBUTING.md](CONTRIBUTING.md) explains the development setup, how to run the tests, and the debugging options. See [CLAUDE.md](./CLAUDE.md) for the AI development guidelines and the architecture overview.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexa-networks%2Fexabgp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fexa-networks%2Fexabgp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fexa-networks%2Fexabgp/lists"}