{"id":15019172,"url":"https://github.com/arfur-rs/arfur","last_synced_at":"2025-10-24T05:31:32.690Z","repository":{"id":58729138,"uuid":"511656529","full_name":"arfur-rs/arfur","owner":"arfur-rs","description":"Rust + FRC = safe + composable + expressive","archived":false,"fork":false,"pushed_at":"2023-09-04T19:55:50.000Z","size":439,"stargazers_count":14,"open_issues_count":1,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-31T00:07:31.020Z","etag":null,"topics":["bindings","frc","robotics","rust"],"latest_commit_sha":null,"homepage":"https://docs.rs/arfur","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/arfur-rs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-07T19:51:16.000Z","updated_at":"2024-10-30T05:04:00.000Z","dependencies_parsed_at":"2023-02-09T09:00:29.557Z","dependency_job_id":null,"html_url":"https://github.com/arfur-rs/arfur","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arfur-rs%2Farfur","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arfur-rs%2Farfur/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arfur-rs%2Farfur/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/arfur-rs%2Farfur/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/arfur-rs","download_url":"https://codeload.github.com/arfur-rs/arfur/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237918710,"owners_count":19387305,"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":["bindings","frc","robotics","rust"],"created_at":"2024-09-24T19:53:06.337Z","updated_at":"2025-10-24T05:31:29.137Z","avatar_url":"https://github.com/arfur-rs.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Arfur](./assets/banner.svg)\n\n\u003ch6 align=\"center\"\u003e\n    \u003ca href=\"./LICENSE.md\"\u003eLicense\u003c/a\u003e\n  · \u003ca href=\"https://docs.rs/arfur\"\u003eDocs\u003c/a\u003e\n\u003c/h6\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://crates.io/crates/arfur\"\u003e\u003cimg alt=\"Crates.io\" src=\"https://img.shields.io/crates/v/arfur?color=81B29A\u0026logoColor=D9E0EE\u0026style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://docs.rs/arfur\"\u003e\u003cimg alt=\"docs.rs\" src=\"https://img.shields.io/docsrs/arfur?color=525893\u0026logoColor=D9E0EE\u0026style=for-the-badge\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**Arfur** is a set of bindings and a framework that builds on top of the [WPILib](https://wpilib.org/) suite, enabling Rust-based robot programs in [FRC](https://www.firstinspires.org/robotics/frc).\n\n\u003chr/\u003e\n\n```rust\nuse arfur::prelude::*;\n\nfn main() -\u003e Result\u003c()\u003e {\n    let robot: Robot = RobotBuilder::default().initialize()?;\n\n    // Having a `Robot` type is proof that the HAL has been initialized. We can\n    // use to construct all kinds of handles!\n\n    Ok(())\n}\n```\n\n## Features\n\n * Rust bindings to WPILib: Arfur is a set of bindings, not a reimplementation,\n   meaning you can expect the reliability of the official WPILib C++\n   implementation.\n\n * Type safety at its finest: The public API is idiomatically Rust, meaning you\n   have type-level gaurantees that undefined behaviour will not and *cannot*\n   occur.\n\n * An efficient robot: Keep the runtime speed provided by C++. Arfur is low- to\n   zero- overhead.\n\n * A powerful ecosystem: Hook into Rust's ecosystem for logging, mathematical\n   computations, and more!\n\n## Requirements\n\nWhat do you need to get started?\n\n\u003c!-- TODO: getting started guide that outlines toolchain installation --\u003e\n\n * **Rust**\n   * MSRV: `1.72.0`\n   * Toolchain: `stable`\n * **ARM Compiler Toolchain**: Since you're building to the RoboRIO, which uses\n   a different architecture than most personal computers, you'll need a\n   toolchain that can build to ARM.\n   * Option 1: install a generic ARM toolchain.\n   * Option 2: install the\n     [FRC ARM toolchain](https://github.com/wpilibsuite/opensdk/).\n     * MSRV: `2023-9`\n   * Don't forget to point Arfur to your toolchain executable.\n * (optional) **Nix**: Use [Nix](https://nixos.org/) to ditch both requirements\n   mentioned above.\n   * Your choice of Rust installation method.\n   * Use the Nix derivation in `./nix` to grab the FRC ARM toolchain.\n\n\u003c!-- TODO: Make Nix drv public --\u003e\n\n## Getting started\n\nArfur is still highly in development. Do not consider this project stable by\nany means.\n\nA complete guide is, unfortunately, still in the works. For now, sift through\nthe crate's [examples](https://github.com/arfur-rs/arfur/tree/main/examples)\nand [documentation](https://docs.rs/arfur). There's more to come!\n\n## Development\n\nSo, you want to help out with this project? We'd love to chat about the\nproject, just open an issue or make a PR.\n\nDue to the inherently complex nature of generate bindings for large projects,\nArfur uses `xtask` to manage the project. After getting access to the source\ncode (presumably via cloning the git repository), run:\n\n```\ncargo xtask bindgen\n```\n\nThis will generate the bindings as necessary. Then, run:\n\n```\ncargo b --example raw_usage --target arm-unknown-linux-gnueabi\n```\n\nTo build an example.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farfur-rs%2Farfur","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farfur-rs%2Farfur","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farfur-rs%2Farfur/lists"}