fast-nnt: fast, reproducible, and scalable neighbour network analysis in R, Python, and CLI
R J P Newell, E S McMasterAbstract
Motivation
Neighbour networks are widely used to visualise evolutionary relationships in the presence of reticulation, admixture, or hybridisation. Existing implementations are largely GUI-based, limiting reproducibility, integration into scripted workflows, and deployment on remote or high-performance computing systems. They are also computationally slow and memory-intensive at scale, restricting analyses to relatively small datasets. We present fast-nnt, an open-source Rust reimplementation of the neighbour-net algorithms from SplitsTree4 and SplitsTree6, providing interfaces for R, Python, and the command line.
Results
fast-nnt is substantially faster and more memory-efficient than existing tools, completing analyses of 3,333 taxa in ∼148 seconds compared to ∼1,640 seconds for SplitsTree6, an 11-fold improvement, while using less than half the memory. It accepts any symmetric distance matrix and reproduces SplitsTree output with near-identical accuracy. Both the circular ordering algorithms (Multi-Way, Closest-Pair) and split weight inference methods (Conjugate Gradient, Active-Set) are independently selectable, enabling modular and reproducible analyses. This removes a major computational barrier to routine use of neighbour-net methods in large-scale phylogenetics. By addressing key computational and usability bottlenecks in existing implementations, fast-nnt enables scalable, reproducible neighbour-network inference that is practical for large modern datasets.
Availability
Source code, documentation, and test data freely available at https://github.com/rhysnewell/fast-nnt. Implemented in Rust with R (fastnntr) and Python (fastnntpy) packages. An archived release is available at [https://doi.org/10.5281/zenodo.16907379]. Licensed under GNU General Public License v3.0.
Supplementary information
Supplementary data are available at Bioinformatics online.