Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

conda PyPI tests docs

Fast and flexible semi-supervised learning for peptide detection.

mokapot is fundamentally a Python implementation of the semi-supervised learning algorithm first introduced by Percolator. We developed mokapot to add additional flexibility to our analyses, whether to try something experimental---such as swapping Percolator's linear support vector machine classifier for a non-linear, gradient boosting classifier---or to train a joint model across experiments while retaining valid, per-experiment confidence estimates. We designed mokapot to be extensible and support the analysis of additional types of proteomics data, such as cross-linked peptides from cross-linking mass spectrometry experiments. mokapot offers basic functionality from the command line, but using mokapot as a Python package unlocks maximum flexibility.

For more information, check out our documentation.


If you use mokapot in your work, please cite:

Fondrie W. E. & Noble W. S. mokapot: Fast and Flexible Semisupervised Learning for Peptide Detection. J Proteome Res (2021) doi: 10.1021/acs.jproteome.0c01010. PMID: 33596079. Link


mokapot requires Python 3.6+ and can be installed with pip or conda.

Using conda:

$ conda install -c bioconda mokapot

Using pip:

$ pip3 install mokapot

Additionally, you can install the development version directly from GitHub:

$ pip3 install git+git://

Basic Usage

Before you can use mokapot, you need PSMs assigned by a search engine available in the Percolator tab-delimited file format (often referred to as the Percolator input, or "PIN", file format) or as a PepXML file.

Simple mokapot analyses can be performed at the command line:

$ mokapot

Alternatively, the Python API can be used to perform analyses in the Python interpreter and affords greater flexibility:

>>> import mokapot
>>> psms = mokapot.read_pin("")
>>> results, models = mokapot.brew(psms)
>>> results.to_txt()

Check out our documentation for more details and examples of mokapot in action.