-
-
Notifications
You must be signed in to change notification settings - Fork 941
C Extension Alternatives
JRuby does not support native C extensions, but it does have its own Java native extensions API. Several gems have implementations of both Java and C extensions rolled into the same gem and those will not be listed here since they will just work. In some cases there is a JRuby version with a slightly different name or possibly even a totally different name and we list these here so you can update your Gemfile:
gem 'therubyracer', platform: :mri
gem 'therubyrhino', platform: :jrubyWhen there is not an exact match some gems come close enough where a little work on your part can make your application compatible with JRuby.
This page lists common C extensions and JRuby-friendly alternatives you can use to replace them.
If you are interested in helping us port an extension to JRuby, this article is helpful: Your first Ruby native extension: Java see also JRuby examples for a maven build.
| Gem | Suggestions |
|---|---|
| bson_ext |
bson_ext isn't used with JRuby. Instead, some native Java extensions are bundled with the bson gem. |
| charlock_holmes | Use charlock_holmes-jruby instead. |
| curb | Rurl is an example how to implement some of curb's functionality using Apache HttpClient |
| curses | Use ffi-ncurses. ncurses is literal API and lower level than curses |
| fast_xor | use xorcist instead or roll slower but pure ruby equivalent. |
| escape_utils | Most of the escape methods here are now native code in CRuby and JRuby for the CGI library. Others can be found in the JDK itself. |
| image_science | Use image_voodoo instead. |
| kyotocabinet | Try using kyotocabinet-java instead. This isn't 100% complete yet, but it covers most of the API. |
| memcached | Try using jruby-memcached instead. Alternatively you can use jruby-ehcache, a JRuby interface to Java's (JSR-107 compliant) Ehcache. |
| mysql | Use activerecord-jdbcmysql-adapter. |
| mysql2 | Use activerecord-jdbcmysql-adapter. |
| oj | Try gson, json or json_pure instead. |
| pg | Use activerecord-jdbcpostgresql-adapter instead or pg_jruby (drop-in replacement). |
| pry-byebug | Use pry-debugger-jruby instead. |
| RDiscount | Use kramdown, Maruku (pure Ruby) or markdown_j (wrapper around a Java library) |
| RedCarpet | Same as with RDiscount use alternatives such as kramdown, Maruku or markdown_j |
| RMagick | Try RMagick4J (implements ImageMagick functionality in Java) or preferably use alternatives mini_magick & quick_magick. For simple resizing, cropping, greyscaling, etc look at image_voodoo. You can also use Java's Graphics2D. |
| sqlite3 | Use activerecord-jdbcsqlite3-adapter. |
| therubyracer | Try using therubyrhino instead (or dienashorner on Java 8+). |
| Thin | Use Puma. |
| Unicorn | Use Puma. |
| win32ole | Use the jruby-win32ole gem (preinstalled in JRuby's Windows installer). |
| yajl-ruby | Try json or json_pure instead. Unfortunately there is no known equivalent JSON stream parser. |
| rugged | Try using rjgit. Not a drop-in replacement, but API is pretty similar |
Please add to this list with your findings.
*Note that the JRuby-Lint gem parses the contents of the list above to use for its Ruby gem checker. In order for JRuby-Lint to use the information, please adhere to the table format above and the links to projects below (in the source for this page).