The Python-based Atomic Simulation Environment (ASE) was designed with the goal of setting up, directing, and analyzing atomistic simulations. Numerous features of ASE include molecular dynamics with various controls, including thermostats, structure improvement utilizing atomic forces, saddle point searches on potential energy surfaces, genetic algorithms for structure or chemical composition optimization, basin hopping or minima hopping algorithms for global structure optimization, analysis of phonon modes for solids or molecular vibrational modes. Here, we focus exclusively on the geometry optimization methods provided by ASE, in particular the ASE internal L-BFGS optimizer, and the Sella and Berny algorithms. We will emphasize the Sella and Berny methods more as the L-BFGS approach has previously been summarized. The Berny geometry optimization algorithm is based on an earlier program written by H. B. Schlegel. Sella is an open-source tool used for automating the process of finding saddle points and minimizing molecular structures. It works by converting Cartesian coordinates into internal coordinates, automatically replacing pathological linear angles with improper dihedrals, and introducing necessary modifications like dummy atoms and constraints to ensure that the dummy atom does not drift unnecessarily over the course of optimization. The algorithm utilizes Hessian diagonalization based on internal coordinates to determine the direction of minima, leading to a partially-exact Hessian matrix. This matrix guides the optimization process using a state-of-the-art constrained partitioned rational function approach, effectively steering the system towards local energy minima. The Berny method utilizes a valence force field to construct an estimate of a Hessian at the start of the optimization. This approximation is then updated using the energies and first derivatives computed along the optimization pathway. The update is typically carried out using an iterative BFGS algorithm for minimization and a modified version of the original Schlegel update process for internal coordinate optimizations. It is ideally suited for optimizing covalently bound compounds since it is based on a redundant set of internal coordinates.