{"id":24693002,"url":"https://github.com/dusrdev/pulse","last_synced_at":"2026-03-18T02:03:33.762Z","repository":{"id":261129863,"uuid":"857431011","full_name":"dusrdev/Pulse","owner":"dusrdev","description":"Pulse - A hyper fast general purpose HTTP request tester","archived":false,"fork":false,"pushed_at":"2025-12-08T05:52:53.000Z","size":610,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"stable","last_synced_at":"2026-01-14T01:21:30.228Z","etag":null,"topics":["cli","cross-platform","csharp","http-requests","linux","macos","performance","windows"],"latest_commit_sha":null,"homepage":"","language":"C#","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/dusrdev.png","metadata":{"files":{"readme":"Readme.md","changelog":"Changelog.md","contributing":null,"funding":"FUNDING.yaml","license":"License.txt","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},"funding":{"github":"dusrdev"}},"created_at":"2024-09-14T16:33:14.000Z","updated_at":"2025-12-08T05:51:02.000Z","dependencies_parsed_at":"2024-12-08T07:16:52.886Z","dependency_job_id":"8ce0176c-d3b5-4af3-8239-c327587fb740","html_url":"https://github.com/dusrdev/Pulse","commit_stats":null,"previous_names":["dusrdev/pulse"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/dusrdev/Pulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusrdev%2FPulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusrdev%2FPulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusrdev%2FPulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusrdev%2FPulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dusrdev","download_url":"https://codeload.github.com/dusrdev/Pulse/tar.gz/refs/heads/stable","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusrdev%2FPulse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30641743,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-18T01:41:58.583Z","status":"online","status_checked_at":"2026-03-18T02:00:07.824Z","response_time":104,"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":["cli","cross-platform","csharp","http-requests","linux","macos","performance","windows"],"created_at":"2025-01-26T20:18:13.204Z","updated_at":"2026-03-18T02:03:33.756Z","avatar_url":"https://github.com/dusrdev.png","language":"C#","funding_links":["https://github.com/sponsors/dusrdev"],"categories":[],"sub_categories":[],"readme":"# Pulse ![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/dusrdev/Pulse/total?label=Downloads\u0026labelColor=FF00AA\u0026color=0000FF\u0026cacheSeconds=1)\n\nPulse is a general purpose, cross-platform, performance-oriented, command-line utility for testing HTTP endpoints. Pulse was inspired by [Bombardier](https://github.com/codesenberg/bombardier), but is designed to be configured, have native support for proxies, and suited for heavier and more frequent workflows.\n\n## Features\n\n- JSON based request configuration\n- Proxy support\n- Configurable concurrency via max connection limits and optional per-request delays\n- Supports all HTTP methods\n- Supports Headers\n- Support Content-Type and Body for POST, PUT, PATCH, and DELETE\n- Custom HTML generated outputs for easy inspection\n- Structured output toggle (PlainText or JSON) for terminals, scripts, and LLMs\n- Format JSON outputs\n- Captures all response headers for debugging\n- Quiet mode to silence progress noise when piping or scripting\n- Reports peak concurrent connections and throughput in the summary output\n\nAnd more!\n\n## Installation\n\nPulse comes in a pre-build self-contained binary, which can be downloaded from the [releases](https://github.com/dusrdev/Pulse/releases) page.\n\n## Usage\n\nPulse reads the JSON input and outputs the results respective to the working path, which means that Pulse can be added to path and used anywhere.\n\n### Sending a single request using JSON configuration\n\n```bash\nPulse configuration.json\n```\n\n### Sample outputs\n\nDuring the execution, `Pulse` displays current metrics such as progress, success rate, ETA, and counts of responses from each of the 6 categories, i.e, 1xx, 2xx, 3xx, 4xx, 5xx, others. where `others` is essentially exceptions.\n\n![Running](assets/pulse-running.png)\n\nAfter the execution (different configuration in this example), `Pulse` produces a detailed summary of the results, including the peak concurrent connections reached and overall throughput.\n\n![Summary](assets/pulse-summary.png)\n\n### Setting up a configuration file\n\nThe configuration file is a JSON file that contains proxy information and the request details.\n\nIt is recommended to use the built-in `get-sample` command to generate a sample configuration file.\n\n```bash\nPulse get-sample\n```\n\nThis will generate a `sample.json` file in the current directory.\n\nThe `sample.json` file contains the following:\n\n```json\n{\n \"Proxy\": {\n  \"Bypass\": true,\n  \"IgnoreSSL\": false,\n  \"Host\": \"\",\n  \"Username\": \"\",\n  \"Password\": \"\"\n },\n  \"Request\": {\n    \"Url\": \"https://ipinfo.io/geo\",\n    \"Method\": {\n      \"Method\": \"GET\"\n    },\n    \"Headers\": {},\n    \"Content\": {\n      \"ContentType\": \"\",\n      \"Body\": null\n    }\n  }\n}\n```\n\n#### Proxy\n\nProxy contains the configuration that would be used for the HTTP client.\n\nBy default the proxy parameters are set to empty, and the proxy is set to bypass (which means use defaults of the OS).\n\n- `Bypass` - can be set to `true` even if the proxy parameters are not empty, to make AB testing easier.\n- `Host` - can be used alone, or in combination with `Username` and `Password` to specify the proxy host.\n- The credentials (i.e `Username` and `Password`) will only be used if both are specified.\n\n#### Request\n\nRequest contains the configuration for the request.\n\n- `Url` - the URL of the request.\n- `Method` - the HTTP method of the request.\n- `Headers` - the headers of the request. Can be `null` or a `JSON` object.\n\n#### Content\n\nContent contains the configuration for the request content. Which is only used for `POST`, `PUT`, `PATCH`, and `DELETE` requests.\n\n- `ContentType` - the content type of the request content, if empty will default to `application/json`.\n- `Body` - the body of the request content, `null` or any type of object including `JSON`. If set to `null` it will not be attached to the request.\n\n## Options\n\nPulse has a wide range of options that can be configured in the command line, and can be viewed with `help` or `--help` which shows this:\n\n```plaintext\nUsage: [command] [arguments...] [options...] [-h|--help] [--version]\n\nPulse - A hyper fast general purpose HTTP request tester\n\nArguments:\n  [0] \u003cstring\u003e    Path to .json request details file (use \"get-sample\" if you don't have one)\n\nOptions:\n  --json                            Try to format response content as JSON\n  --raw                             Export raw results (without wrapping in custom HTML)\n  -f, --full-equality               Use full equality (slower)\n  --no-export                       Don't export results\n  --no-op                           Print selected configuration but don't run\n  -o, --output \u003cstring\u003e             Output folder [Default: @\"results\"]\n  -d, --delay \u003cint\u003e                 Delay in milliseconds between requests [Default: -1]\n  -c, --connections \u003cint?\u003e          Maximum number of parallel requests [Default: null]\n  -u, --url \u003cstring?\u003e               Override the url of the request [Default: null]\n  -n, --number \u003cint\u003e                Number of total requests [Default: 1]\n  -t, --timeout \u003cint\u003e               Timeout in milliseconds [Default: -1]\n  --output-format \u003cOutputFormat\u003e    Select output format [Default: PlainText]\n  --quiet                           Suppress progress output on stderr (only fatal errors will be shown).\n\nCommands:\n  check-for-updates    Checks whether there is a new version out on GitHub releases.\n  cli-schema           Returns the usage schema for the app in JSON format.\n  get-sample           Generate sample request file.\n  get-schema           Generate a json schema for a request file.\n  info                 Displays information about this app.\n  terms-of-use         Print the terms of use.\n```\n\n- `--json` - try to format response content as JSON.\n- `--raw` - export raw results without custom HTML; can be combined with `--json`.\n- `--output-format PlainText|JSON` (global) - choose human-readable console output or structured JSON for automation/LLMs.\n- `--quiet` (global) - suppress progress updates on stderr; only fatal errors remain. Useful when piping to `jq` or when stderr/stdout are merged.\n- `-f|--full-equality` - enforce full response equality checks instead of length-based comparisons.\n- `--no-op` - print the parsed configuration without running any requests.\n- `-c|--connections` - cap parallel requests; set to `1` for sequential execution. When omitted, it defaults to the request count (`--number`).\n- `-d|--delay` - add a delay (ms) after each request completes; useful when `--connections` is `1`.\n- `-u|--url` - override the request URL while keeping the rest of the configuration unchanged.\n- `-o|--output` - choose a custom output directory (defaults to `results`).\n- `-n|--number` and `-t|--timeout` - control how many requests run and the per-request timeout (ms).\n\n## Disclaimer\n\nBy using `Pulse` you agree to take full responsibility for the consequences of its use.\n\nUsage of this tool for attacking targets without prior mutual consent is illegal. It is the end user's\nresponsibility to obey all applicable local, state and federal laws.\nThe developers assume no liability and are not responsible for any misuse or damage caused by this program.\n\n## Contributing and Error reporting\n\n- Errors, and features can be reported on the [issues](https://github.com/dusrdev/Pulse/issues) page.\n- Sensitive bug reports can also be sent to `dusrdev@gmail.com`.\n- Discussions can be found on the [discussions](https://github.com/dusrdev/Pulse/discussions) page.\n- If anyone wants to contribute, feel free to fork the project and open a pull request.\n\n\u003e This project is proudly made in Israel 🇮🇱 for the benefit of mankind.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdusrdev%2Fpulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdusrdev%2Fpulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdusrdev%2Fpulse/lists"}