Perturbo is a software package for first-principles calculations of charge transport and ultrafast carrier dynamics in materials. The current version focuses on electron–phonon interactions and can compute phonon-limited transport properties such as the conductivity, carrier mobility and Seebeck coefficient. It can also simulate the ultrafast nonequilibrium electron dynamics in the presence of electron–phonon scattering. Perturbo uses results from density functional theory and density functional perturbation theory calculations as input, and employs Wannier interpolation to reduce the computational cost. It supports norm-conserving and ultrasoft pseudopotentials, spin–orbit coupling, and polar electron–phonon interactions for bulk and 2D materials. Hybrid MPI plus OpenMP parallelization is implemented to enable efficient calculations on large systems (up to at least 50 atoms) using high-performance computing. Taken together, Perturbo provides efficient and broadly applicable ab initio tools to investigate electron–phonon interactions and carrier dynamics quantitatively in metals, semiconductors, insulators, and 2D materials. Program summaryProgram Title:PerturboCPC Library link to program files:https://doi.org/10.17632/34m2p6v79t.1Developer’s repository link:https://perturbo-code.github.ioLicensing provisions: GNU General Public Licence 3.0Programming language:Fortran, PythonExternal routines/libraries:LAPACK, HDF5, MPI, OpenMP, FFTW, Quantum-ESPRESSO, Wannier90Nature of problem: Computing transport properties from first-principles in materials, including the electrical conductivity, carrier mobility and Seebeck coefficient; Simulating ultrafast nonequilibrium electron dynamics, such as the relaxation of excited carriers via interactions with phonons.Solution method: We implement the first-principles Boltzmann transport equation, which employs materials properties such as the electronic structure, lattice dynamics, and electron–phonon collision terms computed with density functional theory and density functional perturbation theory. The Boltzmann transport equation is solved numerically to compute charge transport and simulate ultrafast carrier dynamics. Wannier interpolation is employed to reduce the computational cost.Additional comments: Hybrid MPI plus OpenMP parallelization is implemented to run large calculations and take advantage of high-performance computing. Most results are output to HDF5 file format, which is portable and convenient for post-processing using high-level languages such as Python and Julia.