{"adoption": {"forks": 44, "observed_at": "2026-08-28T04:05:09.838762+00:00", "stars": 1603}, "canonical_url": "https://ross.abutalabs.com/products/nebula-sync", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Synchronize configuration of multiple Pi-hole v6.x instances. ", "domain": ["networking", "self-hosted"], "enriched": true, "function": ["deployment", "configuration-management", "cli", "networking"], "health_score": 97, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["lovelaze/nebula-sync"], "name": "lovelaze/nebula-sync", "platform": ["cli", "go"], "pushed_at": "2026-08-20T19:01:36+00:00", "repo": "lovelaze/nebula-sync", "stars": 1603, "tags": ["pi-hole", "dns", "replication", "sync", "cron", "teleporter", "devops", "automation", "docker", "linux", "macos"], "topics": ["dns", "docker", "golang", "pi-hole", "pihole", "replication", "sync"], "urls": [], "use_cases": ["keep multiple pi-hole instances in sync", "replicate pihole dns blocklists to secondary servers", "schedule automatic pihole config replication with cron", "run pihole high availability with primary and replicas", "sync pihole settings via docker compose", "full teleporter export import between pihole nodes"], "what_it_is": "nebula-sync is a Go-based tool that synchronizes configuration across multiple Pi-hole v6.x instances, using a primary/replica model. It supports full Teleporter-based sync or selective feature sync, and can run on a cron schedule via binary or Docker.", "when_to_avoid": ["you run a single Pi-hole instance", "you use Pi-hole v5.x or older", "you need real-time bidirectional sync rather than primary-to-replica"], "when_to_choose": ["you run two or more Pi-hole v6.x instances and want them to share configuration", "you want scheduled, automated replication of DNS blocking config", "you prefer a lightweight Docker or single-binary deployment"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/nebula-sync", "repo": "lovelaze/nebula-sync", "role": "main", "score": 84}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "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:05:09.838762+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:09.838762+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:52:23.459695+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "966ea81226d07eddecd0975b4cc9b408f0ed5480cbdb24e75666b35b83f109ca", "fetched_at": "2026-08-28T04:05:09.838762+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lovelaze/nebula-sync"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 54, "rhythm": 82}, "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": 760, "days_push": 13, "days_rel": 120, "gap_med": 6.5, "n_releases_24m": 15}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}