In this chapter low-density parity-check (LDPC) codes are presented. Our main focus is the design of LDPC codes and the algorithms used to decode them. The chapter begins by introducing parity-check equations and codes defined by their parity-check matrices. To introduce iterative decoding a hard-decision iterative algorithm is discussed before the soft-decision iterative sum-product decoding algorithm is presented. Following sections present the relationship between graph-based representations of codes and the development of both the theoretical understanding and implementation of iterative decoders, as well as the current methods for design of LDPC codes. The chapter concludes with the connections of this work to other topics and future directions in the area.