Express: an extensible, lightweight, high-throughput, high-level workflow framework that aims to automate ab initio calculations

Documentation for Express.

Package Features

Express is an extensible, high-throughput, high-level workflow framework that aims to automate ab initio calculations for the materials science community. Express is shipped with well-tested workflow templates, including structure optimization, equation of state (EOS) fitting, phonon spectrum (lattice dynamics) calculation, and thermodynamic property calculation in the framework of the quasi-harmonic approximation (QHA). It is designed to be highly modularized so that its components can be reused across various occasions, and customized workflows can be built on top of that.

The differences between express and Express: express is the project's name, it is a collection of Julia packages. Its core is Express.jl, managing and dispatching the rest packages. Express is short for Express.jl, which is the most important component of express. The direct components of express are:


  • Express.jl provides a high-level interface to all the workflows, including file reading and writing, job creation, submission, monitoring, result retrieving, and data analysis. To work with specific software, install the corresponding plugin, e.g., QuantumESPRESSOExpress.jl for Quantum ESPRESSO.

  • ExpressCommands.jl is a user-friendly command-line interface of Express.jl for non-developers. It installs an executable 'xps' that can execute code from configuration files provided by users.

  • EquationsOfStateOfSolids.jl fits energy (or pressure) vs. volume results to equations of state, etc. These features are repetitively used in the equation of state workflow.

  • Crystallography.jl calculates a crystal's primitive cell (or supercell) volume from lattice parameters, finds symmetry operations and generates high symmetry points in the Brillouin zone, etc.

  • PyQHA.jl is a Julia wrapper of the Python qha package, which can calculate several thermodynamic properties of both single- and multi-configuration crystalline materials in the framework of quasi-harmonic approximation (QHA). The qha code is the foundation of the QHA workflow.

  • Geotherm.jl is a Julia interpretation of the Fortran code we used in this paper, which calculates the isentropic temperature/pressure gradient (geotherm) using thermodynamic properties obtained with the QHA workflow.

  • Pseudopotentials.jl presents a database for storing and querying pseudopotentials used in ab initio calculations.

  • SimpleWorkflows.jl is the skeleton of the workflow system, which defines building blocks, composition rules, and operation order of workflows.

The QuantumESPRESSOExpress.jl is a special type of package called "plugin of express" for handling ab initio software such as Quantum ESPRESSO. Other plugins for other software are possible. The dependencies of QuantumESPRESSOExpress.jl are listed below.

  • AbInitioSoftwareBase.jl provides a standard API for some popular ab initio software such as Quantum ESPRESSO.

  • QuantumESPRESSOBase.jl declares basic data types and methods for manipulating crystal structures, generating input files for Quantum ESPRESSO, error checking before running, etc.

  • QuantumESPRESSOParser.jl parses the input or output files of Quantum ESPRESSO to extract and analyze data.

  • QuantumESPRESSOFormatter.jl formats the input files of Quantum ESPRESSO.

  • QuantumESPRESSOCommands.jl is a command-line interface that exports the commands Quantum ESPRESSO uses in a configurable way.

  • QuantumESPRESSO.jl is simply a wrapper of the types, methods, and commands defined in QuantumESPRESSOBase.jl, QuantumESPRESSOParser.jl, QuantumESPRESSOFormatter.jl, and QuantumESPRESSOCommands.jl under a common namespace.


The package can be installed with the Julia package manager. From the Julia REPL, type ] to enter the Pkg REPL mode and run:

pkg> add Express

Or, equivalently, via the Pkg API:

julia> import Pkg; Pkg.add("Express")


  • STABLE — documentation of the most recently tagged version.
  • DEV — documentation of the in-development version.

Project Status

The package is tested against, and being developed for, Julia 1.6 and above on Linux, macOS, and Windows.

Questions and Contributions

Usage questions can be posted on our discussion page.

Contributions are very welcome, as are feature requests and suggestions. Please open an issue if you encounter any problems. The contributing page has a few guidelines that should be followed when opening pull requests and contributing code.

Manual Outline

Library Outline