CRYSTAL is a periodic ab initio code that uses a Gaussian-type basis set to express crystalline orbitals (i.e. Bloch functions). The use of atom-centred basis functions allows treating 3D (crystals), 2D (slabs), 1D (polymers) as well as 0D (molecules) systems on the same grounds. In turn, all-electron calculations are inherently permitted along with pseudopotential strategies. A variety of density functionals is implemented, including global and range-separated hybrids of various nature and, as an extreme case, Hartree-Fock (HF). The cost for HF or hybrids is only about 3-5 times larger than when using the local density approximation (LDA) or the generalized gradient approximation (GGA). Symmetry is fully exploited at all steps of the calculation. Many tools are available to modify the structure as given in input and simplify the construction of complicated objects, such as slabs, nanotubes, molecules, clusters. Many tensorial properties can be evaluated by using a single input keyword: elastic, piezoelectric, photoelastic, dielectric, as well as first and second hyperpolarizabilies, etc. The calculation of infrared and Raman spectra is available, and the intensities are computed analytically. Automated tools are available for the generation of the relevant configurations of solid solutions and/or disordered systems. Three versions of the code exist, serial, parallel and massive-parallel. In the second one the most relevant matrices are duplicated on each core, whereas in the third one the Fock matrix is distributed for diagonalization. All the relevant vectors are dynamically allocated and deallocated after use, making the code very agile. CRYSTAL can be used efficiently on high performance computing machines up to thousands of cores.