The letter A styled as Alchemists logo. lchemists
Published December 13, 2020 Updated December 26, 2025
Cover
Ruby Bundler Scaffold Alternatives

Building a new project is fun, at first, but when you need to build and maintain multiple projects, this gets tedious fast.

Bundler is primarily known for resolving gem dependencies but can also be used for gem skeleton generation. Unfortunately, Bundler looses the ability to scale once you are developing and maintaining multiple projects and/or gems. For that, you’ll need more robust tooling so we’ll explore Bundler and the alternatives to help get you started.

Bundler

Bundler can’t build a new Ruby project but can build a gem skeleton. For example, if you wanted to build a demo gem, you can run: bundle gem demo. If this is your first time doing so, you might be prompted for default settings which can be inspected via your global configuration cat $HOME/.bundle/config. Example:

# Automatically run `bundle install` when gems are missing.
BUNDLE_AUTO_INSTALL: "true"

# Avoid building a change log, use the Milestoner gem instead.
BUNDLE_GEM__CHANGELOG: "false"

# Use Circle CI for continuous integration.
BUNDLE_GEM__CI: "circle"

# Enable Code of Conduct documentation.
BUNDLE_GEM__COC: "true"

# Enable RuboCop code quality analysis.
BUNDLE_GEM__LINTER: "rubocop"

# Enable MIT license.
BUNDLE_GEM__MIT: "true"

# Use RSpec for test framework.
BUNDLE_GEM__TEST: "rspec"

# Ignore HTTParty post install messages.
BUNDLE_IGNORE_MESSAGES__HTTPARTY: "true"

# Enable to install gems globally instead of per project within the `.bundle` directory.
BUNDLE_PATH__SYSTEM: "true"

# Avoid printing "Using..." when gem version hasn't changed.
BUNDLE_SUPPRESS_INSTALL_USING_MESSAGES: "true"

💡 With Bundler 4.0.0, you no longer need to use BUNDLE_LOCKFILE_CHECKSUMS: "true" since that is enabled by default. For a deep dive on why lockfile checksums are important, read The Silent Guardian: Why Bundler Checksums Are a Game-Changer for Your Applications by Maciej Mensfeld.

💡 BUNDLE_SIMULATE_VERSION can be used to simulate Bundler 4.0.0 behavior since Version 4.0.0 isn’t officially released as of yet. Further details can be found here.

All lines prefixed with BUNDLE_GEM are added by Bundler when using bundler gem. Feel free to customize as you see fit. Further information can be found via the Bundler Configuration or Bundler Gem documentation.

You can also configure Bundler to use the XDG Base Directory Specification which is a UNIX standard for organizing program configurations, caches, data, etc. Since I am the maintainer of the XDG gem, it’s hard for me to enjoy non-XDG configurations as found with Bundler’s default configuration. That said, it is possible to contort Bundler to behave in an, almost, XDG-like manner using the following global variables:

export BUNDLE_SIMULATE_VERSION=4
export BUNDLE_USER_CACHE="$HOME/.cache/bundler"
export BUNDLE_USER_CONFIG="$HOME/.config/bundler/configuration.yml"
export BUNDLE_USER_HOME="$HOME/.local/share/bundler"
export BUNDLE_USER_PLUGIN="$HOME/.local/share/bundler/plugin"

The above configuration is what I use via my Dotfiles $HOME/.bashrc file. You might want these settings for your environment too, especially if you automate the setup of your machine.

Rubysmith

Rubysmith is designed to fill the gap where you need to generate a Ruby project with professional and configurable defaults while also needing something more sophisticated than a Bundler Inline script. The default experience focuses on getting you started quickly:

bundle install rubysmith
rubysmith build --name demo

You can customize project generation further by using command line options or even adding a global and/or local YAML configuration. The power is yours!

Rubysmith can also be a great tool as an interview rubric if you want to see if an engineer can design, implement, and provide a working Ruby project of high quality for review and discussion.

See the Rubysmith documentation for further details.

Gemsmith

Gemsmith is designed to replace Bundler’s default gem generation with professional tooling based on years of experience of developing and maintaining projects published on RubyGems. Getting started is roughly equivalent to Rubysmith:

bundle install gemsmith
gemsmith build --name demo

As with Rubysmith, Gemsmith provides support for command line options as well as global and/or local configuration customization. For further details, check out the Gemsmith project documentation.

Hanamismith

Hanamismith is designed to quickly get you up and running within a new Hanami application. This is great for building web applications, API servers, static site generators, etc. Getting started is equivalent to both Rubysmith and Gemsmith:

bundle install hanamismith
hanamismith build --name demo

Hanamismith supports the same configuration options as found with the Rubysmith and Gemsmith gems.

Conclusion

Regardless of whether you are building a new Ruby project using Rubysmith, a gem using Bundler/Gemsmith, or a web application using Hanamismith you have plenty of options to get up and running quickly.