Find the API endpoints nobody calls, with evidence before you remove anything.
deadroutes counts every request your FastAPI or Starlette app serves, by route template, and reads your route table and front-end files to see which endpoints your own code names. It joins the two and lists the routes nothing references and nobody called over a long enough window as candidates to review, never as something to delete.
Buy deadroutes for $49One payment of $49, plus sales tax where it applies, and every future update. Delivered as a private GitHub repository you're invited to.
What it does
- Counts by route template
- An ASGI middleware counts every request, reads included, by method and route template rather than raw path. Keys stay bounded and free of personal data, and counts are written to disk on a timer, not on the request.
- Safe across workers
- The default store is one SQLite file that several worker processes flush into without losing counts. Callers past a per-route limit are merged, and if the table has no room for a new route a dropped_keys counter says so and reports stop judging.
- A window before any verdict
- Every report states when counting began, how many days it covers and whether that is enough to judge, against a minimum you set, such as 30 days. A counter that stopped or an empty table is never read as unused.
- A scan that reads your code
- deadroutes scan imports your app, or parses its source if it cannot, and reads front-end JavaScript, HTML and templates. Each route is called by the front end, machine-only (patterns you configure) or unreferenced, with path parameters and methods matched where the code states them.
- Candidates, with the caller named
- deadroutes report joins the scan with the counts. Unreferenced routes with zero calls are candidates; unreferenced routes that something does call are listed with the caller's name, which is what stops a bad removal.
- A check for CI
- deadroutes window-check exits non-zero once the window has matured with candidates, or when a removed route is still being called. A GitHub Actions template runs it weekly against a token-protected usage endpoint.
- Your layout is configuration
- Nothing assumes your URL prefixes. Settings come from deadroutes.toml, JSON or pyproject.toml, and an unknown key is an error rather than silently ignored.
After you buy
pip install "./deadroutes[fastapi]"
deadroutes demo shop-demo && cd shop-demo
deadroutes scan
python3 simulate.py # a stand-in for 40 days of traffic
deadroutes report
What you get
deadroutes 1.0.0: the Python library and the deadroutes command, with an example project, a weekly CI workflow template and the full test suite, with 413 automated tests. Python 3.10 or newer.
A commercial license. Use it and change it in your own projects and your clients' projects. Don't share or resell the source. Read the license.
Every update. New versions land in the same repository; git pull to get them.
How buying works
- Enter your GitHub username. You'll see the account before you pay, so you can check it's yours.
- Pay $49, plus any sales tax shown at checkout, on Stripe's checkout page.
- Accept the invitation GitHub emails you. Signed in as that account, you'll also find it at
github.com/dominares-tools/deadroutes/invitations. Invitations expire after 7 days; you can get a new one any time. - Clone and install:
git clone https://github.com/dominares-tools/deadroutes.git pip install ./deadroutes
Questions
- Do I need GitHub?
- Yes. Access is a read-only invitation to a private repository, sent to the GitHub account you choose.
- Can I get a refund?
- Yes, within 14 days, no questions asked. Access ends when the refund goes through. Refund policy.
- Who takes the payment?
- Stripe. Your purchase is sold through Link, Stripe's checkout service, which also works out sales tax and sends your receipt.
- Something wrong?
- Email josephlinares02@gmail.com. Every buyer of a tool shares its repository, so support happens by email rather than in GitHub issues.