# Elixir v1.20.0 - Table of Contents

## Pages

- [Changelog for Elixir v1.20](changelog.md)

- Getting started
  - [Introduction](introduction.md)
  - [Basic types](basic-types.md)
  - [Lists and tuples](lists-and-tuples.md)
  - [Pattern matching](pattern-matching.md)
  - [case, cond, and if](case-cond-and-if.md)
  - [Anonymous functions](anonymous-functions.md)
  - [Binaries, strings, and charlists](binaries-strings-and-charlists.md)
  - [Keyword lists and maps](keywords-and-maps.md)
  - [Modules and functions](modules-and-functions.md)
  - [alias, require, import, and use](alias-require-and-import.md)
  - [Module attributes](module-attributes.md)
  - [Structs](structs.md)
  - [Recursion](recursion.md)
  - [Enumerables and Streams](enumerable-and-streams.md)
  - [Comprehensions](comprehensions.md)
  - [Protocols](protocols.md)
  - [Sigils](sigils.md)
  - [try, catch, and rescue](try-catch-and-rescue.md)
  - [Processes](processes.md)
  - [IO and the file system](io-and-the-file-system.md)
  - [Writing documentation](writing-documentation.md)
  - [Optional syntax sheet](optional-syntax.md)
  - [Erlang libraries](erlang-libraries.md)
  - [Debugging](debugging.md)

- Cheatsheets
  - [Enum cheatsheet](enum-cheat.md)
  - [Set-theoretic types cheatsheet](types-cheat.md)

- Mix &amp; OTP
  - [Introduction to Mix](introduction-to-mix.md)
  - [Simple state with agents](agents.md)
  - [Registries and supervision trees](supervisor-and-application.md)
  - [Supervising dynamic children](dynamic-supervisor.md)
  - [Task and gen_tcp](task-and-gen-tcp.md)
  - [Doctests, patterns, and with](docs-tests-and-with.md)
  - [Configuration and distribution](config-and-distribution.md)
  - [Client-server with GenServer](genservers.md)
  - [Releases](releases.md)

- Anti-patterns
  - [What are anti-patterns?](what-anti-patterns.md)
  - [Code-related anti-patterns](code-anti-patterns.md)
  - [Design-related anti-patterns](design-anti-patterns.md)
  - [Process-related anti-patterns](process-anti-patterns.md)
  - [Meta-programming anti-patterns](macro-anti-patterns.md)

- Meta-programming
  - [Quote and unquote](quote-and-unquote.md)
  - [Macros](macros.md)
  - [Domain-Specific Languages (DSLs)](domain-specific-languages.md)

- References
  - [Compatibility and deprecations](compatibility-and-deprecations.md)
  - [Gradual set-theoretic types](gradual-set-theoretic-types.md)
  - [Library guidelines](library-guidelines.md)
  - [Naming conventions](naming-conventions.md)
  - [Operators reference](operators.md)
  - [Patterns and guards](patterns-and-guards.md)
  - [Syntax reference](syntax-reference.md)
  - [Software Bill of Materials](sbom.md)
  - [Typespecs reference](typespecs.md)
  - [Unicode syntax](unicode-syntax.md)

## Modules

- [Kernel](Kernel.md): `Kernel` is Elixir's default environment.
- [Kernel.SpecialForms](Kernel.SpecialForms.md): Special forms are the basic building blocks of Elixir, and therefore
cannot be overridden by the developer.

- Data Types
  - [Atom](Atom.md): Atoms are constants whose values are their own name.
  - [Base](Base.md): This module provides data encoding and decoding functions
according to [RFC 4648](https://tools.ietf.org/html/rfc4648).
  - [Bitwise](Bitwise.md): A set of functions that perform calculations on bits.
  - [Date](Date.md): A Date struct and functions.
  - [DateTime](DateTime.md): A datetime implementation with a time zone.
  - [Duration](Duration.md): Struct and functions for handling durations.
  - [Exception](Exception.md): Functions for dealing with throw/catch/exit and exceptions.
  - [Float](Float.md): Functions for working with floating-point numbers.
  - [Function](Function.md): A set of functions for working with functions.
  - [Integer](Integer.md): Functions for working with integers.
  - [JSON](JSON.md): JSON encoding and decoding.
  - [Module](Module.md): Provides functions to deal with modules during compilation time.
  - [NaiveDateTime](NaiveDateTime.md): A NaiveDateTime struct (without a time zone) and functions.
  - [Record](Record.md): Module to work with, define, and import records.
  - [Regex](Regex.md): Provides regular expressions for Elixir.
  - [String](String.md): Strings in Elixir are UTF-8 encoded binaries.
  - [Time](Time.md): A Time struct and functions.
  - [Tuple](Tuple.md): Functions for working with tuples.
  - [URI](URI.md): Utilities for working with URIs.
  - [Version](Version.md): Functions for parsing and matching versions against requirements.
  - [Version.Requirement](Version.Requirement.md): A struct that holds version requirement information.

- Collections &amp; Enumerables
  - [Access](Access.md): Key-based access to data structures.
  - [Date.Range](Date.Range.md): Returns an inclusive range between dates.
  - [Enum](Enum.md): Functions for working with collections (known as enumerables).
  - [Keyword](Keyword.md): A keyword list is a list that consists exclusively of two-element tuples.
  - [List](List.md): Linked lists hold zero, one, or more elements in the chosen order.
  - [Map](Map.md): Maps are the "go to" key-value data structure in Elixir.
  - [MapSet](MapSet.md): Functions that work on sets.
  - [Range](Range.md): Ranges represent a sequence of zero, one or many, ascending
or descending integers with a common difference called step.
  - [Stream](Stream.md): Functions for creating and composing streams.

- IO &amp; System
  - [File](File.md): This module contains functions to manipulate files.
  - [File.Stat](File.Stat.md): A struct that holds file information.
  - [File.Stream](File.Stream.md): Defines a `File.Stream` struct returned by `File.stream!/3`.
  - [IO](IO.md): Functions handling input/output (IO).
  - [IO.ANSI](IO.ANSI.md): Functionality to render ANSI escape sequences.
  - [IO.Stream](IO.Stream.md): Defines an `IO.Stream` struct returned by `IO.stream/2` and `IO.binstream/2`.
  - [OptionParser](OptionParser.md): Functions for parsing command line arguments.
  - [Path](Path.md): This module provides conveniences for manipulating or
retrieving file system paths.
  - [Port](Port.md): Functions for interacting with the external world through ports.
  - [StringIO](StringIO.md): Controls an IO device process that wraps a string.
  - [System](System.md): The `System` module provides functions that interact directly
with the VM or the host system.

- Calendar
  - [Calendar](Calendar.md): This module defines the responsibilities for working with
calendars, dates, times and datetimes in Elixir.
  - [Calendar.ISO](Calendar.ISO.md): The default calendar implementation, a Gregorian calendar following ISO 8601.
  - [Calendar.TimeZoneDatabase](Calendar.TimeZoneDatabase.md): This module defines a behaviour for providing time zone data.
  - [Calendar.UTCOnlyTimeZoneDatabase](Calendar.UTCOnlyTimeZoneDatabase.md): Built-in time zone database that works only in the `Etc/UTC` timezone.

- Processes &amp; Applications
  - [Agent](Agent.md): Agents are a simple abstraction around state.
  - [Application](Application.md): A module for working with applications and defining application callbacks.
  - [Config](Config.md): A simple keyword-based configuration API.
  - [Config.Provider](Config.Provider.md): Specifies a provider API that loads configuration during boot.
  - [Config.Reader](Config.Reader.md): API for reading config files defined with `Config`.
  - [DynamicSupervisor](DynamicSupervisor.md): A supervisor optimized to only start children dynamically.
  - [GenServer](GenServer.md): A behaviour module for implementing the server of a client-server relation.
  - [Node](Node.md): Functions related to VM nodes.
  - [PartitionSupervisor](PartitionSupervisor.md): A supervisor that starts multiple partitions of the same child.
  - [Process](Process.md): Conveniences for working with processes and the process dictionary.
  - [Registry](Registry.md): A local, decentralized and scalable key-value process storage.
  - [Supervisor](Supervisor.md): A behaviour module for implementing supervisors.
  - [Task](Task.md): Conveniences for spawning and awaiting tasks.
  - [Task.Supervisor](Task.Supervisor.md): A task supervisor.

- Protocols
  - [Collectable](Collectable.md): A protocol to traverse data structures.
  - [Enumerable](Enumerable.md): Enumerable protocol used by `Enum` and `Stream` modules.
  - [Inspect](Inspect.md): The `Inspect` protocol converts an Elixir data structure into an
algebra document.
  - [Inspect.Algebra](Inspect.Algebra.md): A set of functions for creating and manipulating algebra
documents.
  - [Inspect.Opts](Inspect.Opts.md): Defines the options used by the `Inspect` protocol.
  - [JSON.Encoder](JSON.Encoder.md): A protocol for custom JSON encoding of data structures.
  - [List.Chars](List.Chars.md): The `List.Chars` protocol is responsible for
converting a structure to a charlist (only if applicable).
  - [Protocol](Protocol.md): Reference and functions for working with protocols.
  - [String.Chars](String.Chars.md): The `String.Chars` protocol is responsible for
converting a structure to a binary (only if applicable).

- Code &amp; Macros
  - [Code](Code.md): Utilities for managing code compilation, code evaluation, and code loading.
  - [Code.Fragment](Code.Fragment.md): This module provides conveniences for analyzing fragments of
textual code and extract available information whenever possible.
  - [Kernel.ParallelCompiler](Kernel.ParallelCompiler.md): A module responsible for compiling and requiring files in parallel.

  - [Macro](Macro.md): Functions for manipulating AST and implementing macros.
  - [Macro.Env](Macro.Env.md): A struct that holds compile time environment information.

- Deprecated
  - [Behaviour](Behaviour.md): Mechanism for handling behaviours.
  - [Dict](Dict.md): Generic API for dictionaries.
  - [GenEvent](GenEvent.md): An event manager with event handlers behaviour.
  - [HashDict](HashDict.md): Tuple-based HashDict implementation.
  - [HashSet](HashSet.md): Tuple-based HashSet implementation.
  - [Set](Set.md): Generic API for sets.
  - [Supervisor.Spec](Supervisor.Spec.md): Outdated functions for building child specifications.

- Exceptions
  - [ArgumentError](ArgumentError.md): An exception raised when an argument to a function is invalid.
  - [ArithmeticError](ArithmeticError.md): An exception raised on invalid arithmetic operations.
  - [BadArityError](BadArityError.md): An exception raised when a function is called with the wrong number of arguments.
  - [BadBooleanError](BadBooleanError.md): An exception raised when a boolean is expected, but something else was given.
  - [BadFunctionError](BadFunctionError.md): An exception raised when a function is expected, but something else was given.
  - [BadMapError](BadMapError.md): An exception raised when a map is expected, but something else was given.
  - [CaseClauseError](CaseClauseError.md): An exception raised when a term in a `case/2` expression
does not match any of the defined `->` clauses.
  - [Code.LoadError](Code.LoadError.md): An exception raised when a file cannot be loaded.
  - [CompileError](CompileError.md): An exception raised when there's an error when compiling code.
  - [CondClauseError](CondClauseError.md): An exception raised when no clauses in a `cond/1` expression evaluate to a truthy value.
  - [Enum.EmptyError](Enum.EmptyError.md): An exception that is raised when something expects a non-empty enumerable
but finds an empty one.
  - [Enum.OutOfBoundsError](Enum.OutOfBoundsError.md): An exception that is raised when a function expects an enumerable to have
a certain size but finds that it is too small.
  - [ErlangError](ErlangError.md): An exception raised when invoking an Erlang code that errors
with a value not handled by Elixir.
  - [File.CopyError](File.CopyError.md): An exception that is raised when copying a file fails.
  - [File.Error](File.Error.md): An exception that is raised when a file operation fails.
  - [File.LinkError](File.LinkError.md): An exception that is raised when linking a file fails.
  - [File.RenameError](File.RenameError.md): An exception that is raised when renaming a file fails.
  - [FunctionClauseError](FunctionClauseError.md): An exception raised when a function call doesn't match any defined clause.
  - [IO.StreamError](IO.StreamError.md)
  - [Inspect.Error](Inspect.Error.md): Raised when a struct cannot be inspected.

  - [JSON.DecodeError](JSON.DecodeError.md): The exception raised by `JSON.decode!/1`.

  - [Kernel.TypespecError](Kernel.TypespecError.md): An exception raised when there's an error in a typespec.
  - [KeyError](KeyError.md): An exception raised when a key is not found in a data structure.
  - [MatchError](MatchError.md): An exception raised when a pattern match (`=/2`) fails.
  - [MismatchedDelimiterError](MismatchedDelimiterError.md): An exception raised when a mismatched delimiter is found when parsing code.
  - [MissingApplicationsError](MissingApplicationsError.md): An exception that is raised when an application depends on one or more
missing applications.
  - [OptionParser.ParseError](OptionParser.ParseError.md): An exception raised when parsing option fails.
  - [Protocol.UndefinedError](Protocol.UndefinedError.md): An exception raised when a protocol is not implemented for a given value.
  - [Regex.CompileError](Regex.CompileError.md): An exception raised when a regular expression could not be compiled.

  - [RuntimeError](RuntimeError.md): An exception for a generic runtime error.
  - [SyntaxError](SyntaxError.md): An exception raised when there's a syntax error when parsing code.
  - [System.EnvError](System.EnvError.md): An exception raised when a system environment variable is not set.
  - [SystemLimitError](SystemLimitError.md): An exception raised when a system limit has been reached.
  - [TokenMissingError](TokenMissingError.md): An exception raised when a token is missing when parsing code.
  - [TryClauseError](TryClauseError.md): An exception raised when none of the `else` clauses in a `try/1` match.
  - [URI.Error](URI.Error.md): An exception raised when an error occurs when a `URI` is invalid.
  - [UndefinedFunctionError](UndefinedFunctionError.md): An exception raised when a function is invoked that is not defined.
  - [UnicodeConversionError](UnicodeConversionError.md): An exception raised when converting data to or from Unicode.
  - [Version.InvalidRequirementError](Version.InvalidRequirementError.md): An exception raised when a version requirement is invalid.
  - [Version.InvalidVersionError](Version.InvalidVersionError.md): An exception raised when a version is invalid.
  - [WithClauseError](WithClauseError.md): An exception raised when a term in a `with/1` expression
does not match any of the defined `->` clauses in its `else`.

