{"id":44575874,"url":"https://github.com/forester-bt/forester","last_synced_at":"2026-02-15T21:01:03.262Z","repository":{"id":170321229,"uuid":"645078800","full_name":"forester-bt/forester","owner":"forester-bt","description":"unleash the power of behavior trees!","archived":false,"fork":false,"pushed_at":"2024-09-13T17:22:19.000Z","size":135200,"stargazers_count":40,"open_issues_count":32,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-14T11:31:19.133Z","etag":null,"topics":["ai","behavior","behavior-tree","behavior-trees","behaviortree","dsl","game-development","orchestration","robotics","tree"],"latest_commit_sha":null,"homepage":"https://forester-bt.github.io/forester/","language":"Rust","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/forester-bt.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-24T21:59:16.000Z","updated_at":"2026-01-20T14:35:45.000Z","dependencies_parsed_at":"2024-01-15T20:47:02.360Z","dependency_job_id":"70f7c4d2-32b9-4a29-9986-3576f0fc8c77","html_url":"https://github.com/forester-bt/forester","commit_stats":{"total_commits":147,"total_committers":4,"mean_commits":36.75,"dds":0.2517006802721088,"last_synced_commit":"d739fc28c3d83bed23c4d9d488b6bbccd251a31f"},"previous_names":["besok/golem","besok/forester"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/forester-bt/forester","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forester-bt%2Fforester","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forester-bt%2Fforester/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forester-bt%2Fforester/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forester-bt%2Fforester/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/forester-bt","download_url":"https://codeload.github.com/forester-bt/forester/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forester-bt%2Fforester/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29489314,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ai","behavior","behavior-tree","behavior-trees","behaviortree","dsl","game-development","orchestration","robotics","tree"],"created_at":"2026-02-14T05:09:18.339Z","updated_at":"2026-02-15T21:01:03.153Z","avatar_url":"https://github.com/forester-bt.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg width=\"255\" alt=\"Logo\" src=\"docs/src/pics/logo.png\"\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eForester - A fast and modular orchestration engine, implementing behavior trees.\u003c/h1\u003e\n\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Visualization of the tree\"\n       src=\"docs/src/pics/main.svg\"\u003e\n\u003c/p\u003e\n\n## About\n\nForester represents a framework that provides the toolkit to perform the effective task orchestrations.\nThe tasks can be performed synchronously or asynchronously, locally or remotely.\nForester takes care of the correct performance and distribution of the tasks.\nThe main concept of the framework is the flow based on the behavior trees\nit can be effectively used in the game, ai, robotic areas, or anywhere where the workflow engine can be applied.\n\n## Example\n\nThe language is very simple\n```\nimport \"std::actions\"\n\nroot main sequence {\n    store(\"info\", \"initial\")\n    retryer(task({}), success())\n    store(\"field\",\"some_info\")\n}\n\nfallback retryer(t:tree, default:tree){\n    retry(5) t(..)\n    fail(\"just should fail\")\n    default(..)\n}\n\nimpl task(config: object);\n```\n\nand simulator test\n\n```rust\n#[test]\nfn smoke() {\n    let mut sb = SimulatorBuilder::new();\n\n    let root = test_folder(\"simulator/smoke\");\n\n    sb.root(root);\n    sb.profile(PathBuf::from(\"sim.yaml\"));\n    sb.main_file(\"main.tree\".to_string());\n\n    let mut sim = sb.build().unwrap();\n    let tracer = \u0026sim.forester.tracer;\n    sim.run().unwrap();\n}\n```\n\nor running from the console\n\n```shell\nforest sim --root tree\\tests\\simulator\\smoke\\  --profile sim.yaml\n```\n\n## Why Forester\n\nThe main idea and the target of Forester is to make the process of chaining a complex logic\nof the different tasks together effective and easy.\n\nThe following set of features is summoned to highlight the framework among the others.\n\n- The dsl to describe the logic\n- The framework provides the ability to create async and sync tasks \n- The framework provides the ability to create remote and local tasks\n- The tooling to visualize and trace the execution of the tree\n- The simulation mode is supposed to aid with the design decisions\n- The optimizations and analysis of the tree\n- The validation engine allows the users to create the manually defined validations\n\n## Why behavior trees\n\nFirstly, they provide a strong math abstraction over the orchestration logic \\\nand enables to separate the business logic and the tree logic itself.\n\nOn the other hand, they have only a small set of logically conjucted components making the design easier,\nOne of the great advantages of the behavior trees is that they provide a good conception of modularity. \\\nArticles that introduce into the basics of the behavior trees\n- [Chris Simpson’s Behavior trees for AI: How they work](https://outforafight.wordpress.com/2014/07/15/behaviour-behavior-trees-for-ai-dudes-part-1/)\n- [Introduction to behavior trees](https://robohub.org/introduction-to-behavior-trees/)\n- [State Machines vs Behavior Trees](https://www.polymathrobotics.com/blog/state-machines-vs-behavior-trees)\n \n## Documentation\n\nThe common documentation is available as a [mini-book](https://forester-bt.github.io/forester/), describing all aspects of working with the framework\n\n## Publications\n - [Part I. The orchestration with behavior trees. Simulation.](https://medium.com/@zhguchev/forester-the-orchestration-with-behaviour-trees-part-i-simulation-b10867aab8db)\n - [Part II. The dsl above trees. Higher order trees.](https://medium.com/@zhguchev/forester-part-ii-why-do-we-need-to-have-a-language-above-trees-bdf046bf4a73)\n - [Part III. How to change the runtime tree on the fly. Trimming.](https://medium.com/@zhguchev/forester-part-iii-trimming-change-the-runtime-tree-on-the-fly-185a6e61a7aa)\n\n## Contributing\n\nCurrently, the project is under active development (there are a lot of blind spots), so any help is highly appreciated.\nAny help is highly appreciated at any stage of the project but at now especially.\n\nA guideline about contributing to Forester can be found in the\n[`CONTRIBUTING.md`](CONTRIBUTING.md) file.\n\n## License\n\nForester is released under the [Apache License, Version 2.0](LICENSE).\n\n## Logo\n\n\u003ca href=\"https://www.freepik.com/free-vector/logo-with-abstract-tree_29192741.htm#from_view=detail_alsolike\"\u003eThe logo provided by bunny\u003c/a\u003e on Freepik\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforester-bt%2Fforester","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforester-bt%2Fforester","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforester-bt%2Fforester/lists"}