Strom 3.3

A tutorial for building Bayesian phylogenetic software using C++

This tutorial teaches you how to create C++ software that performs Bayesian phylogenetic analyses. It was written primarily to help students in my laboratory to develop software that they can later modify for their own purposes, but I hope it is more broadly useful.

This is the third version of the tutorial. It differs from the second version in the order in which features are added, in adding invariable sites and codon models, and in allowing data partitioning.

Begin Tutorial

Three versions of the tutorial are provided. The Mac and Windows versions use graphical IDEs (Integrated Development Environments). The Mac version uses the Xcode IDE, while the Windows version uses the Visual Studio IDE. The Linux version shows you how to build software on an Ubuntu system without using a graphical IDE using the meson/ninja approach. Get started using your platform of choice below:


The tutorial was written by Paul O. Lewis. Please write to me at if you find errors.


This tutorial was developed as a broader impact project associated with National Science Foundation grant DEB-1354146 (Estimating the Bayesian phylogenetic information content of systematic data, PI Paul O. Lewis).


If there is anything in this tutorial that is well-designed, it is due to the patience and generosity of the many great teachers, mentors, and colleagues who have helped me over the years. The person who taught me the most about phylogenetics and, particularly, how to program phylogenetics is David Swofford, who sets a very high standard for code quality that improves the ability of all of us who try to attain it.


The software that you will create falls under the permissive open-source MIT License.

Version history

For the version history, see the README file in the source branch of the GitHub repository.