{"id":50182123,"url":"https://github.com/ipanalytics/tor-radar","last_synced_at":"2026-05-25T07:05:22.162Z","repository":{"id":358883847,"uuid":"1243493764","full_name":"ipanalytics/Tor-Radar","owner":"ipanalytics","description":"The project collects public Tor relay data once per hour, stores compact snapshots in the repository, and renders an interactive dashboard without a database or backend.","archived":false,"fork":false,"pushed_at":"2026-05-19T13:26:34.000Z","size":2766,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-19T15:19:47.132Z","etag":null,"topics":["asn","data-visualization","network-intelligence","onionoo","osint","threat-intelligence","tor","tor-exit-nodes","tor-relays"],"latest_commit_sha":null,"homepage":"https://ipanalytics.github.io/Tor-Radar/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ipanalytics.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-19T11:49:19.000Z","updated_at":"2026-05-19T13:28:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ipanalytics/Tor-Radar","commit_stats":null,"previous_names":["ipanalytics/tor-radar"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/ipanalytics/Tor-Radar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipanalytics%2FTor-Radar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipanalytics%2FTor-Radar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipanalytics%2FTor-Radar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipanalytics%2FTor-Radar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ipanalytics","download_url":"https://codeload.github.com/ipanalytics/Tor-Radar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ipanalytics%2FTor-Radar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33464014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-25T06:32:55.349Z","status":"ssl_error","status_checked_at":"2026-05-25T06:32:35.322Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["asn","data-visualization","network-intelligence","onionoo","osint","threat-intelligence","tor","tor-exit-nodes","tor-relays"],"created_at":"2026-05-25T07:04:53.920Z","updated_at":"2026-05-25T07:05:22.150Z","avatar_url":"https://github.com/ipanalytics.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tor Radar\n\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-CC0--1.0-blue\" alt=\"License\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/ipanalytics/Tor-Radar/actions\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/ipanalytics/Tor-Radar/tor-radar.yml?branch=main\" alt=\"CI\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://ipanalytics.github.io/Tor-Radar/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/github_pages-online-brightgreen\" alt=\"Pages\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/ipanalytics/Tor-Radar\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/last-commit/ipanalytics/Tor-Radar\" alt=\"Last Commit\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/ipanalytics/Tor-Radar\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/dataset-hourly-success\" alt=\"Dataset\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/ipanalytics/Tor-Radar\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/exports-json%20%7C%20csv%20%7C%20history-informational\" alt=\"Exports\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\nTor Radar is a static Tor relay intelligence dashboard and dataset built entirely on GitHub Pages infrastructure.\n\nThe project collects public Tor relay metadata, stores compact historical snapshots, and publishes an interactive browser-based dashboard without requiring a backend, database, or external runtime services.\n\n---\n\n## Live Dashboard\n\n### [https://ipanalytics.github.io/Tor-Radar/](https://ipanalytics.github.io/Tor-Radar/)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/Screenshot.png\" alt=\"Tor Radar dashboard screenshot\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nRepository:\n\n```text id=\"h2r0uy\"\nhttps://github.com/ipanalytics/Tor-Radar\n```\n\n---\n\n## Overview\n\nTor Radar tracks public Tor relay infrastructure over time and publishes normalized snapshots suitable for operational visibility, analytics, enrichment pipelines, and longitudinal network analysis.\n\nThe project focuses on:\n\n* relay inventory visibility\n* network churn tracking\n* ASN concentration analysis\n* country distribution\n* relay role classification\n* historical trend retention\n\nAll outputs are static artifacts generated through scheduled GitHub Actions workflows.\n\n---\n\n## Architecture\n\n```text id=\"uj6j9d\"\n             Public Tor Sources\n                      │\n        ┌─────────────┴─────────────┐\n        │                           │\n        ▼                           ▼\n   Tor Relay List             Onionoo Metadata\n        │                           │\n        └─────────────┬─────────────┘\n                      ▼\n               Enrichment Layer\n           relay roles / ASN / geo\n                      ▼\n              Snapshot Generator\n         current + historical outputs\n                      ▼\n               Static Dashboard\n            GitHub Pages deployment\n```\n\n---\n\n## Data Sources\n\n| Source                                   | Purpose                       |\n| ---------------------------------------- | ----------------------------- |\n| `https://www.dan.me.uk/torlist/?full`    | Public Tor relay IP inventory |\n| `https://onionoo.torproject.org/details` | Official Tor relay metadata   |\n\nThe collector merges relay inventory with Onionoo metadata to produce enriched network snapshots.\n\n---\n\n## Published Outputs\n\n| File                         | Description                            |\n| ---------------------------- | -------------------------------------- |\n| `data/current/network.json`  | Latest enriched relay network snapshot |\n| `data/snapshots/*.json`      | Hourly retained snapshots              |\n| `data/history/summary.csv`   | Compact historical metrics             |\n| `data/history/summary.jsonl` | Machine-readable historical timeline   |\n| `public/`                    | Static dashboard assets                |\n| `public/assets/`             | Dashboard JavaScript and CSS           |\n\n---\n\n## Dashboard Features\n\n| Feature            | Description                         |\n| ------------------ | ----------------------------------- |\n| Relay distribution | Country and ASN concentration views |\n| Historical trends  | Relay count and churn tracking      |\n| Role visibility    | Exit, guard, middle relay breakdown |\n| Snapshot history   | Historical network comparisons      |\n| Static deployment  | No backend or runtime dependencies  |\n| Compact retention  | Git-native historical storage       |\n\n---\n\n## Local Update\n\n### Refresh datasets\n\n```bash id=\"4v0mgd\"\npython3 scripts/update.py\n```\n\n### Build local preview\n\n```bash id=\"0i0q0r\"\nrm -rf site\n\ncp -R public site\ncp -R data site/data\n\npython3 -m http.server 8080 --directory site\n```\n\nOpen:\n\n```text id=\"r9r8sd\"\nhttp://127.0.0.1:8080/\n```\n\n---\n\n## GitHub Pages Deployment\n\nThe GitHub Actions workflow updates datasets hourly and deploys the generated dashboard directly to GitHub Pages.\n\nWorkflow:\n\n```text id=\"r3n8rb\"\n.github/workflows/tor-radar.yml\n```\n\nDeployment behavior:\n\n* `public/` becomes the Pages root\n* `data/` is deployed alongside dashboard assets\n* the UI fetches `data/current/network.json` directly from Pages storage\n\nRequired repository settings:\n\n* Enable GitHub Pages\n* Set Pages source to `GitHub Actions`\n* Allow Actions read/write repository permissions\n\n---\n\n## Retention Policy\n\nDefault retention configuration:\n\n| Dataset         | Retention                 |\n| --------------- | ------------------------- |\n| Snapshot files  | Last 168 hourly snapshots |\n| Summary history | Last 720 rows             |\n\nWorkflow overrides:\n\n| Variable                       | Description                     |\n| ------------------------------ | ------------------------------- |\n| `TOR_RADAR_SNAPSHOT_RETENTION` | Snapshot retention count        |\n| `TOR_RADAR_HISTORY_RETENTION`  | Summary history retention       |\n| `TOR_RADAR_DAN_REFRESH_HOURS`  | Upstream relay refresh interval |\n| `TOR_RADAR_USER_AGENT`         | Collector user-agent            |\n\n---\n\n## Operational Notes\n\n* Relay inventories are derived from public upstream disclosures\n* Relay concentration alone should not be treated as attribution\n* Infrastructure overlap between providers is expected\n* Historical churn and relay metadata are intended as analytical signals\n* The project intentionally avoids active probing or relay interaction\n\n---\n\n## Use Cases\n\n| Domain              | Example                                  |\n| ------------------- | ---------------------------------------- |\n| SIEM Enrichment     | Tor relay attribution                    |\n| Fraud Detection     | Exit node visibility                     |\n| Threat Hunting      | Historical relay analysis                |\n| Network Analytics   | ASN and country concentration            |\n| Security Operations | Relay trend monitoring                   |\n| Research            | Longitudinal Tor infrastructure analysis |\n\n---\n\n## Repository Layout\n\n```text id=\"cfh7m9\"\nTor-Radar/\n├── .github/\n│   └── workflows/\n├── data/\n│   ├── current/\n│   ├── history/\n│   └── snapshots/\n├── docs/\n├── public/\n│   └── assets/\n├── scripts/\n├── LICENSE\n└── README.md\n```\n\n---\n\n## Design Goals\n\n* Fully static deployment\n* Git-native historical storage\n* No external database dependency\n* Low operational overhead\n* Reproducible snapshot generation\n* Browser-only dashboard rendering\n\n---\n\n## Roadmap\n\nPlanned additions:\n\n* ASN trend diffing\n* Relay churn analytics\n* Historical topology comparisons\n* Prefix aggregation summaries\n* Compact compressed archives\n* Export filtering improvements\n\n---\n\n## License\n\nLicensed under CC0-1.0.\n\nSee [`LICENSE`](./LICENSE).\n\n---\n\n## Disclaimer\n\nTor Radar publishes observational infrastructure metadata derived from public sources for analytical and operational use. Consumers are responsible for validating suitability within their own environments.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipanalytics%2Ftor-radar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fipanalytics%2Ftor-radar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fipanalytics%2Ftor-radar/lists"}