Dorado: Oxford Nanopore's basecaller as a single executable with automatic hardware setup
Oxford Nanopore's Basecaller
At a glance
- What is it?
- Dorado is a C++ analysis engine for Oxford Nanopore reads that basecalls POD5 files with simplex, duplex and modified base models, and it ships as one executable that detects the hardware and picks its own configuration. The parts worth knowing before you install it are the platform matrix, the automatic multi-GPU behaviour that you may want to override, and the fact that the binary installers and the source tree are on two different version lines.
- Who is it for?
- Dorado suits a sequencing lab that wants the vendor's basecaller with automatic model download, automatic batch sizing and multi-GPU scaling, rather than assembling a pipeline from parts. It does not suit a team that needs to build from source on a platform outside the supported matrix, or one that treats the 1.x and 2.x version lines as interchangeable, since the binary downloads and the default branch are not the same line.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 50 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 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
One executable, and it configures itself
Dorado is a high-performance, easy-to-use, open source analysis engine for Oxford Nanopore reads, and the first feature listed is the one that shapes how you use it: one executable with sensible defaults, automatic hardware detection and configuration. That is a real design decision rather than a slogan, because the alternative is a basecaller that needs its batch size set, its model located, its accelerator selected and its thread count chosen. Dorado takes the first of those decisions itself, detecting the free memory of your GPU and selecting an appropriate batch size, and running in multi-GPU mode automatically. The rest of the feature list covers the basecalling modes, simplex, duplex and modified bases, along with barcode classification, aligned read output in SAM and BAM, initial support for poly(A) tail estimation, single-read error correction, POD5 support for the highest basecalling performance, and multiple custom optimisations in CUDA and Metal. The implementation is based on libtorch, the C++ API for PyTorch, and the primary language is C++.
Download the archive for your platform, then extract it
Installation is a download rather than a package manager operation, and the choice of build depends on your hardware. The listed downloads are dorado-2.1.2-linux-x64, dorado-2.1.2-linux-arm64-cuda12 for Orin only, dorado-2.1.2-linux-arm64-cuda13 for Jetson Thor and DGX Spark, dorado-2.1.2-osx-arm64 and dorado-2.1.2-win64. Once the tar.gz or zip archive is downloaded you extract it to the location you want, and you can then call Dorado using the full path to the binary:
/path/to/dorado-x.y.z-linux-x64/bin/dorado basecaller hac pod5s/ > calls.bamOr you add the bin path to your PATH environment variable and run with the dorado command instead:
dorado basecaller hac pod5s/ > calls.bamThe redirection to calls.bam is worth noticing because it is the shape of the whole workflow, the basecaller writing aligned output to standard output. A DEV.md file at the repository root covers building Dorado for development, and the documentation site holds the full getting started details.
The platform table is the compatibility contract
Dorado is heavily optimised for Nvidia A100 and H100 GPUs and delivers maximal performance on systems with those GPUs, and the supported platforms are listed with their minimum software requirements. Linux x86_64 with V100, A100 or H100 needs a CUDA driver of 525.105 or newer. Linux arm64 covers Jetson Orin, Jetson Thor and DGX Spark, needing Linux for Tegra 36.4.3 or newer, which is JetPack 6.2 or newer. Windows x86_64 with the same GPUs needs a CUDA driver of 529.19 or newer. Apple silicon, the M series, needs macOS 14 or newer. There is a caveat for the newest platform: DGX Spark supports all Dorado commands except Dorado correct, and support for correct is stated to be coming in a future release. Systems not in the table, with Nvidia GPUs of 8 GB VRAM or more and Pascal architecture onwards except the P100 and GP100, have not been widely tested but are expected to work, and when basecalling on Apple devices the recommendation is 16 GB of unified memory or more.
The multi-GPU default is the thing to override
The performance tips are short and the second one is the one that bites. Dorado automatically detects your GPU's free memory and selects an appropriate batch size, which is the behaviour you want. It also automatically runs in multi-GPU cuda:all mode, and if you have a heterogeneous collection of GPUs you are told to select the faster ones with the device flag, for example --device cuda:0,2, with the warning that not doing this will have a detrimental impact on performance. That is a sensible default and a sensible warning: a machine with one fast card and several slow ones will otherwise be throttled by the slowest, which is the opposite of what the hardware is for. The third tip is Windows specific and worth copying verbatim, because it is a large factor: on Windows with Nvidia GPUs, open Nvidia Control Panel, go to Manage 3D settings and set CUDA - Sysmem Fallback Policy to Prefer No Sysmem Fallback, which the documentation says provides a significant performance improvement.
Simplex basecalling, and what the input format means
The first command to reach for is the simplex basecaller, which uses the automatically downloaded hac model on a directory of POD5 files or a single POD5 file:
dorado basecaller hac pod5s/ > calls.bamTo basecall a single file you replace the directory with a path to your data file. The hac model is the default that arrives with the tool, and the POD5 format is the reason the tool exists in this shape, since POD5 support is listed as the feature that gives the highest basecalling performance and it is a separate format from the raw signal files. There is a resume feature documented for simplex basecalling, so a long run that is interrupted is not necessarily a run that starts again. The adapter and primer trimming is automatic, and it comes with a warning you should read before enabling it: Dorado can detect and remove adapter and primer sequences from the beginning and end of reads, but if you intend to demultiplex the reads at a later time, trimming primers will likely remove parts of the flanking regions of the barcodes and may prevent demultiplexing from working properly.
Modified bases are a model argument, not a separate command
Modified basecalling goes beyond the traditional A, T, C and G, detecting modified bases such as 5-methylcytosine, 5-hydroxymethylcytosine and N6-methyladenosine, which matter for epigenetic regulation. The way you ask for it is by extending the models argument with a comma-separated list of modifications:
dorado basecaller hac,5mCG_5hmCG,6mA pod5s/ > calls.bamSo it is one basecaller command with a model list, not a separate tool. The example detects both 5mC and 5hmC in CG contexts and 6mA in all contexts, which is the kind of thing the model names encode. The duplex mode is a separate capability linked from the feature list with an introductory video, and the simplex barcode classification is documented separately, since demultiplexing and basecalling are separate problems in this pipeline.
Two version lines, and the licences to read
The repository is not on a single line, and that catches people out. The default branch is release-v2.1, which matches the 2.1.2 binary download, and the recent releases include v2.1.2 and v2.1.1 in August and July 2026, but also v1.3.4 from the same day as the last push. So the 1.x and 2.x lines are both being worked on, and the source tree you clone is the 2.x line. The licence field on the repository is a custom one that GitHub cannot classify, with the terms in the LICENCE.txt file at the root, and since Dorado is distributed as a binary by a commercial vendor while the source is public, that file is worth reading before you build and redistribute it yourself. The repository also carries a .clang-format and a .clang-tidy configuration, a CMakeLists.txt, a pre-commit configuration, a CHANGELOG, a tests directory and a regression_test directory, and a tetrahedron directory. The last push was on 2026-09-03, and the documentation site is the authoritative place to look since the README points at it for detail on every feature.
Editorial conclusion
Dorado suits a sequencing lab that wants the vendor's basecaller with automatic model download, automatic batch sizing and multi-GPU scaling, rather than assembling a pipeline from parts. It does not suit a team that needs to build from source on a platform outside the supported matrix, or one that treats the 1.x and 2.x version lines as interchangeable, since the binary downloads and the default branch are not the same line. Before you install, check the platform table for your GPU and driver version, and if you have a mixed GPU set, use the device flag to pick the faster cards, because the automatic multi-GPU mode is not a good default for heterogeneous hardware.
Frequently asked questions
How do I install Dorado?
Download the archive for your platform from the list of links, which covers Linux x64, Linux arm64 for Orin and for Jetson Thor or DGX Spark, macOS arm64 and Windows x64, then extract it and either call the binary by its full path or add the bin directory to your PATH so you can run dorado directly.
Which GPUs does Dorado support?
It is heavily optimised for the Nvidia A100 and H100. The supported list is Linux x86_64 and Windows x86_64 with V100, A100 or H100, Linux arm64 on Jetson Orin, Jetson Thor and DGX Spark, and Apple silicon M series on macOS 14 or newer, each with a stated minimum CUDA driver or OS version.
How do I call modified bases with Dorado?
Extend the models argument with a comma-separated list of modifications, so dorado basecaller hac,5mCG_5hmCG,6mA pod5s/ writes a BAM of calls that include 5mC and 5hmC in CG contexts and 6mA in all contexts.
Does Dorado need any configuration to pick a batch size?
No. Dorado automatically detects the free memory of your GPU and selects an appropriate batch size. It also runs in multi-GPU cuda:all mode by default, so on a heterogeneous set of GPUs you are advised to select the faster cards with the device flag, otherwise the slow ones hold the whole run back.
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/nanoporetech-dorado)Was this useful?