Skip to content
A modern gem manager
Ruby Other
  1. Ruby 99.8%
  2. Other 0.2%
Branch: master
Clone or download

Latest commit

matthewd Pad out a bit more API compatibility
For chruby, change Gem.default_dir -- there's still not really a good
answer to that question (because we don't have the same directory
structure as Rubygems), so for now we can just continue to balance the
least-worst interpretation based on how known callers are using it.

For yard and solargraph, some more general API expansion:
Gem::Specification.find_by_path is a reasonable thing to want. Being
able to eval a gemspec is less reasonable, but we can still do our best
to semi-support it.
Latest commit 212d94c Apr 11, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.buildkite
bin Remove bootstrap store: bootstrap into the real one instead Mar 11, 2019
exe
lib
man/man1
test
.dockerignore
.gitignore
.rubocop.yml
CODE_OF_CONDUCT.md
Gemfile
Gemfile.lock
LICENSE.txt
README.md
RELEASING.md
Rakefile
bootstrap.rb
gel.gemspec

README.md

Gel

A modern gem manager.

Gel is a lightweight alternative to Bundler.

Gel Bundler & Rubygems
install
update
lock
exec
gem authoring
vendoring
anything else

This gem is still a work in progress, and things that are still needing some additional improvements include Documentation, UI & Error Messages, and Platform compatibility. We are open to and appreciate any help improving any of these areas.

Why Should I Use Gel?

Gel was written with the goal of improving the performance of common Bundler tasks. Eventually we would like to backport known performance improvements back into Bundler so that everyone can benefit from these improvements, but it is easier to implement and test potential performance improvements in a smaller, more lightweight codebase beforehand.

Another way that Gel gains a performance benefit over Bundler is simply that Gel includes less features overall. For anyone that doesn't need all the features provided by Bundler, using Gel as a more lightweight gem manager might be beneficial.

One of the improvements that Gel has over Bundler is being able to take advantage of a new version solver called Pub Grub. Gel utilizes the pub_grub gem (https://github.com/jhawthorn/pub_grub) which is a Ruby port of the PubGrub algorithm.

Some real world examples of the types of performance improvements Gel provides over Bundler are as follows:

  • % gel exec rake -version: 55% faster than bundle
  • % gel exec rails --version: 60% faster than bundle
  • % gel exec rails runner nil: 45% faster than bundle

Comparing using a complex, mature Rails application:

  • % gel install: 55% faster than bundle
  • % gel lock: 78% faster than bundle on first run
  • % gel lock: 95% faster than bundle on later runs (cache exists)

Comparing using a simple Gemfile with a complex gem:

source "https://rubygems.org"

gem "tty"
  • % gel install: 70% faster than bundle
  • % gel lock: 34% faster than bundle

Comparing using an example Gemfile with gems that showcase a difficult version resolving:

source "https://rubygems.org"

gem "activerecord"
gem "quiet_assets"
  • % gel lock: 96% faster than bundle

This example showcases the speed improvements provided by the new PubGrub Version Solving algorithm.

Note that all of the performance numbers were gathered using just a regular laptop used for common day-to-day development. These numbers were not measured in perfect isolation and your experience may vary.

Installation

If you're on a Mac, we recommend that you install via Homebrew:

$ brew install gel

Otherwise, you can install Gel as a gem:

$ gem install gel

Then, either activate Gel in your current shell:

$ eval "$(gel shell-setup)"

Or add it to your .bashrc or .zshrc to enable it everywhere:

$ echo 'eval "$(gel shell-setup)"' >> ~/.bashrc

Usage

Use gel install, gel lock, gel update, and gel exec as you would the equivalent bundle subcommands.

ENVIRONMENT VARIABLES

  • GEL_GEMFILE The path to the gemfile gel should use

  • GEL_LOCKFILE The path to the lockfile that gel should use

  • GEL_CACHE The path to the gel version information cache

Development

After checking out the repo, run bin/setup to install dependencies. Then, run bin/rake test to run the tests.

To use your development instance as your primary Gel, add its exe/ to your $PATH before running shell-setup, ensuring it comes before any RubyGems bin directory that might override it.

For example:

PATH="$HOME/projects/gel/exe:$PATH"
eval "$(gel shell-setup)"

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/gel-rb/gel. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Gel project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.

You can’t perform that action at this time.