{"id":13644692,"url":"https://github.com/blackmann/go-gurl","last_synced_at":"2025-03-17T09:30:35.444Z","repository":{"id":40554389,"uuid":"479817026","full_name":"blackmann/go-gurl","owner":"blackmann","description":"Curl TUI with Go as Postman replacement","archived":false,"fork":false,"pushed_at":"2024-02-16T11:39:28.000Z","size":10742,"stargazers_count":108,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-16T10:33:11.452Z","etag":null,"topics":["charmbracelet","go","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/blackmann.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}},"created_at":"2022-04-09T18:53:43.000Z","updated_at":"2025-03-11T15:00:36.000Z","dependencies_parsed_at":"2024-06-19T01:27:46.460Z","dependency_job_id":"cbb8a590-f9e5-44f2-9d65-699650ea85cb","html_url":"https://github.com/blackmann/go-gurl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmann%2Fgo-gurl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmann%2Fgo-gurl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmann%2Fgo-gurl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/blackmann%2Fgo-gurl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/blackmann","download_url":"https://codeload.github.com/blackmann/go-gurl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244008891,"owners_count":20382929,"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":["charmbracelet","go","tui"],"created_at":"2024-08-02T01:02:11.049Z","updated_at":"2025-03-17T09:30:34.479Z","avatar_url":"https://github.com/blackmann.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# go-gurl\n\n![Demo](assets/demo.gif)\n\nTUI `\"curl\"` as a personal replacement of Postman. Postman just feels overly bloated in appearance and as a program.\nThis is written purely in Golang and does not use `curl` under the hood.\n\n\u003e I'm working on this while learning Go.\n\n⚠️ This program has lots of problems. Most I may not even know about. But the following are the known limitations at the\nmoment:\n\n- [ ] Windows support (I don't have access to a windows machine at the moment)\n- [ ] Cookies support\n- [ ] Headers deletion\n- [ ] Save/Manipulate response/request\n- [ ] Edit/delete bookmarks and history\n- [ ] Tests (I have some written)\n- [ ] Commands\n- [ ] Input validations\n\nI'll be providing implementations as time goes by. Feel free to submit an issue as you try this out.\n\n## How to use\n\n### Installation\n\n```bash\ngo install github.com/blackmann/go-gurl\n```\n\n### Keybinds\n\n| Bind        | Action                                                                                                                    |\n|-------------|---------------------------------------------------------------------------------------------------------------------------|\n| `shift+tab` | Alternate between views (address bar and viewport)                                                                        |\n| `esc`       | Enter/leave command mode. \u003cbr/\u003eIn command mode, you can press the forward or back key to switch between the viewport tabs |\n| `ctrl+c`    | Quit                                                                                                                      |\n| `$`         | Show history. You can filter history with ID or annotation. \u003cbr/\u003e_See below on how to annotate history_                   |\n\n### History\n\nWhen requests are made, they are saved into history. To trigger the history modal, enter a leading `$`.\nYou can filter the history with ID number or annotation. Selecting a history item will prefill all request fields (\naddress, headers and body).\n\nTo annotate history, first find the history ID then enter command mode (`esc`) then type\n\n```\n/annotate $32 create-account\n```\n\nThis feature is useful when you run a request very often when testing.\n\n### Bookmarks\n\nBookmarks allow to you create and use alias for base paths/endpoints.\nFor example, if you mostly work with an endpoint `https://jsonplaceholder.typicode.com`, you can be able to create a\nbookmark with (in command mode `esc`)\n\n```\n@typicode https://jsonplaceholder.typicode.com\n```\n\nYou can then use the bookmark in making requests (in the addressbar as)\n\n```\nPOST @typicode/todos/\n```\n\n### Save Response\n\nYou can save the response from a request to a file by doing (in command mode `esc`)\n\n```\n/save shops.json\n```\n\nYou can also save a selected/queried parts of the response. For example, say you have a response with the following\nstructure:\n\n```json\n{\n  \"total\": 3,\n  \"limit\": 10,\n  \"skip\": 0,\n  \"data\": [\n    {\n      \"name\": \"Angelina Cudjoe\",\n      \"age\": 100,\n      \"cute\": true\n    },\n    {\n      \"name\": \"Jane Doe\",\n      \"age\": 80,\n      \"cute\": false\n    }\n  ]\n}\n```\n\nYou can query and save the names from each object like this\n\n```\n/save people.json data.#.name\n```\n\nThis saves `[\"Angelina Cudjoe\", \"Jane Doe\"]` to `people.json`. \nQueries are processed using this library [gjson](https://github.com/tidwall/gjson). \nCheck it out for all the possible query formats.\n\n### Copy Response \n\nYou can copy the response to your clipboard. Do the following [with an optional selector just like the save command]\n\n```\n/copy optional.selector\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackmann%2Fgo-gurl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblackmann%2Fgo-gurl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackmann%2Fgo-gurl/lists"}