{"adoption": {"forks": 264, "observed_at": "2026-08-28T04:10:14.052856+00:00", "stars": 8174}, "canonical_url": "https://ross.abutalabs.com/products/tinyauth", "card": {"archived": false, "artifact_type": "service", "description": "The tiniest OpenID Certified™ authorization and authentication server you have ever seen.", "domain": ["security", "self-hosted", "web-development", "backend"], "enriched": true, "function": ["auth", "authorization", "middleware", "http-server", "security"], "health_score": 100, "homepage": "https://tinyauth.app", "language": "Go", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["tinyauthapp/tinyauth"], "name": "tinyauthapp/tinyauth", "platform": ["self-hosted", "go", "cross-platform"], "pushed_at": "2026-08-26T08:15:04+00:00", "repo": "tinyauthapp/tinyauth", "stars": 8174, "tags": ["oidc", "sso", "totp", "2fa", "ldap", "oauth", "reverse-proxy", "traefik", "nginx", "caddy", "openid-certified", "single-binary", "docker", "linux"], "topics": ["2fa", "authentication", "caddy", "golang", "middleware", "nginx", "selfhosted", "sso", "totp", "typescipt", "tinyauth", "oidc"], "urls": [], "use_cases": ["add login to self-hosted apps behind traefik", "self-hosted single sign-on for homelab", "lightweight openid connect provider", "protect apps with 2fa totp", "authenticate apps with ldap", "forward auth middleware for nginx and caddy"], "what_it_is": "Tinyauth is a lightweight, OpenID Certified™ authentication and authorization server written in Go, shipped as a single static binary. It works as an auth middleware for apps behind reverse proxies (Traefik, Nginx, Caddy) or as a standalone OIDC provider, with OAuth, LDAP, and TOTP 2FA support configured via environment variables.", "when_to_avoid": ["you need extensive enterprise identity features, user management dashboards, or fine-grained RBAC", "you require long-term config stability, as configuration changes frequently between releases", "you need a full-featured identity platform with social login federation beyond basic OAuth/LDAP"], "when_to_choose": ["you want dead-simple SSO for self-hosted services with minimal configuration", "you need a tiny, resource-light OIDC provider instead of Keycloak", "you use Traefik, Nginx, or Caddy and want forward-auth protection"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/tinyauth", "repo": "tinyauthapp/tinyauth", "role": "main", "score": 86}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "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:10:14.052856+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:10:14.052856+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:29:35.028785+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "63d1d048e5eaaa04444c34773d994892e0d2676b1e73d755f2809538b87414d6", "fetched_at": "2026-08-28T04:10:14.052856+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tinyauthapp/tinyauth"}, {"content_hash": "559b94fb8a24cbe5bd707e58d66a670950774ac9e2844b44426b685bc5e26c60", "fetched_at": "2026-08-29T08:28:24.787270+00:00", "kind": "homepage", "missing": false, "url": "https://tinyauth.app"}, {"content_hash": "c77df771b963acef2253742b1a49de160ec676536b851ae993f57db83fe626f0", "fetched_at": "2026-08-29T08:28:24.789847+00:00", "kind": "site_page", "missing": false, "url": "https://tinyauth.app/docs/getting-started"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 42, "rhythm": 95}, "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": 591, "days_push": 7, "days_rel": 34, "gap_med": 3.0, "n_releases_24m": 37}, "score": 86, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}