{"id":13566364,"url":"https://github.com/preiter93/wireman","last_synced_at":"2026-01-12T14:13:19.795Z","repository":{"id":198934797,"uuid":"630060195","full_name":"preiter93/wireman","owner":"preiter93","description":"A gRPC client for the terminal","archived":false,"fork":false,"pushed_at":"2025-03-26T06:37:38.000Z","size":70059,"stargazers_count":118,"open_issues_count":2,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-16T16:03:35.244Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://preiter93.github.io/wireman/","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/preiter93.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2023-04-19T15:26:03.000Z","updated_at":"2025-05-13T12:24:15.000Z","dependencies_parsed_at":"2024-03-03T20:30:50.846Z","dependency_job_id":"883c651c-13de-40bb-927f-1b10c326139d","html_url":"https://github.com/preiter93/wireman","commit_stats":null,"previous_names":["preiter93/stellarpc","preiter93/wireman"],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/preiter93%2Fwireman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/preiter93%2Fwireman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/preiter93%2Fwireman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/preiter93%2Fwireman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/preiter93","download_url":"https://codeload.github.com/preiter93/wireman/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254564113,"owners_count":22092120,"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":[],"created_at":"2024-08-01T13:02:08.029Z","updated_at":"2026-01-12T14:13:19.763Z","avatar_url":"https://github.com/preiter93.png","language":"Rust","funding_links":[],"categories":["💻 Apps","Rust"],"sub_categories":["🌐 Networking and Internet"],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/preiter93/wireman/main/resources/logo-dark.png\" width=\"300\"/\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \n[![Crate IO](https://img.shields.io/crates/v/wireman?logo=rust\u0026style=flat-square\u0026logoColor=E05D44\u0026color=E05D44)](https://crates.io/crates/wireman) [![Continuous Integration](https://github.com/preiter93/wireman/actions/workflows/ci.yml/badge.svg)](https://github.com/preiter93/wireman/actions/workflows/ci.yml) [![Deps Status](https://deps.rs/repo/github/preiter93/wireman/status.svg?path=wireman\u0026style=flat-square)](https://deps.rs/repo/github/preiter93/wireman?path=wireman) ![Crates.io MSRV](https://img.shields.io/crates/msrv/wireman)\n [![License](https://img.shields.io/crates/l/wireman?style=flat-square\u0026color=09bd66)](./LICENSE)\n\n\u003c/div\u003e\n\n# What is WireMan?\n\nWireMan is a terminal-based gRPC client with a user-friendly interface. It reads `.proto` files from a config file and keeps a history of requests.\nWireMan is an ideal choice for developers testing gRPC endpoints directly from the terminal.\n\n## Use It Your Way\n\nWireMan works however you prefer:\n\n- **Vim-style navigation**: Navigate with vim-style keybindings. Hit `?` to see what's available.\n- **Mouse \u0026 system editor**: Wireman can also be operated with the mouse. And you can open your system editor with `Ctrl+e`.\n\n# Quick Start\n\nIf you prefer a quick overview, you can check out the official [website](https://preiter93.github.io/wireman).\n\nOr follow the guide below.\n\n## Prerequisites\n\n- Rust: [Minimum required Rust version is 1.70] ([Installation Guide](https://www.rust-lang.org/tools/install))\n\n## Installation\n\n### Install with cargo\n\n```\ncargo install wireman\n```\n\n### Install with brew\n\n```\nbrew install preiter93/wireman/wireman\n```\n\n### Install with X-CMD\n\n```\nx install wireman\n```\n\n### Download Binary\n\nYou can download the latest wireman binary from the [releases page](https://github.com/preiter93/wireman/releases).\n\n### Install manually\n\n1. Clone the repository:\n\n    ```bash\n    git clone https://github.com/preiter93/wireman.git\n    ```\n\n2. Build in release mode:\n\n    ```bash\n    cd wireman\n    cargo build --release\n    ```\n\n3. Copy the binary to your PATH, e.g.:\n\n    ```bash\n    cp target/release/wireman /usr/local/bin\n    ```\n    \n    Alternatively, you can create an alias to the binary in your `.bashrc` or `.zshrc` file:\n\n    ```bash\n    echo \"alias wireman='CURRENT_DIRECTORY/target/release/wireman'\" \u003e\u003e ~/.zshrc\n    ```\n## Demo\n\n![](https://raw.githubusercontent.com/preiter93/wireman/main/example/tape/demo.gif?raw=true)\n\n## Setup/Configuration\n\n1. Set the `WIREMAN_CONFIG_DIR` environment variable to specify the directory where your configuration file will be located:\n\n    ```bash\n    export WIREMAN_CONFIG_DIR=~/.config/wireman\n    ```\n    \nThis step is **optional**. By default, wireman will be installed to `~/.config/wireman`.\n\n2. Follow the setup steps:\n\n    ```bash\n    wireman init\n    ```\n\n3. The previous step creates a `wireman.toml` file in your configuration directory. Here's an example configuration:\n\n    ```toml\n    includes = [\n        '$HOME/my-project/services',\n        '$HOME/my-project/protos'\n    ]\n    \n    files = [\n        'order/api.proto',\n        'price/api.proto'\n    ]\n    \n    [server]\n    default_address = \"http://localhost:50051\"\n    default_auth_header = \"Bearer $(getToken.sh)\"\n    \n    [history]\n    directory = \"$WIREMAN_CONFIG_DIR/history\"  # Optional. Defaults to $WIREMAN_CONFIG_DIR/history.\n    autosave = true                            # Optional. Autosaves history on request. Defaults to true.\n    disabled = false                           # Optional. History is enabled by default.\n    \n    [logging]\n    directory = \"$WIREMAN_CONFIG_DIR\"          # Optional. Defaults to $WIREMAN_CONFIG_DIR.\n    level = \"Debug\"                            # Optional. Defaults to Debug.\n    \n    # [ui]\n    # skin = \"$WIREMAN_CONFIG_DIR/skins/dracula.toml\"  # Optional. Set a UI theme.\n    ```\n\n    Replace with the appropriate values for your project.\n    \n4. At last, you can now verify the setup configuration\n    ```bash\n    wireman check \n    ```\n\n## Usage\n\n1. After adding the protos in the config, start `wireman`.\n\n2. Basic key mappings are displayed in the footer of each page. For extended help, press `?` and close with `?` or `Esc`. If you want to close the app entirely, type `Ctrl+c`.\n \n3. The first page of Wireman will list your grpc services and their methods. You can navigate with `up`/`down` or `j`/`k`, select with `Enter` or unselect with `Esc`, then click `Tab`.\n\n4. The second page is the message screen. Edit your request message, you can format it with `Ctrl+f`. Then click tab. The navigation of the editor is vim-inspired: use `h`, `j`, `k`, `l` for motion, go into insert mode with `i`, and escape insert mode with `Esc`. For more details, refer to [edtui](https://github.com/preiter93/edtui).\n\n5. The third page is the config screen where you can edit the address or metadata. Wireman allows for using bash scripts to get your tokens. Place the name of your script in the bearer token field, which must be in your PATH, between `$()`. For example, if you have a bash script named `getToken.sh` that prints the Bearer token `ey...`, you would use `$(getToken.sh)` (the script output should not include the word 'Bearer', as it is automatically added). Additional headers can be added with `Ctrl+a` and deleted with `Ctrl+d`. Go to the request page with Shift+Tab or click tab twice.\n\n6. Now you can make the request by clicking Enter. You can save it with `Ctrl+s`. Saved requests are stored in spots 1 to 5. Switch to a spot by clicking the respective number. You can restore the default request with `Ctrl+d`, which deletes the history. You can also cancel a request with Esc. Switch between request and response with `J/K`.To copy the request or response click `Y`. Or follow step 6.\n\n7. If you want to get the current request as a gRPCurl command, click `Ctrl+y` on the request tab, and it's copied to your clipboard.\n\n## External System Editor\n\nWireman allows you to open the current editor content in your system's default editor (e.g., `export EDITOR=nvim`). When you're in normal mode on any input field, press `Ctrl+e` to open the content in your external editor. After saving and closing the external editor, the content will be updated in Wireman.\n\nThis feature was introduced in v0.2.13.\n\n## Command line flags\n\n### Commands\n- **`check`**  \n  Runs a health check and displays configuration details.\n  \n- **`init`**  \n  Sets up wireman by creating a default configuration file.\n\n### Options\n- **`-c, --config \u003cCONFIG\u003e`**  \n  Specifies an optional path to a configuration file. If not provided, wireman uses the default configuration path.\n\n- **`-l, --local-protos`**  \n  Uses local protobuf files instead of the files and includes which specified in the configuration.\n\n## Troubleshooting\n\nWireman logs important information and errors to assist in troubleshooting. By default, logs are stored in `$WIREMAN_CONFIG_DIR/wireman.log`.Make sure to check this log file if you encounter any unexpected behavior or errors while using the application.\n\nIf you are unable to resolve the issue on your own or need further assistance, please don't hesitate to [open an issue](https://github.com/preiter93/wireman/issues).\n\n## Custom Skins\n\nWireman allows users to customize the appearance of the UI by adding custom skins. To do this, simply specify the desired skin file in the `wireman.toml` file config:\n\n```toml\n[ui]\nskin = \"path_to_file/custom_skin.toml\"\n```\n    \nFor a collection of pre-made themes, check out the [Wireman themes repository](https://github.com/preiter93/wireman/tree/main/wireman-theme/assets).\n\n## Server Reflection\n\nWireman also supports server reflection of gRPC servers. To activate reflection mode, press `Ctrl + r` on the selection tab, enter the host along with optional authentication headers, and then press `Enter`. To switch back from reflection mode to file mode press `Ctrl + r` again.\n\n![](https://raw.githubusercontent.com/preiter93/wireman/main/example/tape/reflection.gif?raw=true)\n\n## Server Side Streaming\n\nWireman supports server-side streaming. For example, if you have an endpoint like this:\n```proto\nrpc ListFeatures (ListFeaturesReq) returns (stream ListFeaturesResp) {}\n```\nWireman automatically detects whether the endpoint is server-side streaming and handles it accordingly.\n\n![](https://raw.githubusercontent.com/preiter93/wireman/main/example/tape/streaming.gif?raw=true)\n\n## Edit Configuration in-app\n\nYou can manage your configuration directly within the app:\n\n- Navigate to the services page.\n- Type `Ctrl-e` to edit the configuration.\n- Save your changes with `Ctrl-s`.\n- Exit with `Esc`.\n\n## Neovim Integration\n\nUse Wireman in nvim with a floating terminal via [wireman.nvim](https://github.com/preiter93/wireman.nvim).\n\n![](https://raw.githubusercontent.com/preiter93/wireman.nvim/main/assets/demo.png?raw=true)\n(theme: [one-dark-pro](https://github.com/preiter93/wireman/blob/main/wireman-theme/assets/one-dark-pro.toml))\n\n## Features\n\n- [x] Unary gRPC\n- [x] Set host address\n- [x] Set authentication headers\n- [x] Request History\n- [x] Defaults of repeated/nested fields\n- [x] Yank/Paste from clipboard\n- [x] Yank request as grpcurl command\n- [x] Vim like editor feeling\n- [x] Show loading indicator\n- [x] Metadata headers\n- [x] Provide installation help\n- [x] Custom themes\n- [x] Server reflection\n- [x] Edit config file in app\n- [x] Server side Streaming\n- [x] Supports wayland\n- [x] Edit with system editor\n- [x] Mouse navigation\n\n[Deps.rs Badge]: https://deps.rs/repo/github/preiter93/wireman/status.svg?path=wireman\u0026style=flat-square\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpreiter93%2Fwireman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpreiter93%2Fwireman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpreiter93%2Fwireman/lists"}