{"id":13559533,"url":"https://github.com/aaronriekenberg/rust-parallel","last_synced_at":"2025-10-21T03:57:15.122Z","repository":{"id":63694113,"uuid":"569022212","full_name":"aaronriekenberg/rust-parallel","owner":"aaronriekenberg","description":"Fast command line app in rust/tokio to run commands in parallel.  Similar interface to GNU parallel or xargs plus useful features.  Listed in Awesome Rust utilities.","archived":false,"fork":false,"pushed_at":"2025-10-20T17:06:33.000Z","size":1095,"stargazers_count":247,"open_issues_count":12,"forks_count":12,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-21T03:57:05.098Z","etag":null,"topics":["command-line","parallel","rust","tokio"],"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/aaronriekenberg.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":"2022-11-21T23:02:07.000Z","updated_at":"2025-10-20T17:06:35.000Z","dependencies_parsed_at":"2024-02-13T23:27:15.247Z","dependency_job_id":"40fdc6e5-4021-4d5f-9bd9-b1d86d12b9ad","html_url":"https://github.com/aaronriekenberg/rust-parallel","commit_stats":{"total_commits":359,"total_committers":2,"mean_commits":179.5,"dds":"0.44846796657381616","last_synced_commit":"afdd5e4b4f3aec7b629d23ce105d622bf9f7b78d"},"previous_names":[],"tags_count":84,"template":false,"template_full_name":null,"purl":"pkg:github/aaronriekenberg/rust-parallel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronriekenberg%2Frust-parallel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronriekenberg%2Frust-parallel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronriekenberg%2Frust-parallel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronriekenberg%2Frust-parallel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aaronriekenberg","download_url":"https://codeload.github.com/aaronriekenberg/rust-parallel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aaronriekenberg%2Frust-parallel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280200870,"owners_count":26289477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-21T02:00:06.614Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["command-line","parallel","rust","tokio"],"created_at":"2024-08-01T13:00:28.554Z","updated_at":"2025-10-21T03:57:15.115Z","avatar_url":"https://github.com/aaronriekenberg.png","language":"Rust","readme":"# rust-parallel\n\n[crates-badge]: https://img.shields.io/crates/v/rust-parallel.svg\n[crates-url]: https://crates.io/crates/rust-parallel\n[homebrew-badge]: https://img.shields.io/homebrew/v/rust-parallel.svg\n[homebrew-url]: https://formulae.brew.sh/formula/rust-parallel\n\n[ci-badge]: https://github.com/aaronriekenberg/rust-parallel/actions/workflows/CI.yml/badge.svg\n[ci-url]: https://github.com/aaronriekenberg/rust-parallel/actions/workflows/CI.yml \n\n[![Crates.io][crates-badge]][crates-url] [![Homebrew][homebrew-badge]][homebrew-url] [![CI workflow][ci-badge]][ci-url]\n\nRun commands in parallel and aggregate outputs.  Async application using [tokio](https://tokio.rs).\n\n[Example commands](https://github.com/aaronriekenberg/rust-parallel/wiki/Examples) and [detailed manual](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual).\n\nListed in [Awesome Rust - utilities](https://github.com/rust-unofficial/awesome-rust#utilities)\n\nSimilar interface to [GNU Parallel](https://www.gnu.org/software/parallel/parallel_examples.html) or [xargs](https://man7.org/linux/man-pages/man1/xargs.1.html) plus useful features:\n* More than 10x faster than GNU Parallel [in benchmarks](https://github.com/aaronriekenberg/rust-parallel/wiki/Benchmarks)\n* Run commands from [stdin](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#commands-from-stdin), [input files](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#reading-multiple-inputs), or [`:::` arguments](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#commands-from-arguments)\n* Automatic parallelism to all cpus, or [configure manually](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#parallelism)\n* Transform inputs with [variables](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#automatic-variables) or [regular expressions](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#regular-expression)\n* Prevent [output interleaving](https://github.com/aaronriekenberg/rust-parallel/wiki/Output-Interleaving) and maintain input order with `-k`/`--keep-order`\n* Shell mode to run [bash functions](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#bash-function) and [commands](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#shell-commands)\n* [TUI progress bar](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#progress-bar) using [indicatif](https://github.com/console-rs/indicatif)\n* [Path cache](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#path-cache)\n* [Command timeouts](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#timeout)\n* [Structured debug logging](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#debug-logging)\n* [Dry run mode](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#dry-run)\n* [Configurable error handling](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual#error-handling)\n\n## Contents:\n* [Installation](#installation)\n* [Documents](#documents)\n* [Tech Stack](#tech-stack)\n\n## Installation\n\n### Homebrew\n\nWith [Homebrew](https://brew.sh) installed, run\n\n```sh\nbrew install rust-parallel\n```\n\n### Pre-built release\n\n1. Download a pre-built release from [Github Releases](https://github.com/aaronriekenberg/rust-parallel/releases) for Linux, MacOS, or Windows.\n2. Extract the executable and put it somewhere in your $PATH.\n\n### From Crates.io via Cargo\n\n1. [Install Rust](https://www.rust-lang.org/learn/get-started)\n2. Install the latest version of this app from [crates.io](https://crates.io/crates/rust-parallel):\n\n    ```\n    $ cargo install rust-parallel   \n    ```\n\nThe same `cargo install rust-parallel` command will also update to the latest version after initial installation.\n\n## Documents:\n1. [Examples](https://github.com/aaronriekenberg/rust-parallel/wiki/Examples) - complete runnable commands to give an idea of overall features.\n1. [Manual](https://github.com/aaronriekenberg/rust-parallel/wiki/Manual) - more detailed manual on how to use individual features.\n1. [Benchmarks](https://github.com/aaronriekenberg/rust-parallel/wiki/Benchmarks)\n1. [Output Interleaving](https://github.com/aaronriekenberg/rust-parallel/wiki/Output-Interleaving) - output interleaving in rust-parallel compared with other commands.\n\n## Tech Stack:\n* [anyhow](https://github.com/dtolnay/anyhow) used for application error handling to propogate and format fatal errors.\n* [clap](https://docs.rs/clap/latest/clap/) command line argument parser.\n* [itertools](https://docs.rs/itertools/latest/itertools/) using [`multi_cartesian_product`](https://docs.rs/itertools/latest/itertools/trait.Itertools.html#method.multi_cartesian_product) to process `:::` command line inputs.\n* [indicatif](https://github.com/console-rs/indicatif) optional TUI progress bar.\n* [regex](https://github.com/rust-lang/regex) optional regular expression capture groups processing for `-r`/`--regex` option.\n* [tokio](https://tokio.rs/) asynchronous runtime for rust.  From tokio this app uses:\n  * `async` / `await` functions (aka coroutines)\n  * Singleton `CommandLineArgs` instance using [`tokio::sync::OnceCell`](https://docs.rs/tokio/latest/tokio/sync/struct.OnceCell.html).\n  * Asynchronous command execution using [`tokio::process::Command`](https://docs.rs/tokio/latest/tokio/process/struct.Command.html)\n  * [`tokio::sync::Semaphore`](https://docs.rs/tokio/latest/tokio/sync/struct.Semaphore.html) used to limit number of commands that run concurrently.\n  * [`tokio::sync::mpsc::channel`](https://docs.rs/tokio/latest/tokio/sync/mpsc/fn.channel.html) used to receive inputs from input task, and to send command outputs to an output writer task.  To await command completions, use the elegant property that when all `Senders` are dropped the channel is closed.\n* [tracing](https://docs.rs/tracing/latest/tracing/) structured debug and warning logs.\n  * [`tracing::Instrument`](https://docs.rs/tracing/latest/tracing/attr.instrument.html) is used to provide structured debug logs.\n* [which](https://github.com/harryfei/which-rs) used to resolve command paths for path cache.\n","funding_links":[],"categories":["Applications","Shell/Terminal"],"sub_categories":["Utilities"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaronriekenberg%2Frust-parallel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faaronriekenberg%2Frust-parallel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faaronriekenberg%2Frust-parallel/lists"}