{"id":44523551,"url":"https://github.com/angelovangel/faster","last_synced_at":"2026-02-13T17:53:53.132Z","repository":{"id":38234574,"uuid":"309120488","full_name":"angelovangel/faster","owner":"angelovangel","description":"A (very) fast program for getting statistics about a fastq file, the way I need them, written in Rust","archived":false,"fork":false,"pushed_at":"2025-11-11T13:35:25.000Z","size":125,"stargazers_count":31,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-11T14:23:26.408Z","etag":null,"topics":["bioinformatics","fastq-files","fastqc","ngs","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angelovangel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-11-01T15:01:31.000Z","updated_at":"2025-11-11T13:35:30.000Z","dependencies_parsed_at":"2024-02-23T18:38:44.852Z","dependency_job_id":"af436b5d-ebcb-456e-bb1e-f52d03f6ddbe","html_url":"https://github.com/angelovangel/faster","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/angelovangel/faster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelovangel%2Ffaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelovangel%2Ffaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelovangel%2Ffaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelovangel%2Ffaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angelovangel","download_url":"https://codeload.github.com/angelovangel/faster/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelovangel%2Ffaster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29414094,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-13T06:24:03.484Z","status":"ssl_error","status_checked_at":"2026-02-13T06:23:12.830Z","response_time":78,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","fastq-files","fastqc","ngs","rust"],"created_at":"2026-02-13T17:53:50.374Z","updated_at":"2026-02-13T17:53:53.124Z","avatar_url":"https://github.com/angelovangel.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Rust](https://github.com/angelovangel/faster/workflows/Rust/badge.svg)\n# faster\n\nA (very) fast program for getting statistics and features from a fastq file, in a usable form, written in Rust.\n\n## Description\n\nI wrote this program to get *fast* and *accurate* statistics about a fastq file, formatted as a tab-delimited table. In addition, it can do the following with a fastq file:\n\n- get the read lengths\n- get gc content per read\n- get geometric mean of phred scores per read\n- get NX values for all the reads, e.g. N50\n- filter reads based on length (both greater than and smaller than a desired length)\n- subsample reads (by proportion of all reads in the file)\n- trim front and trim tail - trim x number of bases from the beginning/end of each read\n- regex search for reads containing a pattern in their description field\n\nThe motivation behind it:\n\n- many of the tools out there are just wrong when it comes to calculating 'mean' phred scores (yes, just taking the arithmetic mean phred score is wrong)\n- one simple executable doing one thing well, no dependencies\n- it is straightforward to parse the output in other programs and the output is easy to tweak as desired\n- reasonably fast\n- can be easily run in parallel\n\n## Install\n\nCompiled binaries are provided for x86_64 Linux, macOS and Windows - download from the releases section and run. You will have to make the file executable (`chmod a+x faster`) and for MacOS, allow running external apps in your security settings. If you need to run it on something else (your phone?!), you will have to compile it yourself (which is pretty easy though). Below is an example on how to setup a Rust toolchain and compile `faster`:\n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\ngit clone https://github.com/angelovangel/faster.git\n\ncd faster\ncargo build --release\n\n# the binary is now under ./target/release/, run it like this:\n./target/release/faster -t /path/to/fastq/file.fastq.gz\n\n```\n\n## Usage and tweaking the output\n\nThe program takes one fastq/fastq.gz file as an argument and, when used with the `--table` flag, outputs a tab-separated table with statistics to stdout. There are options to obtain the length, GC-content, and 'mean' phred scores per read, or to filter reads by length, see `-help` for details.\n\n```bash\n# for help\nfaster --help # or -h\n\n# get some N10, N50 and N90 values\nfor i in 0.1 0.5 0.9; do faster --nx $i /path/to/fastq/file.fastq; done\n\n# get a table with statistics\nfaster -t /path/to/fastq/file.fastq\n\n# for many files, with parallel\nparallel faster -t ::: /path/to/fastq/*.fastq.gz\n\n# again with parallel, but get rid of the table header\nparallel faster -ts ::: /path/to/fastq/*.fastq.gz\n```\n\nThe statistics output is a tab-separated table with the following columns:   \n`file   reads   bases   n_bases   min_len   max_len   mean_len   Q1   Q2   Q3   N50 Q20_percent Q30_percent`\n\n## Performance\n\nTo get an idea how `faster` compares to other tools, I have benchmarked it with two other popular programs and 3 different datasets. **I am aware that these tools have different and often much richer functionality (especially seqkit, I use it all the time), so these comparisons are for orientation only**. \nThe benchmarks were performed with [hyperfine](https://github.com/sharkdp/hyperfine) (`-r 15 --warmup 2`) on a MacBook Pro with an 8-core 2.3 GHz Quad-Core Intel Core i5 and 8 GB RAM. For Illumina reads, `faster` is slightly slower than `seqstats` (written in C using the `klib` [library by Heng Li](https://github.com/attractivechaos/klib) - the fastest thing possible out there), and for Nanopore it is even a bit faster than `seqstats`. `seqkit stats` performs worse of the three tools tested, but bear in mind the extraordinarily rich functionality it has.\n\n***\n### dataset A - a small Nanopore fastq file with 37k reads and 350M bases\n\n| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |\n|:---|---:|---:|---:|---:|\n| `faster -t datasetA.fastq` | 398.1 ± 21.2 | 380.4 | 469.6 | 1.00 |\n| `seqstats datasetA.fastq` | 633.6 ± 54.1 | 593.3 | 773.6 | 1.59 ± 0.16 |\n| `seqkit stats -a datasetA.fastq` | 1864.5 ± 70.3 | 1828.7 | 2117.3 | 4.68 ± 0.31 |\n\n***\n\n### dataset B - a small Illumina fastq.gz file with ~100k reads\n\n| Command | Mean [ms] | Min [ms] | Max [ms] | Relative |\n|:---|---:|---:|---:|---:|\n| `faster -t datasetB.fastq.gz` | 181.7 ± 2.3 | 177.7 | 184.6 | 1.36 ± 0.09 |\n| `seqstats datasetB.fastq.gz` | 133.4 ± 8.4 | 125.7 | 154.2 | 1.00 |\n| `seqkit stats -a datasetB.fastq.gz` | 932.6 ± 37.0 | 873.8 | 1028.9 | 6.99 ± 0.52 |\n\n***\n\n### dataset C - a small Illumina iSeq run, 11.5M reads and 1.7G bases, using `gnu parallel`\n\n| Command | Mean [s] | Min [s] | Max [s] | Relative |\n|:---|---:|---:|---:|---:|\n| `parallel faster -t ::: *.fastq.gz` | 6.438 ± 0.384 | 6.009 | 7.062 | 1.43 ± 0.15 |\n| `parallel seqstats ::: *.fastq.gz` | 4.488 ± 0.394 | 4.120 | 5.312 | 1.00 |\n| `parallel seqkit stats -a ::: *.fastq.gz` | 40.156 ± 1.747 | 38.762 | 44.132 | 8.95 ± 0.88 |\n\n***\n## Reference\n\n`faster` uses the excellent Rust-Bio library:\n\n[Köster, J. (2016). Rust-Bio: a fast and safe bioinformatics library. Bioinformatics, 32(3), 444-446.](https://academic.oup.com/bioinformatics/article/32/3/444/1743419)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelovangel%2Ffaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangelovangel%2Ffaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelovangel%2Ffaster/lists"}