The primary goal of
rb-sys is to make building native Ruby extensions in Rust easier than it would be in C. If
it's not easy, it's a bug.
- Rust bindings (
- Ruby gem for compiling extensions
- GitHub action to setup a Ruby on Rust environment for testing
- GitHub action to easily cross compile in CI
- Battle-tested Rust bindings for the Ruby C API
- Support for Ruby 2.4+
- Supports all major platforms (Linux, macOS, Windows)
- Cross compilation of gems
- Integration with
Below are some examples of how to use
rb-sys to build native Rust extensions. Use these as a starting point for your
building your own gem.
magnusto package the rust
wasmtimelibrary as a Ruby gem.
oxi-testgem is the canonical example of how to use
rb-sys. It is a minimal, fully tested with GitHub actions, and cross-compiles native gem binaries. This should be your first stop for learning how to use
Docs for the
rb_sysgem and using it with an
magnusrepo has some solid examples.
- This demo repository that @ianks made for a talk has a gem which has 4 native extensions in the
- This PR for the
yrbgem shows how to integrate
magnusinto an existing gem.
- A guide for setting debug breakpoints in VSCode is available.
- Ruby: 2.4+ (for full compatibility with Rubygems)
- Rust: 1.51+ (for old versions of rust toolchains ubuntu)
We support cross compilation to the following platforms (this information is also available in the
directory for automation purposes):
|mswin||✅||not available on Docker|
We make a concerted effort to help out new users. If you have questions, please join our Slack and post your
question in the
#general channel. Alternatively, you can open an issue and we'll try to help you out.
See the CONTRIBUTING.md file for information about setting up a development environment.
Bug reports and pull requests are welcome on GitHub at https://github.com/oxidize-rb/rb-sys.
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.