Crate rb_sys

source ·
Expand description


Join the discussion

Autogenerated Rust bindings for Ruby. Uses the rust-bindgen crate to generate bindings from the ruby.h header.

⚠️ Notice

This is a very low-level library. If you are looking to write a gem in Rust, you should probably use crate, with the rb-sys-interop feature.

If you actually need raw/unsafe bindings to libruby, then this crate if for you!


Writing a Ruby gem

Ruby gems require a bit of boilerplate to be defined to be usable from Ruby. rb-sys makes this process painless by doing the work for you, by simply enabling the gem feature.

rb-sys = "0.9"

Under the hood this ensures we do not link libruby (unless on Windows), and defines a ruby_abi_version function for Ruby 3.2+.

See this example of creating a Ruby gem in Rust

Embedding libruby in your Rust app

IMPORTANT: If you are authoring a Ruby gem, you do not need to enable this feature.

If you need to link libruby (i.e. you are initializing a Ruby VM in your Rust code), use can enable the link-ruby feature:

rb-sys = { version = "0.9",  features = ["link-ruby"] }

Static libruby

You can also force static linking of libruby:

rb-sys = { version = "0.9", features = ["ruby-static"] }

Alternatively, you can set the RUBY_STATIC=true environment variable.

Other features

  • global-allocator: Report Rust memory allocations to the Ruby GC (recommended).
  • ruby-static: Link the static version of libruby.
  • link-ruby: Link libruby.
  • bindgen-rbimpls: Include the Ruby impl types in bindings.
  • bindgen-deprecated-types: Include deprecated Ruby methods in bindings.


Licensed under either of

  • Apache License, Version 2.0, (LICENSE-APACHE or
  • MIT license (LICENSE-MIT or

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.




Type Aliases