{"id":15037988,"url":"https://github.com/boost-ext/sml","last_synced_at":"2025-05-15T17:01:23.895Z","repository":{"id":39666532,"uuid":"47465696","full_name":"boost-ext/sml","owner":"boost-ext","description":"C++14 State Machine library","archived":false,"fork":false,"pushed_at":"2025-04-02T13:10:19.000Z","size":33450,"stargazers_count":1202,"open_issues_count":172,"forks_count":185,"subscribers_count":77,"default_branch":"master","last_synced_at":"2025-04-07T21:15:02.589Z","etag":null,"topics":["design-patterns","metaprogramming","state-machine"],"latest_commit_sha":null,"homepage":"https://boost-ext.github.io/sml/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boost-ext.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-12-05T17:35:02.000Z","updated_at":"2025-04-07T07:26:35.000Z","dependencies_parsed_at":"2025-05-15T17:00:58.726Z","dependency_job_id":null,"html_url":"https://github.com/boost-ext/sml","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boost-ext%2Fsml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boost-ext%2Fsml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boost-ext%2Fsml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boost-ext%2Fsml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boost-ext","download_url":"https://codeload.github.com/boost-ext/sml/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254384929,"owners_count":22062421,"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":["design-patterns","metaprogramming","state-machine"],"created_at":"2024-09-24T20:36:42.335Z","updated_at":"2025-05-15T17:01:18.877Z","avatar_url":"https://github.com/boost-ext.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"\u003ca href=\"http://www.boost.org/LICENSE_1_0.txt\" target=\"_blank\"\u003e![Boost Licence](http://img.shields.io/badge/license-boost-blue.svg)\u003c/a\u003e\n\u003ca href=\"https://github.com/boost-ext/sml/releases\" target=\"_blank\"\u003e![Version](https://img.shields.io/github/v/release/boost-ext/sml)\u003c/a\u003e\n\u003ca href=\"https://github.com/boost-ext/sml/actions/workflows/build_matrix.yml\" target=\"_blank\"\u003e![Linux](https://github.com/boost-ext/sml/actions/workflows/build_matrix.yml/badge.svg)\u003c/a\u003e\n\u003ca href=\"https://codecov.io/gh/boost-ext/sml\" target=\"_blank\"\u003e![Codecov](https://codecov.io/gh/boost-ext/sml/branch/master/graph/badge.svg)\u003c/a\u003e\n\u003ca href=\"https://godbolt.org/z/y99L50\"\u003e![Try it online](https://img.shields.io/badge/try%20it-online-blue.svg)\u003c/a\u003e\n\n---------------------------------------\n\n# SML (State Machine Language)\n\n\u003e Your scalable C++14 **one header only** State Machine Library with no dependencies\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://www.youtube.com/watch?v=Zb6xcd2as6o\"\u003e\u003cimg src=\"doc/images/rise_of_the_state_machines.png\" alt=\"Rise of the State Machines\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003e https://www.youtube.com/watch?v=Zb6xcd2as6o\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cbr /\u003e\n  \u003cb\u003eLet's release a TCP connection!\u003c/b\u003e\n  \u003cbr /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cimg src=\"doc/images/tcp_release.png\" alt=\"tcp release\"/\u003e\u003c/p\u003e\n\n### Quick start\n\n#### Download\n\u003e [Boost::ext].SML requires only one file. Get the latest header [here!](https://raw.githubusercontent.com/boost-ext/sml/master/include/boost/sml.hpp)\n\n#### Include\n```cpp\n#include \u003cboost/sml.hpp\u003e\nnamespace sml = boost::sml;\n```\n\n#### Dependencies\n```cpp\nstruct sender {\n  template\u003cclass TMsg\u003e\n  constexpr void send(const TMsg\u0026 msg) { std::printf(\"send: %d\\n\", msg.id); }\n};\n```\n\n#### Events\n```cpp\nstruct ack { bool valid{}; };\nstruct fin { int id{}; bool valid{}; };\nstruct release {};\nstruct timeout {};\n```\n\n#### Guards\n```cpp\nconstexpr auto is_valid = [](const auto\u0026 event) { return event.valid; };\n```\n\n#### Actions\n```cpp\nconstexpr auto send_fin = [](sender\u0026 s) { s.send(fin{0}); };\nconstexpr auto send_ack = [](const auto\u0026 event, sender\u0026 s) { s.send(event); };\n```\n\n#### State Machine\n```cpp\nstruct tcp_release {\n  auto operator()() const {\n    using namespace sml;\n    /**\n     * Initial state: *initial_state\n     * Transition DSL: src_state + event [ guard ] / action = dst_state\n     */\n    return make_transition_table(\n      *\"established\"_s + event\u003crelease\u003e          / send_fin  = \"fin wait 1\"_s,\n       \"fin wait 1\"_s  + event\u003cack\u003e [ is_valid ]             = \"fin wait 2\"_s,\n       \"fin wait 2\"_s  + event\u003cfin\u003e [ is_valid ] / send_ack  = \"timed wait\"_s,\n       \"timed wait\"_s  + event\u003ctimeout\u003e                      = X\n    );\n  }\n};\n```\n\n#### Usage\n```cpp\nint main() {\n  using namespace sml;\n\n  sender s{};\n  sm\u003ctcp_release\u003e sm{s}; // pass dependencies via ctor\n  assert(sm.is(\"established\"_s));\n\n  sm.process_event(release{}); // complexity O(1)\n  assert(sm.is(\"fin wait 1\"_s));\n\n  sm.process_event(ack{true}); // prints 'send: 0'\n  assert(sm.is(\"fin wait 2\"_s));\n\n  sm.process_event(fin{42, true}); // prints 'send: 42'\n  assert(sm.is(\"timed wait\"_s));\n\n  sm.process_event(timeout{});\n  assert(sm.is(X));  // terminated\n}\n```\n\n\u003e MSVC-2015 ([Example](https://boost-ext.github.io/sml/examples/index.html#hello-world))\n\n  * use `state\u003cclass state_name\u003e` instead of `\"state_name\"_s`\n  * expliclty state a lambda's result type `auto action = [] -\u003e void {}`\n\n#### Compile\n* **GCC/Clang**\n  ```sh\n  $CXX -std=c++14 -O2 -fno-exceptions -Wall -Wextra -Werror -pedantic tcp_release.cpp\n  ```\n* **MSVC**\n  ```sh\n  cl /std:c++14 /Ox /W3 tcp_release.cpp\n  ```\n\n\u003cp align=\"center\"\u003e\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003cth\u003etcp_release.cpp\u003c/th\u003e\n    \u003cth\u003eClang-3.8\u003c/th\u003e\n    \u003cth\u003eGCC-6.3\u003c/th\u003e\n    \u003cth\u003eMSVC-2015\u003c/th\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n    \u003ctd\u003eCompilation Time\u003c/td\u003e\n    \u003ctd\u003e0.102s\u003c/td\u003e\n    \u003ctd\u003e0.118s\u003c/td\u003e\n    \u003ctd\u003e0.296s\u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n    \u003ctd\u003eBinary size (stripped)\u003c/td\u003e\n    \u003ctd\u003e6.2kb\u003c/td\u003e\n    \u003ctd\u003e6.2kb\u003c/td\u003e\n    \u003ctd\u003e105kb\u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n    \u003ctd\u003eASM x86-64 - \u003cbr/\u003ehttps://godbolt.org/z/y99L50\u003c/td\u003e\n    \u003ctd colspan=\"3\"\u003e\n      \u003cpre\u003e\u003ccode\u003e\nmain: # @main\n  pushq %rax\n  movl $.L.str, %edi\n  xorl %esi, %esi\n  xorl %eax, %eax\n  callq printf\n  movl $.L.str, %edi\n  movl $42, %esi\n  xorl %eax, %eax\n  callq printf\n  xorl %eax, %eax\n  popq %rcx\n  retq\n.L.str:\n  .asciz \"send: %d\\n\"\n      \u003c/code\u003e\u003c/pre\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003c/p\u003e\n\n#### Run\n\u003e Output (https://wandbox.org/permlink/WbvV9HsIyiPkCFw7)\n```sh\nsend: 0\nsend: 42\n```\n\n### Benchmark\n\n\u003e [Complex Test](https://github.com/boost-ext/sml/tree/master/benchmark/complex)\n\n|                  |[Enum/Switch](https://github.com/boost-ext/sml/blob/master/benchmark/complex/switch.cpp) | [Variant](https://github.com/boost-ext/sml/blob/master/benchmark/complex/variant.cpp) | [[Boost::ext].SML - 1.1.0](https://github.com/boost-ext/sml/blob/master/benchmark/complex/sml.cpp)    | [Boost-1.65.MSM-eUML](https://github.com/boost-ext/sml/blob/master/benchmark/complex/euml.cpp)   | [Boost-1.65.Statechart](https://github.com/boost-ext/sml/blob/master/benchmark/complex/sc.cpp)   |\n|------------------|------------|---------|--------------|------------------|--------------------|\n| **Compilation time** |  0.132s    | 15.321s |       0.582s |        1m15.935s |             5.671s |\n| **Execution time**   |   679ms    | 827ms   |        622ms |        664ms     |             2282ms |\n| **Memory usage**     |      1b    | 2b/8b   |           1b |        120b      |             224b   |\n| **Executable size**  |     15K    | 187K    |          34K |        611K      |             211K   |\n\n---\n\n### Examples\n\n\u003ca name=\"arduino\"\u003e\u003c/a\u003e\n* #### [Arduino](https://www.arduino.cc)\n\n\u003cp align=\"center\"\u003e\u003ca href=\"http://www.plantuml.com/plantuml/uml/TP11Qy9048Nl-HNlPYnj4ZtcK4JheQtq4kX5HDRiRB9LTyFiXDH_twmM2WKl2n_xFjvZ5a4KIty-9PDaWfNlBcoRLf3MKyoBUO5tjW5lVR3gYFGOGGc-Rgozm95Ch-wB3SBsq0jfz4uJGrh2qliWgBoHGJ5XOsjoWHxnIHoiTvXbHJRAQKK4LTV-t2btiQw1iQSn_hfQVrJh_MnVPF8jy8nwd1Wdj29TcUV3C6I7s95vRl9_-JWCs3xiyFGCRqo2-5x10IMMuigoOmg1DBOtZ3yxvDYGZX0LXr__dcBCdn9h5kJqUD8V\"\u003e\u003cimg src=\"doc/images/arduino/uml.png\" alt=\"Arduino UML\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://godbolt.org/z/Y983h4\"\u003e\u003cimg src=\"doc/images/arduino/code.png\" alt=\"Arduino Code\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003e https://godbolt.org/z/Y983h4\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://www.tinkercad.com/things/9epUrFrzKP3\"\u003e\u003cimg src=\"doc/images/arduino/board.png\" alt=\"Arduino Board\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003e https://www.tinkercad.com/things/9epUrFrzKP3\n\n---\n\n\u003ca name=\"avr\"\u003e\u003c/a\u003e\n* #### [AVR](https://www.arduino.cc)\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://godbolt.org/z/qhx8Md\"\u003e\u003cimg src=\"doc/images/avr.png\" alt=\"AVR performance\"/\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003e https://godbolt.org/z/qhx8Md\n\n---\n\n\u003ca name=\"match3\"\u003e\u003c/a\u003e\n* #### [Match3](https://github.com/modern-cpp-examples/match3)\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\n      \u003cp align=\"center\"\u003e\u003ca href=\"https://www.youtube.com/watch?v=8gRHHIjx4oE\"\u003e\u003cimg src=\"doc/images/match3.png\" alt=\"match3\"/\u003e\u003c/a\u003e\u003c/p\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e\n      \u003cp align=\"center\"\u003e\u003ca href=\"http://modern-cpp-examples.github.io/match3/\"\u003e\u003cimg src=\"https://github.com/modern-cpp-examples/match3/raw/master/docs/images/match3.png\" alt=\"match3\"/\u003e\u003c/a\u003e\u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003e https://github.com/modern-cpp-examples/match3\n\n---------------------------------------\n\n### Documentation\n\n[](GENERATE_TOC_BEGIN)\n\n* [Introduction](https://boost-ext.github.io/sml/index.html)\n    * [UML State Machine](https://boost-ext.github.io/sml/index.html#uml-state-machine)\n    * [Do I need a State Machine?](https://boost-ext.github.io/sml/index.html#do-i-need-a-state-machine)\n    * [Real Life examples?](https://boost-ext.github.io/sml/index.html#real-life-examples)\n    * [Why [Boost].SML?](https://boost-ext.github.io/sml/index.html#why-boostsml)\n    * [Problems with Boost.MSM - eUML](https://boost-ext.github.io/sml/index.html#problems-with-boostmsm-euml)\n    * [[Boost].SML design goals](https://boost-ext.github.io/sml/index.html#boostsml-design-goals)\n    * [What 'lite' implies?](https://boost-ext.github.io/sml/index.html#what-lite-implies)\n    * [*Supported* UML features](https://boost-ext.github.io/sml/index.html#supported-uml-features)\n    * [*Additional* features](https://boost-ext.github.io/sml/index.html#additional-features)\n    * [Related materials](https://boost-ext.github.io/sml/index.html#related-materials)\n    * [Acknowledgements](https://boost-ext.github.io/sml/index.html#acknowledgements)\n* [Overview](https://boost-ext.github.io/sml/overview.html)\n    * [Quick Start](https://boost-ext.github.io/sml/overview.html#quick-start)\n    * [Dependencies](https://boost-ext.github.io/sml/overview.html#dependencies)\n    * [Supported/Tested compilers](https://boost-ext.github.io/sml/overview.html#supportedtested-compilers)\n    * [Configuration](https://boost-ext.github.io/sml/overview.html#configuration)\n    * [Exception Safety](https://boost-ext.github.io/sml/overview.html#exception-safety)\n    * [Thread Safety](https://boost-ext.github.io/sml/overview.html#thread-safety)\n    * [Design](https://boost-ext.github.io/sml/overview.html#design)\n    * [Error messages](https://boost-ext.github.io/sml/overview.html#error-messages)\n* [Features/Benchmarks](https://boost-ext.github.io/sml/benchmarks.html)\n    * [Features](https://boost-ext.github.io/sml/benchmarks.html#features)\n    * [Benchmarks](https://boost-ext.github.io/sml/benchmarks.html#benchmarks)\n* [Tutorial/Workshop](https://boost-ext.github.io/sml/tutorial.html)\n    * [0. Read Boost.MSM - eUML documentation](https://boost-ext.github.io/sml/tutorial.html#0-read-boostmsm-euml-documentation)\n    * [1. Create events and states](https://boost-ext.github.io/sml/tutorial.html#1-create-events-and-states)\n    * [2. Create guards and actions](https://boost-ext.github.io/sml/tutorial.html#2-create-guards-and-actions)\n    * [3. Create a transition table](https://boost-ext.github.io/sml/tutorial.html#3-create-a-transition-table)\n    * [4. Set initial states](https://boost-ext.github.io/sml/tutorial.html#4-set-initial-states)\n    * [5. Create a state machine](https://boost-ext.github.io/sml/tutorial.html#5-create-a-state-machine)\n    * [6. Process events](https://boost-ext.github.io/sml/tutorial.html#6-process-events)\n    * [8. Handle errors](https://boost-ext.github.io/sml/tutorial.html#8-handle-errors)\n    * [9. Test it](https://boost-ext.github.io/sml/tutorial.html#9-test-it)\n    * [10. Debug it](https://boost-ext.github.io/sml/tutorial.html#10-debug-it)\n* [UML vs SML](https://boost-ext.github.io/sml/uml_vs_sml.html)\n    * [Unified Modeling Language™ (UML®) Version 2.5](https://boost-ext.github.io/sml/uml_vs_sml.html#unified-modeling-language-uml-version-25)\n    * [Initial Pseudostate](https://boost-ext.github.io/sml/uml_vs_sml.html#initial-pseudostate)\n    * [Terminate Pseudostate](https://boost-ext.github.io/sml/uml_vs_sml.html#terminate-pseudostate)\n    * [External transition](https://boost-ext.github.io/sml/uml_vs_sml.html#external-transition)\n    * [Anonymous transition](https://boost-ext.github.io/sml/uml_vs_sml.html#anonymous-transition)\n* [User Guide](https://boost-ext.github.io/sml/user_guide.html)\n    * [transitional [concept]](https://boost-ext.github.io/sml/user_guide.html#transitional-concept)\n    * [configurable [concept]](https://boost-ext.github.io/sml/user_guide.html#configurable-concept)\n    * [callable [concept]](https://boost-ext.github.io/sml/user_guide.html#callable-concept)\n    * [dispatchable [concept]](https://boost-ext.github.io/sml/user_guide.html#dispatchable-concept)\n    * [state [core]](https://boost-ext.github.io/sml/user_guide.html#state-core)\n    * [event [core]](https://boost-ext.github.io/sml/user_guide.html#event-core)\n    * [make_transition_table [state machine]](https://boost-ext.github.io/sml/user_guide.html#make_transition_table-state-machine)\n    * [sm [state machine]](https://boost-ext.github.io/sml/user_guide.html#sm-state-machine)\n    * [policies [state machine]](https://boost-ext.github.io/sml/user_guide.html#policies-state-machine)\n    * [testing::sm [testing]](https://boost-ext.github.io/sml/user_guide.html#testingsm-testing)\n    * [make_dispatch_table [utility]](https://boost-ext.github.io/sml/user_guide.html#make_dispatch_table-utility)\n* [Examples](https://boost-ext.github.io/sml/examples.html)\n    * [Hello World](https://boost-ext.github.io/sml/examples.html#hello-world)\n    * [Events](https://boost-ext.github.io/sml/examples.html#events)\n    * [States](https://boost-ext.github.io/sml/examples.html#states)\n    * [Actions Guards](https://boost-ext.github.io/sml/examples.html#actions-guards)\n    * [Transitions](https://boost-ext.github.io/sml/examples.html#transitions)\n    * [Defer/Process](https://boost-ext.github.io/sml/examples.html#deferprocess)\n    * [Orthogonal Regions](https://boost-ext.github.io/sml/examples.html#orthogonal-regions)\n    * [Composite](https://boost-ext.github.io/sml/examples.html#composite)\n    * [History](https://boost-ext.github.io/sml/examples.html#history)\n    * [Error handling](https://boost-ext.github.io/sml/examples.html#error-handling)\n    * [Logging](https://boost-ext.github.io/sml/examples.html#logging)\n    * [Nested](https://boost-ext.github.io/sml/examples.html#nested)\n    * [Testing](https://boost-ext.github.io/sml/examples.html#testing)\n    * [Runtime Dispatcher](https://boost-ext.github.io/sml/examples.html#runtime-dispatcher)\n    * [eUML Emulation](https://boost-ext.github.io/sml/examples.html#euml-emulation)\n    * [Dependencies](https://boost-ext.github.io/sml/examples.html#dependencies)\n    * [Data](https://boost-ext.github.io/sml/examples.html#data)\n    * [In-Place](https://boost-ext.github.io/sml/examples.html#in-place)\n    * [Dependency Injection](https://boost-ext.github.io/sml/examples.html#dependency-injection)\n    * [Arduino Integration](https://boost-ext.github.io/sml/examples.html#arduino-integration)\n    * [SDL2 Integration](https://boost-ext.github.io/sml/examples.html#sdl2-integration)\n    * [Plant UML Integration](https://boost-ext.github.io/sml/examples.html#plant-uml-integration)\n* [FAQ](https://boost-ext.github.io/sml/faq.html)\n* [CHANGELOG](https://boost-ext.github.io/sml/CHANGELOG.html)\n    * [[1.1.11] - 2024-03-09](https://boost-ext.github.io/sml/CHANGELOG.html#1111-2024-03-09)\n    * [[1.1.10] - 2024-03-09](https://boost-ext.github.io/sml/CHANGELOG.html#1110-2024-03-09)\n    * [[1.1.9] - 2023-09-13](https://boost-ext.github.io/sml/CHANGELOG.html#119-2023-09-13)\n    * [[1.1.6] - 2022-09-07](https://boost-ext.github.io/sml/CHANGELOG.html#116-2022-09-07)\n    * [[1.1.5] - 2022-03-23](https://boost-ext.github.io/sml/CHANGELOG.html#115-2022-03-23)\n    * [[1.1.4] - 2021-02-16](https://boost-ext.github.io/sml/CHANGELOG.html#114-2021-02-16)\n    * [[1.1.3] - 2020-08-02](https://boost-ext.github.io/sml/CHANGELOG.html#113-2020-08-02)\n    * [[1.1.2] - 2020-06-14](https://boost-ext.github.io/sml/CHANGELOG.html#112-2020-06-14)\n    * [[1.1.1] - 2020-05-17](https://boost-ext.github.io/sml/CHANGELOG.html#111-2020-05-17)\n    * [[1.1.0] - 2019-01-08](https://boost-ext.github.io/sml/CHANGELOG.html#110-2019-01-08)\n    * [[1.0.1] - 2016-05-06](https://boost-ext.github.io/sml/CHANGELOG.html#101-2016-05-06)\n    * [[1.0.0] - 2016-01-28](https://boost-ext.github.io/sml/CHANGELOG.html#100-2016-01-28)\n[](GENERATE_TOC_END)\n\n---\n\n**Disclaimer** `[Boost::ext].SML` is not an official Boost library.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboost-ext%2Fsml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboost-ext%2Fsml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboost-ext%2Fsml/lists"}