Skip to content

Instantly share code, notes, and snippets.

@BrianPurgert
Created June 9, 2024 04:48
Show Gist options
  • Save BrianPurgert/d5509ea4fe2366d68f173fe417b60a32 to your computer and use it in GitHub Desktop.
Save BrianPurgert/d5509ea4fe2366d68f173fe417b60a32 to your computer and use it in GitHub Desktop.
comparison table focusing on the Yehuda Katz-related package managers, with the parallels highlighted
Feature Bundler (Ruby) npm/Yarn (JavaScript) Cargo (Rust)
Purpose Manage gem dependencies for Ruby projects Manage package dependencies for JavaScript projects Manage crate dependencies and build Rust projects
Package Name Gem Package/Module Crate
Manifest File Gemfile package.json Cargo.toml
Lock File Gemfile.lock package-lock.json/yarn.lock Cargo.lock
Default Install Location vendor/bundle node_modules target/ (compiled output), .cargo/registry (downloaded crates)
Core Functionality Resolves and installs gem dependencies based on Gemfile & Gemfile.lock Resolves and installs package dependencies based on package.json & package-lock.json/yarn.lock Resolves and builds crate dependencies based on Cargo.toml & Cargo.lock
Additional Features Can bundle gems into a single file Can run scripts defined in package.json Built-in commands for building, testing, and running projects

Yehuda Katz Connection

All three of these tools were heavily influenced by Yehuda Katz's work. Bundler was directly created by him, while npm and Cargo were inspired by his ideas and philosophies around dependency management and build tools.

Key Differences

  • Language Focus: Each tool is designed specifically for its respective language (Ruby, JavaScript, Rust).
  • Scope: Cargo handles more than just dependency management; it's the primary build tool for Rust projects.
  • Ecosystem: Each tool interacts with its language's package repository (RubyGems, npm registry, crates.io).
  • Package Managers: While npm is the default for JavaScript, Yarn is an alternative known for speed and efficiency.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment