{"id":24083305,"url":"https://github.com/x3ro/rly","last_synced_at":"2025-04-30T18:23:25.280Z","repository":{"id":65192257,"uuid":"584198602","full_name":"x3ro/rly","owner":"x3ro","description":"Run multiple commands concurrently. A drop-in replacement for the NodeJS based application `concurrently`.","archived":false,"fork":false,"pushed_at":"2025-04-19T14:34:59.000Z","size":105,"stargazers_count":6,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-19T18:36:39.811Z","etag":null,"topics":["cli","command-line","concurrently","parallel"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/x3ro.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}},"created_at":"2023-01-01T19:49:22.000Z","updated_at":"2025-04-19T14:34:06.000Z","dependencies_parsed_at":"2024-12-11T16:34:50.762Z","dependency_job_id":"13e02749-1df1-4a05-b34e-a7d38b0255e3","html_url":"https://github.com/x3ro/rly","commit_stats":{"total_commits":41,"total_committers":3,"mean_commits":"13.666666666666666","dds":0.09756097560975607,"last_synced_commit":"5b4630c7c7eb983d0e97bdc90d2b08b7f8c53f6b"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x3ro%2Frly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x3ro%2Frly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x3ro%2Frly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/x3ro%2Frly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/x3ro","download_url":"https://codeload.github.com/x3ro/rly/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251758788,"owners_count":21639110,"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","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":["cli","command-line","concurrently","parallel"],"created_at":"2025-01-09T23:56:20.093Z","updated_at":"2025-04-30T18:23:25.256Z","avatar_url":"https://github.com/x3ro.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003er[un concurrent]ly\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/x3ro/rly/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/x3ro/rly/actions/workflows/ci.yml/badge.svg?branch=main\" alt=\"Build Status\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/crates/l/rly.svg\" alt=\"license\"\u003e\n  \u003ca href=\"https://crates.io/crates/rly\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/rly.svg?colorB=319e8c\" alt=\"Version info\"\u003e\u003c/a\u003e\u003cbr\u003e\n\u003c/p\u003e\n\n`rly` is a concurrent task runner and, in its current form, essentially a clone of [concurrently](https://github.com/open-cli-tools/concurrently). For example:\n\n```bash\n$ rly --names \"server,client\" \\\n      --kill-others \\\n      \"nc -lk 1234\" \\\n      \"echo 'message from client' | nc localhost 1234\"\n[server] message from client\n[client] echo 'message from client' | nc localhost 1234 exited with exit status: 0\n--\u003e Sending SIGKILL to other processes..\n[server] nc -lk 1234 exited with signal: 9 (SIGKILL)\n```\n\n## Installation\n\nCurrently you need to have rust installed in order to install `rly`: \n\n```\ncargo install rly\n```\n\n## Usage (in progress)\n\n```text\nUsage: rly [OPTIONS] [COMMANDS]...\n\nArguments:\n  [COMMANDS]...\n\n\nOptions:\n  -n, --names \u003cNAMES\u003e\n          List of custom names to be used in prefix template.\n\n          Example names: \"main,browser,server\"\n\n      --name-separator \u003cNAME_SEPARATOR\u003e\n          The character to split \u003cnames\u003e on.\n\n          Example usage: -n \"styles|scripts|server\" --name-separator\n          \"|\"\n\n          [default: ,]\n\n  -r, --raw\n          Output only raw output of processes, disables prettifying\n          and concurrently coloring\n\n      --no-color\n          Disables colors from logging\n\n      --hide \u003cHIDE\u003e\n          Comma-separated list of processes for which to hide the\n          output. The processes can be identified by their name or\n          index\n\n  -g, --group\n          Order the output as if the commands were run sequentially\n\n      --timings\n          Show timing information for all processes\n\n  -P, --passthrough-arguments\n          Passthrough additional arguments to commands (accessible via\n          placeholders) instead of treating them as commands\n\n  -p, --prefix \u003cPREFIX\u003e\n          Prefix used in logging for each process. Possible values:\n          index, pid, time, command, name, none, or a template.\n          Example template: \"{time}-{pid}\"\n\n          [default: [{name}]]\n\n  -c, --prefix-colors \u003cPREFIX_COLORS\u003e\n          Comma-separated list of chalk colors to use on prefixes. If\n          there are more commands than colors, the last color will be\n          repeated.\n\n          - Available modifiers: reset, bold, dim, italic, underline,\n          inverse, hidden, strikethrough\n\n          - Available colors: black, red, green, yellow, blue,\n          magenta, cyan, white, gray, any hex values for colors (e.g.\n          #23de43) or auto for an automatically picked color\n\n          - Available background colors: bgBlack, bgRed, bgGreen,\n          bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite\n\n          See https://www.npmjs.com/package/chalk for more\n          information.\n\n          [default: reset]\n\n  -l, --prefix-length \u003cPREFIX_LENGTH\u003e\n          Limit how many characters of the command is displayed in\n          prefix. The option can be used to shorten the prefix when it\n          is set to \"command\"\n\n          [default: 10]\n\n  -t, --timestamp-format \u003cTIMESTAMP_FORMAT\u003e\n          Specify the timestamp in chrono::format syntax\n\n          [default: \"%Y-%m-%d %H:%M:%S.%3f\"]\n\n  -k, --kill-others\n          Kill other processes if one exits or dies\n\n      --kill-others-on-fail\n          Kill other processes if one exits with non zero status code\n\n      --restart-tries \u003cRESTART_TRIES\u003e\n          How many times a process that died should restart. Negative\n          numbers will make the process restart forever\n\n          [default: 0]\n\n      --restart-after \u003cRESTART_AFTER\u003e\n          Delay time to respawn the process, in milliseconds\n\n          [default: 0]\n\n  -h, --help\n          Print help information (use `-h` for a summary)\n\n  -V, --version\n          Print version information\n```\n\n## Why?\n\nI like the UX of `concurrently`, but dislike having to install NodeJS / npm to use it. My goal is to make `rly` accessible via Homebrew (and potentially other package managers), so that installation only requires downloading a single binary. \n\n\n## Progress implementing `concurrently` features\n\n- [x] commands can be supplied\n- [x] `--names` can be passed\n- [x] `--name-separator`\n- [x] `--raw`\n- [x] `--no-color`\n- [x] `--hide`\n- [ ] `--group`\n- [ ] `--timings`\n- [ ] `--passthrough-arguments`\n- [x] `--prefix`\n  - [x] index\n  - [x] pid\n  - [x] time\n  - [x] command\n  - [x] name\n- [x] `--prefix-colors`\n- [x] `--prefix-length`\n- [x] `--timestamp-format`\n- [x] `--kill-others`\n- [x] `--kill-others-on-fail`\n- [x] `--restart-tries`\n- [x] `--restart-after`\n\n\n# License\n\nSee `LICENSE` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx3ro%2Frly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fx3ro%2Frly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fx3ro%2Frly/lists"}