Ruby on Rails Q & A


What are plugins and gems in Rails?

In the Ruby on Rails ecosystem, both plugins and gems play crucial roles in extending the functionality of applications, but they serve different purposes and are structured differently.


  1. Rails Gems:

   – Definition: A gem is a packaged Ruby application or library. It provides a standard format for distributing Ruby programs and libraries. Gems can be used in any Ruby application, not just Rails applications.

   – Examples: `rails` (the core Rails framework itself), `devise` (authentication), and `pg` (PostgreSQL adapter) are all gems.

   – Management: Gems are managed by a tool called RubyGems. You can install, update, and remove gems using the `gem` command. In the context of a Rails application, the `Gemfile` and `Gemfile.lock` are used in conjunction with the `bundler` gem to manage gem dependencies.


  1. Rails Plugins:

   – Definition: Plugins are extensions to Rails that add custom functionality or features specifically tailored to Rails applications. They’re essentially a set of code, assets, and initializers that are loaded into the app when it starts. While gems can be more generalized, plugins are Rails-specific.

   – Examples: Many popular Rails plugins have transitioned to gems over time due to the ease of distribution and management offered by gems. But in the earlier days of Rails, plugins like `restful_authentication` were quite common.

   – Management: Plugins are typically installed directly into your application, often within the `vendor/plugins` directory, though this approach has been deprecated in favor of packaging functionality as gems.


While both plugins and gems allow for the extension of Rails capabilities, gems have become the de facto way to distribute and manage reusable Ruby and Rails functionality. They provide a standardized, efficient, and scalable way to integrate third-party code, and most modern Rails development leans heavily on gems for adding features and capabilities to applications.

Previously at
Flag Argentina
time icon
Senior Software Engineer with a focus on remote work. Proficient in Ruby on Rails. Expertise spans y6ears in Ruby on Rails development, contributing to B2C financial solutions and data engineering.