{"adoption": {"forks": 710, "observed_at": "2026-08-28T04:06:58.361691+00:00", "stars": 2521}, "canonical_url": "https://ross.abutalabs.com/products/pac4j", "card": {"archived": false, "artifact_type": "framework", "description": "Security engine for Java (authentication, authorization, multi frameworks): OpenID Connect, SAML2, CAS, OAuth, LDAP, JWT...", "domain": ["security", "web-development", "backend", "developer-tools"], "enriched": true, "function": ["auth", "authorization", "security", "middleware"], "health_score": 80, "homepage": "http://www.pac4j.org", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "stable", "member_repos": ["pac4j/pac4j"], "name": "pac4j/pac4j", "platform": ["jvm", "cross-platform"], "pushed_at": "2026-08-26T14:25:08+00:00", "repo": "pac4j/pac4j", "stars": 2521, "tags": ["java", "openid-connect", "saml", "cas", "oauth", "jwt", "ldap", "spring-boot", "multi-framework", "sso", "web-server"], "topics": ["java", "security", "authentication", "authorization", "cas", "oauth", "saml", "openid-connect", "j2e", "spring-mvc", "spring-security", "shiro", "play-framework", "vertx", "sparkjava", "ratpack", "jax-rs", "dropwizard", "ldap", "jwt"], "urls": [], "use_cases": ["add OIDC single sign-on to a Spring Boot app", "integrate SAML2 identity provider login in a Java web app", "delegate authentication to a CAS server from Play or Vert.x", "authenticate users against LDAP or SQL in a Java servlet app", "secure REST APIs with JWT tokens in Java", "swap authentication protocols without rewriting security code", "add OAuth login (Facebook, Twitter) to a Java web framework"], "what_it_is": "pac4j is a Java security engine for authenticating users, managing profiles, and enforcing authorizations across web applications and services. It supports many protocols (OpenID Connect, SAML, CAS, OAuth, JWT, LDAP, Kerberos) and integrates with 15+ Java web frameworks including Spring Boot, Play, and Vert.x.", "when_to_avoid": ["you are building a non-JVM application", "you only need a simple session login with no external identity providers", "you want a full out-of-the-box identity server rather than an embedded security engine", "you are locked into Spring Security's native ecosystem and don't need multi-protocol support"], "when_to_choose": ["you need a unified security model across multiple Java web frameworks", "you must support enterprise protocols like SAML, CAS, or OpenID Connect", "you want to change identity providers or frameworks without rewriting auth logic", "you need both authentication and fine-grained authorization (roles, CSRF, CORS) in one library"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pac4j", "repo": "pac4j/pac4j", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.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:06:58.361691+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:58.361691+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:25:56.303602+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c7f92129cfdf2e3c6eb86f1dc4962e114b60ab52388dcef936d57e755e91dd60", "fetched_at": "2026-08-28T04:06:58.361691+00:00", "kind": "readme", "missing": false, "url": "https://github.com/pac4j/pac4j"}, {"content_hash": "da17a479340488982cad8a23ce1f03cc1d276c8df544eded453979d1b8803b6d", "fetched_at": "2026-08-29T10:08:08.678377+00:00", "kind": "homepage", "missing": false, "url": "http://www.pac4j.org"}, {"content_hash": "30aeab87447844551db3f8fe5d7fe9d483e633f0e1675198e7ff0922746db366", "fetched_at": "2026-08-29T10:08:08.687464+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/alldocs.html"}, {"content_hash": "c5c4b33edcc2514b71e0a1f3cb0dc0fb5490fd4540b852bf639f45aba796b05c", "fetched_at": "2026-08-29T10:08:08.689242+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/index.html"}, {"content_hash": "1feba64765d9c2189ec47fb69988d055a8807ef292f82fe3d3af74435cb604c4", "fetched_at": "2026-08-29T10:08:08.691929+00:00", "kind": "site_page", "missing": false, "url": "https://www.pac4j.org/docs/the-team.html"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 5331, "days_push": 7, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}