{"adoption": {"forks": 148, "observed_at": "2026-08-28T04:05:56.059038+00:00", "stars": 1930}, "canonical_url": "https://ross.abutalabs.com/products/loginsrv", "card": {"archived": false, "artifact_type": "service", "description": "JWT login microservice with plugable backends such as OAuth2, Google, Github, htpasswd, osiam, ..", "domain": ["security", "backend", "web-development", "self-hosted"], "enriched": true, "function": ["auth", "http-server", "middleware"], "health_score": 20, "homepage": null, "language": "Go", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["qvest-digital/loginsrv"], "name": "qvest-digital/loginsrv", "platform": ["windows", "go", "self-hosted"], "pushed_at": "2021-02-27T06:20:06+00:00", "repo": "qvest-digital/loginsrv", "stars": 1930, "tags": ["jwt", "oauth2", "login-server", "caddy-plugin", "htpasswd", "microservice", "authentication", "linux", "macos", "docker"], "topics": ["jwt", "htpasswd", "service", "golang", "caddy", "caddyserver", "login", "oauth2", "github"], "urls": [], "use_cases": ["add JWT-based login to a web app without building auth myself", "authenticate users against htpasswd files and issue JWTs", "add social login with GitHub or Google to my site", "run a small standalone authentication microservice", "use login as a Caddy plugin in front of my services", "issue JWTs from simple configured user/password pairs"], "what_it_is": "A standalone minimalistic login microservice written in Go that authenticates users against pluggable backends (htpasswd, simple config, HTTP upstream, OSIAM, and OAuth2 providers like GitHub, Google, GitLab, Bitbucket, Facebook) and issues JWT tokens. It can run as a standalone service, Docker container, Go library, or Caddy plugin.", "when_to_avoid": ["you need a full identity management platform with user registration, MFA, and admin UI", "you need actively maintained software with recent releases and security patches", "you need enterprise SSO protocols like SAML or OIDC discovery"], "when_to_choose": ["you need a lightweight, standalone JWT login endpoint with multiple pluggable backends", "you use Caddy and want login handled at the server level", "you want OAuth2 social login (GitHub, Google, GitLab, etc.) without heavy identity-provider infrastructure"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/loginsrv", "repo": "qvest-digital/loginsrv", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "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:56.059038+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:56.059038+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:08:48.129252+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "06e78fd72a266a128cba2b355796aed8aab1cb6403dee317e172a843f57d495f", "fetched_at": "2026-08-28T04:05:56.059038+00:00", "kind": "readme", "missing": false, "url": "https://github.com/qvest-digital/loginsrv"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "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": 3582, "days_push": 2013, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}