Bowtie 2 aligns long reads without loading the genome into memory
A fast and sensitive gapped read aligner
At a glance
- What is it?
- Bowtie 2 is a C++ read aligner that indexes the reference with an FM index, which is why it can align reads of a hundred base pairs or more against a mammalian genome in a few gigabytes of memory, and it does so in gapped, local and paired-end modes. It suits genome-scale pipelines that need sensitivity on longer reads.
- Who is it for?
- Adopt Bowtie 2 when your reads are long, roughly fifty base pairs up to hundreds or thousands of characters, and your reference is large enough that a suffix-array or naive approach would not fit in memory, since the FM index keeps the human genome at a footprint the README puts at around 3.2 GB.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 31 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What kind of read aligner this is
Bowtie 2 is described as an ultrafast and memory-efficient tool for aligning sequencing reads to long reference sequences. The README says it is particularly good at aligning reads of about 50 up to 100s or 1,000s of characters, and particularly good at aligning to relatively long genomes such as mammalian ones. It supports gapped, local and paired-end alignment modes, and the tool itself, `bowtie2`, takes a Bowtie 2 index and a set of sequencing read files and outputs a set of alignments in SAM format. The repository also carries two sibling executables at the root, `bowtie2-build` and `bowtie2-inspect`, so the indexing and inspection steps are part of the same package rather than separate downloads.
The FM index is the reason the memory stays small
The design decision that makes the tool viable at genome scale is the index. Bowtie 2 indexes the genome with an FM Index to keep its memory footprint small, and for the human genome the README puts its memory footprint at typically around 3.2 GB. That number is the whole argument, because a naive aligner that holds the reference in memory or builds a large suffix array does not scale to a mammalian reference on a single machine. The index is also why the read length matters, since longer reads mean fewer candidate positions to check, which is where the sensitivity comes from. The source tree shows the same split at the code level, with `binary_sa_search.h`, `blockwise_sa.h` and `bitpack.h` handling the indexed search, and the `aligner_*.cpp` family handling the alignment itself.
Installing through conda, containers or a release binary
Three routes are documented, and the package manager route is the one the README leads with. Bowtie 2 is available from various package managers, notably Bioconda, and with Bioconda installed the install is:
conda install bowtie2Containerised versions are available through the Biocontainers project, for example via Docker Hub. The third route is the releases tab of the repository itself, where sources and binaries are published for Linux, Mac OS X and Windows. The architecture story has improved as well: by using the SIMDE project, Bowtie 2 now supports ARM64, PPC64 and s390x in addition to the usual targets. If you intend to compile from source, the README says to make sure you have at least the zlib library and header files installed, and points at the Building from source section of the manual for the details.
What an alignment actually is, in the README's own example
The README takes the trouble to explain the concept, and the example is short enough to be worth reproducing:
Read: GACTGGGCGATCTCGACTTCG
||||| |||||||||| |||
Reference: GACTG--CGATCTCGACATCGThe dash symbols represent gaps and the vertical bars show where aligned characters match. The purpose of alignment, as the README puts it, is to make an educated guess as to where a read originated with respect to the reference genome, and it stresses that this is not always determinable with certainty. The example it gives for that uncertainty is a reference containing several long stretches of As and a read that could sit in more than one of them. That is the honest limit of any aligner, and it is why the settings around sensitivity and ambiguity handling matter more than the raw speed of the binary.
The source tree shows how the pieces divide
The repository is the source distribution rather than a thin wrapper, and the file names describe the architecture. The alignment engine is split into `aligner_seed.cpp` and `aligner_seed2.cpp` for seeding, `aligner_sw.cpp` with its `aligner_swsse` variants for the Smith-Waterman stage, and `aligner_cache.cpp` for caching, with `aligner_driver.cpp` tying them together and `aligner_result.cpp` producing the output. The dynamic programming kernels live under the `bt2_` prefix, with `bt2_dp.cpp` for the dynamic programming and `bt2_idx.cpp` for the index, and the `bt2_` build main in `bt2_build.cpp`. The `Makefile` in the root shows the practical constraints, with a C++11 standard flag, pthread and zlib linked in, and explicit branches for Linux, Darwin and MinGW, including a comment that POSIX memory-mapped files are not currently supported on Windows along with the loss of advanced vectorization there.
Where Bowtie 2 is the wrong choice
The scope of the tool is narrow and the README is honest about where the strength lies, so the case against it is mostly a case for something else. The sweet spot is reads of about fifty base pairs and up, against references that are large. Short reads, the classic Illumina or short-read regime, are not what the design targets, and a dedicated short-read aligner with a different index and a different sensitivity model is the better instrument there. A second case is reads that are genuinely ambiguous, where the reference contains long stretches of the same base and the read could sit in several places. Bowtie 2 will report placements, but the README is explicit that certainty is not always possible, and a pipeline that treats one placement as the answer is the real risk. There is a third case, and it is a practical one: the tool is GPL v3, which matters if you intend to link it into a closed product.
Licence, release cadence and where it runs for you
The licence is GPL v3, and the Makefile in the repository carries the standard notice that the program is free software and comes with no warranty. The release history shows a long-running project with a recent burst. The listed versions are v2.5.3 from January 2024, v2.5.4 from May 2024 and v2.5.5 from 2026-02-17, with the last push to the repository on 2026-09-22, so the code is current even though the version number moves slowly. Two of the badges point at hosted deployments rather than local runs, with links to a US Galaxy server and a European Galaxy server, which is a useful signal about who uses it, since Galaxy exposes the aligner as a tool inside a graphical pipeline environment. The repository also ships the `MANUAL`, `TUTORIAL`, `NEWS` and `AUTHORS` files at the root, and a small `example/` tree with index, reads and reference directories, which is the quickest way to see what the input files are supposed to look like.
Editorial conclusion
Adopt Bowtie 2 when your reads are long, roughly fifty base pairs up to hundreds or thousands of characters, and your reference is large enough that a suffix-array or naive approach would not fit in memory, since the FM index keeps the human genome at a footprint the README puts at around 3.2 GB. Do not adopt it for short reads, where a dedicated short-read aligner is the better tool, and do not expect it to resolve an ambiguous placement on its own, since a read full of repeated bases can be placed in several places. Verify first which mode and sensitivity settings your pipeline needs, and note that the current release is 2.5.5 from 2026-02-17 while the last push was on 2026-09-22.
Frequently asked questions
What read lengths is Bowtie 2 designed for?
The README says it is particularly good at aligning reads of about 50 up to 100s or 1,000s of characters, and particularly good at aligning to relatively long genomes such as mammalian ones.
How much memory does Bowtie 2 need for the human genome?
The README states that for the human genome its memory footprint is typically around 3.2 GB, because the genome is indexed with an FM Index rather than being held and searched directly.
How do I install Bowtie 2?
With Bioconda installed, the README gives `conda install bowtie2`. Containerised builds are published through the Biocontainers project, and binaries and sources for Linux, Mac OS X and Windows are in the releases tab of the repository. A source build needs at least the zlib library and headers.
What file format does bowtie2 output?
The `bowtie2` command takes a Bowtie 2 index and a set of sequencing read files and outputs a set of alignments in SAM format, with `bowtie2-build` and `bowtie2-inspect` handling index creation and inspection.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/benlangmead-bowtie2)Was this useful?