{"id":37702976,"url":"https://github.com/graphcore-research/gwr","last_synced_at":"2026-01-20T17:49:45.944Z","repository":{"id":321740735,"uuid":"944503550","full_name":"graphcore-research/gwr","owner":"graphcore-research","description":"Great Western Runtime","archived":false,"fork":false,"pushed_at":"2025-12-18T16:53:50.000Z","size":1360,"stargazers_count":0,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-21T20:38:00.346Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://graphcore-research.github.io/gwr","language":"Rust","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/graphcore-research.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":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":"2025-03-07T13:12:15.000Z","updated_at":"2025-12-18T16:53:52.000Z","dependencies_parsed_at":"2025-10-31T09:38:33.119Z","dependency_job_id":null,"html_url":"https://github.com/graphcore-research/gwr","commit_stats":null,"previous_names":["graphcore-research/gwr"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/graphcore-research/gwr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphcore-research%2Fgwr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphcore-research%2Fgwr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphcore-research%2Fgwr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphcore-research%2Fgwr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/graphcore-research","download_url":"https://codeload.github.com/graphcore-research/gwr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/graphcore-research%2Fgwr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: 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":[],"created_at":"2026-01-16T13:04:10.465Z","updated_at":"2026-01-16T13:04:11.218Z","avatar_url":"https://github.com/graphcore-research.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- Copyright (c) 2023 Graphcore Ltd. All rights reserved. --\u003e\n\n[![CI](https://github.com/graphcore-research/gwr/actions/workflows/ci.yaml/badge.svg)](https://github.com/graphcore-research/gwr/actions/workflows/ci.yaml)\n[![Online documentation](https://github.com/graphcore-research/gwr/actions/workflows/online-documentation.yaml/badge.svg)](https://github.com/graphcore-research/gwr/actions/workflows/online-documentation.yaml)\n\n\u003cdiv align=\"center\"\u003e\n\n![The Great Western Runtime](https://raw.githubusercontent.com/graphcore-research/gwr/main/gwr-developer-guide/md_src/gwr.png)\n\n[Developer guide] | [API documentation]\n\n\u003c/div\u003e\n\n[Developer guide]: https://graphcore-research.github.io/gwr\n[API documentation]:\n  https://graphcore-research.github.io/gwr/rustdoc/gwr_engine/index.html\n\n# GWR\n\n\u003c!-- ANCHOR: intro --\u003e\n\nWelcome to the GWR project. The core GWR packages are developed as a monorepo,\nwhich together provide the following functionality:\n\n- An event-driven [simulation engine].\n- [Logging] and [log viewing] system.\n- Hierarchical configuration support.\n- Documentation tooling.\n- A library of [components] and basic [models].\n- A set of [example applications].\n\n## Simple simulation example\n\nThis example shows how the GWR engine and components can be used to create a\nsimple simulation. This simulation connects a source, which will transmit 10\nobjects, to a sink, which counts the number of objects it receives.\n\n```rust\nuse gwr_components::sink::Sink;\nuse gwr_components::source::Source;\nuse gwr_components::{connect_port, option_box_repeat};\nuse gwr_engine::engine::Engine;\nuse gwr_engine::run_simulation;\n\nfn main() {\n  let mut engine = Engine::default();\n  let clock = engine.default_clock();\n  let mut source = Source::new_and_register(\u0026engine, engine.top(), \"source\", option_box_repeat!(0x123 ; 10))\n      .expect(\"should be able to create and register `Source`\");\n  let sink = Sink::new_and_register(\u0026engine, \u0026clock, engine.top(), \"sink\")\n      .expect(\"should be able to create and register `Sink`\");\n  connect_port!(source, tx =\u003e sink, rx)\n      .expect(\"should be able to connect `Source` to `Sink`\");\n  run_simulation!(engine);\n  assert_eq!(sink.num_sunk(), 10);\n}\n```\n\n\u003c!-- ANCHOR_END: intro --\u003e\n\n[components]: gwr-developer-guide/md_src/components/chapter.md\n[example applications]: gwr-developer-guide/md_src/applications/examples.md\n[log viewing]: gwr-developer-guide/md_src/gwr_spotter/chapter.md\n[Logging]: gwr-developer-guide/md_src/gwr_track/chapter.md\n[models]: gwr-developer-guide/md_src/models/chapter.md\n[simulation engine]: gwr-developer-guide/md_src/gwr_engine/chapter.md\n\n\u003c!-- ANCHOR: why_gwr --\u003e\n\n## Why GWR?\n\nGWR aims to provide a complete modelling workflow, supporting silicon chip and\nsystem architecture projects from the initial exploration phase, through more\ndetailed evaluations, and finally to a full specification and golden reference\nquality model.\n\nAsync language features are utilised to allow expressive description of physical\nworld parallelism. An asynchronous runtime executor is included within the\ngwr-engine package for this purpose, which supports both event-driven and\nclocked modelling.\n\nGWR is designed with scalability in mind, with the aim being to enable both high\naccuracy/detailed simulations and large scale simulations in a tractable\ntimeframe. To meet this goal it is therefore important that both the development\nof models using GWR, as well as the execution of these models is efficient. A\ndeveloper guide covering the use of the GWR for modelling, as well as API\ndocumentation for each package is included. The general philosophy adopted is to\nraise errors as early as possible for developers, so as many as possible will be\nat compile time rather than run time, as well as to guard against common errors\nsuch as unconnected or misconnected model components where possible.\n\nBuilt-in support for external documentation tooling allows for the creation of a\nsingle source of truth which contains both the readable specification and the\nexecutable model. Where appropriate sections of specification and the reference\nmodel for that part of the specification can reside within the same source file\nif desired.\n\nContinuous integration is run on both Linux (Ubuntu LTS) and macOS to ensure\nongoing compatibly with whichever platform developers wish to use. A robust\nrelease process is also defined to guarantee semantic versioning of packages and\nautomated generation of release notes ensuring user upgrade processes are as\nsmooth as possible.\n\nGWR is written in [Rust] and takes advantage of a number of the features it\noffers. In brief summary these are the strong typing system and emphasis on\ncorrectness in Rust, excellent and easy to use tooling and build system, and\nexcellent runtime performance (which we have found to be on a par with C++).\nMore information on this, and guides to help get started with the language are\nincluded in the [Rust chapter] of the developer guide.\n\n[Rust]: https://www.rust-lang.org\n\n\u003c!-- ANCHOR_END: why_gwr --\u003e\n\n[Rust chapter]: gwr-developer-guide/md_src/rust/chapter.md\n\n\u003c!-- ANCHOR: tooling_bootstrap --\u003e\n\n## Tooling\n\nAll of the required tooling to build and use, and to develop GWR can be\ninstalled using the scripts included within the repo. These scripts are designed\nto be used by both users and the CI system.\n\nDependencies will be installed using package managers where possible, with [APT]\nbeing used on Linux and [Homebrew] on macOS ([Homebrew] itself will be installed\nas required if not already avaliable). Various cross-platform package managers\nare also used, including [rustup], [Cargo], and [npm].\n\nSee the [Using GWR Packages](#using-gwr-packages) and\n[Developing GWR Packages](#developing-gwr-packages) sections for further details\non these install scripts.\n\n### Rust Tools\n\nThe correct Rust toolchain will automatically be selected and used by [rustup]\nwhen commands are executed from within the GWR directory (or below). This\nbehaviour is controlled by the the `rust-toolchain.toml` file.\n\n[APT]: https://wiki.debian.org/AptCLI\n[Cargo]: https://doc.rust-lang.org/stable/cargo\n[Homebrew]: https://brew.sh\n[npm]: https://www.npmjs.com\n[rustup]: https://rust-lang.github.io/rustup\n\n\u003c!-- ANCHOR_END: tooling_bootstrap --\u003e\n\n\u003c!-- ANCHOR: package_users --\u003e\n\n## Using GWR Packages\n\nFor users of the GWR packages a `stable` Rust toolchain is required, as well as\nexternal tools such as [Asciidoctor], [Cap'n Proto], and [mdBook]. All of the\nrequired build dependencies can be installed by running:\n\n```bash\n./.github/actions/install-build-dependencies/install.sh\n```\n\n\u003c!-- prettier-ignore-start --\u003e\n\n\u003e [!IMPORTANT]\n\u003e To ensure that the correct Rust toolchain is used the script must be executed\n\u003e from within the GWR directory.\n\n\u003e [!Tip]\n\u003e Although the script is interactive, selecting the default option\n\u003e (\u003ckbd\u003eEnter\u003c/kbd\u003e) at every step is a reasonable choice and will result in a\n\u003e working environment.\n\n\u003e [!NOTE]\n\u003e Some of the actions taken by the script may request elevated permissions via\n\u003e `sudo`.\n\n\u003c!-- prettier-ignore-end --\u003e\n\n[Asciidoctor]: https://asciidoctor.org\n[Cap'n Proto]: https://capnproto.org\n[mdBook]: https://rust-lang.github.io/mdBook\n\n\u003c!-- ANCHOR_END: package_users --\u003e\n\n\u003c!-- ANCHOR: package_developers --\u003e\n\n## Developing GWR Packages\n\nFor developers of the GWR packages both `stable` and `nightly` Rust toolchains\nare required, as well external tools such as [cargo-deny], [cargo-about]\n[cargo-semver-checks], [Cocogitto], [pre-commit], [Prettier], and [Release-plz].\nAll of the required development dependencies can be installed by running:\n\n```bash\n./.github/actions/install-dev-dependencies/install.sh\n```\n\n\u003c!-- prettier-ignore-start --\u003e\n\n\u003e [!IMPORTANT]\n\u003e To ensure that the correct Rust toolchain is used the script must be executed\n\u003e from within the GWR directory.\n\n\u003e [!Tip]\n\u003e Although the script is interactive, selecting the default option\n\u003e (\u003ckbd\u003eEnter\u003c/kbd\u003e) at every step is a reasonable choice and will result in a\n\u003e working environment.\n\n\u003e [!NOTE]\n\u003e Some of the actions taken by the script may request elevated permissions via\n\u003e `sudo`.\n\n\u003c!-- prettier-ignore-end --\u003e\n\nFinally the pre-commit hooks need to be installed within the cloned copy of the\nGWR repo:\n\n```bash\npre-commit install\n```\n\n### Branching the Repo\n\nChanges to GWR packages are developed on branches separate to `main` (the\ndefault) branch of the repo, and then incorporated when complete via a pull\nrequest. Long running or collaborative development will likely benefit from\nhaving the branch pushed to the `origin` well in advance of when a pull request\nmay be opened, and doing so will cause the CI workflows to be run on every\ncommit.\n\nFor short lived branches pushed only at the point of opening a pull request the\nbranch naming prefix `pr/` should be used, for example, `pr/new-example-app`.\nBranches named with this prefix will still cause the pull request specific CI\nworkflow to run, but will avoid the push specific CI workflow from running until\nthe point they are merged.\n\n### Committing a Change\n\nAll commits made to the GWR repo must follow the [Conventional Commits] 1.0.0\nspecification. This allows the automatic generation of both a top-level\nchangelog covering the whole workspace as well as an individual changelog for\neach package within the workspace.\n\nWhen writing a commmit message in this form:\n\n- The set of `type`s that should generally be used can be found in the\n  `commit_parsers` array within the `release-plz.toml` configuration file. This\n  array also details the sections each type will be included in within the\n  changelog.\n- The `optional scope` should be used to detail the name of the updated package.\n  For example:\n\n  ```text\n  fix(gwr-developer-guide): check for panic when running mdBook tests\n  ```\n\n  - If the change applied to multiple, but not all packages, the names should be\n    comma seperated. For example:\n    ```text\n    feat(gwr-track,gwr-spotter): capnp binary file support\n    ```\n  - If the change applies to all Rust packages, infrastructure, CI, or general\n    configuration the scope can be omitted. For example:\n    ```text\n    docs: add example use for all public APIs\n    ```\n    ```text\n    infra: set default pre-commit hooks to install\n    ```\n\nDuring the commit process a number of different hooks will be invoked by\n[pre-commit]:\n\n- The [Cocogitto] tool is used to lint the text of the commit message, ensuring\n  that it adheres to the [Conventional Commits] specification.\n- All packages within the workspace will be checked for adherence to proper\n  semantic versioning using [cargo-semver-checks].\n  - As this can be a time consuming set of checks to run, by default, they are\n    only performed by the [CI system].\n  - The checks can be run locally with:\n    ```bash\n    pre-commit run --hook-stage manual --all-files cargo-semver-checks\n    ```\n- All dependencies will be checked for vulnerabilities and compatible licensing\n  using [cargo-deny].\n- The licenses of all dependencies will collated and included in the\n  [licenses.html] file using [cargo-about].\n- Source files will be formatted using `rustfmt`, [Prettier], and built in tools\n  from the [pre-commit-hooks] library.\n- Rust source will be linted using [clippy] (via the `cargo clippy-strict`\n  alias).\n- Rust source will be compiled using `cargo check`.\n\n### Making a Release\n\nThe release process for all packages within the GWR workspace is handled by the\n[Release-plz] tool.\n\nTo start the release process, run:\n\n```bash\nrelease-plz release-pr\n```\n\nwhich will bump the version numbers of any updated packages and update the\npackage CHANGELOG.md files as required. These changes will be automatically\ncommitted and a pull-request opened on Github for the proposed release to be\nreviewed.\n\nOnce the pull-request has been approved and merged the release process is\ncompleted by running:\n\n```bash\nrelease-plz release\n```\n\nwhich will tag the repo marking the correct commit with the versions for each\nupdated package, and automatically publishes the updated packages using\n`cargo publish` and as Github releases.\n\n[Cap'n Proto]: https://capnproto.org\n[cargo-about]: https://github.com/EmbarkStudios/cargo-about\n[cargo-deny]: https://github.com/EmbarkStudios/cargo-deny\n[cargo-semver-checks]: https://github.com/obi1kenobi/cargo-semver-checks\n[CI system]: https://github.com/graphcore-research/gwr/actions/workflows/ci.yaml\n[clippy]: https://doc.rust-lang.org/clippy\n[Cocogitto]: https://docs.cocogitto.io\n[Conventional Commits]: https://www.conventionalcommits.org/en/v1.0.0\n[pre-commit]: https://pre-commit.com\n[pre-commit-hooks]: https://github.com/pre-commit/pre-commit-hooks\n[Prettier]: https://prettier.io\n[Release-plz]: https://release-plz.dev\n\n\u003c!-- ANCHOR_END: package_developers --\u003e\n\n[licenses.html]: https://graphcore-research.github.io/gwr/licenses.html\n\n\u003c!-- ANCHOR: dev_docs --\u003e\n\n## Developer Guide\n\nThe developer guide is an `mdbook`. In order to produce the document it is\nnecessary to first install the development dependencies by running:\n\n```bash\n./.github/actions/install-dev-dependencies/install.sh\n```\n\nand then build and open the user guide with:\n\n```bash\ncd gwr-developer-guide/\nmdbook build --open\n```\n\nIf developing the guide then this command will launch a process that continually\nmonitors the source and regenerates the HTML if it changes (causing the browser\nto automatically refresh):\n\n```bash\nmdbook serve --open\n```\n\n\u003c!-- ANCHOR_END: dev_docs --\u003e\n\n\u003c!-- ANCHOR: api_docs --\u003e\n\n## API Documentation\n\nDocumentation within the GWR source is done using [`rustdoc`] formatting such\nthat APIs are documented and any code snippets are compiled and run.\n\nThis documentation can be generated by running:\n\n\u003c!-- ANCHOR: api_docs_cmd --\u003e\n\n```bash\ncargo doc-gwr --open\n```\n\nThe documentation can also be generated to include private items, which can be\nuseful when developing GWR packages, by running:\n\n```bash\ncargo doc-gwr-dev --open\n```\n\n\u003c!-- ANCHOR_END: api_docs_cmd --\u003e\n\n[`rustdoc`]: https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html\n\n\u003c!-- ANCHOR_END: api_docs --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphcore-research%2Fgwr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgraphcore-research%2Fgwr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgraphcore-research%2Fgwr/lists"}