{"adoption": {"forks": 240, "observed_at": "2026-08-28T04:07:24.819885+00:00", "stars": 2842}, "canonical_url": "https://ross.abutalabs.com/products/glauth", "card": {"archived": false, "artifact_type": "service", "description": "A lightweight LDAP server for development, home use, or CI", "domain": ["security", "developer-tools", "self-hosted", "backend"], "enriched": true, "function": ["auth", "http-server", "security", "configuration-management"], "health_score": 97, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["glauth/glauth"], "name": "glauth/glauth", "platform": ["windows", "go", "self-hosted", "cross-platform"], "pushed_at": "2026-07-25T21:17:41+00:00", "repo": "glauth/glauth", "stars": 2842, "tags": ["ldap-server", "ldap", "authentication", "homelab", "user-directory", "openldap-alternative", "active-directory-alternative", "ssh-keys", "two-factor-authentication", "devops", "linux", "macos", "docker"], "topics": ["golang", "go", "ldap", "ldap-server", "developer-tools", "security"], "urls": [], "use_cases": ["run a lightweight ldap server for development", "centralize linux account and ssh key management", "replace openldap in a homelab", "provide ldap authentication for jenkins or nginx", "test ldap integrations in ci", "store a user directory in a file, sql database, or s3", "proxy ldap requests to an existing directory server"], "what_it_is": "GLAuth is a lightweight, secure LDAP authentication server written in Go with configurable backends. It serves as a simple alternative to OpenLDAP or Active Directory for development, homelab, and CI environments.", "when_to_avoid": ["you need a full-featured enterprise directory with replication and group policies", "you require production-grade Active Directory compatibility", "you need a highly scalable directory service for large organizations"], "when_to_choose": ["you need a simple, easy-to-configure LDAP server for dev, homelab, or CI", "you want to centralize accounts and SSH keys across servers without running OpenLDAP or Active Directory", "you need pluggable backends like file, SQL, S3, or LDAP proxying", "you want transparent two-factor authentication for LDAP clients"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/glauth", "repo": "glauth/glauth", "role": "main", "score": 91}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "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:07:24.819885+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:24.819885+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:37:14.026319+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "53b46a5f1eee12f1eb7ef731955eb0f79faed1013d48f8e2ebb9261ef1605b7d", "fetched_at": "2026-08-28T04:07:24.819885+00:00", "kind": "readme", "missing": false, "url": "https://github.com/glauth/glauth"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 94, "longevity": 100, "rhythm": 83}, "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": 3053, "days_push": 39, "days_rel": 39, "gap_med": 90, "n_releases_24m": 4}, "score": 91, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}