{"adoption": {"forks": 2366, "observed_at": "2026-08-28T04:11:54.429089+00:00", "stars": 30365}, "canonical_url": "https://ross.abutalabs.com/products/algo", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Set up a personal VPN in the cloud", "domain": ["security", "privacy", "self-hosted", "networking", "cloud-computing"], "enriched": true, "function": ["vpn", "security", "deployment", "cryptography", "networking"], "health_score": 96, "homepage": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/", "language": "Python", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["trailofbits/algo"], "name": "trailofbits/algo", "platform": ["windows", "cloud", "self-hosted", "python"], "pushed_at": "2026-08-26T21:45:41+00:00", "repo": "trailofbits/algo", "stars": 30365, "tags": ["wireguard", "ipsec", "ikev2", "strongswan", "ansible", "personal-vpn", "vpn-server", "trail-of-bits", "linux", "macos", "android", "ios"], "topics": ["vpn-server", "strongswan", "ansible", "vpn", "ikev2", "security", "encryption", "ipsec", "vpn-client", "ssh-tunnel", "wireguard"], "urls": [], "use_cases": ["set up a personal VPN server in the cloud", "deploy a WireGuard VPN on DigitalOcean or AWS", "replace a commercial VPN provider with a self-hosted one", "configure IPsec IKEv2 on iOS and macOS without client software", "generate WireGuard config files and QR codes for my devices", "create an encrypted tunnel when traveling or on public Wi-Fi", "spin up a VPN with strong crypto defaults using Ansible"], "what_it_is": "Algo VPN is a set of Ansible scripts that automates deploying a personal WireGuard and IPsec (IKEv2) VPN server on common cloud providers. It emphasizes secure defaults, modern ciphers only, and easy client configuration with generated profiles and QR codes.", "when_to_avoid": ["you need anonymity or censorship circumvention, which Algo explicitly does not provide", "you require legacy protocols like OpenVPN, L2TP, or IKEv1", "you want a shared VPN endpoint with many exit locations", "you cannot run deployment scripts from your own machine or Cloud Shell"], "when_to_choose": ["you want a personal VPN you fully control instead of trusting a commercial provider", "you need WireGuard or IKEv2 with modern, secure cipher defaults", "you want automated deployment across many cloud providers via Ansible", "you need easy multi-device client setup with generated profiles and QR codes"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/algo", "repo": "trailofbits/algo", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:54.429089+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:52:46.644047+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "99ed160c7ee7c8f88d02519680962a407dd5c86cfc3f5493aa3503e0fa5d1c3b", "fetched_at": "2026-08-28T04:11:54.429089+00:00", "kind": "readme", "missing": false, "url": "https://github.com/trailofbits/algo"}, {"content_hash": "e0e69269f6d49b207f4b7b76ad27ea095da577b70277684f3384ccf6449071f0", "fetched_at": "2026-08-29T07:49:39.117453+00:00", "kind": "homepage", "missing": false, "url": "https://blog.trailofbits.com/2016/12/12/meet-algo-the-vpn-that-works/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3762, "days_push": 7, "days_rel": 279, "gap_med": 97, "n_releases_24m": 2}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}