# Ruby Standard Library¶ ↑

The Ruby Standard Library is a large collection of classes and modules you can require in your code to gain additional features.

Below is an overview of the libraries and extensions, followed by a brief description of each.

## Libraries¶ ↑

- `MakeMakefile`: A module used to generate a Makefile for C extensions

- `RbConfig`: Information about your Ruby configuration and build

- `Gem`: A package management framework for Ruby

## Extensions¶ ↑

- `Coverage`: Provides coverage measurement for Ruby

- `Monitor`: Provides a reentrant mutex

- `objspace`: Extends the `ObjectSpace` module to add methods for internal statistics

- `PTY`: Creates and manages pseudo-terminals

- `Ripper`: Provides an interface for parsing Ruby programs into S-expressions

- `Socket`: Accesses underlying OS socket implementations

# Default gems¶ ↑

- Default gems are shipped with Ruby releases and also available as rubygems.

- Default gems are not uninstallable from the Ruby installation.

- Default gems can be updated using rubygems.

  - e.g. `gem update json`

- Default gems can be used with bundler environments like `unbundled_env`.

- Default gems can be used at any version in a Gemfile.

  - e.g. `gem "json", ">= 2.6"`

## Libraries¶ ↑

- `Benchmark` (GitHub): Provides methods to measure and report the time used to execute code

- `Bundler` (GitHub): Manage your Ruby application’s gem dependencies

- `CGI` (GitHub): Support for the Common Gateway Interface protocol

- `Delegator` (GitHub): Provides three abilities to delegate method calls to an object

- `DidYouMean` (GitHub): “Did you mean?” experience in Ruby

- `English` (GitHub): Provides references to special global variables with less cryptic names

- `ERB` (GitHub): An easy-to-use but powerful templating system for Ruby

- `ErrorHighlight` (GitHub): Highlight error locations in your code

- `FileUtils` (GitHub): Several file utility methods for copying, moving, removing, etc.

- `Find` (GitHub): This module supports top-down traversal of a set of file paths

- `Forwardable` (GitHub): Provides delegation of specified methods to a designated object

- `IPAddr` (GitHub): Provides methods to manipulate IPv4 and IPv6 IP addresses

- `OptionParser` (GitHub): Ruby-oriented class for command-line option analysis

- `Logger` (GitHub): Provides a simple logging utility for outputting messages

- `Net::HTTP` (GitHub): HTTP client API for Ruby

- `Open3` (GitHub): Provides access to stdin, stdout, and stderr when running other programs

- `OpenStruct` (GitHub): A class to build custom data structures, similar to a `Hash`

- `OpenURI` (GitHub): An easy-to-use wrapper for `URI::HTTP`, `URI::HTTPS`, and `URI::FTP`

- `PP` (GitHub): Provides a PrettyPrinter for Ruby objects

- `PrettyPrint` (GitHub): Implements a pretty printing algorithm for readable structure

- `Prism` (GitHub): A portable, error-tolerant Ruby parser

- `PStore` (GitHub): Implements a file-based persistence mechanism based on a `Hash`

- `Readline` (GitHub): Wrapper for the `Readline` extension and `Reline`

- `Reline` (GitHub): GNU `Readline` and Editline in a pure Ruby implementation

- `Resolv` (GitHub): Thread-aware DNS resolver library in Ruby

- `SecureRandom` (GitHub): Interface for a secure random number generator

- `Set` (GitHub): Provides a class to deal with collections of unordered, unique values

- `Shellwords` (GitHub): Manipulates strings with the word parsing rules of the UNIX Bourne shell

- `Singleton` (GitHub): Implementation of the `Singleton` pattern for Ruby

- `Tempfile` (GitHub): A utility class for managing temporary files

- `Time` (GitHub): Extends the `Time` class with methods for parsing and conversion

- `Timeout` (GitHub): Auto-terminate potentially long-running operations in Ruby

- `TSort` (GitHub): Topological sorting using Tarjan’s algorithm

- UN (GitHub): Utilities to replace common UNIX commands

- `URI` (GitHub): A Ruby module providing support for Uniform Resource Identifiers

- `YAML` (GitHub): The Ruby client library for the `Psych` `YAML` implementation

- `WeakRef` (GitHub): Allows a referenced object to be garbage-collected

## Extensions¶ ↑

- `Date` (GitHub): Represents dates, with a subclass for dates with time and timezones

- `Digest` (GitHub): Provides a framework for message digest libraries

- `Etc` (GitHub): Provides access to information typically stored in the UNIX /etc directory

- `Fcntl` (GitHub): Loads constants defined in the OS fcntl.h C header file

- `Fiddle` (GitHub): A libffi wrapper for Ruby

- `IO.console` (GitHub): Extensions for the `IO` class, including `IO.console`, `IO.winsize`, etc.

- `JSON` (GitHub): Implements JavaScript `Object` Notation for Ruby

- `OpenSSL` (GitHub): Provides SSL, TLS, and general-purpose cryptography for Ruby

- `Pathname` (GitHub): Representation of the name of a file or directory on the filesystem

- `Psych` (GitHub): A `YAML` parser and emitter for Ruby

- `StringIO` (GitHub): Pseudo-I/O on `String` objects

- `StringScanner` (GitHub): Provides lexical scanning operations on a `String`

- TmpDir (GitHub): Extends the `Dir` class to manage the OS temporary file path

- `WIN32OLE` (GitHub): Provides an interface for OLE Automation in Ruby

- `Zlib` (GitHub): Ruby interface for the zlib compression/decompression library

## Tools¶ ↑

- IRB (GitHub): Interactive Ruby command-line tool for REPL (Read Eval Print Loop)

- RDoc (GitHub): Documentation generator for Ruby

# Bundled gems¶ ↑

- Bundled gems are shipped with Ruby releases and also available as rubygems.

  - They are only bundled with Ruby releases.

  - They can be uninstalled from the Ruby installation.

  - They need to be declared in a Gemfile when used with bundler.

## Libraries¶ ↑

- minitest: A test library supporting TDD, BDD, mocking, and benchmarking

- power_assert: Power Assert for Ruby

- rake: Ruby build program with capabilities similar to make

- test-unit: A compatibility layer for MiniTest

- rexml: An XML toolkit for Ruby

- rss: A family of libraries supporting various XML-based “feeds”

- net-ftp: Support for the `File` Transfer Protocol

- net-imap: Ruby client API for the Internet Message Access Protocol

- net-pop: Ruby client library for POP3

- net-smtp: Simple Mail Transfer Protocol client library for Ruby

- matrix: Represents a mathematical matrix

- prime: Prime numbers and factorization library

- rbs: RBS is a language to describe the structure of Ruby programs

- typeprof: A type analysis tool for Ruby code based on abstract interpretation

- debug: Debugging functionality for Ruby

- racc: A LALR(1) parser generator written in Ruby

- mutex_m: Mixin to extend objects to be handled like a Mutex

- getoptlong: Parse command line options similar to the GNU C getopt_long()

- base64: Support for encoding and decoding binary data using a Base64 representation

- bigdecimal: Provides arbitrary-precision floating point decimal arithmetic

- observer: Provides a mechanism for the publish/subscribe pattern in Ruby

- abbrev: Calculates a set of unique abbreviations for a given set of strings

- resolv-replace: Replace `Socket` DNS with `Resolv`

- rinda: The Linda distributed computing paradigm in Ruby

- drb: Distributed object system for Ruby

- nkf: Ruby extension for the Network Kanji Filter

- syslog: Ruby interface for the POSIX system logging facility

- csv: Provides an interface to read and write CSV files and data