{"id":33165216,"url":"https://github.com/aerleon/aerleon","last_synced_at":"2026-02-12T02:19:53.356Z","repository":{"id":65343904,"uuid":"536332225","full_name":"aerleon/aerleon","owner":"aerleon","description":"Multi-platform ACL generation system","archived":false,"fork":false,"pushed_at":"2026-01-17T06:53:01.000Z","size":5312,"stargazers_count":235,"open_issues_count":74,"forks_count":46,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-01-17T17:58:33.333Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://aerleon.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aerleon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-13T22:42:41.000Z","updated_at":"2026-01-17T06:53:07.000Z","dependencies_parsed_at":"2024-06-01T19:33:54.530Z","dependency_job_id":"6a46604e-0248-4b79-9a43-5d56e7de7dd4","html_url":"https://github.com/aerleon/aerleon","commit_stats":null,"previous_names":[],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/aerleon/aerleon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerleon%2Faerleon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerleon%2Faerleon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerleon%2Faerleon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerleon%2Faerleon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aerleon","download_url":"https://codeload.github.com/aerleon/aerleon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerleon%2Faerleon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28651817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"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":[],"created_at":"2025-11-16T00:00:32.754Z","updated_at":"2026-01-22T03:02:51.051Z","avatar_url":"https://github.com/aerleon.png","language":"Python","funding_links":[],"categories":["Library"],"sub_categories":["NETCONF"],"readme":"![GitHub](https://img.shields.io/github/license/aerleon/aerleon) [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n[![PyPI version](https://badge.fury.io/py/aerleon.svg)](https://badge.fury.io/py/aerleon) ![PyPI - Status](https://img.shields.io/pypi/status/aerleon) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/aerleon) ![PyPI - Downloads](https://img.shields.io/pypi/dm/aerleon)\n![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/aerleon/aerleon/release.yml) ![Snyk Vulnerabilities for GitHub Repo](https://img.shields.io/snyk/vulnerabilities/github/aerleon/aerleon) [![aerleon](https://snyk.io/advisor/python/aerleon/badge.svg)](https://snyk.io/advisor/python/aerleon) [![codecov](https://codecov.io/gh/aerleon/aerleon/branch/main/graph/badge.svg?token=C13SR6GMTD)](https://codecov.io/gh/aerleon/aerleon)\n\n# Aerleon\n\nGenerate firewall configs for multiple firewall platforms from a single platform-agnostic configuration language through a command line tool and Python API.\n\nAerleon is a fork of [Capirca](https://github.com/google/capirca) with the following major additions:\n- YAML policy and network definition files and [pol2yaml, a converter from Capirca policy DSL to YAML](https://github.com/aerleon/pol2yaml).\n- Network definitions with FQDN data.\n- New firewall platforms can be added through plugins.\n- Typed Python APIs for ACL generation and aclcheck queries.\n- A [SLSA-compatible verifiable release process](https://aerleon.readthedocs.io/en/latest/install/#verifying-installation).\n- A detailed regression test suite.\n- Many bug fixes and performance enhancements.\n\n### Prerequisites\nAerleon requires Python 3.10 or higher.\n\n### Installation Steps\nYou can install Aerleon using one of the following package managers:\n\n#### Option 1: pip (Python Package Index)\nInstall Aerleon using `pip`:\n```bash\npip install aerleon\n```\n\n#### Option 2: Homebrew (macOS/Linux)\nInstall Aerleon using Homebrew:\n```bash\nbrew install aerleon\n```\n\n### Overview\nAerleon provides a command line tool and a Python API to generate configs for multiple firewall platforms from a single platform-agnostic configuration language. Supported platforms include Cisco, Juniper, Palo Alto Networks, and [many others](https://aerleon.readthedocs.io/en/latest/#core-supported-generators).\n\nA [getting started guide](https://aerleon.readthedocs.io/en/latest/getting_started/) is available to walk through the basics of using Aerleon.\n\n### Documentation\nFull documentation can be found at [https://aerleon.readthedocs.io/en/latest/](https://aerleon.readthedocs.io/en/latest/).\n\n### Contributing\nContributions are welcome. Please review the [contributing guidelines](https://aerleon.readthedocs.io/en/latest/contributing/) and [code of conduct](https://github.com/aerleon/aerleon/blob/main/CODE_OF_CONDUCT.md).\n\n### Contact\n#### Official Communication Channels\n- Issues: [GitHub Issues](https://github.com/aerleon/aerleon/issues).\n- Discussions: [GitHub Discussions](https://github.com/aerleon/aerleon/discussions).\n- Community Chat: [Slack Server](https://join.slack.com/t/aerleon/shared_invite/zt-1ngckm6oj-cK7yj63A~JgqjixEui2Vhw).\n\n#### Maintainers\n- Rob Ankeny ([ankenyr@gmail.com](mailto:ankenyr@gmail.com))\n- Jason Benterou ([jason.benterou@gmail.com](mailto:jason.benterou@gmail.com))\n\n### Version History\nRefer to the [changelog](https://github.com/aerleon/aerleon/releases) for version updates.\n\n### Resources\n- [Getting Started Guide](https://aerleon.readthedocs.io/en/latest/getting_started/)\n- [Blog Post: Safe ACL Change through Model-based Analysis](https://tech.ebayinc.com/engineering/safe-acl-change-through-model-based-analysis/)\n- [Aerleon Slack](https://join.slack.com/t/aerleon/shared_invite/zt-1ngckm6oj-cK7yj63A~JgqjixEui2Vhw)\n\n### Credits\nFiles and code included in this project from Capirca are copyright Google and\nare included under the terms of the Apache License, Version 2.0. You may obtain\na copy of the License at\n\n  \u003chttp://www.apache.org/licenses/LICENSE-2.0\u003e\n\nContributors who wish to modify files bearing a copyright notice are obligated\nby the terms of the Apache License, Version 2.0 to include at the top of the\nfile a prominent notice stating as much. Copyright notices must not be removed\nfrom files in this repository.\n\nThis README file and other documentation files may contain phrases and sections that are copyright Google.\nThis file and other documentation files are modified from the original by the Aerleon Project Team.\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/itdependsnetworks\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/9260483?v=4?s=100\" width=\"100px;\" alt=\"Ken Celenza\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKen Celenza\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=itdependsnetworks\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/fischa\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11302991?v=4?s=100\" width=\"100px;\" alt=\"Axel F\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAxel F\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=fischa\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://hachyderm.io/@nemith\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/349360?v=4?s=100\" width=\"100px;\" alt=\"Brandon Bennett\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBrandon Bennett\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=nemith\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/btriller\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/851727?v=4?s=100\" width=\"100px;\" alt=\"Bastian Triller\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBastian Triller\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=btriller\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/XioNoX\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/688817?v=4?s=100\" width=\"100px;\" alt=\"Arzhel Younsi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eArzhel Younsi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=XioNoX\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ProtonBruno\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/105855897?v=4?s=100\" width=\"100px;\" alt=\"ProtonBruno\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eProtonBruno\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=ProtonBruno\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/loulecrivain\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/43913579?v=4?s=100\" width=\"100px;\" alt=\"Lou Lecrivain\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLou Lecrivain\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=loulecrivain\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/aerleon/aerleon/commits?author=loulecrivain\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ABruihler\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6530276?v=4?s=100\" width=\"100px;\" alt=\"ABruihler\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eABruihler\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=ABruihler\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/aerleon/aerleon/commits?author=ABruihler\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kyleomalley\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/706840?v=4?s=100\" width=\"100px;\" alt=\"kyleomalley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ekyleomalley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=kyleomalley\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/aerleon/aerleon/commits?author=kyleomalley\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Qwiko\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/25234920?v=4?s=100\" width=\"100px;\" alt=\"Jakob Mellberg\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJakob Mellberg\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/aerleon/aerleon/commits?author=Qwiko\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faerleon%2Faerleon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faerleon%2Faerleon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faerleon%2Faerleon/lists"}