An Inside Look at Package Managers

A package manager or package management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing software packages for a computer’s operating system in a consistent manner. It typically maintains a database of software dependencies and version information to prevent software mismatches and missing prerequisites.


Above is a definition of a package manager from Wikipedia. Let’s quickly break it down to better understand what we’re working with. A package is a reusable piece of software that you can download from another source into your local environment. Now a package manager will come in and all your dependencies to make sure your code is running properly. A dependency can be simply defined as third party code that your application depends upon and without it your app would break. As a side note its a good idea to never auto update your dependencies and instead manually update them carefully to make sure none of your dependencies ruin the functionality of your app. A manifest file keeps track of all your dependencies and other metadata in you project. In JavaScript this file is called a package.json and it Ruby it is referred to as a Gemfile.

Now let’s take a look at some popular package managers that I’ve used in the past for various languages.

NPM (Node Package Manager)

Npm is a package manager for JavaScript. It was developed by GitHub which is a subsidiary of Microsoft almost 10 years ago. Npm also has a command line that lets users interact with a remote registry allowing them to download various packages. There are over 1.3 million packages available in the main registry. Recently Yarn, developed by Facebook, has emerged as a direct competitor. Both have their own pros and cons however even after its release, npm still proves to be a viable choice with a large and active community.


RubyGems is a package manager for Ruby that was released in 2004. Like npm it has a CLI that’s used to interface with RubyGems to install and manage their libraries or gems. Bundler is currently the default gem dependency manager for Ruby. By simply running in your terminal

bundle install

you will be able to install the exact gems and versions that you need.


CRAN is commonly used for the statistical programming language known as R. CRAN stands for the Comprehensive R Archive Network. It has previous versions of R, documentation, various open source packages for R. As of 2020 there are about 16,000 packages available. Some of their more popular libraries, such as R shiny, are used for data visualization.


CocoaPods is a dependency manager for iOS and Mac projects. It’s also written in Ruby. CocoaPods is strongly inspired by a combination of the Ruby projects RubyGems and Bundler. For those looking to build apps with Swift or React Native its important to learn CocoaPods in order to integrate some popular libraries into your apps.

Recent graduate actively seeking full time opportunities.