{"id":13587075,"url":"https://github.com/simeg/urlsup","last_synced_at":"2025-07-13T11:39:40.105Z","repository":{"id":40573162,"uuid":"232421352","full_name":"simeg/urlsup","owner":"simeg","description":"✅ CLI to find broken URLs in files (awesome_bot alternative)","archived":false,"fork":false,"pushed_at":"2022-05-01T18:24:31.000Z","size":156,"stargazers_count":15,"open_issues_count":5,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-01T23:47:02.830Z","etag":null,"topics":[],"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/simeg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-01-07T21:32:32.000Z","updated_at":"2024-06-22T10:26:23.000Z","dependencies_parsed_at":"2022-08-09T23:31:26.870Z","dependency_job_id":null,"html_url":"https://github.com/simeg/urlsup","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/simeg%2Furlsup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simeg%2Furlsup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simeg%2Furlsup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simeg%2Furlsup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simeg","download_url":"https://codeload.github.com/simeg/urlsup/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252794636,"owners_count":21805223,"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-01T15:06:00.367Z","updated_at":"2025-05-07T01:24:46.080Z","avatar_url":"https://github.com/simeg.png","language":"Rust","funding_links":[],"categories":["Rust","Web"],"sub_categories":[],"readme":"# urlsup ![CI][build_badge] [![Code Coverage][coverage_badge]][coverage_report]\n\n`urlsup` (_urls up_) finds URLs in files and checks whether they are up by\nmaking a `GET` request and checking the response status code. This tool is\nuseful for lists, repos or any type of project containing URLs that you want to\nbe up.\n\nIt's written in Rust (stable) and executes the requests async in multiple\nthreads, making it very fast. This in combination with its ease of use makes\nit the perfect tool for your CI pipeline.\n\nThis project is a slim version of\n[`awesome_bot`](https://github.com/dkhamsing/awesome_bot) but aims to be faster.\n\n## Usage\n```bash\nUSAGE:\n    urlsup [OPTIONS] \u003cFILES\u003e...\n\nFLAGS:\n        --allow-timeout             URLs that time out are allowed\n\nOPTIONS:\n    -a, --allow \u003cstatus codes\u003e      Comma separated status code errors to allow\n        --threads \u003cthread count\u003e    Thread count for making requests (default: CPU core count)\n    -t, --timeout \u003cseconds\u003e         Connection timeout in seconds (default: 30)\n    -w, --white-list \u003curls\u003e         Comma separated URLs to white list\n\nARGS:\n    \u003cFILES\u003e...    Files to check\n```\n\n## Examples\n```bash\n$ urlsup `find . -name \"*.md\"`\n\u003e Using threads: 8\n\u003e Using timeout (seconds): 30\n\u003e Allow timeout: false\n\u003e Will check URLs in 1 file\n   1. ./README.md\n\n⠹ Finding URLs in files...\n\n\u003e Found 2 unique URLs, 3 in total\n   1. https://httpstat.us/401\n   2. https://httpstat.us/404\n\n⠏ Checking URLs...\n\n\u003e Issues\n   1. 401 https://httpstat.us/401\n   2. 404 https://httpstat.us/404\n```\n\n```bash\n$ urlsup `find . -name \"*.md\"`\n\u003e Using threads: 8\n\u003e Using timeout (seconds): 30\n\u003e Allow timeout: false\n\u003e Will check URLs in 1 file\n   1. ./README.md\n\n⠹ Finding URLs in files...\n\n\u003e Found 1 unique URL, 1 in total\n   1. https://httpstat.us/200\n\n⠏ Checking URLs...\n\n\u003e No issues!\n```\n\n```bash\n$ urlsup README.md --white-list rust,crates\n# white list all links starting with rust or crates\n\n$ urlsup README.md,README-zh.md\n# check links in 2 files\n\n$ urlsup docs/*.md\n# check all markdown files in docs/ directory\n\n$ urlsup README.md --allow-timeout -t 5\n# speed up validation by setting a timeout of 5 seconds per link request and allowing timeouts\n\n$ urlsup README.md --allow 403,429\n# allow status code errors 403 and 429\n```\n\n## Installation\n\nInstall with `cargo` to run `urlsup` on your local machine.\n\n```bash\ncargo install urlsup\n```\n\n## GitHub Actions\n\nSee [`urlsup-action`](https://github.com/simeg/urlsup-action).\n\n## Development\n\nThis repo uses a Makefile as an interface for common operations.\n\n1) Do code changes\n2) Run `make build link` to build the project and create a symlink from the built binary to the root\n   of the project\n3) Run `./urlsup` to execute the binary with your changes\n4) Profit :star:\n\n[build_badge]: https://github.com/simeg/urlsup/workflows/CI/badge.svg\n[coverage_badge]: https://codecov.io/gh/simeg/urlsup/branch/master/graph/badge.svg?token=2bsQKkD1zg\n[coverage_report]: https://codecov.io/gh/simeg/urlsup/branch/master\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimeg%2Furlsup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimeg%2Furlsup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimeg%2Furlsup/lists"}