Home

Awesome

<p align="center">

rust crates.io docs discord

</p> <table border="0"> <tr> <td>

logo

</td> <td>

raylib-rs

raylib-rs is a Rust binding for raylib 5.0. It currently targets the stable Rust toolchain, version 1.78 or higher.

Please checkout the showcase directory to find usage examples!

Though this binding tries to stay close to the simple C API, it makes some changes to be more idiomatic for Rust.

</td> </tr> </table>

Most development happens over at: https://github.com/raylib-rs/raylib-rs

Installation

Supported Platforms

APIWindowsLinuxmacOSWebAndroid
core:heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark::x:
rgui:heavy_check_mark::heavy_check_mark::heavy_check_mark::x:
physac:construction::construction::construction::x:
rlgl:heavy_check_mark::x::x::x:

Build Dependencies

Requires glfw, cmake, and curl. Tips on making things work smoothly on all platforms is appreciated. Follow instructions for building raylib for your platform here

  1. Add the dependency to your Cargo.toml:
[dependencies]
raylib = { version = "5.0" }
  1. Start coding!
use raylib::prelude::*;

fn main() {
    let (mut rl, thread) = raylib::init()
        .size(640, 480)
        .title("Hello, World")
        .build();

    while !rl.window_should_close() {
        let mut d = rl.begin_drawing(&thread);

        d.clear_background(Color::WHITE);
        d.draw_text("Hello, world!", 12, 12, 20, Color::BLACK);
    }
}

Tech Notes

Building from source

  1. Clone repository: git clone --recurse-submodules
  2. cargo build

If building for Wayland on Linux

  1. Install these packages:
    libglfw3-dev wayland-devel libxkbcommon-devel wayland-protocols wayland-protocols-devel libecm-dev
Note that this may not be a comprehensive list, please add details for your distribution or expand on these packages if you believe this to be incomplete.
  1. Enable wayland by adding features=["wayland"] to your dependency definition

Cross-compiling using cross

The @rust-embedded project provides a handy tool called cross that uses docker to cross-compile any cargo project to one of their many supported platforms. This tool makes it easy to cross-compile raylib-rs for binary distribution (in cases where you are producing a pre-compiled game for example).

Anything to Windows

Cross-compiling from other platforms to Windows is the simplest. Just build your project with this command instead of the usual cargo build:

cross build --target x86_64-pc-windows-gnu --release

It should be noted that the resulting exe will likely not run under wine due to an issue with Raylib's audio handling.

Anything to Linux

Cross-compiling from any platform to Linux, or from Linux to Linux requires a little extra work since raylib-sys has some system dependencies not provided by cross. This following example assumes you are compiling for x86_64-unknown-linux-gnu, but it can be any Linux-y triple.

Firstly, a custom build container must be defined. The following Dockerfile is the minimum setup for compiling raylib-sys:

FROM rustembedded/cross:x86_64-unknown-linux-gnu-0.2.1

RUN apt-get update -y
RUN apt-get install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev -y

With the image defined, build it locally with:

docker build -t raylib_rs_env .

This will produce a local docker image called raylib_rs_env which cross will use instead of the default Linux image(s). To tell cross to use this image, create a Cross.toml file beside your Cargo.toml, and add the following (remembering to change things to suit your setup):

[target.x86_64-unknown-linux-gnu]
image = "raylib_rs_env"

The Linux build can now be produced with:

cross build --target x86_64-unknown-linux-gnu --release

MacOS / Darwin / IOS

cross does not support cross-compilation to any of Apple's operating systems as of now. Keep an eye on their repository in case this ever changes.

Extras

Testing

The raylib-test crate tests the bindings by opening a window, and checking the results of various functions. It requires nightly to use.

Future Goals

Contribution & Support

All contributions are welcome. Chat about raylib on discord