{"adoption": {"forks": 112, "observed_at": "2026-08-28T04:04:58.356796+00:00", "stars": 1526}, "canonical_url": "https://ross.abutalabs.com/products/thisseanzhang-landscape", "card": {"archived": false, "artifact_type": "application", "description": "The goal is to make it easier to configure your favorite Linux distribution as a router. Built with Rust and eBPF.", "domain": ["networking", "self-hosted", "infrastructure-as-code", "developer-tools"], "enriched": true, "function": ["networking", "routing", "security", "self-hosted", "web-framework"], "health_score": 100, "homepage": "https://landscape.whileaway.dev", "language": "Rust", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ThisSeanZhang/landscape"], "name": "ThisSeanZhang/landscape", "platform": ["rust"], "pushed_at": "2026-08-24T13:25:03+00:00", "repo": "ThisSeanZhang/landscape", "stars": 1526, "tags": ["ebpf", "xdp", "tc", "tproxy", "router", "dns", "nat", "traffic-steering", "linux-router", "domain-based-routing", "dns-server", "linux", "web-server", "docker"], "topics": ["dns-server", "ebpf-tc", "linux", "network-programming", "router", "tproxy", "networking-tools", "rust", "landscape-router", "ebpf", "ebpf-rust"], "urls": [], "use_cases": ["turn a Linux machine into a home router", "route traffic by domain instead of IP lists", "give each device or flow its own DNS server and upstream", "send selected traffic through a Docker container proxy", "configure full-cone NAT for BT/PT while keeping strict NAT elsewhere", "avoid iptables and userspace packet forwarding overhead", "manage router settings through a web UI and REST API"], "what_it_is": "Landscape is a Linux router application built in Rust with eBPF that routes traffic by domain rather than just IP. It uses a userspace DNS plane with per-flow isolated DNS servers whose answers populate kernel eBPF maps, while XDP/TC hooks steer packets in-kernel without iptables or a userspace datapath.", "when_to_avoid": ["you run FreeBSD, macOS, or Alpine Linux", "your kernel is older than 6.9 or lacks BTF/BPF support", "you need an OpenWrt-style turnkey router image", "you are memory-constrained below ~1.5 GiB", "you prefer traditional iptables/nftables-based routing"], "when_to_choose": ["you want a software router on a standard Linux distro like Debian, Arch, or openSUSE", "you need domain-based traffic steering with per-flow DNS isolation", "you want kernel-speed packet handling via eBPF XDP/TC", "you need fine-grained NAT control per domain or IP", "you want everything scriptable through a REST API"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/thisseanzhang-landscape", "repo": "ThisSeanZhang/landscape", "role": "main", "score": 88}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "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:04:58.356796+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.356796+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:31:35.900588+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4f2394c94c720efeaf0c16af953711ebafb65a9f7b01b52edfa94373e5430515", "fetched_at": "2026-08-28T04:04:58.356796+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ThisSeanZhang/landscape"}, {"content_hash": "97e8148d94ab4903ffcb8b5a8e54b36c755282dd5b199080d73b62bff4f1e47c", "fetched_at": "2026-08-29T11:34:10.160080+00:00", "kind": "homepage", "missing": false, "url": "https://landscape.whileaway.dev"}, {"content_hash": "1d6ac6e05feac24de6fed7b5f42b6e2ae4e5d6f68213dbee41441d89113163cb", "fetched_at": "2026-08-29T11:34:10.191663+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/getting-started/basic-network-setup.html"}, {"content_hash": "e667a571bbfe2eff14ad7e18d59431e492be68e8ac9690419f5ea9993a829070", "fetched_at": "2026-08-29T11:34:10.172846+00:00", "kind": "site_page", "missing": false, "url": "https://landscape.whileaway.dev/intro/requirements.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 44, "rhythm": 98}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 621, "days_push": 9, "days_rel": 17, "gap_med": 10.0, "n_releases_24m": 43}, "score": 88, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}