{"id":13757195,"url":"https://github.com/andrew-gresyk/HFSM2","last_synced_at":"2025-05-10T05:31:48.662Z","repository":{"id":37406261,"uuid":"150378677","full_name":"andrew-gresyk/HFSM2","owner":"andrew-gresyk","description":"High-Performance Hierarchical Finite State Machine Framework","archived":false,"fork":false,"pushed_at":"2025-04-16T22:43:42.000Z","size":2278,"stargazers_count":513,"open_issues_count":0,"forks_count":69,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-04-17T09:27:13.707Z","etag":null,"topics":["cpp","cpp11","embedded","embedded-systems","fsm","fsm-library","game-dev","game-development","header-only","hfsm","hierarchical-state-machine","mit-license","modern-cpp","state-machine","template-metaprogramming"],"latest_commit_sha":null,"homepage":"https://hfsm.dev","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrew-gresyk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"andrew-gresyk","patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2018-09-26T06:28:21.000Z","updated_at":"2025-04-16T22:31:38.000Z","dependencies_parsed_at":"2023-01-25T23:31:08.462Z","dependency_job_id":"9b2cfe96-adb1-40d2-a6b9-7a9132481519","html_url":"https://github.com/andrew-gresyk/HFSM2","commit_stats":null,"previous_names":[],"tags_count":60,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrew-gresyk%2FHFSM2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrew-gresyk%2FHFSM2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrew-gresyk%2FHFSM2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrew-gresyk%2FHFSM2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrew-gresyk","download_url":"https://codeload.github.com/andrew-gresyk/HFSM2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253371072,"owners_count":21897998,"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":["cpp","cpp11","embedded","embedded-systems","fsm","fsm-library","game-dev","game-development","header-only","hfsm","hierarchical-state-machine","mit-license","modern-cpp","state-machine","template-metaprogramming"],"created_at":"2024-08-03T12:00:28.805Z","updated_at":"2025-05-10T05:31:48.655Z","avatar_url":"https://github.com/andrew-gresyk.png","language":"C++","funding_links":["https://github.com/sponsors/andrew-gresyk"],"categories":["Objects - Entity, Actor","State Machine"],"sub_categories":["Finite State Machine"],"readme":"[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![GitHub Release Date](https://img.shields.io/github/release-date/andrew-gresyk/HFSM2)](https://github.com/andrew-gresyk/HFSM2/releases)  \n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5335/badge)](https://bestpractices.coreinfrastructure.org/projects/5335)  \n[![GCC, Clang](https://github.com/andrew-gresyk/HFSM2/actions/workflows/cmake.yml/badge.svg)](https://github.com/andrew-gresyk/HFSM2/actions/workflows/cmake.yml)\n[![ARM GCC](https://github.com/andrew-gresyk/HFSM2/actions/workflows/cmake-qemu-arm.yml/badge.svg)](https://github.com/andrew-gresyk/HFSM2/actions/workflows/cmake-qemu-arm.yml)\n[![MS VS](https://github.com/andrew-gresyk/HFSM2/actions/workflows/msbuild.yml/badge.svg)](https://github.com/andrew-gresyk/HFSM2/actions/workflows/msbuild.yml)  \n[![Gitter](https://badges.gitter.im/andrew-gresyk/HFSM2.svg)](https://gitter.im/andrew-gresyk/HFSM2)\n[![Discord](https://img.shields.io/discord/755015945269018695.svg?label=\u0026logo=discord\u0026logoColor=ffffff\u0026color=7389D8\u0026labelColor=6A7EC2)](https://discord.gg/v4t3tzh)\n[![Twitter Follow](https://img.shields.io/twitter/follow/andrew_gresyk?style=social)](https://www.twitter.com/andrew_gresyk)\n\n---\n\n![HFSM2](assets/logos/hfsm2-logo-large.png)\n\n# High-Performance Hierarchical Finite State Machine\n\nHeader-only heriarchical FSM framework in C++11, with fully statically-defined structure (no dynamic allocations), built with variadic templates.\n\n---\n\n## Compiler Support\n\n- Visual Studio: **2015, 2017, 2019, 2022**\n- GCC: **9, 10, 11, 12, 13, 14**\n- GCC (ARM): **9**\n- Clang: **13, 14, 15, 16, 17, 18**\n- AppleClang: **15, 16**\n\n---\n\n## Quick Start\n\n- **[Minimal Example](https://github.com/andrew-gresyk/HFSM2/wiki/Overview-Minimal-Example)**\n- **[Extended Tutorial](https://github.com/andrew-gresyk/HFSM2/wiki/Overview-Extended-Tutorial)**\n\n---\n\n## See Also\n\n- **[HFSM2 UPlugin](https://github.com/andrew-gresyk/HFSM2-uplugin)**: Unreal Engine plugin for [HFSM2](https://hfsm.dev) library\n- **[FFSM2](https://flat.hfsm.dev)**: High-Performance **Flat** Finite State Machine\n- **[FFSM2 UPlugin](https://github.com/andrew-gresyk/FFSM2-uplugin)**: Unreal Engine plugin for [FFSM2](https://flat.hfsm.dev) library\n- **[HFSM Mono](https://font.hfsm.dev/)**: Monospaced bitmap Unicode fonts for HFSM2 and FFSM2 libraries\n\n---\n\n## Documentation\n\n- **[Wiki](https://github.com/andrew-gresyk/HFSM2/wiki)**\n\n---\n\n## Feature Highlights\n\n- Permissive **[MIT License](LICENSE)**\n- Written in widely-supported modern(ish) C++11\n- Header-only\n- Convenient, minimal boilerplate\n- Fully static, no dynamic allocations\n- Uses inline-friendly compile-time polymorphism, no virtual methods are used\n- Type-safe transitions: `FSM.changeTo\u003cTargetState\u003e()` with optional payloads\n- Flexible configuration using `HFSM2_ENABLE_*` macros\n- Scalable, supports robust state re-use via state injections\n- **[Hierarchical](https://github.com/andrew-gresyk/HFSM2/wiki/Transitions-within-Hierarchy)**, with a selection of composite (sub-machine) and orthogonal regions\n- Gamedev-friendly, supports explicit `State::update()`\n- Also supports traditional event-based workflow with `State::react()`\n- Inspect anything: previous and current transitions, state activation status, and more!\n- Game AI-friendly with **[dynamic planning](https://github.com/andrew-gresyk/HFSM2/wiki/Plans)** support\n- **[Utility theory](https://github.com/andrew-gresyk/HFSM2/wiki/Utility-Theory)** support (max score and ranked weighted random)\n- **[Serializable](https://doc.hfsm.dev/user-guide/debugging-and-tools/serialization)**, with activity and transition history support\n- **[Debug-assisted](https://gresyk.dev/features/2018/01/15/hfsm-magic.html)**, includes automatic structure and activity visualization API with `#define HFSM_ENABLE_STRUCTURE_REPORT`\n- Built-in logging support\n\n---\n\n## 3rd Party Libraries\n\n- **[doctest](https://github.com/onqtam/doctest)** unit testing framework\n- **[XoShiRo](http://xoshiro.di.unimi.it/)** pseuto-random number generators\n\n---\n\n## Get In Touch\n\n- Twitter: **[@andrew_gresyk](https://www.twitter.com/andrew_gresyk)**\n- Discord: **[HFSM.dev](https://discord.gg/v4t3tzh)**\n- Gitter: **[andrew-gresyk/HFSM2](https://gitter.im/andrew-gresyk/HFSM2)**\n\n---\n\n## Special Thanks\n\n- [alexandrosk0](https://github.com/alexandrosk0)\n- [Casey Sanchez](https://github.com/Tannz0rz)\n- [DJuego](https://github.com/DJuego)\n- [Jan Aleksandrov](https://github.com/Niproblema)\n- [Kevin Greene](https://github.com/kgreenek)\n- [Kjeld Mathias Petersen](https://github.com/DonMathi)\n- [Lau Bakman](https://github.com/lbakman)\n- Mehdi Houshmand\n- [mrcmry](https://github.com/mrcmry)\n- [Phil Nash](https://github.com/philsquared)\n- [Romain Cheminade](https://github.com/romaincheminade)\n- [Schoppenglas](https://github.com/Schoppenglas)\n- [Tristan Brindle](https://github.com/tcbrindle)\n- [C++::London](https://www.meetup.com/CppLondon/) meetup\n- programming community at [Splash Damage](http://www.splashdamage.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrew-gresyk%2FHFSM2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrew-gresyk%2FHFSM2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrew-gresyk%2FHFSM2/lists"}