{"id":20564204,"url":"https://github.com/nlnetlabs/rotonda","last_synced_at":"2025-04-06T20:11:17.632Z","repository":{"id":213574638,"uuid":"384098926","full_name":"NLnetLabs/rotonda","owner":"NLnetLabs","description":"Modular, programmable BGP Engine","archived":false,"fork":false,"pushed_at":"2024-10-29T08:48:27.000Z","size":5836,"stargazers_count":39,"open_issues_count":12,"forks_count":1,"subscribers_count":11,"default_branch":"main","last_synced_at":"2024-10-29T09:25:09.437Z","etag":null,"topics":["bgp","networking","routing-engine"],"latest_commit_sha":null,"homepage":"https://nlnetlabs.nl/projects/routing/rotonda/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NLnetLabs.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["NLnetLabs"],"custom":["https://nlnetlabs.nl/funding/"]}},"created_at":"2021-07-08T11:17:59.000Z","updated_at":"2024-10-27T15:55:59.000Z","dependencies_parsed_at":"2024-03-27T16:50:13.630Z","dependency_job_id":"18e58587-3ac1-457d-aac8-de479e90e186","html_url":"https://github.com/NLnetLabs/rotonda","commit_stats":{"total_commits":47,"total_committers":3,"mean_commits":"15.666666666666666","dds":0.1063829787234043,"last_synced_commit":"d22085292d04be2dce33f064b80fb7510043878f"},"previous_names":["nlnetlabs/rotonda"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLnetLabs%2Frotonda","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLnetLabs%2Frotonda/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLnetLabs%2Frotonda/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NLnetLabs%2Frotonda/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NLnetLabs","download_url":"https://codeload.github.com/NLnetLabs/rotonda/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247543591,"owners_count":20955865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","networking","routing-engine"],"created_at":"2024-11-16T04:24:36.945Z","updated_at":"2025-04-06T20:11:17.598Z","avatar_url":"https://github.com/NLnetLabs.png","language":"Rust","funding_links":["https://github.com/sponsors/NLnetLabs","https://nlnetlabs.nl/funding/"],"categories":[],"sub_categories":[],"readme":"# Rotonda\n\n\u003cimg align=\"right\" src=\"doc/manual/source/resources/rotonda-illustrative-icon.png\" height=\"150\"\u003e\n\n\nThe composable, programmable BGP Engine\n\nThe current version of Rotonda allows you to open BGP and BMP sessions and\ncollect incoming routes from many peers into a in-memory database, modeled as\na Routing Information Base (RIB). It also supports importing routes from MRT\nfiles into this database. Conditions for accepting incoming routes and sending\nmessages to log files or a MQTT stream can be created using filters with the\n`Roto` programming language. The RIB can be queried through an HTTP/JSON\nAPI.\n\nFuture versions of Rotonda will support an on-disk database, using external\ndatasets in filters, reading routes from Kafka streams, and more.\n\nRead the [documentation](https://rotonda.docs.nlnetlabs.nl) to find out how to\ninstall and use Rotonda.\n\n\u003e `Rotonda` is under active development and features are added regularly.\n\u003e The APIs, the configuration and the `Roto` syntax may change between\n\u003e 0.x versions.\n\u003e\n\u003e For more information on upcoming features and changes see the \n\u003e [ROADMAP](ROADMAP.md)\n\n## GOALS\n\n#### Modularity\n   Rotonda applications are built by combining units into a pipeline through\n   which BGP data will flow. You can filter, and store the BGP data along\n   the way, and create signals based on it to send to other applications. We\n   aim for units to be hot-swappable, i.e. they can be added and removed in a\n   *running* Rotonda application.\n\n   Rotonda offers units to create BGP and BMP sessions, Routing Information\n   Bases (RIBs), and more.\n\n#### Flexibility\n   The behaviour of the units can be modeled by using a small, fun programming\n   language called `Roto`, that we created to combine flexibility and\n   ease-of-use. Right now, `Roto` is used define filters that run in the hot\n   path of the Rotonda pipeline. It's our goal to integrate filter definition,\n   configuration syntax, and query syntax into `Roto` scripts in one place.\n   Modifying, versioning and provisioning of your `Roto` scripts should be\n   as straight forward as possible.\n\n#### Tailored Performance\n   Rotonda aims to offer units that perform the same task, but with different\n   performance characteristics, so that you can optimize for your needs, be it\n   a high-volume, low latency installation or a small installation in a\n   constraint environment.\n\n#### Observability\n   All Rotonda units will have their own finely-grained logging capabilities,\n   and some have built-in queryable JSON API interfaces to give information\n   about their current state and content through Rotonda’s built-in HTTPS\n   server. Signals can be sent to other applications. Moreover, Rotonda aims\n   to offer true observability by allowing the user to trace BMP/BGP packets\n   start-to-end through the whole pipeline.\n\n##### Storage Persistence\n   By default a Rotonda application stores all the data that you want to\n   collect in memory. It should be possible to configure parts to persist\n   to another storage location, such as files or a database. Whether you put\n   RIBs to files or in a database, you can should still be able to query it\n   transparently with `Roto`.\n\n#### External Data Sources\n   `Roto` filter units should be able to make decisions based on real-time\n   external data sources. Similarly filter units should be ahlt to make\n   decisions based on data present in multiple RIBs. External data sources\n   can be, among others, files, databases or even a RIB backed by an RTR\n   connection.\n\n#### Robustness \u0026 Scalability\n   Multiple Rotonda instances should be able to synchronize or shard data via\n   a binary protocol, that we dubbed `rotoro`.\n\n#### Security \u0026 Safety\n   Rotonda applications will be able to use data provided by the RPKI through\n   connections with tools like Routinator and Krill. Besides that, Rotonda\n   supports BGPsec out of the box. Again, no patching or recompiling required.\n\n#### Open-source with professional support services\n\nNLnet Labs offers [professional support and consultancy\nservices](https://www.nlnetlabs.nl/services/contracts/) with a service-level\nagreement. Rotonda is liberally licensed under the\n[Mozilla Public License 2.0]\n(https://github.com/NLnetLabs/rotonda/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlnetlabs%2Frotonda","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnlnetlabs%2Frotonda","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlnetlabs%2Frotonda/lists"}