This articles was published on 2013-01-04

The mgem GEM

After MASUI’s hard work of refactoring the complete build process, we have now a quite clean and easy way to create a GEM for mruby. On the other side it is still quite hard to get an overview of all available GEMs. To solve this problem I built a small tool called mgem.


The installation is straight forward, just execute:

$ gem install mgem

And you have the command mgem available on your command line.


You can search and find GEMs with the mgem command. For example the amount of all available GEMs can be seen with this command:

$ mgem size
Total # of GEMs: 7

To list all available GEMs you can hit:

$ mgem list
List of all GEMs:
  mruby-curl          CURL HTTP Client
  mruby-http          HTTP Parser
  mruby-json          JavaScript Object Notation
  mruby-md5           MD5 Hash Alghorithm
  mruby-sqlite3       SQLite3 Database
  mruby-uv            libuv interface
  mruby-v8            V8 JavaScript Engine

To activate a GEM you do:

$ mgem list active
List of active GEMs:

$ mgem add mruby-sqlite3
'mruby-sqlite3' activated!

List of active GEMs:
  [X] mruby-sqlite3       SQLite3 Database

To generate a build configuration which contains all active GEMs type:

$ mgem config do |conf| = ENV['CC'] || 'gcc'
  conf.ld = ENV['LD'] || 'gcc' = ENV['AR'] || 'ar'

  conf.cflags << (ENV['CFLAGS'] || %w(-g -O3 -Wall -Werror-implicit-function-declaration))
  conf.ldflags << (ENV['LDFLAGS'] || %w(-lm))

  conf.gem :git => ''

For a detailed information about a specific GEM you enter:

$ mgem info mruby-curl
Detail information of 'mruby-curl':
  Name:        mruby-curl
  Author:      mattn
  Description: CURL HTTP Client
  Protocol:    git

You have to update from time to time the GEM list database:

$ mgem update
Update list of GEMs...

And for further information about the mgem command:

$ mgem help
mgem (Version 0.0.2) is a library manager for mruby

  mgem size              How many GEMs are available?
  mgem list [active]     List GEMs
  mgem info *pattern*    Show detail information about a GEM
  mgem add *name*        Activate a GEM
  mgem rm *name*         De-Activate a GEM
  mgem search *pattern*  Search for GEMs
  mgem config            Generate a mruby build config including all active GEMs
  mgem update            Update the list of GEMs


How does it work

To maintain a list of GEMs I created a repository called mgem-list. This repository contains a yaml file for each GEM. If you want to add your GEM to this list just send me a pull request or create an issue. Just take an existing file as a reference. I know that this is not the optimal solution but at the moment I don’t even know if anybody else than me needs such a tool. So if you think it is useful, send me a link to your mruby GEM and I add it to the system. If you have a better idea of how to manage the GEMs I’m also interested in it.