Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Domainator logo of the word 'Domainator' where the D and I are styled as DNA, and the M is styled as two otters holding hands

Domainator

A flexible and modular software suite for domain-based gene neighborhood and protein search, extraction, and clustering.

Domainator can be run as command line tools or as a Python library.

Note that the GUI that was bundled with earlier versions of Domainator has been removed. The preferred GUI solution for Domainator is the Rust rewrite Domainatoredux https://github.com/nebiolabs/domainatoredux.

Quickstart

conda create -n domainator -c conda-forge -c bioconda domainator python=3.12
conda activate domainator
domainator --help

domainator --help lists the commands, and domainator <command> --help describes one; domainator doctor lists the optional programs and which ones you have. This installs the released version from bioconda. See Installation to install from this repository instead, with every optional program.

Contents

Detailed documentation

Questions, comments, bug reports, and feature requests

Please use our discussions page or create an issue

Overview and key concepts

Annotation tools (domainate, structure_domainate) annotate and retain every input record, including records without hits. Search tools (domain_search, structure_search) select matching records or regions. Both roles perform similarity searches; the distinction is what they emit, not whether an alignment is performed. Sequence search can return neighborhoods or translated CDSs; structure search returns matching targets' full observed protein sequences and marks their best-hit regions. Search best-hit annotations (Domain_Search features) are present by default; --add_annotations also adds domain annotations (Domainator features). See the command roles and output shapes.

For these four tools, -i identifies the records/database being annotated or searched, and -r supplies the references being searched for. Backend-specific "query" and "target" terminology does not reverse this CLI convention.

The three extract_* tools, select_by_cds, select_by_contig, and domain_search share taxonomy criteria; unresolved taxonomy is excluded by default, including with negated expressions. See taxonomy migration and examples and agent workflows.

Domainator provides several dozen discrete, flexible programs that can be composed into a broad range of workflows via command line or python scripting. Domainator also treats HMM-profiles as first-class citizens, supporting subsetting of .hmm files and comparison of HMM-profiles, including the construction of profile similarity networks and trees.

Domainator uses the GenBank file format as a carrier of both sequence and annotation data. Independence from a fixed set of sequence sources and the co-location of sequences and all their annotation data in a single file increases data portability and decreases complexity for end-users. Domainator can add functional annotations to sequences by comparison to protein HMM-profiles, protein sequences, nucleotide sequences, nucleotide HMMs, or infernal covariance models. Protein references are searched against CDSs or protein records, while nucleic-acid references are searched against whole nucleotide contigs. For example, in a single call to domainate, a set of genome or metagenome contigs can be annotated with hits to Pfam HMM-profiles, RFAM profiles, and hits to REBASE Gold Standard protein sequences at the same time.

The individual programs that make up Domainator can be roughly classified into six categories corresponding to their typical roles in workflows. The first steps in most workflows typically involve passing sequence data through one or more editors.

Editors are programs whose output format is the same as their input format. Each individual editor performs a simple task, but they can be combined in arbitrarily long chains to accomplish complex transformations. Examples are domain_search, which outputs a subset of the input sequences, based on the presence of a hit to a reference sequence or profile; domainate, which outputs all the input sequence but adds domain annotations based on hits to reference sequences; deduplicate_genbank, which performs similarity clustering using CD-HIT, usearch, or DIAMOND and outputs only the cluster representatives input sequences; and select_by_cds, which extracts genome neighborhoods around domains of interest.

In Domainator programs, perhaps differently from other software, the file being edited is supplied via the -i argument and criteria for editing is supplied via other arguments, such as the -r argument for reference sequences or hmm profiles. For example searching for hits to a query in the UniProt database may be accomplished via domainator domain_search -i uniprot.fasta -r query.hmm -o hits.gb, similarly annotating a set of contigs with Pfam annotations may be accomplished with domainator domainate -i unannotated.gb -r pfam-A.hmm -o annotated.gb .

Summary report programs summarize data into graphs and statistics, for example, the number of sequences in a file and the count of each kind of domain. Record-wise report programs produce tab-separated files, for example where each row corresponds to a genome contig, a protein, or a domain, and values are data such as length, taxonomy ID, domain content, etc.

Record-wise reports are useful for exporting data to programs, such as Excel, which can’t read GenBank or hmm files, and they also find use as intermediary files between some programs in Domainator.

Comparison programs generate pairwise score or distance matrices between contigs or HMM-profiles. Compare_contigs uses the Jaccard and adjacency indexes to compare proteins or gene neighborhoods based on their domain content, whereas seq_dist uses local alignment scores, for example via phmmer , Diamond , hmmsearch , or the Viterbi profile-comparison algorithm. Structure_dist compares protein structures directly by structural alignment, scoring them by alignment score, TM-score, lDDT or sequence identity. Comparison programs output data matrices.

Plotting programs convert data into formats appropriate for graphical visualization, for example converting score matrices and tabular metadata into trees or similarity networks which can be viewed in Cytoscape or other external visualization tools, depending on the data type.

Finally, there are few programs that defy categorization, these programs perform functions such as downloading data from NCBI or UniProt, converting files between formats, or generating profile-profile alignments.

Overview of Domainator components

Overview of Domainator components image *not all programs are shown

Example genome mining workflow

Example genome mining workflow image

Example HMMER profile comparison workflow

Example HMMER profile comparison workflowimage

Program descriptions

Every program is a command of the domainator program: domainator <command> [options], for example domainator domainate -i contigs.gb -r pfam.hmm -o annotated.gb. Run domainator --help for the list of commands, and domainator <command> --help for the documentation of each one. Every command also takes -v/--verbose (debug output, and a traceback for errors) and -q/--quiet (errors only, no progress messages or warnings).

To complete command names and options with the Tab key, install the shell completion script once (and again after upgrading Domainator):

# bash
domainator completion bash > ~/.local/share/bash-completion/completions/domainator
# zsh: write it to a directory on your $fpath, named _domainator
domainator completion zsh > ~/.zfunc/_domainator

Programs that can accept streaming input read genbank formatted data from stdin with -i -. Programs that need to pass over the input multiple times can't support streaming input. Programs that can produce streaming output write to stdout when an output is given as -, for example -o - or --fasta_out -. Nothing is read from stdin or written to stdout unless asked for. You can use shell pipes to move data from a program that supports streaming output into a program that supports streaming input, for example domainator domainate -i in.gb -r pfam.hmm -o - | domainator select_by_cds -i - --domains CcdB -o out.gb (but note that it is more efficient to use domainator as a python library, see below). Many commands that can generate large outputs also support --max_output_gb to fail early when a projected output would exceed the configured size limit. The default limit is 25 GB, and setting --max_output_gb 0 disables the guardrail.

Program Description input output streaming input streaming output notes
domainator build_projection generates 2d or 3d umap, tsne, or pca projections a data matrix (hdf5 or tab-separated text), could be a sequence similarity matrix, or any other kind of data matrix. optionally, a table of node metadata. typically a Cytoscape xgmml file or the interactive Domainator Viewer (HTML), which selects points into a metadata table and saves PNG and SVG pictures. Other outputs are possible. no no
domainator build_ssn generates a sequence similarity network (SSN) for Cytoscape or the interactive Domainator Viewer a symmetric similarity matrix. optionally, tables of node metadata a Cytoscape xgmml file, the Domainator Viewer (a self-contained HTML file, --html_out) and/or its .dvb bundle (gzip JSON, --dvb_out); other SSN related files are possible no no The viewer reconstructs clusters at any threshold from an MST hierarchy, so the bundle scales with node count rather than edge count. Metadata can be edited and annotated in the browser, and "Save session" writes a bundle carrying those edits plus the viewer state. Each metadata column header carries a chart glyph that builds a frequency table, bar or pie chart, histogram, box plot, cumulative distribution or summary statistics over the rows the table is showing, inheriting the column's colors and exportable as SVG, PNG or TSV. See docs/ssn_viewer.md for a guide to the viewer itself.
domainator build_tree Converts a distance matrix into a UPGMA tree, or reads a Newick tree a distance matrix, a similarity matrix to convert into distances, or a Newick tree. optionally, tables of leaf metadata and an aligned FASTA of the leaves Newick, a Cytoscape file laid out as a tree, and/or the interactive Domainator Viewer (HTML) no yes The viewer draws the tree with the alignment beside it, colors leaves and clades by metadata, selects leaves and clades into a metadata table, collapses clades, cuts the tree into clusters, and exports Newick, FASTA, SVG and PNG. It can reroot at the midpoint or on a selected monophyletic outgroup and restore the original root. All viewer modes export either the viewport or the entire scene, including a tree's full alignment, as PNG/SVG.
domainator clean_sequences cleans sequence names and residues, and drops sequences with non-canonical residues genbank or fasta files a genbank or fasta file, and optionally a log of the changes yes yes
domainator color_genbank creates color qualifiers on CDS and/or domainator features based on domainator annotations domainator-annotated genbank files. optionally a tab-separated map of domain names to hex colors. a genbank file yes yes To auto color most domains but give explicit colors to some, run twice. First without a tsv map, then with a tsv map.
domainator color_table_to_legend Generates an SVG legend based on a color table tab separated file of annotation names and color codes an svg file yes yes
domainator compare_contigs calculates similarities between contig, based on metrics such as domain adjacency index and domain jaccard index. domainator-annotated genbank files Genbank file where contigs are sorted according to hierarchical clustering of similarity. sparse or dense similarity matrices. yes yes If you want to pipe genbank output you can explicitly supply -o -. Other kinds of output planned for the future, such as phylogenetic trees of contigs.
domainator deduplicate_genbank runs a clustering algorithm, such as cdhit, usearch, or diamond on sequences from a genbank file to reduce redundancy. genbank nucleotide or peptide files a genbank file no yes
domainator domain_search Search a small number of protein or nucleic-acid references against a database genbank (protein genbank, or nucleotide genbank with CDS annotations) or protein/nucleotide fasta files to search through. Protein HMMs and FASTA search CDSs or protein records; nucleotide FASTA, nucleotide HMMs, and infernal CMs search whole nucleotide contigs. a genbank file no yes Protein inputs cannot be searched with nucleotide references. --partial exclude skips fragments (partial CDSs and UniProt (Fragment) records), see partial features.
domainator domainate annotates contig or protein sequences with protein or nucleic-acid hits genbank (protein genbank, or nucleotide genbank with CDS annotations) or protein/nucleotide fasta files to annotate. Supported references include protein HMMs, protein FASTA, nucleotide FASTA, nucleotide HMMs, and infernal CMs. a genbank file with new annotations no yes Nucleotide references search whole contigs rather than individual CDSs. Consider domainator domain_search if searching for small numbers of references against large databases. --partial exclude skips fragments, see partial features.
domainator db_download Download databases from the internet in formats appropriate for domainator None genbank or fasta N/A yes For NCBI genome databases, the default --download_backend datasets uses the NCBI Datasets CLI (ncbi-datasets-cli, installed with the conda env) for NCBI-friendly bulk downloads. Use --download_backend direct for HTTPS downloads without that dependency; keep --download_workers low (~3) to avoid NCBI rate-limiting.
domainator enum_report from a genbank file generates a tab separated file of properties and metadata related to the input, for example the domain content of each contig or cds. genbank files a tab separated, html, or JSON (--json_out, streaming NDJSON) metadata table yes yes
domainator extract_domains Takes a domainator-genbank file, looks for the specified domains, and extracts their annotated regions. a nucleotide or protein genbank file a genbank or fasta file of the same sequence type as the input yes yes For protein-domain output from nucleotide input, run extract_peptides first, then extract_domains. Nucleotide regions are not automatically whole CDSs or codon-aligned after extension; combine/splice operates per input record, not per CDS. See extraction limits.
domainator extract_peptides extracts translated peptide sequences from nucleotide genbank sequences, preserves the domainator annotations (other annotations are lost) nucleotide genbank file peptide genbank file yes yes
domainator extract_unannotated Extracts protein gaps not covered by qualifying annotations a protein genbank file a protein genbank or fasta file yes yes Protein-only; nucleotide input is rejected. For gaps in translated proteins, run extract_peptides first. --keep_direction has no effect. See extraction limits.
domainator filter_domains applies more stringent filtering to domainator-annotated genbank files. domainator-annotated genbank files a genbank file yes yes If you want to annotate the same genbank file with multiple evalue or max_overlap cutoffs, it is often faster to run domainator.py first with loose cutoffs, then run domainator filter_domains with more stringent cutoffs. To clear all annotations, just run domainator filter_domains with an evalue of -1
domainator find_features annotates transmembrane regions and signal peptides (TMbed) and PROSITE motifs as Domainator features protein or nucleotide genbank or fasta files a genbank file yes yes --tmbed needs the structure extra and TMbed (see Requirements).
domainator genbank_to_fasta converts genbank files to fasta files one or more genbank files a fasta file yes yes
domainator hmmer_build runs hmmbuild. Unlike the hmmbuild from the HMMER3 package, domainator hmmer_build allows specifying accession and description from the command line an MSA a .hmm file (optionally gzipped) yes yes Builds amino acid, DNA, and RNA profiles. The alphabet is inferred from the alignment, or set explicitly with --alphabet. --window_length and --window_beta set the nhmmer search window (the profile's MAXL field) for nucleotide profiles.
domainator hmmer_compare runs local profile alignment, calculating pairwise hmm scores and position-wise alignments hmmer3 profiles scores and (optionally) alignments yes yes hmmer_compare, hmmer_search, and seq_dist can all be used to compare profiles, with different outputs. Amino acid, DNA, and RNA profiles are all supported, but both sides must use the same alphabet. Scores are on the input alphabet's own scale: nucleotide scores run at roughly half the amino acid scale.
domainator hmmer_report Writes a tabular report from .hmm files, with a line for each profile one or more .hmm files a tab separated, html, or JSON (--json_out, streaming NDJSON) metadata table yes yes --columns alphabet reports whether each profile is amino, DNA, or RNA.
domainator hmmer_search Selects hmm profiles based on similarity scores to a reference set of hmm profiles hmmer3 profiles (optionally gzipped) hmmer3 profiles (optionally gzipped) yes yes hmmer_compare, hmmer_search, and seq_dist can all be used to compare profiles, with different outputs. Amino acid, DNA, and RNA profiles are all supported, but -i and -r must use the same alphabet. The default --min_score is scaled to the alphabet, because nucleotide scores run at roughly half the amino acid scale.
domainator hmmer_select Extracts a subset of profiles from .hmm files one or more .hmm files (optionally gzipped) an hmm file (optionally gzipped) yes yes All --input files must use one alphabet, because HMMER locks an .hmm file to the alphabet of its first profile. --alphabet splits a mixed set of files into per-alphabet outputs.
domainator infernal_build runs Infernal's cmbuild to build a covariance model from an RNA alignment (experimental) a Stockholm alignment a .cm file yes yes Needs Infernal (cmbuild).
domainator kmer_dist calculates exact k-mer similarity scores between sequence records two sequence files (genbank or fasta). Protein inputs use protein k-mers; nucleotide inputs use translated CDS protein k-mers by default or strand-invariant nucleotide k-mers with --nucleotide_kmers. Use --alphabet to disambiguate FASTA inputs and --gene_call to create CDS annotations for nucleotide FASTA. a sparse or dense matrix of similarity scores no yes Supports max_containment, min_containment, and jaccard metrics.
domainator matrix_report generates a histogram and summary statistics from a data matrix a similarity matrix (hdf5 or tab-separated text) a report with graphics and statistics (html), a text report, or a compact JSON summary (--json_out) no yes
domainator viewer writes the Domainator Viewer, a standalone, dependency-free HTML page for exploring networks, trees and projections, empty or opening a bundle optionally, a .dvb bundle from build_ssn, build_tree or build_projection (--dvb_out) or a session the viewer saved a self-contained HTML file no no The empty page opens bundles chosen in it, including the .dsnv network bundles of earlier versions.
domainator ssn_navigator read-only navigation of the network in a .dvb bundle (build_ssn --dvb_out): lists clusters, cluster contents, and per-cluster metadata distributions at a chosen similarity threshold a .dvb Domainator Viewer bundle with a network (or an older .dsnv one) compact JSON (overview / thresholds / clusters / cluster / node queries) no yes Agent-friendly companion to the interactive Domainator Viewer.
domainator format_db Prepares a domain_search database: split into shards (--shards N), BGZF-compress (--compress), and/or write .didx offset indexes. genbank or fasta file(s), optionally gzip/BGZF optional shard files (<base>.N.<ext>), optional .bgz compression, and optional .didx index sidecars no no Operations are opt-in (--shards/--compress/--index). Indexes let domain_search skip the per-run offset scan; a logical db name auto-resolves to its shards.
domainator plot_contigs Creates graphical representations of contigs with their annotations. a genbank or fasta file an html file yes yes
domainator rotate_contigs Sets the origin of circular contigs at the start, end, or center of a new (-r) or pre-existing domain annotation, reverse complementing so the domain is on the forward strand. nucleotide genbank or fasta files a genbank or fasta file yes yes Linear contigs and fasta records are skipped unless --circularize is set.
domainator select_by_cds Extract contigs or contig regions based on CDS names or domain content within individual CDSs domainator-annotated nucleotide genbank files a genbank file yes yes Supports boolean logic for domain selector statements. If --pad option is set, then output streaming is not in real-time and memory usage will be higher, because all records need to be read before padding sizes can be calculated. --anchor aligns on the start, end, or center of the focus CDSs.
domainator select_by_contig Extract a subset of contigs based on domain content of the entire contig domainator-annotated genbank files a genbank file yes yes Supports boolean logic for domain selector statements.
domainator select_by_coord extracts the contig regions listed in a coordinate table genbank or fasta files, and a table of contig, start, end and optionally strand a genbank file yes yes Coordinates are 1-based and inclusive.
domainator seq_dist calculates similarity scores between protein sequences two peptide sequence files (genbank or fasta), a sequence file and an hmm file, or two hmm files. a matrix of similarity scores (hdf5 or tab-separated text) no yes Typically the input and reference will be the same sequence file, creating a pairwise similarity matrix. It can also use an hmm file as a reference to make a table of profile scores for each input peptide.
domainator sort_contigs sorts contigs by their best Domain_Search score, or by the scores of named Domainator domains domainator-annotated genbank files, typically domain_search output a genbank file yes yes Gives the order domain_search --max_hits uses, for output written without it.
domainator split_by_cluster splits a sequence or profile file into one file per cluster of a similarity matrix a sequence or hmm file, and a similarity matrix a directory with one file per cluster no no
domainator structure_dist calculates similarity or distance matrices between protein structures structure files (pdb/cif, optionally gzipped; files, a glob, or a directory searched recursively) or a prebuilt aligner database, optionally a second set as the reference a matrix of similarity or distance values (hdf5 or tab-separated text) no yes The structure-input counterpart of domainator seq_dist. Rows are inputs and columns are references, the opposite of the other structure tools, so --evalue is computed against the reference set as it is in domainator seq_dist. Row and column labels are the same record ids domainator structure_to_genbank writes, so the matrix feeds domainator build_ssn, domainator build_tree and domainator build_projection directly. --mode adds tmscore, lddt and fident (and their _dist forms) to seq_dist's score-based modes; tmscore and lddt need --algorithm foldseek.
domainator structure_domainate annotates protein structures with hits to reference structures structure files (pdb/cif, optionally gzipped; files, a glob, or a directory searched recursively) or a prebuilt aligner database, plus reference structures or an aligner database a protein genbank file, one record per structure chain, with Domainator annotations no yes The structure-input counterpart of domainator domainate. Every input chain is written, whether or not it had hits. Because the databases are built from real structures they carry C-alpha coordinates, so --alignment_type 1 (TM-align) and the --metrics tmscore/lddt/rmsd are available with the default foldseek backend. --algorithm reseek selects reseek instead. Consider domainator structure_search when searching a large database with a few references.
domainator structure_search searches a structure database with a small number of reference structures a prebuilt aligner database (for example a foldseek database built from AlphaFold DB), or structure files to build one from, plus reference structures a protein genbank file of the hit records, each with a Domain_Search annotation no yes The structure-input counterpart of domainator domain_search. With the default foldseek backend, hit records are built from the sequences the aligner reports, so the searched database is never read end to end. --algorithm reseek selects reseek instead. --max_seqs bounds how many hits the aligner keeps per reference; raise it for large databases, and note the warning when a reference saturates it.
domainator structure_to_genbank converts protein structures into a protein genbank file structure files (pdb/cif, optionally gzipped) or a prebuilt aligner database a protein genbank file, one record per structure chain no yes Makes structures ordinary Domainator inputs, so the sequence-based tools work on them unchanged. --db_out also persists the aligner database, which carries C-alpha coordinates and can be reused as the input or reference of the other two structure tools. --algorithm selects foldseek (default) or reseek.
domainator summary_report Calculates statistics such as number of contigs, average contig length, and frequency of each domain a domainator-annotated genbank file an html file of the report (with figures/statistics), a text report, and/or a compact JSON summary (--json_out) yes yes 'focus domains' can be specified, which will make the output include information about the co-occurrence and distance of those domains with other domains. Can also write a report to the console.
domainator transform_matrix Converts matrices in score format to matrices in various normalized score formats a data matrix of scores a data matrix of normalized scores or distances no yes
domainator trim_contigs trim the ends of contigs nucleotide or protein genbank or fasta files a genbank file yes yes Supports boolean logic for domain selector statements.

Requirements

Domainator is developed on Linux, and has been tested on Mac. It probably won't work on Windows, except through WSL. It needs Python 3.12 or newer.

A few commands also need an external program or an optional Python package. The conda environment below installs all of them except esmologs and TMbed; domainator doctor lists which ones your installation has.

Program or package Needed by Install
diamond seq_dist (default algorithm), deduplicate_genbank --algorithm diamond conda install -c bioconda diamond
cd-hit deduplicate_genbank (default algorithm) conda install -c bioconda cd-hit
usearch deduplicate_genbank --algorithm usearch conda install -c bioconda usearch
foldseek domainate --foldseek, the structure_* commands (default aligner) conda install -c conda-forge -c bioconda foldseek
reseek structure_* --aligner reseek build from https://github.com/rcedgar/reseek
cmbuild (Infernal) infernal_build conda install -c bioconda infernal
datasets db_download of NCBI genomes conda install -c conda-forge ncbi-datasets-cli
umap-learn build_projection --algorithm umap pip install "domainator[projection]"
torch, esmologs domainate --foldseek on sequences (ESM-2 to 3Di) pip install "domainator[structure]"; esmologs: see docs/esm_3b_foldseek.md
TMbed (and torch) find_features --tmbed see TMbed

Domainator ships an optional native (Rust) extension that greatly speeds up GenBank/FASTA parsing and offset scanning. Building it requires a Rust toolchain (≥ 1.83) — which the conda environment installs for you — and a C compiler/linker (gcc/clang). If either is unavailable the extension is skipped and Domainator falls back to a slower pure-Python parser; results are identical either way. See Native (Rust) acceleration below.

Installation

There are two ways to install Domainator:

  • The released version, from bioconda: conda create -n domainator -c conda-forge -c bioconda domainator, as in the Quickstart. Install any optional programs you need into the same environment (see Requirements).
  • From this repository, with the conda environment below, which also installs the optional programs except esmologs and TMbed. Use this for the newest code or to develop Domainator.

NOTE: For Installation with ESM-2 3B 3Di and foldseek integration, see here

Conda

Step 0: Install miniconda

If you don't already have a conda distribution installed, install one, such as miniconda.

Miniconda

or

Mambaforge

Step 1: Download and install the domainator package

Clone the Domainator github repository and enter it:

git clone https://github.com/nebiolabs/domainator.git
cd domainator

Then create the conda environment, which installs Domainator and the external programs it uses:

On Linux:

conda env create -f conda_env.yml #x86_64 systems such as most linux machines, and older Apple machines.

On Mac:

conda env create -f conda_env_arm64.yml # ARM systems such as recent Apple machines, and a few linux machines.

This will create a new conda environment called "domainator".

Step 2: Activate the environment before you install packages or run any script

conda activate domainator

Optional: TMbed, for find_features --tmbed

find_features --tmbed predicts transmembrane regions and signal peptides with TMbed. The conda environment does not install it: TMbed is not on PyPI, and it brings in PyTorch, which is several GB. To use it, install it into the activated environment (or wherever you installed Domainator with pip):

conda activate domainator
pip install "transformers<5" "tmbed @ git+https://github.com/BernhoferM/TMbed.git@8cee893523eb655bc9485c00c65336d27a236191"
domainator doctor   # should now list torch and tmbed as found
  • Python 3.14 or older. PyTorch has no Python 3.15 builds yet, so on 3.15 pip reports No matching distribution found for torch. Check with python --version; to make the environment on 3.14 instead, run conda create -n domainator python=3.14 and then conda env update -n domainator -f conda_env.yml in place of Step 1's conda env create.
  • transformers<5: TMbed uses tokenizer methods that transformers 5 removed.
  • The TMbed commit is pinned because TMbed has no releases; this is the version Domainator is tested with.
  • GPU or CPU. --device (default cuda:0) falls back to the CPU when PyTorch can't use the GPU. pip's default PyTorch on Linux is built for a recent CUDA version (CUDA 13 for recent releases), which needs a recent NVIDIA driver; with an older driver, PyTorch can't use the GPU and TMbed runs on the CPU, much more slowly. domainator doctor reports whether PyTorch can use your GPU. If it can't, look up the "CUDA Version" at the top of nvidia-smi's output and install a PyTorch build for that version or older first, for example pip install torch --index-url https://download.pytorch.org/whl/cu124 for CUDA 12.4 (the builds are listed at https://pytorch.org/get-started/locally/). For a smaller CPU-only install, use --index-url https://download.pytorch.org/whl/cpu.
  • Model download. The first run downloads TMbed's ProtT5 encoder (about 2.25 GB), by default into the installed tmbed package. Use --tmbed_model_dir (or --model_dir, or the HF_HOME environment variable) to keep it somewhere else, such as a shared directory.

Native (Rust) acceleration

Domainator includes an optional native extension (domainator._gbfast) that makes GenBank/FASTA parsing and offset scanning several times faster. It is optional: Domainator runs correctly without it, just more slowly (it falls back to a pure-Python parser), so this step can be skipped if you can't build it.

The conda environment already installs the Rust toolchain. You also need a C compiler/linker on your PATH:

  • Linux: gcc — e.g. sudo apt install build-essential, or, inside the conda env, conda install -c conda-forge c-compiler
  • macOS: the Xcode command line tools — xcode-select --install

With the environment activated, build the extension and confirm it loaded:

conda activate domainator
pip install --no-deps --force-reinstall .
python -c "from domainator import _gbfast; print('native (Rust) acceleration: ENABLED')"

If the import raises ModuleNotFoundError, the extension was not built — check that cargo/rustc and a C compiler are on your PATH — and Domainator will transparently use the slower Python parser instead.

Developing Domainator? Use an editable build instead so source edits take effect without reinstalling. The editable + build-isolation path does not compile the extension, so disable isolation and provide the build backend explicitly:

pip install "setuptools-rust>=1.7"
pip install -e . --no-build-isolation

Apptainer (Singularity)

Navigate to the directory containing this README file. It should also contain a file called domainator.def. In that directory execute the command:

apptainer build domainator.sif domainator.def

Or (if you have singularity not apptainer)

singularity build domainator.sif domainator.def

Then to execute domainator commands, prefix any command with

apptainer exec domainator.sif [command here]
# for example:
apptainer exec domainator.sif domainator domainate -i test/data/pDONR201_multi_genemark.gb -r test/data/pdonr_hmms.hmm -o example_out.gb

Updating

In the repository folder, get the new version and recreate the environment:

git pull
conda env create --yes -f conda_env.yml

This will delete the old domainator conda environment and replace it with the updated version.

If you use the native (Rust) acceleration, rebuild it after updating (pip install --no-deps --force-reinstall . with the environment activated).

Examples

Run Domainator to annotate contigs with Pfam

Activate the domainator conda environment

conda activate domainator

To run domainator on a single file

# download and extract Pfam
wget https://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.hmm.gz
gunzip Pfam-A.hmm.gz

# run Domainator
domainator domainate --cpu 4 --max_overlap 0.6 -i your_genbank.gb -r Pfam-A.hmm -o domainator_output.gb

Visualizing output

domainator summary_report -i domainator_output.gb --html_out domain_summary.html
domainator enum_report -i domainator_output.gb --by contig --columns taxname:domain:genus:species:self length domains --html_out enum_report.html -o enum_report.tsv
domainator plot_contigs -i domainator_output.gb --html_out contigs_plot.html

For more examples see: Basic Examples, and Advanced examples.

Driving Domainator from other programs

domainator describe prints a JSON description of every command and its options, which a GUI or a workflow system can render as forms and run with domainator <command> --config options.json. The browser GUI that used to be bundled (domainator_server) is becoming a separate project built on it. See docs/tool_manifest.md.

Using Domainator as a python library

Basics

Most executables in Domainator are based on a core function that acts as a editors on BioPython SeqRecord objects. So you can chain them within python scripts, keeping sequences as SeqRecords instead of writing and reading Genbank files. Chaining the functions will be similar to piping the output of one program to another, but will be faster because superfluous conversions from Genbank to SeqRecord and back again will be avoided. A caveat is that you lose some input and output validation (See also Interoperability with BioPython).

The general way to access these functions is from domainator.[script_name] import [script_name]. See the API reference for each function's parameters.

Interoperability with BioPython

Domainator's records are ordinary Biopython SeqRecord objects. For reading and writing Domainator-compatible sequence files, use domainator.parse_seqfiles and domainator.write_genbank: they keep qualifier values intact (Biopython's own GenBank writer wraps long values, which inserts spaces into them) and add Domainator's per-CDS annotation qualifiers.

Credits

Please cite

Johnson, Sean R., Peter Weigele, Alexey Fomenkov, Andrew Ge, Anna Vincze, James B. Eaglesham, Richard J. Roberts, and Zhiyi Sun. “Domainator, a Flexible Software Suite for Domain-Based Annotation and Neighborhood Analysis, Identifies Proteins Involved in Antiviral Systems.” 2024, Nucleic Acids Research, gkae1175. https://doi.org/10.1093/nar/gkae1175.

Projects that domainator draws inspiration from

Contributors

  • Sean Johnson
  • Peter Weigele
  • Zhiyi Sun
  • Andrew Ge
  • Yu-Cheng Lin

Metadata

Release files for domainator 1.0.0rc3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for domainator 1.0.0rc3
File Size Uploaded Provenance Actions
domainator-1.0.0rc3.tar.gz 1.0 MB With provenance Details for domainator-1.0.0rc3.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for domainator 1.0.0rc3
File Interpreter ABI Platform Actions
domainator-1.0.0rc3-cp312-abi3-manylinux_2_28_x86_64.whl CPython 3.12 abi3 Linux glibc 2.28+ x86-64 Details for domainator-1.0.0rc3-cp312-abi3-manylinux_2_28_x86_64.whl
domainator-1.0.0rc3-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details for domainator-1.0.0rc3-cp312-abi3-macosx_11_0_arm64.whl

Total release size: 3.2 MB

Release files / domainator-1.0.0rc3.tar.gz

Download URL domainator-1.0.0rc3.tar.gz
Size 1.0 MB
Tags Source
SHA-256 checksum
How to use checksums
1929c018014565e742aff29828654922f5433527d0dca4fd0dd45967572b6201
BLAKE2b-256 checksum
How to use checksums
f33b3ab18d6b215a5a333b2d6f36778a85912c0ca6ca99c03fab88c0df10c960
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / domainator-1.0.0rc3-cp312-abi3-manylinux_2_28_x86_64.whl

Download URL domainator-1.0.0rc3-cp312-abi3-manylinux_2_28_x86_64.whl
Size 1.1 MB
Tags CPython 3.12 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
a296bfb1fcdd224a9458e4049a5f00551e882d4b48b540976cc0d2a7c0193a58
BLAKE2b-256 checksum
How to use checksums
2288448f72099fb60d67de09d8e7bdc2f2d8fbb5d4fae77cf0e7f9c44f0670f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Release files / domainator-1.0.0rc3-cp312-abi3-macosx_11_0_arm64.whl

Download URL domainator-1.0.0rc3-cp312-abi3-macosx_11_0_arm64.whl
Size 1.1 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
853114b47158167bfa95f9eb7a35606ce3e886ff426f0c412135e4644f092916
BLAKE2b-256 checksum
How to use checksums
2968089a167020acf1b530e70106a29fe4a627e6aa8bfa7f4fd5755c725ba90d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

Security for domainator 1.0.0rc3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 3 files in this release have been uploaded with provenance metadata.

Select from 3 files

Attestation for domainator-1.0.0rc3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 4, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page